packages feed

hledger-web 0.23.3 → 0.24

raw patch · 95 files changed

+21920/−22886 lines, 95 filesdep −hamletdep −shakespeare-textdep ~blaze-htmldep ~blaze-markupdep ~hledgerbinary-addedPVP ok

version bump matches the API change (PVP)

Dependencies removed: hamlet, shakespeare-text

Dependency ranges changed: blaze-html, blaze-markup, hledger, hledger-lib, hledger-web, http-client, parsec, shakespeare, warp, yesod, yesod-test

API changes (from Hackage documentation)

- Handler.Common: addform :: Text -> ViewData -> HtmlUrl AppRoute
- Handler.Common: entriesReportAsHtml :: WebOpts -> ViewData -> EntriesReport -> HtmlUrl AppRoute
- Handler.Common: journalTransactionsReportAsHtml :: WebOpts -> ViewData -> TransactionsReport -> HtmlUrl AppRoute
- Handler.Common: journalselect :: [(FilePath, String)] -> HtmlUrl AppRoute
- Handler.Common: registerChartHtml :: [[TransactionsReportItem]] -> HtmlUrl AppRoute
- Handler.Common: registerItemsHtml :: WebOpts -> ViewData -> TransactionsReport -> HtmlUrl AppRoute
- Handler.Common: registerReportHtml :: WebOpts -> ViewData -> TransactionsReport -> HtmlUrl AppRoute
- Handler.Utils: VD :: WebOpts -> AppRoute -> Maybe Html -> Day -> Journal -> String -> Query -> [QueryOpt] -> Query -> [QueryOpt] -> Bool -> ViewData
- Handler.Utils: am :: ViewData -> Query
- Handler.Utils: aopts :: ViewData -> [QueryOpt]
- Handler.Utils: chomp :: String -> String
- Handler.Utils: data ViewData
- Handler.Utils: getMessageOr :: Maybe String -> Handler (Maybe Html)
- Handler.Utils: getViewData :: Handler ViewData
- Handler.Utils: here :: ViewData -> AppRoute
- Handler.Utils: j :: ViewData -> Journal
- Handler.Utils: m :: ViewData -> Query
- Handler.Utils: msg :: ViewData -> Maybe Html
- Handler.Utils: nullviewdata :: ViewData
- Handler.Utils: opts :: ViewData -> WebOpts
- Handler.Utils: q :: ViewData -> String
- Handler.Utils: qopts :: ViewData -> [QueryOpt]
- Handler.Utils: showpostings :: ViewData -> Bool
- Handler.Utils: today :: ViewData -> Day
- Handler.Utils: viewdataWithDateAndParams :: Day -> String -> String -> String -> ViewData
- Settings.StaticFiles: excanvas_js :: StaticRoute
- Settings.StaticFiles: excanvas_min_js :: StaticRoute
- Settings.StaticFiles: favicon_ico :: StaticRoute
- Settings.StaticFiles: img_glyphicons_halflings_png :: StaticRoute
- Settings.StaticFiles: img_glyphicons_halflings_white_png :: StaticRoute
- Settings.StaticFiles: jquery_flot_js :: StaticRoute
- Settings.StaticFiles: jquery_flot_min_js :: StaticRoute
- Settings.StaticFiles: jquery_js :: StaticRoute
- Settings.StaticFiles: jquery_min_js :: StaticRoute
- Settings.StaticFiles: jquery_url_js :: StaticRoute
- Settings.StaticFiles: select2_css :: StaticRoute
- Settings.StaticFiles: select2_js :: StaticRoute
- Settings.StaticFiles: select2_min_js :: StaticRoute
- Settings.StaticFiles: select2_png :: StaticRoute
- Settings.StaticFiles: select2_spinner_gif :: StaticRoute
- Settings.StaticFiles: style_css :: StaticRoute
+ Foundation: VD :: WebOpts -> AppRoute -> Maybe Html -> Day -> Journal -> String -> Query -> [QueryOpt] -> Query -> [QueryOpt] -> Bool -> Bool -> ViewData
+ Foundation: addform :: Text -> ViewData -> HtmlUrl AppRoute
+ Foundation: am :: ViewData -> Query
+ Foundation: aopts :: ViewData -> [QueryOpt]
+ Foundation: data ViewData
+ Foundation: getMessageOr :: Maybe String -> Handler (Maybe Html)
+ Foundation: getViewData :: Handler ViewData
+ Foundation: here :: ViewData -> AppRoute
+ Foundation: j :: ViewData -> Journal
+ Foundation: journalselect :: [(FilePath, String)] -> HtmlUrl AppRoute
+ Foundation: m :: ViewData -> Query
+ Foundation: msg :: ViewData -> Maybe Html
+ Foundation: nullviewdata :: ViewData
+ Foundation: opts :: ViewData -> WebOpts
+ Foundation: q :: ViewData -> String
+ Foundation: qopts :: ViewData -> [QueryOpt]
+ Foundation: showpostings :: ViewData -> Bool
+ Foundation: showsidebar :: ViewData -> Bool
+ Foundation: today :: ViewData -> Day
+ Foundation: viewdataWithDateAndParams :: Day -> String -> String -> String -> ViewData
+ Handler.Common: hledgerLayout :: ViewData -> String -> HtmlUrl AppRoute -> HandlerT App IO Html
+ Handler.JournalEntriesR: entriesReportAsHtml :: WebOpts -> ViewData -> EntriesReport -> HtmlUrl AppRoute
+ Handler.JournalR: journalTransactionsReportAsHtml :: WebOpts -> ViewData -> TransactionsReport -> HtmlUrl AppRoute
+ Handler.RegisterR: registerChartHtml :: [(Commodity, (String, [TransactionsReportItem]))] -> HtmlUrl AppRoute
+ Handler.RegisterR: registerItemsHtml :: WebOpts -> ViewData -> TransactionsReport -> HtmlUrl AppRoute
+ Handler.RegisterR: registerReportHtml :: WebOpts -> ViewData -> TransactionsReport -> HtmlUrl AppRoute
+ Handler.SidebarR: getSidebarR :: Handler Html
+ Hledger.Web: tests_Hledger_Web :: Test
+ Hledger.Web.Main: main :: IO ()
+ Hledger.Web.Main: runWith :: WebOpts -> IO ()
+ Hledger.Web.Main: web :: WebOpts -> Journal -> IO ()
+ Hledger.Web.Main: withJournalDo' :: WebOpts -> (WebOpts -> Journal -> IO ()) -> IO ()
+ Hledger.Web.Options: WebOpts :: Bool -> String -> Int -> Maybe String -> CliOpts -> WebOpts
+ Hledger.Web.Options: base_url_ :: WebOpts -> String
+ Hledger.Web.Options: checkWebOpts :: WebOpts -> IO WebOpts
+ Hledger.Web.Options: cliopts_ :: WebOpts -> CliOpts
+ Hledger.Web.Options: data WebOpts
+ Hledger.Web.Options: defbaseurlexample :: String
+ Hledger.Web.Options: defwebopts :: WebOpts
+ Hledger.Web.Options: getHledgerWebOpts :: IO WebOpts
+ Hledger.Web.Options: instance Show WebOpts
+ Hledger.Web.Options: port_ :: WebOpts -> Int
+ Hledger.Web.Options: progname :: String
+ Hledger.Web.Options: prognameandversion :: String
+ Hledger.Web.Options: server_ :: WebOpts -> Bool
+ Hledger.Web.Options: static_root_ :: WebOpts -> Maybe String
+ Hledger.Web.Options: toWebOpts :: RawOpts -> IO WebOpts
+ Hledger.Web.Options: version :: String
+ Hledger.Web.Options: webflags :: [Flag [([Char], [Char])]]
+ Hledger.Web.Options: webmode :: Mode [([Char], [Char])]
+ Settings.StaticFiles: css_bootstrap_css_map :: StaticRoute
+ Settings.StaticFiles: css_bootstrap_min_css :: StaticRoute
+ Settings.StaticFiles: css_bootstrap_theme_css :: StaticRoute
+ Settings.StaticFiles: css_bootstrap_theme_css_map :: StaticRoute
+ Settings.StaticFiles: css_bootstrap_theme_min_css :: StaticRoute
+ Settings.StaticFiles: fonts_glyphicons_halflings_regular_eot :: StaticRoute
+ Settings.StaticFiles: fonts_glyphicons_halflings_regular_svg :: StaticRoute
+ Settings.StaticFiles: fonts_glyphicons_halflings_regular_ttf :: StaticRoute
+ Settings.StaticFiles: fonts_glyphicons_halflings_regular_woff :: StaticRoute
+ Settings.StaticFiles: hledger_css :: StaticRoute
+ Settings.StaticFiles: js_bootstrap_js :: StaticRoute
+ Settings.StaticFiles: js_bootstrap_min_js :: StaticRoute
+ Settings.StaticFiles: js_excanvas_js :: StaticRoute
+ Settings.StaticFiles: js_excanvas_min_js :: StaticRoute
+ Settings.StaticFiles: js_jquery_colorhelpers_js :: StaticRoute
+ Settings.StaticFiles: js_jquery_colorhelpers_min_js :: StaticRoute
+ Settings.StaticFiles: js_jquery_cookie_js :: StaticRoute
+ Settings.StaticFiles: js_jquery_flot_canvas_js :: StaticRoute
+ Settings.StaticFiles: js_jquery_flot_canvas_min_js :: StaticRoute
+ Settings.StaticFiles: js_jquery_flot_categories_js :: StaticRoute
+ Settings.StaticFiles: js_jquery_flot_categories_min_js :: StaticRoute
+ Settings.StaticFiles: js_jquery_flot_crosshair_js :: StaticRoute
+ Settings.StaticFiles: js_jquery_flot_crosshair_min_js :: StaticRoute
+ Settings.StaticFiles: js_jquery_flot_errorbars_js :: StaticRoute
+ Settings.StaticFiles: js_jquery_flot_errorbars_min_js :: StaticRoute
+ Settings.StaticFiles: js_jquery_flot_fillbetween_js :: StaticRoute
+ Settings.StaticFiles: js_jquery_flot_fillbetween_min_js :: StaticRoute
+ Settings.StaticFiles: js_jquery_flot_image_js :: StaticRoute
+ Settings.StaticFiles: js_jquery_flot_image_min_js :: StaticRoute
+ Settings.StaticFiles: js_jquery_flot_js :: StaticRoute
+ Settings.StaticFiles: js_jquery_flot_min_js :: StaticRoute
+ Settings.StaticFiles: js_jquery_flot_navigate_js :: StaticRoute
+ Settings.StaticFiles: js_jquery_flot_navigate_min_js :: StaticRoute
+ Settings.StaticFiles: js_jquery_flot_pie_js :: StaticRoute
+ Settings.StaticFiles: js_jquery_flot_pie_min_js :: StaticRoute
+ Settings.StaticFiles: js_jquery_flot_resize_js :: StaticRoute
+ Settings.StaticFiles: js_jquery_flot_resize_min_js :: StaticRoute
+ Settings.StaticFiles: js_jquery_flot_selection_js :: StaticRoute
+ Settings.StaticFiles: js_jquery_flot_selection_min_js :: StaticRoute
+ Settings.StaticFiles: js_jquery_flot_stack_js :: StaticRoute
+ Settings.StaticFiles: js_jquery_flot_stack_min_js :: StaticRoute
+ Settings.StaticFiles: js_jquery_flot_symbol_js :: StaticRoute
+ Settings.StaticFiles: js_jquery_flot_symbol_min_js :: StaticRoute
+ Settings.StaticFiles: js_jquery_flot_threshold_js :: StaticRoute
+ Settings.StaticFiles: js_jquery_flot_threshold_min_js :: StaticRoute
+ Settings.StaticFiles: js_jquery_flot_time_js :: StaticRoute
+ Settings.StaticFiles: js_jquery_flot_time_min_js :: StaticRoute
+ Settings.StaticFiles: js_jquery_flot_tooltip_js :: StaticRoute
+ Settings.StaticFiles: js_jquery_flot_tooltip_min_js :: StaticRoute
+ Settings.StaticFiles: js_jquery_hotkeys_js :: StaticRoute
+ Settings.StaticFiles: js_jquery_min_js :: StaticRoute
+ Settings.StaticFiles: js_jquery_url_js :: StaticRoute
+ Settings.StaticFiles: js_typeahead_bundle_js :: StaticRoute
+ Settings.StaticFiles: js_typeahead_bundle_min_js :: StaticRoute
- Handler.JournalEditR: getJournalEditR :: Handler RepHtml
+ Handler.JournalEditR: getJournalEditR :: Handler Html
- Handler.JournalEditR: postJournalEditR :: Handler RepHtml
+ Handler.JournalEditR: postJournalEditR :: Handler Html
- Handler.JournalEntriesR: getJournalEntriesR :: Handler RepHtml
+ Handler.JournalEntriesR: getJournalEntriesR :: Handler Html
- Handler.JournalEntriesR: postJournalEntriesR :: Handler RepHtml
+ Handler.JournalEntriesR: postJournalEntriesR :: Handler Html
- Handler.JournalR: getJournalR :: Handler RepHtml
+ Handler.JournalR: getJournalR :: Handler Html
- Handler.JournalR: postJournalR :: Handler RepHtml
+ Handler.JournalR: postJournalR :: Handler Html
- Handler.Post: handleAdd :: Handler RepHtml
+ Handler.Post: handleAdd :: Handler Html
- Handler.Post: handleEdit :: Handler RepHtml
+ Handler.Post: handleEdit :: Handler Html
- Handler.Post: handleImport :: Handler RepHtml
+ Handler.Post: handleImport :: Handler Html
- Handler.Post: handlePost :: Handler RepHtml
+ Handler.Post: handlePost :: Handler Html
- Handler.RegisterR: getRegisterR :: Handler RepHtml
+ Handler.RegisterR: getRegisterR :: Handler Html
- Handler.RegisterR: postRegisterR :: Handler RepHtml
+ Handler.RegisterR: postRegisterR :: Handler Html
- Handler.RootR: getRootR :: Handler RepHtml
+ Handler.RootR: getRootR :: Handler Html

Files

Application.hs view
@@ -31,9 +31,8 @@ -- Don't forget to add new modules to your cabal file! import Handler.RootR import Handler.JournalR-import Handler.JournalEditR-import Handler.JournalEntriesR import Handler.RegisterR+import Handler.SidebarR  import Hledger.Web.Options (WebOpts(..), defwebopts) import Hledger.Data (Journal, nulljournal)@@ -78,7 +77,7 @@ getApplicationDev :: IO (Int, Application) getApplicationDev = do   f <- journalFilePathFromOpts defcliopts-  j <- either error' id `fmap` readJournalFile Nothing Nothing f+  j <- either error' id `fmap` readJournalFile Nothing Nothing True f   defaultDevelApp loader (makeApplication defwebopts j)   where     loader = Yesod.Default.Config.loadConfig (configSettings Development)
CHANGES view
@@ -1,8 +1,40 @@-See also the hledger changelog.+User-visible changes in hledger-web (see also hledger): +0.24 (unreleased)++General:+- fix: add missing hs/js files to package+- the web UI has been streamlined, dropping the raw and entries views and+  the edit form+- the help dialog has been improved+- keyboard shortcuts are now available+- the sidebar can be toggled open or closed (press s)++Journal view:+- layout tweaks for less truncation of descriptions and account names++Register view:+- fix: don't show all zero amounts when searching by account within an+  account register view+- chart improvements: show zero balances with correct commodity; show+  accurate balance at all dates; show transaction events & tooltips;+  show zero/today lines & background colors++Add form:+- parses data more strictly and gives better errors (eg #194)+- allows any number of postings, not just two+- after adding a transaction, goes back to the journal+- keyboard shortcut (a) allows quick access++Dependencies:+- allow warp 3*, wai-handler-launch 3*+- require yesod 1.4* (fixes #212)+- js updated (jquery, bootstrap, flot), added (typeahead, cookie, hotkeys),+  removed (select2)+ 0.23.3 (2014/9/12) -- web: remove warp, wai-handler-launch upper bounds (fixes #205)+- remove warp, wai-handler-launch upper bounds (fixes #205)  0.23.2 (2014/5/8) 
Foundation.hs view
@@ -8,6 +8,7 @@ module Foundation where  import Prelude+import Control.Applicative ((<$>)) import Data.IORef import Yesod import Yesod.Static@@ -31,7 +32,24 @@ -- import Hledger.Web.Settings -- import Hledger.Web.Settings.StaticFiles +-- for addform+import Data.List+import Data.Maybe+import Data.Text as Text (Text,pack,unpack)+import Data.Time.Calendar+import System.FilePath (takeFileName)+#if BLAZE_HTML_0_4+import Text.Blaze (preEscapedString)+#else+import Text.Blaze.Internal (preEscapedString)+#endif+import Text.JSON+import Hledger.Data.Journal+import Hledger.Query+import Hledger hiding (is)+import Hledger.Cli hiding (version) + -- | The site argument for your application. This can be a good place to -- keep settings and values requiring initialization before your application -- starts running, such as database connections. Every handler will have@@ -103,19 +121,28 @@          pc <- widgetToPageContent $ do             $(widgetFile "normalize")-            addStylesheet $ StaticR css_bootstrap_css-            -- load jquery early:-            toWidgetHead [hamlet| <script type="text/javascript" src="@{StaticR jquery_min_js}"></script> |]-            addScript $ StaticR jquery_url_js-            addScript $ StaticR jquery_flot_min_js-            toWidget [hamlet| \<!--[if lte IE 8]> <script type="text/javascript" src="@{StaticR excanvas_min_js}"></script> <![endif]--> |]-            addScript $ StaticR select2_min_js-            addStylesheet $ StaticR select2_css-            addStylesheet $ StaticR style_css+            addStylesheet $ StaticR css_bootstrap_min_css+             -- load these things early, in HEAD:+            toWidgetHead [hamlet|+                          <script type="text/javascript" src="@{StaticR js_jquery_min_js}"></script>+                          <script type="text/javascript" src="@{StaticR js_typeahead_bundle_min_js}"></script>+                         |]+            addScript $ StaticR js_bootstrap_min_js+            -- addScript $ StaticR js_typeahead_bundle_min_js+            addScript $ StaticR js_jquery_url_js+            addScript $ StaticR js_jquery_cookie_js+            addScript $ StaticR js_jquery_hotkeys_js+            addScript $ StaticR js_jquery_flot_min_js+            addScript $ StaticR js_jquery_flot_time_min_js+            addScript $ StaticR js_jquery_flot_tooltip_min_js+            toWidget [hamlet| \<!--[if lte IE 8]> <script type="text/javascript" src="@{StaticR js_excanvas_min_js}"></script> <![endif]--> |]+            addStylesheet $ StaticR hledger_css             addScript $ StaticR hledger_js             $(widgetFile "default-layout") -        hamletToRepHtml $(hamletFile "templates/default-layout-wrapper.hamlet")+        staticRootUrl <- (staticRoot . settings) <$> getYesod+        vd@VD{..} <- getViewData+        withUrlRenderer $(hamletFile "templates/default-layout-wrapper.hamlet")      -- This is done to provide an optimization for serving static files from     -- a separate domain. Please see the staticRoot setting in Settings.hs@@ -154,3 +181,211 @@ -- wiki: -- -- https://github.com/yesodweb/yesod/wiki/Sending-email+++----------------------------------------------------------------------+-- template and handler utilities++-- view data, used by the add form and handlers++-- | A bundle of data useful for hledger-web request handlers and templates.+data ViewData = VD {+     opts         :: WebOpts    -- ^ the command-line options at startup+    ,here         :: AppRoute   -- ^ the current route+    ,msg          :: Maybe Html -- ^ the current UI message if any, possibly from the current request+    ,today        :: Day        -- ^ today's date (for queries containing relative dates)+    ,j            :: Journal    -- ^ the up-to-date parsed unfiltered journal+    ,q            :: String     -- ^ the current q parameter, the main query expression+    ,m            :: Query    -- ^ a query parsed from the q parameter+    ,qopts        :: [QueryOpt] -- ^ query options parsed from the q parameter+    ,am           :: Query    -- ^ a query parsed from the accounts sidebar query expr ("a" parameter)+    ,aopts        :: [QueryOpt] -- ^ query options parsed from the accounts sidebar query expr+    ,showpostings :: Bool       -- ^ current p parameter, 1 or 0 shows/hides all postings where applicable+    ,showsidebar  :: Bool       -- ^ current showsidebar cookie value+    }++-- | Make a default ViewData, using day 0 as today's date.+nullviewdata :: ViewData+nullviewdata = viewdataWithDateAndParams nulldate "" "" ""++-- | Make a ViewData using the given date and request parameters, and defaults elsewhere.+viewdataWithDateAndParams :: Day -> String -> String -> String -> ViewData+viewdataWithDateAndParams d q a p =+    let (querymatcher,queryopts) = parseQuery d q+        (acctsmatcher,acctsopts) = parseQuery d a+    in VD {+           opts         = defwebopts+          ,j            = nulljournal+          ,here         = RootR+          ,msg          = Nothing+          ,today        = d+          ,q            = q+          ,m            = querymatcher+          ,qopts        = queryopts+          ,am           = acctsmatcher+          ,aopts        = acctsopts+          ,showpostings = p == "1"+          ,showsidebar  = False+          }++-- | Gather data used by handlers and templates in the current request.+getViewData :: Handler ViewData+getViewData = do+  app        <- getYesod+  let opts@WebOpts{cliopts_=copts@CliOpts{reportopts_=ropts}} = appOpts app+  (j, err)   <- getCurrentJournal app copts{reportopts_=ropts{no_elide_=True}}+  msg        <- getMessageOr err+  Just here  <- getCurrentRoute+  today      <- liftIO getCurrentDay+  q          <- getParameterOrNull "q"+  a          <- getParameterOrNull "a"+  p          <- getParameterOrNull "p"++  -- a "sidebar" query parameter overrides the "showsidebar" cookie+  sidebarparam <- lookupGetParam (pack "sidebar")+  cookies <- reqCookies <$> getRequest+  let sidebarcookie = lookup "showsidebar" cookies+  let showsidebar = maybe (sidebarcookie == Just "1") (=="1") sidebarparam++  return (viewdataWithDateAndParams today q a p){+               opts=opts+              ,msg=msg+              ,here=here+              ,today=today+              ,j=j+              ,showsidebar=showsidebar+              }+    where+      -- | Update our copy of the journal if the file changed. If there is an+      -- error while reloading, keep the old one and return the error, and set a+      -- ui message.+      getCurrentJournal :: App -> CliOpts -> Handler (Journal, Maybe String)+      getCurrentJournal app opts = do+        -- XXX put this inside atomicModifyIORef' for thread safety+        j <- liftIO $ readIORef $ appJournal app+        (jE, changed) <- liftIO $ journalReloadIfChanged opts j+        if not changed+         then return (j,Nothing)+         else case jE of+                Right j' -> do liftIO $ writeIORef (appJournal app) j'+                               return (j',Nothing)+                Left e   -> do setMessage $ "error while reading" {- ++ ": " ++ e-}+                               return (j, Just e)++      -- | Get the named request parameter, or the empty string if not present.+      getParameterOrNull :: String -> Handler String+      getParameterOrNull p = unpack `fmap` fromMaybe "" <$> lookupGetParam (pack p)++-- | Get the message set by the last request, or the newer message provided, if any.+getMessageOr :: Maybe String -> Handler (Maybe Html)+getMessageOr mnewmsg = do+  oldmsg <- getMessage+  return $ maybe oldmsg (Just . toHtml) mnewmsg++-- add form dialog, part of the default template++-- | Add transaction form.+addform :: Text -> ViewData -> HtmlUrl AppRoute+addform _ vd@VD{..} = [hamlet|++<script language="javascript">+  jQuery(document).ready(function() {++    /* set up typeahead fields */++    datesSuggester = new Bloodhound({+      local:#{listToJsonValueObjArrayStr dates},+      limit:100,+      datumTokenizer: function(d) { return [d.value]; },+      queryTokenizer: function(q) { return [q]; }+    });+    datesSuggester.initialize();++    descriptionsSuggester = new Bloodhound({+      local:#{listToJsonValueObjArrayStr descriptions},+      limit:100,+      datumTokenizer: function(d) { return [d.value]; },+      queryTokenizer: function(q) { return [q]; }+    });+    descriptionsSuggester.initialize();++    accountsSuggester = new Bloodhound({+      local:#{listToJsonValueObjArrayStr accts},+      limit:100,+      datumTokenizer: function(d) { return [d.value]; },+      queryTokenizer: function(q) { return [q]; }+      /*+        datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'),+        datumTokenizer: Bloodhound.tokenizers.whitespace(d.value)+        queryTokenizer: Bloodhound.tokenizers.whitespace+      */+    });+    accountsSuggester.initialize();++    enableTypeahead(jQuery('input#date'), datesSuggester);+    enableTypeahead(jQuery('input#description'), descriptionsSuggester);+    enableTypeahead(jQuery('input#account1, input#account2, input#account3, input#account4'), accountsSuggester);++  });++<form#addform method=POST style="position:relative;">+  <table.form style="width:100%; white-space:nowrap;">+   <tr>+    <td colspan=4>+     <table style="width:100%;">+      <tr#descriptionrow>+       <td>+        <input #date        .typeahead .form-control .input-lg type=text size=15 name=date placeholder="Date" value=#{date}>+       <td>+        <input #description .typeahead .form-control .input-lg type=text size=40 name=description placeholder="Description">+   $forall n <- postingnums+    ^{postingfields vd n}+  <span style="padding-left:2em;">+   <span .small>+     Tab in last field for <a .small href="#" onclick="addformAddPosting(); return false;">more</a> (or ctrl +, ctrl -)+|]+ where+  date = "today" :: String+  dates = ["today","yesterday","tomorrow"] :: [String]+  descriptions = sort $ nub $ map tdescription $ jtxns j+  accts = sort $ journalAccountNamesUsed j+  listToJsonValueObjArrayStr as  = preEscapedString $ encode $ JSArray $ map (\a -> JSObject $ toJSObject [("value", showJSON a)]) as+  numpostings = 4+  postingnums = [1..numpostings]+  postingfields :: ViewData -> Int -> HtmlUrl AppRoute+  postingfields _ n = [hamlet|+<tr .posting>+ <td style="padding-left:2em;">+  <input ##{acctvar} .account-input .typeahead .form-control .input-lg style="width:100%;" type=text name=#{acctvar} placeholder="#{acctph}">+ ^{amtfieldorsubmitbtn}+|]+   where+    islast = n == numpostings+    acctvar = "account" ++ show n+    acctph = "Account " ++ show n+    amtfieldorsubmitbtn+       | not islast = [hamlet|+          <td>+           <input ##{amtvar} .amount-input .form-control .input-lg type=text size=10 name=#{amtvar} placeholder="#{amtph}">+         |]+       | otherwise = [hamlet|+          <td #addbtncell style="text-align:right;">+           <input type=hidden name=action value=add>+           <button type=submit .btn .btn-lg name=submit>add+           $if length files' > 1+            <br>to: ^{journalselect files'}+         |]+       where+        amtvar = "amount" ++ show n+        amtph = "Amount " ++ show n+        files' = [(takeFileName f,s) | (f,s) <- files j]++           -- <button .btn style="font-size:18px;" type=submit title="Add this transaction">Add++journalselect :: [(FilePath,String)] -> HtmlUrl AppRoute+journalselect journalfiles = [hamlet|+<select id=journalselect name=journal onchange="/*journalSelect(event)*/">+ $forall f <- journalfiles+  <option value=#{fst f}>#{fst f}+|]+
Handler/Common.hs view
@@ -6,7 +6,6 @@ import Import  import Data.List-import Data.Maybe import Data.Text(pack) import Data.Time.Calendar import System.FilePath (takeFileName)@@ -16,7 +15,6 @@ import Text.Blaze.Internal (preEscapedString) #endif import Text.Printf-import Text.JSON  import Hledger.Utils import Hledger.Data@@ -25,31 +23,67 @@ import Hledger.Cli.Options import Hledger.Web.Options -import Handler.Utils- ---------------------------------------------------------------------------------- Page components+-- Common page layout +-- | Standard hledger-web page layout.+hledgerLayout :: ViewData -> String -> HtmlUrl AppRoute -> HandlerT App IO Html+hledgerLayout vd title content = do+  defaultLayout $ do+      setTitle $ toHtml $ title ++ " - hledger-web"+      toWidget [hamlet|+        <div#content>+         $if showsidebar vd+          <div#sidebar>+           <div#sidebar-spacer>+           <div#sidebar-body>+            ^{sidebar vd}+         $else+          <div#sidebar style="display:none;">+           <div#sidebar-spacer>+           <div#sidebar-body>+         <div#main>+          ^{topbar vd}+          <div#maincontent>+           ^{searchform vd}+           ^{content}+      |]+ -- | Global toolbar/heading area. topbar :: ViewData -> HtmlUrl AppRoute topbar VD{..} = [hamlet|-<div#topbar>- <a.topleftlink href=#{hledgerorgurl} title="More about hledger">-  hledger-web-  <br />-  \#{version}- <a.toprightlink href=#{manualurl} target=hledgerhelp title="User manual">manual- <h1>#{title}-$maybe m' <- msg- <div#message>#{m'}+<nav class="navbar" role="navigation">+ <div#topbar>+  <h1>#{title}+ $maybe m' <- msg+  <div#message>#{m'} |]   where     title = takeFileName $ journalFilePath j  -- | The sidebar used on most views. sidebar :: ViewData -> HtmlUrl AppRoute-sidebar vd@VD{..} = balanceReportAsHtml opts vd $ balanceReport (reportopts_ $ cliopts_ opts){empty_=True} am j+sidebar vd@VD{..} =+ [hamlet|+ <a href=@{JournalR} title="Go back to top">+  hledger-web + <p>+ <!--+ <a#sidebartogglebtn role="button" style="cursor:pointer;" onclick="sidebarToggle()" title="Show/hide sidebar">+  <span class="glyphicon glyphicon-expand"></span>+ -->+ <br>+ <div#sidebar-content>+  <p style="margin-top:1em;">+   <a href=@{JournalR} .#{journalcurrent} title="Show general journal entries, most recent first" style="white-space:nowrap;">Journal+  <div#accounts style="margin-top:1em;">+   ^{accounts}+|]+ where+  journalcurrent = if here == JournalR then "current" else "" :: String+  accounts = balanceReportAsHtml opts vd $ balanceReport (reportopts_ $ cliopts_ opts){empty_=True} am j+ -- -- | Navigation link, preserving parameters and possibly highlighted. -- navlink :: ViewData -> String -> AppRoute -> String -> HtmlUrl AppRoute -- navlink VD{..} s dest title = [hamlet|@@ -75,149 +109,17 @@  <form#searchform.form method=GET>   <table width="100%">    <tr>-    <td width="99%">-     <input name=q value=#{q} style="width:98%;">-    <td width="1%">-     <input type=submit value="Search">-   <tr valign=top>-    <td colspan=2 style="text-align:right;">+    <td width="99%" style="position:relative;">      $if filtering-      \ #-      <span.showall>-       <a href=@{here}>clear-     \ #-     <a#search-help-link href="#" title="Toggle search help">help-   <tr>-    <td colspan=2>-     <div#search-help.help style="display:none;">-      Leave blank to see journal (all transactions), or click account links to see transactions under that account.-      <br>-      Transactions/postings may additionally be filtered by-      acct:REGEXP (target account), #-      code:REGEXP (transaction code), #-      desc:REGEXP (description), #-      date:PERIODEXP (date), #-      date2:PERIODEXP (secondary date), #-      tag:TAG[=REGEX] (tag and optionally tag value), #-      depth:N (accounts at or above this depth), #-      status:*, status:!, status:  (cleared status), #-      real:BOOL (real/virtual-ness), #-      empty:BOOL (is amount zero), #-      amt:N, amt:<N, amt:>N (test magnitude of single-commodity amount).-      sym:REGEXP (commodity symbol), #-      <br>-      Prepend not: to negate, enclose multi-word patterns in quotes, multiple search terms are AND'ed.+      <a role=button .btn .close style="position:absolute; right:0; padding-right:.1em; padding-left:.1em; margin-right:.1em; margin-left:.1em; font-size:24px;" href="@{here}" title="Clear search terms">&times;+     <input .form-control style="font-size:18px; padding-bottom:2px;" name=q value=#{q} title="Enter hledger search patterns to filter the data below">+    <td width="1%" style="white-space:nowrap;">+     <button .btn style="font-size:18px;" type=submit title="Apply search terms">Search+     <button .btn style="font-size:18px;" type=button data-toggle="modal" data-target="#helpmodal" title="Show search and general help">? |]  where   filtering = not $ null q --- | Add transaction form.-addform :: Text -> ViewData -> HtmlUrl AppRoute-addform _ vd@VD{..} = [hamlet|-<script type=text/javascript>- \$(document).ready(function() {-    /* select2 setup */-    var param = {-      "width": "250px",-      "openOnEnter": false,-      // createSearchChoice allows to create new values not in the options-      "createSearchChoice":function(term, data) {-        if ( $(data).filter( function() {-                return this.text.localeCompare(term)===0;-                }).length===0) {-          return {text:term};-        }-      },-      // id is what is passed during post-      "id": function(object) {-        return object.text;-      }-    };-    \$("#description").select2($.extend({}, param, {data: #{toSelectData descriptions} }));-    var accountData = $.extend({}, param, {data: #{toSelectData acctnames} });-    \$("#account1").select2(accountData);-    \$("#account2").select2(accountData);- });--<form#addform method=POST style=display:none;>-  <h2#contenttitle>#{title}-  <table.form>-   <tr>-    <td colspan=4>-     <table>-      <tr#descriptionrow>-       <td>-        Date:-       <td>-        <input.textinput size=15 name=date value=#{date}>-       <td style=padding-left:1em;>-        Description:-       <td>-        <input type=hidden id=description name=description>-      <tr.helprow>-       <td>-       <td>-        <span.help>#{datehelp} #-       <td>-       <td>-        <span.help>#{deschelp}-   ^{postingfields vd 1}-   ^{postingfields vd 2}-   <tr#addbuttonrow>-    <td colspan=4>-     <input type=hidden name=action value=add>-     <input type=submit name=submit value="add transaction">-     $if manyfiles-      \ to: ^{journalselect $ files j}-     \ or #-     <a href="#" onclick="return addformToggle(event)">cancel-|]- where-  title = "Add transaction" :: String-  datehelp = "eg: 2010/7/20" :: String-  deschelp = "eg: supermarket (optional)" :: String-  date = "today" :: String-  descriptions = sort $ nub $ map tdescription $ jtxns j-  acctnames = sort $ journalAccountNamesUsed j-  -- Construct data for select2. Text must be quoted in a json string.-  toSelectData as  = preEscapedString $ encode $ JSArray $ map (\a -> JSObject $ toJSObject [("text", showJSON a)]) as-  manyfiles = (length $ files j) > 1-  postingfields :: ViewData -> Int -> HtmlUrl AppRoute-  postingfields _ n = [hamlet|-<tr#postingrow>- <td align=right>#{acctlabel}:- <td>-  <input type=hidden id=#{acctvar} name=#{acctvar}>- ^{amtfield}-<tr.helprow>- <td>- <td>-  <span.help>#{accthelp}- <td>- <td>-  <span.help>#{amthelp}-|]-   where-    withnumber = (++ show n)-    acctvar = withnumber "account"-    amtvar = withnumber "amount"-    (acctlabel, accthelp, amtfield, amthelp)-       | n == 1     = ("To account"-                     ,"eg: expenses:food"-                     ,[hamlet|-<td style=padding-left:1em;>- Amount:-<td>- <input.textinput size=15 name=#{amtvar} value="">-|]-                     ,"eg: $6"-                     )-       | otherwise = ("From account" :: String-                     ,"eg: assets:bank:checking" :: String-                     ,nulltemplate-                     ,"" :: String-                     )- -- | Edit journal form. editform :: ViewData -> HtmlUrl AppRoute editform VD{..} = [hamlet|@@ -247,7 +149,7 @@ |]   where     title = "Edit journal" :: String-    manyfiles = (length $ files j) > 1+    manyfiles = length (files j) > 1     formathelp = helplink "file-format" "file format help"  -- | Import journal form.@@ -264,13 +166,6 @@     <a href="#" onclick="return importformToggle(event)">cancel |] -journalselect :: [(FilePath,String)] -> HtmlUrl AppRoute-journalselect journalfiles = [hamlet|-<select id=journalselect name=journal onchange="editformJournalSelect(event)">- $forall f <- journalfiles-  <option value=#{fst f}>#{fst f}-|]- -- | Link to a topic in the manual. helplink :: String -> String -> HtmlUrl AppRoute helplink topic label = [hamlet|@@ -285,63 +180,36 @@ ---------------------------------------------------------------------- -- hledger report renderers --- | Render an "BalanceReport" as html.+-- | Render a "BalanceReport" as html. balanceReportAsHtml :: WebOpts -> ViewData -> BalanceReport -> HtmlUrl AppRoute balanceReportAsHtml _ vd@VD{..} (items',total) =  [hamlet|-<div#accountsheading>- <a#accounts-toggle-link.togglelink href="#" title="Toggle sidebar">[+]-<div#accounts>  <table.balancereport>   <tr>-   <td.add colspan=3>-    <br>-    <a#addformlink href="#" onclick="return addformToggle(event)" title="Add a new transaction to the journal">Add a transaction..--  <tr.item :allaccts:.inacct>-   <td.journal colspan=3>-    <br>-    <a href=@{JournalR} title="Show all transactions in journal format">Journal-    <span.hoverlinks>-     &nbsp;-     <a href=@{JournalEntriesR} title="Show journal entries">entries-     &nbsp;-     <a#editformlink href="#" onclick="return editformToggle(event)" title="Edit the journal">-      edit--  <tr>-   <td colspan=3>-    <br>-    Accounts-+   <td>Account+   <td style="padding-left:1em; text-align:right;">Balance   $forall i <- items    ^{itemAsHtml vd i}-   <tr.totalrule>-   <td colspan=3>+   <td colspan=2>   <tr>    <td>    <td.balance align=right>#{mixedAmountAsHtml total}-   <td> |]  where    l = ledgerFromJournal Any j    inacctmatcher = inAccountQuery qopts-   allaccts = isNothing inacctmatcher    items = items' -- maybe items' (\m -> filter (matchesAccount m . \(a,_,_,_)->a) items') showacctmatcher    itemAsHtml :: ViewData -> BalanceReportItem -> HtmlUrl AppRoute    itemAsHtml _ ((acct, adisplay, aindent), abal) = [hamlet| <tr.item.#{inacctclass}>  <td.account.#{depthclass}>   \#{indent}-  <a href="@?{acctquery}" title="Show transactions in this account, including subaccounts">#{adisplay}-  <span.hoverlinks>-   $if hassubs-    &nbsp;-    <a href="@?{acctonlyquery}" title="Show transactions in this account only">only-   <!---    &nbsp;-    <a href="@?{acctsonlyquery}" title="Focus on this account and sub-accounts and hide others">-others -->+   <a href="@?{acctquery}" title="Show transactions affecting this account and subaccounts">#{adisplay}+   <span.hoverlinks>+    $if hassubs+     &nbsp;+     <a href="@?{acctonlyquery}" title="Show transactions affecting this account but not subaccounts">only   <td.balance align=right>#{mixedAmountAsHtml abal} |]@@ -366,158 +234,6 @@ accountUrl :: AppRoute -> AccountName -> (AppRoute, [(Text, Text)]) accountUrl r a = (r, [("q", pack $ accountQuery a)]) --- | Render an "EntriesReport" as html for the journal entries view.-entriesReportAsHtml :: WebOpts -> ViewData -> EntriesReport -> HtmlUrl AppRoute-entriesReportAsHtml _ vd items = [hamlet|-<table.entriesreport>- $forall i <- numbered items-  ^{itemAsHtml vd i}- |]- where-   itemAsHtml :: ViewData -> (Int, EntriesReportItem) -> HtmlUrl AppRoute-   itemAsHtml _ (n, t) = [hamlet|-<tr.item.#{evenodd}>- <td.transaction>-  <pre>#{txn}- |]-     where-       evenodd = if even n then "even" else "odd" :: String-       txn = trimnl $ showTransaction t where trimnl = reverse . dropWhile (=='\n') . reverse---- | Render a "TransactionsReport" as html for the formatted journal view.-journalTransactionsReportAsHtml :: WebOpts -> ViewData -> TransactionsReport -> HtmlUrl AppRoute-journalTransactionsReportAsHtml _ vd (_,items) = [hamlet|-<table.transactionsreport>- <tr.headings>-  <th.date align=left>Date-  <th.description align=left>Description-  <th.account align=left>Accounts-  <th.amount align=right>Amount- $forall i <- numberTransactionsReportItems items-  ^{itemAsHtml vd i}- |]- where--- .#{datetransition}-   itemAsHtml :: ViewData -> (Int, Bool, Bool, Bool, TransactionsReportItem) -> HtmlUrl AppRoute-   itemAsHtml VD{..} (n, _, _, _, (t, _, split, _, amt, _)) = [hamlet|-<tr.item.#{evenodd}.#{firstposting}>- <td.date>#{date}- <td.description colspan=2>#{elideRight 60 desc}- <td.amount align=right>-  $if showamt-   \#{mixedAmountAsHtml amt}-$forall p' <- tpostings t-  <tr.item.#{evenodd}.posting>-   <td.date>-   <td.description>-   <td.account>&nbsp;<a href="@?{accountUrl here $ paccount p'}" title="Show transactions in #{paccount p'}">#{elideRight 40 $ paccount p'}-   <td.amount align=right>#{mixedAmountAsHtml $ pamount p'}-|]-     where-       evenodd = if even n then "even" else "odd" :: String-       -- datetransition | newm = "newmonth"-       --                | newd = "newday"-       --                | otherwise = "" :: String-       (firstposting, date, desc) = (False, show $ tdate t, tdescription t)-       -- acctquery = (here, [("q", pack $ accountQuery acct)])-       showamt = not split || not (isZeroMixedAmount amt)---- Generate html for an account register, including a balance chart and transaction list.-registerReportHtml :: WebOpts -> ViewData -> TransactionsReport -> HtmlUrl AppRoute-registerReportHtml opts vd r = [hamlet|- ^{registerChartHtml $ map snd $ transactionsReportByCommodity r}- ^{registerItemsHtml opts vd r}-|]---- Generate html for a transaction list from an "TransactionsReport".-registerItemsHtml :: WebOpts -> ViewData -> TransactionsReport -> HtmlUrl AppRoute-registerItemsHtml _ vd (balancelabel,items) = [hamlet|-<table.registerreport>- <tr.headings>-  <th.date align=left>Date-  <th.description align=left>Description-  <th.account align=left>To/From Account-    <!-- \ #-    <a#all-postings-toggle-link.togglelink href="#" title="Toggle all split postings">[+] -->-  <th.amount align=right>Amount-  <th.balance align=right>#{balancelabel}-- $forall i <- numberTransactionsReportItems items-  ^{itemAsHtml vd i}- |]- where-   -- inacct = inAccount qopts-   -- filtering = m /= Any-   itemAsHtml :: ViewData -> (Int, Bool, Bool, Bool, TransactionsReportItem) -> HtmlUrl AppRoute-   itemAsHtml VD{..} (n, newd, newm, _, (t, _, split, acct, amt, bal)) = [hamlet|-<tr.item.#{evenodd}.#{firstposting}.#{datetransition}>- <td.date>#{date}- <td.description title="#{show t}">#{elideRight 30 desc}- <td.account title="#{show t}">-  <a>-   \#{elideRight 40 acct}-  &nbsp;-  <a.postings-toggle-link.togglelink href="#" title="Toggle all postings">-   [+]- <td.amount align=right>-  $if showamt-   \#{mixedAmountAsHtml amt}- <td.balance align=right>#{mixedAmountAsHtml bal}-$forall p' <- tpostings t- <tr.item.#{evenodd}.posting style=#{postingsdisplaystyle}>-   <td.date>-   <td.description>-   <td.account>&nbsp;<a href="@?{accountUrl here $ paccount p'}" title="Show transactions in #{paccount p'}">#{elideRight 40 $ paccount p'}-   <td.amount align=right>#{mixedAmountAsHtml $ pamount p'}-   <td.balance align=right>-|]-     where-       evenodd = if even n then "even" else "odd" :: String-       datetransition | newm = "newmonth"-                      | newd = "newday"-                      | otherwise = "" :: String-       (firstposting, date, desc) = (False, show $ tdate t, tdescription t)-       -- acctquery = (here, [("q", pack $ accountQuery acct)])-       showamt = not split || not (isZeroMixedAmount amt)-       postingsdisplaystyle = if showpostings then "" else "display:none;" :: String---- | Generate javascript/html for a register balance line chart based on--- the provided "TransactionsReportItem"s.-               -- registerChartHtml :: forall t (t1 :: * -> *) t2 t3 t4 t5.-               --                      Data.Foldable.Foldable t1 =>-               --                      t1 (Transaction, t2, t3, t4, t5, MixedAmount)-               --                      -> t -> Text.Blaze.Internal.HtmlM ()-registerChartHtml :: [[TransactionsReportItem]] -> HtmlUrl AppRoute-registerChartHtml itemss =- -- have to make sure plot is not called when our container (maincontent)- -- is hidden, eg with add form toggled- [hamlet|-<div#register-chart style="width:600px;height:100px; margin-bottom:1em;">-<script type=text/javascript>- \$(document).ready(function() {-   /* render chart with flot, if visible */-   var chartdiv = $('#register-chart');-   if (chartdiv.is(':visible'))-     \$.plot(chartdiv,-             [-              $forall items <- itemss-               [-                $forall i <- reverse items-                 [#{dayToJsTimestamp $ triDate i}, #{triSimpleBalance i}],-                []-               ],-              []-             ],-             {-               xaxis: {-                mode: "time",-                timeformat: "%y/%m/%d"-               }-             }-             );-  });-|]- -- stringIfLongerThan :: Int -> String -> String -- stringIfLongerThan n s = if length s > n then s else "" @@ -527,7 +243,7 @@   where     number :: Int -> Day -> [TransactionsReportItem] -> [(Int,Bool,Bool,Bool,TransactionsReportItem)]     number _ _ [] = []-    number n prevd (i@(Transaction{tdate=d},_,_,_,_,_):rest)  = (n+1,newday,newmonth,newyear,i):(number (n+1) d rest)+    number n prevd (i@(Transaction{tdate=d},_,_,_,_,_):rest)  = (n+1,newday,newmonth,newyear,i): number (n+1) d rest         where           newday = d/=prevd           newmonth = dm/=prevdm || dy/=prevdy
Handler/JournalEditR.hs view
@@ -6,16 +6,15 @@  import Handler.Common import Handler.Post-import Handler.Utils   -- | The journal editform, no sidebar.-getJournalEditR :: Handler RepHtml+getJournalEditR :: Handler Html getJournalEditR = do   vd <- getViewData   defaultLayout $ do       setTitle "hledger-web journal edit form"       toWidget $ editform vd -postJournalEditR :: Handler RepHtml+postJournalEditR :: Handler Html postJournalEditR = handlePost
Handler/JournalEntriesR.hs view
@@ -16,7 +16,7 @@   -- | The journal entries view, with sidebar.-getJournalEntriesR :: Handler RepHtml+getJournalEntriesR :: Handler Html getJournalEntriesR = do   vd@VD{..} <- getViewData   staticRootUrl <- (staticRoot . settings) <$> getYesod@@ -33,14 +33,32 @@   ^{sidecontent}  <div#main.journal>   <div#maincontent>-   <h2#contenttitle>#{title}    ^{searchform vd}+   <h2#contenttitle>#{title}    ^{maincontent}   ^{addform staticRootUrl vd}   ^{editform vd}   ^{importform} |] -postJournalEntriesR :: Handler RepHtml+postJournalEntriesR :: Handler Html postJournalEntriesR = handlePost++-- | Render an "EntriesReport" as html for the journal entries view.+entriesReportAsHtml :: WebOpts -> ViewData -> EntriesReport -> HtmlUrl AppRoute+entriesReportAsHtml _ vd items = [hamlet|+<table.entriesreport>+ $forall i <- numbered items+  ^{itemAsHtml vd i}+ |]+ where+   itemAsHtml :: ViewData -> (Int, EntriesReportItem) -> HtmlUrl AppRoute+   itemAsHtml _ (n, t) = [hamlet|+<tr.item.#{evenodd}>+ <td.transaction>+  <pre>#{txn}+ |]+     where+       evenodd = if even n then "even" else "odd" :: String+       txn = trimnl $ showTransaction t where trimnl = reverse . dropWhile (=='\n') . reverse 
Handler/JournalR.hs view
@@ -6,48 +6,84 @@  import Handler.Common import Handler.Post-import Handler.Utils +import Hledger.Data import Hledger.Query import Hledger.Reports+import Hledger.Utils import Hledger.Cli.Options import Hledger.Web.Options  -- | The formatted journal view, with sidebar.-getJournalR :: Handler RepHtml+getJournalR :: Handler Html getJournalR = do   vd@VD{..} <- getViewData-  staticRootUrl <- (staticRoot . settings) <$> getYesod-  let sidecontent = sidebar vd-      -- XXX like registerReportAsHtml+  let -- XXX like registerReportAsHtml       inacct = inAccount qopts       -- injournal = isNothing inacct       filtering = m /= Any       -- showlastcolumn = if injournal && not filtering then False else True       title = case inacct of-                Nothing       -> "Journal"++s2+                Nothing       -> "General Journal"++s2                 Just (a,inclsubs) -> "Transactions in "++a++s1++s2-                                      where s1 = if inclsubs then " (and subaccounts)" else ""+                                      where s1 = if inclsubs then "" else " (excluding subaccounts)"                 where                   s2 = if filtering then ", filtered" else ""       maincontent = journalTransactionsReportAsHtml opts vd $ journalTransactionsReport (reportopts_ $ cliopts_ opts) j m-  defaultLayout $ do-      setTitle "hledger-web journal"-      toWidget [hamlet|-^{topbar vd}-<div#content>- <div#sidebar>-  ^{sidecontent}- <div#main.register>-  <div#maincontent>-   <h2#contenttitle>#{title}-   ^{searchform vd}-   ^{maincontent}-  ^{addform staticRootUrl vd}-  ^{editform vd}-  ^{importform}-|]+  hledgerLayout vd "journal" [hamlet|+       <h2#contenttitle>#{title}+       <!-- p>Journal entries record movements of commodities between accounts. -->+       <a#addformlink role="button" style="cursor:pointer;" data-toggle="modal" data-target="#addmodal"  title="Add a new transaction to the journal" style="margin-top:1em;">Add a transaction+       ^{maincontent}+     |] -postJournalR :: Handler RepHtml+postJournalR :: Handler Html postJournalR = handlePost++-- | Render a "TransactionsReport" as html for the formatted journal view.+journalTransactionsReportAsHtml :: WebOpts -> ViewData -> TransactionsReport -> HtmlUrl AppRoute+journalTransactionsReportAsHtml _ vd (_,items) = [hamlet|+<table.transactionsreport>+ <tr.headings>+  <th.date style="text-align:left;">+   Date+   <span .glyphicon .glyphicon-chevron-up>+  <th.description style="text-align:left;">Description+  <th.account style="text-align:left;">Account+  <th.amount style="text-align:right;">Amount+ $forall i <- numberTransactionsReportItems items+  ^{itemAsHtml vd i}+ |]+ where+-- .#{datetransition}+   itemAsHtml :: ViewData -> (Int, Bool, Bool, Bool, TransactionsReportItem) -> HtmlUrl AppRoute+   itemAsHtml VD{..} (n, _, _, _, (t, _, split, _, amt, _)) = [hamlet|+<tr ##{date} .item.#{evenodd}.#{firstposting} style="vertical-align:top;" title="#{show t}">+ <td.date>#{date}+ <td.description colspan=2>#{elideRight 60 desc}+ <td.amount style="text-align:right;">+  $if showamt+   \#{mixedAmountAsHtml amt}+$forall p' <- tpostings t+ <tr .item.#{evenodd}.posting title="#{show t}">+  <td.date>+  <td.description>+  <td.account>+   &nbsp;+   <a href="/register?q=inacct:'#{paccount p'}'##{date}" title="#{paccount p'}">#{elideAccountName 40 $ paccount p'}+  <td.amount style="text-align:right;">#{mixedAmountAsHtml $ pamount p'}+<tr.#{evenodd}>+ <td>&nbsp;+ <td>+ <td>+ <td>+|]+     where+       evenodd = if even n then "even" else "odd" :: String+       -- datetransition | newm = "newmonth"+       --                | newd = "newday"+       --                | otherwise = "" :: String+       (firstposting, date, desc) = (False, show $ tdate t, tdescription t)+       -- acctquery = (here, [("q", pack $ accountQuery acct)])+       showamt = not split || not (isZeroMixedAmount amt) 
Handler/Post.hs view
@@ -4,23 +4,23 @@  import Import +import Control.Applicative import Data.Either (lefts,rights)-import Data.List (intercalate)+import Data.List (intercalate, sort) import qualified Data.List as L (head) -- qualified keeps dev & prod builds warning-free import Data.Text (unpack)-import qualified Data.Text as T (null)-import Text.Hamlet (shamlet)+import qualified Data.Text as T+import Text.Parsec (digit, eof, many1, string, runParser) import Text.Printf (printf) -import Handler.Utils import Hledger.Utils-import Hledger.Data+import Hledger.Data hiding (num) import Hledger.Read-import Hledger.Cli+import Hledger.Cli hiding (num)   -- | Handle a post from any of the edit forms.-handlePost :: Handler RepHtml+handlePost :: Handler Html handlePost = do   action <- lookupPostParam  "action"   case action of Just "add"    -> handleAdd@@ -29,51 +29,59 @@                  _             -> invalidArgs ["invalid action"]  -- | Handle a post from the transaction add form.-handleAdd :: Handler RepHtml+handleAdd :: Handler Html handleAdd = do   VD{..} <- getViewData-  -- get form input values. M means a Maybe value.-  dateM <- lookupPostParam  "date"-  descM <- lookupPostParam  "description"-  acct1M <- lookupPostParam  "account1"-  amt1M <- lookupPostParam  "amount1"-  acct2M <- lookupPostParam  "account2"-  amt2M <- lookupPostParam  "amount2"-  journalM <- lookupPostParam  "journal"-  -- supply defaults and parse date and amounts, or get errors.-  let dateE = maybe (Left "date required") (either (\e -> Left $ showDateParseError e) Right . fixSmartDateStrEither today . unpack) dateM-      descE = Right $ maybe "" unpack descM-      maybeNonNull = maybe Nothing (\t -> if T.null t then Nothing else Just t)-      acct1E = maybe (Left "to account required") (Right . unpack) $ maybeNonNull acct1M-      acct2E = maybe (Left "from account required") (Right . unpack) $ maybeNonNull acct2M-      amt1E = maybe (Left "amount required") (either (const $ Left "could not parse amount") Right . parseWithCtx nullctx amountp . unpack) amt1M-      amt2E = maybe (Right missingamt)       (either (const $ Left "could not parse amount") Right . parseWithCtx nullctx amountp . unpack) amt2M-      journalE = maybe (Right $ journalFilePath j)+  -- gruesome adhoc form handling, port to yesod-form later+  mjournal <- lookupPostParam  "journal"+  mdate <- lookupPostParam  "date"+  mdesc <- lookupPostParam  "description"+  let edate = maybe (Left "date required") (either (\e -> Left $ showDateParseError e) Right . fixSmartDateStrEither today . strip . unpack) mdate+      edesc = Right $ maybe "" unpack mdesc+      ejournal = maybe (Right $ journalFilePath j)                        (\f -> let f' = unpack f in                               if f' `elem` journalFilePaths j                               then Right f'                               else Left $ "unrecognised journal file path: " ++ f'                               )-                       journalM-      strEs = [dateE, descE, acct1E, acct2E, journalE]-      amtEs = [amt1E, amt2E]-      errs = lefts strEs ++ lefts amtEs-      [date,desc,acct1,acct2,journalpath] = rights strEs-      [amt1,amt2] = rights amtEs+                       mjournal+      estrs = [edate, edesc, ejournal]+      (errs1, [date,desc,journalpath]) = (lefts estrs, rights estrs)+  (params,_) <- runRequestBody+  -- mtrace params+  let paramnamep s = do {string s; n <- many1 digit; eof; return (read n :: Int)}+      numberedParams s =+        reverse $ dropWhile (T.null . snd) $ reverse $ sort+        [ (n,v) | (k,v) <- params+                , let en = parsewith (paramnamep s) $ T.unpack k+                , isRight en+                , let Right n = en+                ]+      acctparams = numberedParams "account"+      amtparams  = numberedParams "amount"+      num = length acctparams+      paramErrs | map fst acctparams == [1..num] &&+                  map fst amtparams `elem` [[1..num], [1..num-1]] = []+                | otherwise = ["malformed account/amount parameters"]+      eaccts = map (parsewith (accountnamep <* eof) . strip . T.unpack . snd) acctparams+      eamts  = map (runParser (amountp <* eof) nullctx "" . strip . T.unpack . snd) amtparams+      (accts, acctErrs) = (rights eaccts, map show $ lefts eaccts)+      (amts', amtErrs)  = (rights eamts, map show $ lefts eamts)+      amts | length amts' == num = amts'+           | otherwise           = amts' ++ [missingamt]       -- if no errors so far, generate a transaction and balance it or get the error.-      tE | not $ null errs = Left errs+      errs = errs1 ++ if not (null paramErrs) then paramErrs else (acctErrs ++ amtErrs)+      et | not $ null errs = Left errs          | otherwise = either (\e -> Left ["unbalanced postings: " ++ (L.head $ lines e)]) Right-                        (balanceTransaction Nothing $ nulltransaction { -- imprecise balancing-                           tdate=parsedate date-                          ,tdescription=desc-                          ,tpostings=[-                            nullposting{paccount=acct1, pamount=mixed amt1}-                           ,nullposting{paccount=acct2, pamount=mixed amt2}-                           ]-                          })+                        (balanceTransaction Nothing $ nulltransaction {+                            tdate=parsedate date+                           ,tdescription=desc+                           ,tpostings=[nullposting{paccount=acct, pamount=Mixed [amt]} | (acct,amt) <- zip accts amts]+                           })   -- display errors or add transaction-  case tE of+  case et of    Left errs' -> do+    error $ show errs' -- XXX     -- save current form values in session     -- setMessage $ toHtml $ intercalate "; " errs     setMessage [shamlet|@@ -85,29 +93,60 @@     let t' = txnTieKnot t -- XXX move into balanceTransaction     liftIO $ do ensureJournalFileExists journalpath                 appendToJournalFileOrStdout journalpath $ showTransaction t'-    -- setMessage $ toHtml $ (printf "Added transaction:\n%s" (show t') :: String)-    setMessage [shamlet|<span>Added transaction:<small><pre>#{chomp $ show t'}</pre></small>|]+    setMessage [shamlet|<span>Transaction added.|] -  redirect (RegisterR, [("add","1")])+  redirect (JournalR) -- , [("add","1")]) +-- personForm :: Html -> MForm Handler (FormResult Person, Widget)+-- personForm extra = do+--     (nameRes, nameView) <- mreq textField "this is not used" Nothing+--     (ageRes, ageView) <- mreq intField "neither is this" Nothing+--     let personRes = Person <$> nameRes <*> ageRes+--     let widget = do+--             toWidget+--                 [lucius|+--                     ##{fvId ageView} {+--                         width: 3em;+--                     }+--                 |]+--             [whamlet|+--                 #{extra}+--                 <p>+--                     Hello, my name is #+--                     ^{fvInput nameView}+--                     \ and I am #+--                     ^{fvInput ageView}+--                     \ years old. #+--                     <input type=submit value="Introduce myself">+--             |]+--     return (personRes, widget)+--+--     ((res, widget), enctype) <- runFormGet personForm+--     defaultLayout+--         [whamlet|+--             <p>Result: #{show res}+--             <form enctype=#{enctype}>+--                 ^{widget}+--         |]+ -- | Handle a post from the journal edit form.-handleEdit :: Handler RepHtml+handleEdit :: Handler Html handleEdit = do   VD{..} <- getViewData   -- get form input values, or validation errors.   -- getRequest >>= liftIO (reqRequestBody req) >>= mtrace-  textM <- lookupPostParam "text"-  journalM <- lookupPostParam "journal"-  let textE = maybe (Left "No value provided") (Right . unpack) textM-      journalE = maybe (Right $ journalFilePath j)+  mtext <- lookupPostParam "text"+  mjournal <- lookupPostParam "journal"+  let etext = maybe (Left "No value provided") (Right . unpack) mtext+      ejournal = maybe (Right $ journalFilePath j)                        (\f -> let f' = unpack f in                               if f' `elem` journalFilePaths j                               then Right f'-                              else Left "unrecognised journal file path")-                       journalM-      strEs = [textE, journalE]-      errs = lefts strEs-      [text,journalpath] = rights strEs+                              else Left ("unrecognised journal file path"::String))+                       mjournal+      estrs = [etext, ejournal]+      errs = lefts estrs+      [text,journalpath] = rights estrs   -- display errors or perform edit   if not $ null errs    then do@@ -125,7 +164,7 @@        setMessage "No change"        redirect JournalR      else do-      jE <- liftIO $ readJournal Nothing Nothing (Just journalpath) tnew+      jE <- liftIO $ readJournal Nothing Nothing True (Just journalpath) tnew       either        (\e -> do           setMessage $ toHtml e@@ -137,7 +176,7 @@        jE  -- | Handle a post from the journal import form.-handleImport :: Handler RepHtml+handleImport :: Handler Html handleImport = do   setMessage "can't handle file upload yet"   redirect JournalR
Handler/RegisterR.hs view
@@ -4,47 +4,170 @@  import Import +import Data.List import Data.Maybe+import Safe  import Handler.Common import Handler.Post import Handler.Utils +import Hledger.Data import Hledger.Query import Hledger.Reports+import Hledger.Utils import Hledger.Cli.Options import Hledger.Web.Options  -- | The main journal/account register view, with accounts sidebar.-getRegisterR :: Handler RepHtml+getRegisterR :: Handler Html getRegisterR = do   vd@VD{..} <- getViewData-  staticRootUrl <- (staticRoot . settings) <$> getYesod-  let sidecontent = sidebar vd-      -- injournal = isNothing inacct+  -- staticRootUrl <- (staticRoot . settings) <$> getYesod+  let -- injournal = isNothing inacct       filtering = m /= Any-      title = "Transactions in "++a++s1++s2+      -- title = "Transactions in "++a++s1++s2+      title = a++s1++s2                where-                 (a,inclsubs) = fromMaybe ("all accounts",False) $ inAccount qopts-                 s1 = if inclsubs then " (and subaccounts)" else ""+                 (a,inclsubs) = fromMaybe ("all accounts",True) $ inAccount qopts+                 s1 = if inclsubs then "" else " (excluding subaccounts)"                  s2 = if filtering then ", filtered" else ""       maincontent = registerReportHtml opts vd $ accountTransactionsReport (reportopts_ $ cliopts_ opts) j m $ fromMaybe Any $ inAccountQuery qopts-  defaultLayout $ do-      setTitle "hledger-web register"-      toWidget [hamlet|-^{topbar vd}-<div#content>- <div#sidebar>-  ^{sidecontent}- <div#main.register>-  <div#maincontent>-   <h2#contenttitle>#{title}-   ^{searchform vd}-   ^{maincontent}-  ^{addform staticRootUrl vd}-  ^{editform vd}-  ^{importform}-|]+  hledgerLayout vd "register" [hamlet|+       <h2#contenttitle>#{title}+       <!-- p>Transactions affecting this account, with running balance. -->+       ^{maincontent}+     |] -postRegisterR :: Handler RepHtml+postRegisterR :: Handler Html postRegisterR = handlePost++-- Generate html for an account register, including a balance chart and transaction list.+registerReportHtml :: WebOpts -> ViewData -> TransactionsReport -> HtmlUrl AppRoute+registerReportHtml opts vd r = [hamlet|+ ^{registerChartHtml $ transactionsReportByCommodity r}+ ^{registerItemsHtml opts vd r}+|]++-- Generate html for a transaction list from an "TransactionsReport".+registerItemsHtml :: WebOpts -> ViewData -> TransactionsReport -> HtmlUrl AppRoute+registerItemsHtml _ vd (balancelabel,items) = [hamlet|+<table.registerreport>+ <tr.headings>+  <th.date style="text-align:left;">+   Date+   <span .glyphicon .glyphicon-chevron-up>+  <th.description style="text-align:left;">Description+  <th.account style="text-align:left;">To/From Account(s)+  <th.amount style="text-align:right; white-space:normal;">Amount Out/In+  <th.balance style="text-align:right; white-space:normal;">#{balancelabel'}+ $forall i <- numberTransactionsReportItems items+  ^{itemAsHtml vd i}+ |]+ where+   insomeacct = isJust $ inAccount $ qopts vd+   balancelabel' = if insomeacct then balancelabel else "Total"++   -- filtering = m /= Any+   itemAsHtml :: ViewData -> (Int, Bool, Bool, Bool, TransactionsReportItem) -> HtmlUrl AppRoute+   itemAsHtml VD{..} (n, newd, newm, _, (torig, tacct, split, acct, amt, bal)) = [hamlet|++<tr ##{date} .item.#{evenodd}.#{firstposting}.#{datetransition} title="#{show torig}" style="vertical-align:top;">+ <td.date><a href="/journal##{date}">#{date}+ <td.description title="#{show torig}">#{elideRight 30 desc}+ <td.account>#{elideRight 40 acct}+ <td.amount style="text-align:right; white-space:nowrap;">+  $if showamt+   \#{mixedAmountAsHtml amt}+ <td.balance style="text-align:right;">#{mixedAmountAsHtml bal}+|]++     where+       evenodd = if even n then "even" else "odd" :: String+       datetransition | newm = "newmonth"+                      | newd = "newday"+                      | otherwise = "" :: String+       (firstposting, date, desc) = (False, show $ tdate tacct, tdescription tacct)+       -- acctquery = (here, [("q", pack $ accountQuery acct)])+       showamt = not split || not (isZeroMixedAmount amt)++-- | Generate javascript/html for a register balance line chart based on+-- the provided "TransactionsReportItem"s.+               -- registerChartHtml :: forall t (t1 :: * -> *) t2 t3 t4 t5.+               --                      Data.Foldable.Foldable t1 =>+               --                      t1 (Transaction, t2, t3, t4, t5, MixedAmount)+               --                      -> t -> Text.Blaze.Internal.HtmlM ()+registerChartHtml :: [(Commodity, (String, [TransactionsReportItem]))] -> HtmlUrl AppRoute+registerChartHtml percommoditytxnreports =+ -- have to make sure plot is not called when our container (maincontent)+ -- is hidden, eg with add form toggled+ [hamlet|+<label#register-chart-label style=""><br>+<div#register-chart style="width:85%; height:150px; margin-bottom:1em; display:block;">+<script type=text/javascript>+ \$(document).ready(function() {+   var $chartdiv = $('#register-chart');+   if ($chartdiv.is(':visible')) {+     \$('#register-chart-label').text('#{charttitle}');+     var seriesData = [+      $forall (c,(_,items)) <- percommoditytxnreports+       /* we render each commodity using two series:+        * one with extra data points added to show a stepped balance line */+       {+        data: [+          $forall i <- reverse items+           [+            #{dayToJsTimestamp $ triDate i},+            #{simpleMixedAmountQuantity $ triCommodityBalance c i},+           ],+          /* [] */+        ],+        label: '#{shownull c}',+        color: #{colorForCommodity c},+        lines: {+          show: true,+          steps: true,+        },+        points: {+          show: false,+        },+        clickable: false,+        hoverable: false,+       },+       /* and one with the original data, showing one clickable, hoverable point per transaction */+       {+        data: [+          $forall i <- reverse items+           [+            #{dayToJsTimestamp $ triDate i},+            #{simpleMixedAmountQuantity $ triCommodityBalance c i},+            '#{showMixedAmountWithZeroCommodity $ triCommodityAmount c i}',+            '#{showMixedAmountWithZeroCommodity $ triCommodityBalance c i}',+            '#{concat $ intersperse "\\n" $ lines  $ show $ triOrigTransaction i}',+           ],+          /* [] */+        ],+        label: '',+        color: #{colorForCommodity c},+        lines: {+          show: false,+        },+        points: {+          show: true,+        },+       },+     ]+     var plot = registerChart($chartdiv, seriesData);+     \$chartdiv.bind("plotclick", registerChartClick);+   };+ });+|]+           -- [#{dayToJsTimestamp $ ltrace "\ndate" $ triDate i}, #{ltrace "balancequantity" $ simpleMixedAmountQuantity $ triCommodityBalance c i}, '#{ltrace "balance" $ show $ triCommodityBalance c i}, '#{ltrace "amount" $ show $ triCommodityAmount c i}''],+ where+   charttitle = case maybe "" (fst.snd) $ headMay percommoditytxnreports+           of "" -> ""+              s  -> s++":"+   colorForCommodity = fromMaybe 0 . flip lookup commoditiesIndex+   commoditiesIndex = zip (map fst percommoditytxnreports) [0..] :: [(Commodity,Int)]+   simpleMixedAmountQuantity = maybe 0 aquantity . headMay . amounts+   shownull c = if null c then " " else c
Handler/RootR.hs view
@@ -4,5 +4,5 @@  import Import -getRootR :: Handler RepHtml-getRootR = redirect defaultroute where defaultroute = RegisterR+getRootR :: Handler Html+getRootR = redirect defaultroute where defaultroute = JournalR
+ Handler/SidebarR.hs view
@@ -0,0 +1,14 @@+-- | /sidebar++module Handler.SidebarR where++import Import++import Handler.Common++-- | Render just the accounts sidebar, useful when opening the sidebar.+getSidebarR :: Handler Html+getSidebarR = do+  vd <- getViewData+  withUrlRenderer [hamlet|^{sidebar vd}|]+
Handler/Utils.hs view
@@ -1,117 +1,18 @@--- | Web handler utilities.+-- | Web handler utilities. More of these are in Foundation.hs, where+-- they can be used in the default template.  module Handler.Utils where  import Prelude-import Control.Applicative ((<$>))-import Data.IORef-import Data.Maybe-import Data.Text(pack,unpack) import Data.Time.Calendar import Data.Time.Clock import Data.Time.Format import System.Locale (defaultTimeLocale)-import Text.Hamlet-import Yesod.Core -import Foundation -import Hledger hiding (is)-import Hledger.Cli hiding (version)-import Hledger.Web.Options----- | A bundle of data useful for hledger-web request handlers and templates.-data ViewData = VD {-     opts         :: WebOpts    -- ^ the command-line options at startup-    ,here         :: AppRoute   -- ^ the current route-    ,msg          :: Maybe Html -- ^ the current UI message if any, possibly from the current request-    ,today        :: Day        -- ^ today's date (for queries containing relative dates)-    ,j            :: Journal    -- ^ the up-to-date parsed unfiltered journal-    ,q            :: String     -- ^ the current q parameter, the main query expression-    ,m            :: Query    -- ^ a query parsed from the q parameter-    ,qopts        :: [QueryOpt] -- ^ query options parsed from the q parameter-    ,am           :: Query    -- ^ a query parsed from the accounts sidebar query expr ("a" parameter)-    ,aopts        :: [QueryOpt] -- ^ query options parsed from the accounts sidebar query expr-    ,showpostings :: Bool       -- ^ current p parameter, 1 or 0 shows/hides all postings where applicable-    }---- | Make a default ViewData, using day 0 as today's date.-nullviewdata :: ViewData-nullviewdata = viewdataWithDateAndParams nulldate "" "" ""---- | Make a ViewData using the given date and request parameters, and defaults elsewhere.-viewdataWithDateAndParams :: Day -> String -> String -> String -> ViewData-viewdataWithDateAndParams d q a p =-    let (querymatcher,queryopts) = parseQuery d q-        (acctsmatcher,acctsopts) = parseQuery d a-    in VD {-           opts         = defwebopts-          ,j            = nulljournal-          ,here         = RootR-          ,msg          = Nothing-          ,today        = d-          ,q            = q-          ,m            = querymatcher-          ,qopts        = queryopts-          ,am           = acctsmatcher-          ,aopts        = acctsopts-          ,showpostings = p == "1"-          }---- | Gather data used by handlers and templates in the current request.-getViewData :: Handler ViewData-getViewData = do-  app        <- getYesod-  let opts@WebOpts{cliopts_=copts@CliOpts{reportopts_=ropts}} = appOpts app-  (j, err)   <- getCurrentJournal app copts{reportopts_=ropts{no_elide_=True}}-  msg        <- getMessageOr err-  Just here  <- getCurrentRoute-  today      <- liftIO getCurrentDay-  q          <- getParameterOrNull "q"-  a          <- getParameterOrNull "a"-  p          <- getParameterOrNull "p"-  return (viewdataWithDateAndParams today q a p){-               opts=opts-              ,msg=msg-              ,here=here-              ,today=today-              ,j=j-              }-    where-      -- | Update our copy of the journal if the file changed. If there is an-      -- error while reloading, keep the old one and return the error, and set a-      -- ui message.-      getCurrentJournal :: App -> CliOpts -> Handler (Journal, Maybe String)-      getCurrentJournal app opts = do-        -- XXX put this inside atomicModifyIORef' for thread safety-        j <- liftIO $ readIORef $ appJournal app-        (jE, changed) <- liftIO $ journalReloadIfChanged opts j-        if not changed-         then return (j,Nothing)-         else case jE of-                Right j' -> do liftIO $ writeIORef (appJournal app) j'-                               return (j',Nothing)-                Left e   -> do setMessage $ "error while reading" {- ++ ": " ++ e-}-                               return (j, Just e)--      -- | Get the named request parameter, or the empty string if not present.-      getParameterOrNull :: String -> Handler String-      getParameterOrNull p = unpack `fmap` fromMaybe "" <$> lookupGetParam (pack p)---- | Get the message set by the last request, or the newer message provided, if any.-getMessageOr :: Maybe String -> Handler (Maybe Html)-getMessageOr mnewmsg = do-  oldmsg <- getMessage-  return $ maybe oldmsg (Just . toHtml) mnewmsg- numbered :: [a] -> [(Int,a)] numbered = zip [1..]  dayToJsTimestamp :: Day -> Integer dayToJsTimestamp d = read (formatTime defaultTimeLocale "%s" t) * 1000 -- XXX read                      where t = UTCTime d (secondsToDiffTime 0)--chomp :: String -> String-chomp = reverse . dropWhile (`elem` "\r\n") . reverse-
Hledger/Web/Main.hs view
@@ -10,14 +10,12 @@ where  -- yesod scaffold imports-import Prelude              (IO) import Yesod.Default.Config --(fromArgs) -- import Yesod.Default.Main   (defaultMain) import Settings            --  (parseExtra) import Application          (makeApplication) import Data.String-import Data.Conduit.Network-import Network.Wai.Handler.Warp (runSettings, defaultSettings, settingsPort)+import Network.Wai.Handler.Warp (runSettings, defaultSettings, setPort) import Network.Wai.Handler.Launch (runUrlPort) -- import Prelude hiding (putStrLn)@@ -51,7 +49,7 @@  withJournalDo' :: WebOpts -> (WebOpts -> Journal -> IO ()) -> IO () withJournalDo' opts cmd = do-  journalFilePathFromOpts (cliopts_ opts) >>= readJournalFile Nothing Nothing >>=+  journalFilePathFromOpts (cliopts_ opts) >>= readJournalFile Nothing Nothing True >>=     either error' (cmd opts . journalApplyAliases (aliasesFromOpts $ cliopts_ opts))  -- | The web command.@@ -61,19 +59,19 @@   let j' = filterJournalTransactions (queryFromOpts d $ reportopts_ $ cliopts_ opts) j       p = port_ opts       u = base_url_ opts-      staticRoot = pack <$> static_root_ opts+      staticRoot' = pack <$> static_root_ opts   _ <- printf "Starting web app on port %d with base url %s\n" p u   app <- makeApplication opts j' AppConfig{appEnv = Development                                           ,appPort = p                                           ,appRoot = pack u                                           ,appHost = fromString "*4"-                                          ,appExtra = Extra "" Nothing staticRoot+                                          ,appExtra = Extra "" Nothing staticRoot'                                           }   if server_ opts    then do     putStrLn "Press ctrl-c to quit"     hFlush stdout-    runSettings defaultSettings{settingsPort=p} app+    runSettings (setPort p defaultSettings) app    else do     putStrLn "Starting web browser if possible"     putStrLn "Web app will auto-exit after a few minutes with no browsers (or press ctrl-c)"
Hledger/Web/Options.hs view
@@ -29,7 +29,7 @@  ,flagReq  ["base-url"] (\s opts -> Right $ setopt "base-url" s opts) "BASEURL" ("set the base url (default: "++defbaseurlexample++")")  ,flagReq  ["file-url"] (\s opts -> Right $ setopt "file-url" s opts) "FILEURL" ("set the static files url (default: BASEURL/static)")  ]- + webmode :: Mode [([Char], [Char])] webmode =  (mode "hledger-web" [("command","web")]             "start serving the hledger web interface"
Settings.hs view
@@ -22,7 +22,7 @@  hledgerorgurl, manualurl :: String hledgerorgurl     = "http://hledger.org"-manualurl         = hledgerorgurl++"/MANUAL.html"+manualurl         = hledgerorgurl++"/manual"  -- | The default TCP port to listen on. May be overridden with --port. defport :: Int
app/main.hs view
@@ -1,11 +1,20 @@ import Prelude              (IO)++import qualified Hledger.Web.Main++main :: IO ()+main = Hledger.Web.Main.main++-- more standard yesod main, for reloading experiments+ -- import Yesod.Default.Config (fromArgs) -- import Yesod.Default.Main   (defaultMain) -- import Settings             (parseExtra) -- import Application          (makeApplication) -import qualified Hledger.Web.Main+-- import Hledger+-- import Hledger.Web (defwebopts) -main :: IO ()--- main = defaultMain (fromArgs parseExtra) makeApplication-main = Hledger.Web.Main.main+-- main = do+--   j <- defaultJournal+--   defaultMain (fromArgs parseExtra) (makeApplication defwebopts j)
+ config/favicon.ico view

binary file changed (absent → 1150 bytes)

+ config/keter.yaml view
@@ -0,0 +1,8 @@+exec: ../dist/build/hledger-web/hledger-web+args:+    - production+host: <<HOST-NOT-SET>>++# Use the following to automatically copy your bundle upon creation via `yesod+# keter`. Uses `scp` internally, so you can set it to a remote destination+# copy-to: user@host:/opt/keter/incoming
+ config/robots.txt view
@@ -0,0 +1,1 @@+User-agent: *
config/routes view
@@ -1,14 +1,12 @@-/static          StaticR         Static getStatic /favicon.ico     FaviconR        GET /robots.txt      RobotsR         GET-+/static          StaticR         Static getStatic /                RootR           GET- /journal         JournalR        GET POST-/journal/entries JournalEntriesR GET POST-/journal/edit    JournalEditR    GET POST- /register        RegisterR       GET POST-+/sidebar         SidebarR        GET+-- /journal/entries JournalEntriesR GET POST+-- /journal/edit    JournalEditR    GET POST+-- -- /accounts        AccountsR       GET -- /api/accounts    AccountsJsonR   GET
+ config/settings.yml view
@@ -0,0 +1,19 @@+Default: &defaults+  host: "*4" # any IPv4 host+  port: 3000+  approot: "http://localhost:3000"+  copyright: " "+  #analytics: UA-YOURCODE++Development:+  <<: *defaults++Testing:+  <<: *defaults++Staging:+  <<: *defaults++Production:+  #approot: "http://www.example.com"+  <<: *defaults
hledger-web.cabal view
@@ -1,5 +1,5 @@ name:           hledger-web-version: 0.23.3+version: 0.24 stability:      stable category:       Finance synopsis:       A web interface for the hledger accounting tool.@@ -17,33 +17,75 @@ maintainer:     Simon Michael <simon@joyful.com> homepage:       http://hledger.org bug-reports:    http://hledger.org/bugs-tested-with:    GHC==7.4.2, GHC==7.6.3, GHC==7.8.2+tested-with:    GHC==7.6.3, GHC==7.8.2 cabal-version:  >= 1.8 build-type:     Simple extra-tmp-files: extra-source-files:                 messages/en.msg+                config/favicon.ico+                config/keter.yaml+                config/robots.txt                 config/routes+                config/settings.yml+                static/css/bootstrap-theme.css+                static/css/bootstrap-theme.css.map+                static/css/bootstrap-theme.min.css                 static/css/bootstrap.css-                static/select2.css-                static/select2.js-                static/select2.min.js-                static/select2-spinner.gif-                static/select2.png-                static/excanvas.js-                static/excanvas.min.js-                static/favicon.ico+                static/css/bootstrap.css.map+                static/css/bootstrap.min.css+                static/fonts/glyphicons-halflings-regular.eot+                static/fonts/glyphicons-halflings-regular.svg+                static/fonts/glyphicons-halflings-regular.ttf+                static/fonts/glyphicons-halflings-regular.woff+                static/js/bootstrap.js+                static/js/bootstrap.min.js+                static/js/excanvas.js+                static/js/excanvas.min.js+                static/js/jquery.colorhelpers.js+                static/js/jquery.colorhelpers.min.js+                static/js/jquery.cookie.js+                static/js/jquery.flot.canvas.js+                static/js/jquery.flot.canvas.min.js+                static/js/jquery.flot.categories.js+                static/js/jquery.flot.categories.min.js+                static/js/jquery.flot.crosshair.js+                static/js/jquery.flot.crosshair.min.js+                static/js/jquery.flot.errorbars.js+                static/js/jquery.flot.errorbars.min.js+                static/js/jquery.flot.fillbetween.js+                static/js/jquery.flot.fillbetween.min.js+                static/js/jquery.flot.image.js+                static/js/jquery.flot.image.min.js+                static/js/jquery.flot.js+                static/js/jquery.flot.min.js+                static/js/jquery.flot.navigate.js+                static/js/jquery.flot.navigate.min.js+                static/js/jquery.flot.pie.js+                static/js/jquery.flot.pie.min.js+                static/js/jquery.flot.resize.js+                static/js/jquery.flot.resize.min.js+                static/js/jquery.flot.selection.js+                static/js/jquery.flot.selection.min.js+                static/js/jquery.flot.stack.js+                static/js/jquery.flot.stack.min.js+                static/js/jquery.flot.symbol.js+                static/js/jquery.flot.symbol.min.js+                static/js/jquery.flot.threshold.js+                static/js/jquery.flot.threshold.min.js+                static/js/jquery.flot.time.js+                static/js/jquery.flot.time.min.js+                static/js/jquery.flot.tooltip.js+                static/js/jquery.flot.tooltip.min.js+                static/js/jquery.hotkeys.js+                static/js/jquery.min.js+                static/js/jquery.url.js+                static/js/typeahead.bundle.js+                static/js/typeahead.bundle.min.js+                static/hledger.css                 static/hledger.js-                static/img/glyphicons-halflings-white.png-                static/img/glyphicons-halflings.png-                static/jquery.flot.js-                static/jquery.flot.min.js-                static/jquery.js-                static/jquery.min.js-                static/jquery.url.js-                static/style.css-                templates/default-layout.hamlet                 templates/default-layout-wrapper.hamlet+                templates/default-layout.hamlet                 templates/homepage.hamlet                 templates/homepage.julius                 templates/homepage.lucius@@ -58,10 +100,6 @@     Description:   Build with support for multithreaded execution.     Default:       True -flag blaze_html_0_4-    description:   Use the older 0.4 version of blaze-html. No longer well tested.-    default:       False- flag dev     Description:   Turn on development settings, like auto-reload templates.     Default:       False@@ -70,12 +108,14 @@     Description:   Build for use with "yesod devel"     Default:       False + library-    cpp-options:   -DVERSION="0.23.3"+    cpp-options:   -DVERSION="0.24"     if flag(dev) || flag(library-only)         cpp-options: -DDEVELOPMENT  -    ghc-options:   -Wall -fno-warn-unused-do-bind+    ghc-options: -Wall -fno-warn-unused-do-bind -fno-warn-name-shadowing -fno-warn-missing-signatures+    ghc-options: -fno-warn-type-defaults -fno-warn-orphans       extensions:                 CPP@@ -93,8 +133,7 @@                 -- EmptyDataDecls                 -- NoMonomorphismRestriction -    hs-source-dirs:  . app-    exposed-modules:  Application+    exposed-modules: Application                      Foundation                      Import                      Settings@@ -107,16 +146,19 @@                      Handler.Post                      Handler.RegisterR                      Handler.RootR+                     Handler.SidebarR                      Handler.Utils-    other-modules:+    -- other-modules:                      Hledger.Web                      Hledger.Web.Main                      Hledger.Web.Options                      -- Setup -- stops yesod devel complaining, requires build-depends: Cabal     build-depends:-                     hledger              == 0.23.3-                   , hledger-lib          == 0.23.3+                     hledger              == 0.24+                   , hledger-lib          == 0.24                    , base                 >= 4 && < 5+                   , blaze-html+                   , blaze-markup                    , bytestring                    , clientsession                    , cmdargs              >= 0.10 && < 0.11@@ -125,25 +167,15 @@                    , filepath                    , hjsmin                    , http-conduit-                   , http-client          >= 0.2 && < 0.4+                   , http-client                    , HUnit                    , network-conduit                    , conduit-extra                    , old-locale-                   , parsec+                   , parsec               >= 3                    , regexpr              >= 0.5.1                    , safe                 >= 0.2--- http://www.yesodweb.com/blog/2014/04/consolidation-progress--- in order to support both the old and new versions of shakespeare,--- you just need to ensure that you have both the shakespeare and--- deprecated packages listed in your cabal file. In other words, if--- previously you depended on hamlet, now you should depend on hamlet--- and shakespeare. When you're ready to drop backwards compatibility,--- simply put a lower bound of >= 2.0 on shakespeare and remove the--- deprecated packages.-                   , hamlet-                   , shakespeare-text >= 1.0 && < 1.2-                   , shakespeare      >= 1.0 && < 2.1+                   , shakespeare          >= 2.0                    , template-haskell                    , text                    , time@@ -151,34 +183,30 @@                    , wai                    , wai-extra                    , wai-handler-launch   >= 1.3-                   , warp                 >= 1.3+                   , warp                    , yaml-                   , yesod                >= 1.2 && < 1.3+                   , yesod                >= 1.4 && < 1.5                    , yesod-core                    , yesod-static                    , json--    if flag(blaze_html_0_4)-      cpp-options:   -DBLAZE_HTML_0_4-      build-depends:-                     blaze-html               >= 0.4     && < 0.5-    else-      build-depends:-                     blaze-html               >= 0.5     && < 0.8-                   , blaze-markup             >= 0.5.1   && < 0.7+                   -- required by extra ghci utilities:+                   -- , fsnotify+                   -- , hsdev+                   -- , mtl   executable         hledger-web     if flag(library-only)         Buildable: False -    cpp-options:   -DVERSION="0.23.3"+    cpp-options:   -DVERSION="0.24"     if flag(dev)-        cpp-options:   -DDEVELOPMENT+        cpp-options: -DDEVELOPMENT -    ghc-options:   -Wall -fno-warn-unused-do-bind+    ghc-options: -Wall -fno-warn-unused-do-bind -fno-warn-name-shadowing -fno-warn-missing-signatures+    ghc-options: -fno-warn-type-defaults -fno-warn-orphans     if flag(threaded)-        ghc-options:   -threaded+        ghc-options: -threaded     if flag(dev)         ghc-options:   -O0 @@ -192,31 +220,16 @@                 TemplateHaskell                 TypeFamilies -    hs-source-dirs:  . app+    hs-source-dirs:  app     main-is:         main.hs-    other-modules:-                     Application-                     Foundation-                     Import-                     Settings-                     Settings.StaticFiles-                     Settings.Development-                     Handler.Common-                     Handler.JournalEditR-                     Handler.JournalEntriesR-                     Handler.JournalR-                     Handler.Post-                     Handler.RegisterR-                     Handler.RootR-                     Handler.Utils-                     Hledger.Web-                     Hledger.Web.Main-                     Hledger.Web.Options      build-depends:-                     hledger              == 0.23.3-                   , hledger-lib          == 0.23.3+                     hledger-lib          == 0.24+                   , hledger              == 0.24+                   , hledger-web          == 0.24                    , base                 >= 4 && < 5+                   , blaze-html+                   , blaze-markup                    , bytestring                    , clientsession                    , cmdargs              >= 0.10 && < 0.11@@ -225,17 +238,15 @@                    , filepath                    , hjsmin                    , http-conduit-                   , http-client          >= 0.2 && < 0.4+                   , http-client                    , HUnit                    , network-conduit                    , conduit-extra                    , old-locale-                   , parsec+                   , parsec               >= 3                    , regexpr              >= 0.5.1                    , safe                 >= 0.2-                   , hamlet-                   , shakespeare-text >= 1.0 && < 1.2-                   , shakespeare      >= 1.0 && < 2.1+                   , shakespeare          >= 2.0 && < 2.1                    , template-haskell                    , text                    , time@@ -243,30 +254,26 @@                    , wai                    , wai-extra                    , wai-handler-launch   >= 1.3-                   , warp                 >= 1.3+                   , warp                    , yaml-                   , yesod                >= 1.2 && < 1.3+                   , yesod                >= 1.4 && < 1.5                    , yesod-core                    , yesod-static                    , json--    if flag(blaze_html_0_4)-      cpp-options:   -DBLAZE_HTML_0_4-      build-depends:-                     blaze-html               >= 0.4     && < 0.5-    else-      build-depends:-                     blaze-html               >= 0.5     && < 0.8-                   , blaze-markup             >= 0.5.1   && < 0.7+                   -- required by extra ghci utilities:+                   -- , fsnotify+                   -- , hsdev+                   -- , mtl  test-suite test     type:              exitcode-stdio-1.0-    ghc-options:       -Wall+    ghc-options: -Wall -fno-warn-unused-do-bind -fno-warn-name-shadowing -fno-warn-missing-signatures+    ghc-options: -fno-warn-type-defaults -fno-warn-orphans     hs-source-dirs:    tests     main-is:           main.hs     build-depends: -                     hledger-web+                     hledger-web          == 0.24                    , base                    , hspec-                   , yesod                >= 1.2 && < 1.3-                   , yesod-test           >= 1.2 && < 1.3+                   , yesod+                   , yesod-test
+ static/css/bootstrap-theme.css view
@@ -0,0 +1,442 @@+/*!+ * Bootstrap v3.2.0 (http://getbootstrap.com)+ * Copyright 2011-2014 Twitter, Inc.+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)+ */++.btn-default,+.btn-primary,+.btn-success,+.btn-info,+.btn-warning,+.btn-danger {+  text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);+  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);+          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);+}+.btn-default:active,+.btn-primary:active,+.btn-success:active,+.btn-info:active,+.btn-warning:active,+.btn-danger:active,+.btn-default.active,+.btn-primary.active,+.btn-success.active,+.btn-info.active,+.btn-warning.active,+.btn-danger.active {+  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);+          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);+}+.btn:active,+.btn.active {+  background-image: none;+}+.btn-default {+  text-shadow: 0 1px 0 #fff;+  background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);+  background-image:      -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);+  background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0));+  background-image:         linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);+  background-repeat: repeat-x;+  border-color: #dbdbdb;+  border-color: #ccc;+}+.btn-default:hover,+.btn-default:focus {+  background-color: #e0e0e0;+  background-position: 0 -15px;+}+.btn-default:active,+.btn-default.active {+  background-color: #e0e0e0;+  border-color: #dbdbdb;+}+.btn-default:disabled,+.btn-default[disabled] {+  background-color: #e0e0e0;+  background-image: none;+}+.btn-primary {+  background-image: -webkit-linear-gradient(top, #428bca 0%, #2d6ca2 100%);+  background-image:      -o-linear-gradient(top, #428bca 0%, #2d6ca2 100%);+  background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#2d6ca2));+  background-image:         linear-gradient(to bottom, #428bca 0%, #2d6ca2 100%);+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff2d6ca2', GradientType=0);+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);+  background-repeat: repeat-x;+  border-color: #2b669a;+}+.btn-primary:hover,+.btn-primary:focus {+  background-color: #2d6ca2;+  background-position: 0 -15px;+}+.btn-primary:active,+.btn-primary.active {+  background-color: #2d6ca2;+  border-color: #2b669a;+}+.btn-primary:disabled,+.btn-primary[disabled] {+  background-color: #2d6ca2;+  background-image: none;+}+.btn-success {+  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);+  background-image:      -o-linear-gradient(top, #5cb85c 0%, #419641 100%);+  background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641));+  background-image:         linear-gradient(to bottom, #5cb85c 0%, #419641 100%);+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);+  background-repeat: repeat-x;+  border-color: #3e8f3e;+}+.btn-success:hover,+.btn-success:focus {+  background-color: #419641;+  background-position: 0 -15px;+}+.btn-success:active,+.btn-success.active {+  background-color: #419641;+  border-color: #3e8f3e;+}+.btn-success:disabled,+.btn-success[disabled] {+  background-color: #419641;+  background-image: none;+}+.btn-info {+  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);+  background-image:      -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);+  background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2));+  background-image:         linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);+  background-repeat: repeat-x;+  border-color: #28a4c9;+}+.btn-info:hover,+.btn-info:focus {+  background-color: #2aabd2;+  background-position: 0 -15px;+}+.btn-info:active,+.btn-info.active {+  background-color: #2aabd2;+  border-color: #28a4c9;+}+.btn-info:disabled,+.btn-info[disabled] {+  background-color: #2aabd2;+  background-image: none;+}+.btn-warning {+  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);+  background-image:      -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);+  background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316));+  background-image:         linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);+  background-repeat: repeat-x;+  border-color: #e38d13;+}+.btn-warning:hover,+.btn-warning:focus {+  background-color: #eb9316;+  background-position: 0 -15px;+}+.btn-warning:active,+.btn-warning.active {+  background-color: #eb9316;+  border-color: #e38d13;+}+.btn-warning:disabled,+.btn-warning[disabled] {+  background-color: #eb9316;+  background-image: none;+}+.btn-danger {+  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);+  background-image:      -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);+  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a));+  background-image:         linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);+  background-repeat: repeat-x;+  border-color: #b92c28;+}+.btn-danger:hover,+.btn-danger:focus {+  background-color: #c12e2a;+  background-position: 0 -15px;+}+.btn-danger:active,+.btn-danger.active {+  background-color: #c12e2a;+  border-color: #b92c28;+}+.btn-danger:disabled,+.btn-danger[disabled] {+  background-color: #c12e2a;+  background-image: none;+}+.thumbnail,+.img-thumbnail {+  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);+          box-shadow: 0 1px 2px rgba(0, 0, 0, .075);+}+.dropdown-menu > li > a:hover,+.dropdown-menu > li > a:focus {+  background-color: #e8e8e8;+  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);+  background-image:      -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);+  background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));+  background-image:         linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);+  background-repeat: repeat-x;+}+.dropdown-menu > .active > a,+.dropdown-menu > .active > a:hover,+.dropdown-menu > .active > a:focus {+  background-color: #357ebd;+  background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%);+  background-image:      -o-linear-gradient(top, #428bca 0%, #357ebd 100%);+  background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#357ebd));+  background-image:         linear-gradient(to bottom, #428bca 0%, #357ebd 100%);+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);+  background-repeat: repeat-x;+}+.navbar-default {+  background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%);+  background-image:      -o-linear-gradient(top, #fff 0%, #f8f8f8 100%);+  background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8));+  background-image:         linear-gradient(to bottom, #fff 0%, #f8f8f8 100%);+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);+  background-repeat: repeat-x;+  border-radius: 4px;+  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);+          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);+}+.navbar-default .navbar-nav > .active > a {+  background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f3f3f3 100%);+  background-image:      -o-linear-gradient(top, #ebebeb 0%, #f3f3f3 100%);+  background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f3f3f3));+  background-image:         linear-gradient(to bottom, #ebebeb 0%, #f3f3f3 100%);+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff3f3f3', GradientType=0);+  background-repeat: repeat-x;+  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);+          box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);+}+.navbar-brand,+.navbar-nav > li > a {+  text-shadow: 0 1px 0 rgba(255, 255, 255, .25);+}+.navbar-inverse {+  background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);+  background-image:      -o-linear-gradient(top, #3c3c3c 0%, #222 100%);+  background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222));+  background-image:         linear-gradient(to bottom, #3c3c3c 0%, #222 100%);+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);+  background-repeat: repeat-x;+}+.navbar-inverse .navbar-nav > .active > a {+  background-image: -webkit-linear-gradient(top, #222 0%, #282828 100%);+  background-image:      -o-linear-gradient(top, #222 0%, #282828 100%);+  background-image: -webkit-gradient(linear, left top, left bottom, from(#222), to(#282828));+  background-image:         linear-gradient(to bottom, #222 0%, #282828 100%);+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff282828', GradientType=0);+  background-repeat: repeat-x;+  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);+          box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);+}+.navbar-inverse .navbar-brand,+.navbar-inverse .navbar-nav > li > a {+  text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);+}+.navbar-static-top,+.navbar-fixed-top,+.navbar-fixed-bottom {+  border-radius: 0;+}+.alert {+  text-shadow: 0 1px 0 rgba(255, 255, 255, .2);+  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);+          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);+}+.alert-success {+  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);+  background-image:      -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);+  background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc));+  background-image:         linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);+  background-repeat: repeat-x;+  border-color: #b2dba1;+}+.alert-info {+  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);+  background-image:      -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);+  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0));+  background-image:         linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);+  background-repeat: repeat-x;+  border-color: #9acfea;+}+.alert-warning {+  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);+  background-image:      -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);+  background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0));+  background-image:         linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);+  background-repeat: repeat-x;+  border-color: #f5e79e;+}+.alert-danger {+  background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);+  background-image:      -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);+  background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3));+  background-image:         linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);+  background-repeat: repeat-x;+  border-color: #dca7a7;+}+.progress {+  background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);+  background-image:      -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);+  background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5));+  background-image:         linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);+  background-repeat: repeat-x;+}+.progress-bar {+  background-image: -webkit-linear-gradient(top, #428bca 0%, #3071a9 100%);+  background-image:      -o-linear-gradient(top, #428bca 0%, #3071a9 100%);+  background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#3071a9));+  background-image:         linear-gradient(to bottom, #428bca 0%, #3071a9 100%);+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0);+  background-repeat: repeat-x;+}+.progress-bar-success {+  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);+  background-image:      -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);+  background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44));+  background-image:         linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);+  background-repeat: repeat-x;+}+.progress-bar-info {+  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);+  background-image:      -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);+  background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5));+  background-image:         linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);+  background-repeat: repeat-x;+}+.progress-bar-warning {+  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);+  background-image:      -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);+  background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f));+  background-image:         linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);+  background-repeat: repeat-x;+}+.progress-bar-danger {+  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);+  background-image:      -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);+  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c));+  background-image:         linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);+  background-repeat: repeat-x;+}+.progress-bar-striped {+  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);+  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);+  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);+}+.list-group {+  border-radius: 4px;+  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);+          box-shadow: 0 1px 2px rgba(0, 0, 0, .075);+}+.list-group-item.active,+.list-group-item.active:hover,+.list-group-item.active:focus {+  text-shadow: 0 -1px 0 #3071a9;+  background-image: -webkit-linear-gradient(top, #428bca 0%, #3278b3 100%);+  background-image:      -o-linear-gradient(top, #428bca 0%, #3278b3 100%);+  background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#3278b3));+  background-image:         linear-gradient(to bottom, #428bca 0%, #3278b3 100%);+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0);+  background-repeat: repeat-x;+  border-color: #3278b3;+}+.panel {+  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);+          box-shadow: 0 1px 2px rgba(0, 0, 0, .05);+}+.panel-default > .panel-heading {+  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);+  background-image:      -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);+  background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));+  background-image:         linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);+  background-repeat: repeat-x;+}+.panel-primary > .panel-heading {+  background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%);+  background-image:      -o-linear-gradient(top, #428bca 0%, #357ebd 100%);+  background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#357ebd));+  background-image:         linear-gradient(to bottom, #428bca 0%, #357ebd 100%);+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);+  background-repeat: repeat-x;+}+.panel-success > .panel-heading {+  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);+  background-image:      -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);+  background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6));+  background-image:         linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);+  background-repeat: repeat-x;+}+.panel-info > .panel-heading {+  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);+  background-image:      -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);+  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3));+  background-image:         linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);+  background-repeat: repeat-x;+}+.panel-warning > .panel-heading {+  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);+  background-image:      -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);+  background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc));+  background-image:         linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);+  background-repeat: repeat-x;+}+.panel-danger > .panel-heading {+  background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);+  background-image:      -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);+  background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc));+  background-image:         linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);+  background-repeat: repeat-x;+}+.well {+  background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);+  background-image:      -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);+  background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5));+  background-image:         linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);+  background-repeat: repeat-x;+  border-color: #dcdcdc;+  -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);+          box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);+}+/*# sourceMappingURL=bootstrap-theme.css.map */
+ static/css/bootstrap-theme.css.map view
@@ -0,0 +1,1 @@+{"version":3,"file":"bootstrap-theme.css","sources":["less/theme.less","less/mixins/vendor-prefixes.less","bootstrap-theme.css","less/mixins/gradients.less","less/mixins/reset-filter.less"],"names":[],"mappings":"AAeA;;;;;;EAME,0CAAA;EC+CA,6FAAA;EACQ,qFAAA;EC5DT;AFiBC;;;;;;;;;;;;EC0CA,0DAAA;EACQ,kDAAA;EC7CT;AFqCC;;EAEE,wBAAA;EEnCH;AFwCD;EG/CI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJ8BA,6BAAA;EACA,uBAAA;EA+B2C,2BAAA;EAA2B,oBAAA;EE7BvE;AFAC;;EAEE,2BAAA;EACA,8BAAA;EEEH;AFCC;;EAEE,2BAAA;EACA,uBAAA;EECH;AFEC;;EAEE,2BAAA;EACA,wBAAA;EEAH;AFeD;EGhDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJ8BA,6BAAA;EACA,uBAAA;EE0BD;AFxBC;;EAEE,2BAAA;EACA,8BAAA;EE0BH;AFvBC;;EAEE,2BAAA;EACA,uBAAA;EEyBH;AFtBC;;EAEE,2BAAA;EACA,wBAAA;EEwBH;AFRD;EGjDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJ8BA,6BAAA;EACA,uBAAA;EEkDD;AFhDC;;EAEE,2BAAA;EACA,8BAAA;EEkDH;AF/CC;;EAEE,2BAAA;EACA,uBAAA;EEiDH;AF9CC;;EAEE,2BAAA;EACA,wBAAA;EEgDH;AF/BD;EGlDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJ8BA,6BAAA;EACA,uBAAA;EE0ED;AFxEC;;EAEE,2BAAA;EACA,8BAAA;EE0EH;AFvEC;;EAEE,2BAAA;EACA,uBAAA;EEyEH;AFtEC;;EAEE,2BAAA;EACA,wBAAA;EEwEH;AFtDD;EGnDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJ8BA,6BAAA;EACA,uBAAA;EEkGD;AFhGC;;EAEE,2BAAA;EACA,8BAAA;EEkGH;AF/FC;;EAEE,2BAAA;EACA,uBAAA;EEiGH;AF9FC;;EAEE,2BAAA;EACA,wBAAA;EEgGH;AF7ED;EGpDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJ8BA,6BAAA;EACA,uBAAA;EE0HD;AFxHC;;EAEE,2BAAA;EACA,8BAAA;EE0HH;AFvHC;;EAEE,2BAAA;EACA,uBAAA;EEyHH;AFtHC;;EAEE,2BAAA;EACA,wBAAA;EEwHH;AF7FD;;ECbE,oDAAA;EACQ,4CAAA;EC8GT;AFvFD;;EGvEI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EHsEF,2BAAA;EE6FD;AF3FD;;;EG5EI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH4EF,2BAAA;EEiGD;AFvFD;EG1FI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ECnBF,qEAAA;EJ4GA,oBAAA;EC9CA,6FAAA;EACQ,qFAAA;EC4IT;AFlGD;EG1FI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EF2CF,0DAAA;EACQ,kDAAA;ECqJT;AF/FD;;EAEE,gDAAA;EEiGD;AF7FD;EG5GI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ECnBF,qEAAA;EFgOD;AFrGD;EG5GI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EF2CF,yDAAA;EACQ,iDAAA;EC0KT;AF9GD;;EAWI,2CAAA;EEuGH;AFlGD;;;EAGE,kBAAA;EEoGD;AF1FD;EACE,+CAAA;EC3FA,4FAAA;EACQ,oFAAA;ECwLT;AFlFD;EGtJI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH8IF,uBAAA;EE8FD;AFzFD;EGvJI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH8IF,uBAAA;EEsGD;AFhGD;EGxJI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH8IF,uBAAA;EE8GD;AFvGD;EGzJI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH8IF,uBAAA;EEsHD;AFtGD;EGlKI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ED2QH;AFnGD;EG5KI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDkRH;AFzGD;EG7KI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDyRH;AF/GD;EG9KI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDgSH;AFrHD;EG/KI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDuSH;AF3HD;EGhLI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ED8SH;AF9HD;EGnJI,+MAAA;EACA,0MAAA;EACA,uMAAA;EDoRH;AF1HD;EACE,oBAAA;EC/IA,oDAAA;EACQ,4CAAA;EC4QT;AF3HD;;;EAGE,+BAAA;EGpME,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EHkMF,uBAAA;EEiID;AFvHD;ECjKE,mDAAA;EACQ,2CAAA;EC2RT;AFjHD;EG1NI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ED8UH;AFvHD;EG3NI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDqVH;AF7HD;EG5NI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ED4VH;AFnID;EG7NI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDmWH;AFzID;EG9NI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ED0WH;AF/ID;EG/NI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDiXH;AF9ID;EGvOI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EHqOF,uBAAA;EC1LA,2FAAA;EACQ,mFAAA;EC+UT","sourcesContent":["\n//\n// Load core variables and mixins\n// --------------------------------------------------\n\n@import \"variables.less\";\n@import \"mixins.less\";\n\n\n\n//\n// Buttons\n// --------------------------------------------------\n\n// Common styles\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n  text-shadow: 0 -1px 0 rgba(0,0,0,.2);\n  @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075);\n  .box-shadow(@shadow);\n\n  // Reset the shadow\n  &:active,\n  &.active {\n    .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n  }\n}\n\n// Mixin for generating new styles\n.btn-styles(@btn-color: #555) {\n  #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));\n  .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners\n  background-repeat: repeat-x;\n  border-color: darken(@btn-color, 14%);\n\n  &:hover,\n  &:focus  {\n    background-color: darken(@btn-color, 12%);\n    background-position: 0 -15px;\n  }\n\n  &:active,\n  &.active {\n    background-color: darken(@btn-color, 12%);\n    border-color: darken(@btn-color, 14%);\n  }\n\n  &:disabled,\n  &[disabled] {\n    background-color: darken(@btn-color, 12%);\n    background-image: none;\n  }\n}\n\n// Common styles\n.btn {\n  // Remove the gradient for the pressed/active state\n  &:active,\n  &.active {\n    background-image: none;\n  }\n}\n\n// Apply the mixin to the buttons\n.btn-default { .btn-styles(@btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; }\n.btn-primary { .btn-styles(@btn-primary-bg); }\n.btn-success { .btn-styles(@btn-success-bg); }\n.btn-info    { .btn-styles(@btn-info-bg); }\n.btn-warning { .btn-styles(@btn-warning-bg); }\n.btn-danger  { .btn-styles(@btn-danger-bg); }\n\n\n\n//\n// Images\n// --------------------------------------------------\n\n.thumbnail,\n.img-thumbnail {\n  .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n\n\n\n//\n// Dropdowns\n// --------------------------------------------------\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n  #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));\n  background-color: darken(@dropdown-link-hover-bg, 5%);\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n  #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n  background-color: darken(@dropdown-link-active-bg, 5%);\n}\n\n\n\n//\n// Navbar\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n  #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg);\n  .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n  border-radius: @navbar-border-radius;\n  @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075);\n  .box-shadow(@shadow);\n\n  .navbar-nav > .active > a {\n    #gradient > .vertical(@start-color: darken(@navbar-default-bg, 5%); @end-color: darken(@navbar-default-bg, 2%));\n    .box-shadow(inset 0 3px 9px rgba(0,0,0,.075));\n  }\n}\n.navbar-brand,\n.navbar-nav > li > a {\n  text-shadow: 0 1px 0 rgba(255,255,255,.25);\n}\n\n// Inverted navbar\n.navbar-inverse {\n  #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);\n  .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n\n  .navbar-nav > .active > a {\n    #gradient > .vertical(@start-color: @navbar-inverse-bg; @end-color: lighten(@navbar-inverse-bg, 2.5%));\n    .box-shadow(inset 0 3px 9px rgba(0,0,0,.25));\n  }\n\n  .navbar-brand,\n  .navbar-nav > li > a {\n    text-shadow: 0 -1px 0 rgba(0,0,0,.25);\n  }\n}\n\n// Undo rounded corners in static and fixed navbars\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  border-radius: 0;\n}\n\n\n\n//\n// Alerts\n// --------------------------------------------------\n\n// Common styles\n.alert {\n  text-shadow: 0 1px 0 rgba(255,255,255,.2);\n  @shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05);\n  .box-shadow(@shadow);\n}\n\n// Mixin for generating new styles\n.alert-styles(@color) {\n  #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%));\n  border-color: darken(@color, 15%);\n}\n\n// Apply the mixin to the alerts\n.alert-success    { .alert-styles(@alert-success-bg); }\n.alert-info       { .alert-styles(@alert-info-bg); }\n.alert-warning    { .alert-styles(@alert-warning-bg); }\n.alert-danger     { .alert-styles(@alert-danger-bg); }\n\n\n\n//\n// Progress bars\n// --------------------------------------------------\n\n// Give the progress background some depth\n.progress {\n  #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg)\n}\n\n// Mixin for generating new styles\n.progress-bar-styles(@color) {\n  #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));\n}\n\n// Apply the mixin to the progress bars\n.progress-bar            { .progress-bar-styles(@progress-bar-bg); }\n.progress-bar-success    { .progress-bar-styles(@progress-bar-success-bg); }\n.progress-bar-info       { .progress-bar-styles(@progress-bar-info-bg); }\n.progress-bar-warning    { .progress-bar-styles(@progress-bar-warning-bg); }\n.progress-bar-danger     { .progress-bar-styles(@progress-bar-danger-bg); }\n\n// Reset the striped class because our mixins don't do multiple gradients and\n// the above custom styles override the new `.progress-bar-striped` in v3.2.0.\n.progress-bar-striped {\n  #gradient > .striped();\n}\n\n\n//\n// List groups\n// --------------------------------------------------\n\n.list-group {\n  border-radius: @border-radius-base;\n  .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n  text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%);\n  #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));\n  border-color: darken(@list-group-active-border, 7.5%);\n}\n\n\n\n//\n// Panels\n// --------------------------------------------------\n\n// Common styles\n.panel {\n  .box-shadow(0 1px 2px rgba(0,0,0,.05));\n}\n\n// Mixin for generating new styles\n.panel-heading-styles(@color) {\n  #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));\n}\n\n// Apply the mixin to the panel headings only\n.panel-default > .panel-heading   { .panel-heading-styles(@panel-default-heading-bg); }\n.panel-primary > .panel-heading   { .panel-heading-styles(@panel-primary-heading-bg); }\n.panel-success > .panel-heading   { .panel-heading-styles(@panel-success-heading-bg); }\n.panel-info > .panel-heading      { .panel-heading-styles(@panel-info-heading-bg); }\n.panel-warning > .panel-heading   { .panel-heading-styles(@panel-warning-heading-bg); }\n.panel-danger > .panel-heading    { .panel-heading-styles(@panel-danger-heading-bg); }\n\n\n\n//\n// Wells\n// --------------------------------------------------\n\n.well {\n  #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg);\n  border-color: darken(@well-bg, 10%);\n  @shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1);\n  .box-shadow(@shadow);\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They will be removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n  -webkit-animation: @animation;\n       -o-animation: @animation;\n          animation: @animation;\n}\n.animation-name(@name) {\n  -webkit-animation-name: @name;\n          animation-name: @name;\n}\n.animation-duration(@duration) {\n  -webkit-animation-duration: @duration;\n          animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n  -webkit-animation-timing-function: @timing-function;\n          animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n  -webkit-animation-delay: @delay;\n          animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n  -webkit-animation-iteration-count: @iteration-count;\n          animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n  -webkit-animation-direction: @direction;\n          animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n  -webkit-animation-fill-mode: @fill-mode;\n          animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility){\n  -webkit-backface-visibility: @visibility;\n     -moz-backface-visibility: @visibility;\n          backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n  -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n          box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n  -webkit-box-sizing: @boxmodel;\n     -moz-box-sizing: @boxmodel;\n          box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n  -webkit-column-count: @column-count;\n     -moz-column-count: @column-count;\n          column-count: @column-count;\n  -webkit-column-gap: @column-gap;\n     -moz-column-gap: @column-gap;\n          column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n  word-wrap: break-word;\n  -webkit-hyphens: @mode;\n     -moz-hyphens: @mode;\n      -ms-hyphens: @mode; // IE10+\n       -o-hyphens: @mode;\n          hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n  &::-moz-placeholder           { color: @color;   // Firefox\n                                  opacity: 1; } // See https://github.com/twbs/bootstrap/pull/11526\n  &:-ms-input-placeholder       { color: @color; } // Internet Explorer 10+\n  &::-webkit-input-placeholder  { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n  -webkit-transform: scale(@ratio);\n      -ms-transform: scale(@ratio); // IE9 only\n       -o-transform: scale(@ratio);\n          transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n  -webkit-transform: scale(@ratioX, @ratioY);\n      -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n       -o-transform: scale(@ratioX, @ratioY);\n          transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n  -webkit-transform: scaleX(@ratio);\n      -ms-transform: scaleX(@ratio); // IE9 only\n       -o-transform: scaleX(@ratio);\n          transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n  -webkit-transform: scaleY(@ratio);\n      -ms-transform: scaleY(@ratio); // IE9 only\n       -o-transform: scaleY(@ratio);\n          transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n  -webkit-transform: skewX(@x) skewY(@y);\n      -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n       -o-transform: skewX(@x) skewY(@y);\n          transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n  -webkit-transform: translate(@x, @y);\n      -ms-transform: translate(@x, @y); // IE9 only\n       -o-transform: translate(@x, @y);\n          transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n  -webkit-transform: translate3d(@x, @y, @z);\n          transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n  -webkit-transform: rotate(@degrees);\n      -ms-transform: rotate(@degrees); // IE9 only\n       -o-transform: rotate(@degrees);\n          transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n  -webkit-transform: rotateX(@degrees);\n      -ms-transform: rotateX(@degrees); // IE9 only\n       -o-transform: rotateX(@degrees);\n          transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n  -webkit-transform: rotateY(@degrees);\n      -ms-transform: rotateY(@degrees); // IE9 only\n       -o-transform: rotateY(@degrees);\n          transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n  -webkit-perspective: @perspective;\n     -moz-perspective: @perspective;\n          perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n  -webkit-perspective-origin: @perspective;\n     -moz-perspective-origin: @perspective;\n          perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n  -webkit-transform-origin: @origin;\n     -moz-transform-origin: @origin;\n      -ms-transform-origin: @origin; // IE9 only\n          transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n  -webkit-transition: @transition;\n       -o-transition: @transition;\n          transition: @transition;\n}\n.transition-property(@transition-property) {\n  -webkit-transition-property: @transition-property;\n          transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n  -webkit-transition-delay: @transition-delay;\n          transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n  -webkit-transition-duration: @transition-duration;\n          transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n  -webkit-transition-timing-function: @timing-function;\n          transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n  -webkit-transition: -webkit-transform @transition;\n     -moz-transition: -moz-transform @transition;\n       -o-transition: -o-transform @transition;\n          transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n  -webkit-user-select: @select;\n     -moz-user-select: @select;\n      -ms-user-select: @select; // IE10+\n          user-select: @select;\n}\n",null,"// Gradients\n\n#gradient {\n\n  // Horizontal gradient, from left to right\n  //\n  // Creates two color stops, start and end, by specifying a color and position for each color stop.\n  // Color stops are not available in IE9 and below.\n  .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n    background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n    background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n    background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n    background-repeat: repeat-x;\n    filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n  }\n\n  // Vertical gradient, from top to bottom\n  //\n  // Creates two color stops, start and end, by specifying a color and position for each color stop.\n  // Color stops are not available in IE9 and below.\n  .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n    background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent);  // Safari 5.1-6, Chrome 10+\n    background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent);  // Opera 12\n    background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n    background-repeat: repeat-x;\n    filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n  }\n\n  .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n    background-repeat: repeat-x;\n    background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n    background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n    background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n  }\n  .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n    background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n    background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n    background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n    background-repeat: no-repeat;\n    filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n  }\n  .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n    background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n    background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n    background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n    background-repeat: no-repeat;\n    filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n  }\n  .radial(@inner-color: #555; @outer-color: #333) {\n    background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n    background-image: radial-gradient(circle, @inner-color, @outer-color);\n    background-repeat: no-repeat;\n  }\n  .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n    background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n    background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n    background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n  }\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n  filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n"]}
+ static/css/bootstrap-theme.min.css view
@@ -0,0 +1,5 @@+/*!+ * Bootstrap v3.2.0 (http://getbootstrap.com)+ * Copyright 2011-2014 Twitter, Inc.+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)+ */.btn-default,.btn-primary,.btn-success,.btn-info,.btn-warning,.btn-danger{text-shadow:0 -1px 0 rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-default:active,.btn-primary:active,.btn-success:active,.btn-info:active,.btn-warning:active,.btn-danger:active,.btn-default.active,.btn-primary.active,.btn-success.active,.btn-info.active,.btn-warning.active,.btn-danger.active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn:active,.btn.active{background-image:none}.btn-default{text-shadow:0 1px 0 #fff;background-image:-webkit-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-o-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e0e0e0));background-image:linear-gradient(to bottom,#fff 0,#e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#dbdbdb;border-color:#ccc}.btn-default:hover,.btn-default:focus{background-color:#e0e0e0;background-position:0 -15px}.btn-default:active,.btn-default.active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-default:disabled,.btn-default[disabled]{background-color:#e0e0e0;background-image:none}.btn-primary{background-image:-webkit-linear-gradient(top,#428bca 0,#2d6ca2 100%);background-image:-o-linear-gradient(top,#428bca 0,#2d6ca2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#428bca),to(#2d6ca2));background-image:linear-gradient(to bottom,#428bca 0,#2d6ca2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff2d6ca2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#2b669a}.btn-primary:hover,.btn-primary:focus{background-color:#2d6ca2;background-position:0 -15px}.btn-primary:active,.btn-primary.active{background-color:#2d6ca2;border-color:#2b669a}.btn-primary:disabled,.btn-primary[disabled]{background-color:#2d6ca2;background-image:none}.btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#419641));background-image:linear-gradient(to bottom,#5cb85c 0,#419641 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:hover,.btn-success:focus{background-color:#419641;background-position:0 -15px}.btn-success:active,.btn-success.active{background-color:#419641;border-color:#3e8f3e}.btn-success:disabled,.btn-success[disabled]{background-color:#419641;background-image:none}.btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#2aabd2));background-image:linear-gradient(to bottom,#5bc0de 0,#2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:hover,.btn-info:focus{background-color:#2aabd2;background-position:0 -15px}.btn-info:active,.btn-info.active{background-color:#2aabd2;border-color:#28a4c9}.btn-info:disabled,.btn-info[disabled]{background-color:#2aabd2;background-image:none}.btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#eb9316));background-image:linear-gradient(to bottom,#f0ad4e 0,#eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:hover,.btn-warning:focus{background-color:#eb9316;background-position:0 -15px}.btn-warning:active,.btn-warning.active{background-color:#eb9316;border-color:#e38d13}.btn-warning:disabled,.btn-warning[disabled]{background-color:#eb9316;background-image:none}.btn-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c12e2a));background-image:linear-gradient(to bottom,#d9534f 0,#c12e2a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:hover,.btn-danger:focus{background-color:#c12e2a;background-position:0 -15px}.btn-danger:active,.btn-danger.active{background-color:#c12e2a;border-color:#b92c28}.btn-danger:disabled,.btn-danger[disabled]{background-color:#c12e2a;background-image:none}.thumbnail,.img-thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{background-color:#e8e8e8;background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{background-color:#357ebd;background-image:-webkit-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:-o-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#428bca),to(#357ebd));background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);background-repeat:repeat-x}.navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-o-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#f8f8f8));background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.navbar-default .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f3f3f3 100%);background-image:-o-linear-gradient(top,#ebebeb 0,#f3f3f3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#f3f3f3));background-image:linear-gradient(to bottom,#ebebeb 0,#f3f3f3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff3f3f3', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);box-shadow:inset 0 3px 9px rgba(0,0,0,.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-o-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#3c3c3c),to(#222));background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x}.navbar-inverse .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top,#222 0,#282828 100%);background-image:-o-linear-gradient(top,#222 0,#282828 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#222),to(#282828));background-image:linear-gradient(to bottom,#222 0,#282828 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff282828', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar-static-top,.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}.alert{text-shadow:0 1px 0 rgba(255,255,255,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.alert-success{background-image:-webkit-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#c8e5bc));background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);background-repeat:repeat-x;border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#b9def0));background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);background-repeat:repeat-x;border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#f8efc0));background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);background-repeat:repeat-x;border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-o-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#e7c3c3));background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);background-repeat:repeat-x;border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#f5f5f5));background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x}.progress-bar{background-image:-webkit-linear-gradient(top,#428bca 0,#3071a9 100%);background-image:-o-linear-gradient(top,#428bca 0,#3071a9 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#428bca),to(#3071a9));background-image:linear-gradient(to bottom,#428bca 0,#3071a9 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0);background-repeat:repeat-x}.progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#449d44));background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);background-repeat:repeat-x}.progress-bar-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#31b0d5));background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);background-repeat:repeat-x}.progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#ec971f));background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);background-repeat:repeat-x}.progress-bar-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c9302c));background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);background-repeat:repeat-x}.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{text-shadow:0 -1px 0 #3071a9;background-image:-webkit-linear-gradient(top,#428bca 0,#3278b3 100%);background-image:-o-linear-gradient(top,#428bca 0,#3278b3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#428bca),to(#3278b3));background-image:linear-gradient(to bottom,#428bca 0,#3278b3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0);background-repeat:repeat-x;border-color:#3278b3}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:-o-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#428bca),to(#357ebd));background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);background-repeat:repeat-x}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#d0e9c6));background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);background-repeat:repeat-x}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#c4e3f3));background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);background-repeat:repeat-x}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#faf2cc));background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);background-repeat:repeat-x}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-o-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#ebcccc));background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);background-repeat:repeat-x}.well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#e8e8e8),to(#f5f5f5));background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x;border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)}
static/css/bootstrap.css view
@@ -1,3990 +1,6203 @@ /*!- * Bootstrap v2.0.2- *- * Copyright 2012 Twitter, Inc- * Licensed under the Apache License v2.0- * http://www.apache.org/licenses/LICENSE-2.0- *- * Designed and built with all the love in the world @twitter by @mdo and @fat.- */-article,-aside,-details,-figcaption,-figure,-footer,-header,-hgroup,-nav,-section {-  display: block;-}-audio,-canvas,-video {-  display: inline-block;-  *display: inline;-  *zoom: 1;-}-audio:not([controls]) {-  display: none;-}-html {-  font-size: 100%;-  -webkit-text-size-adjust: 100%;-  -ms-text-size-adjust: 100%;-}-a:focus {-  outline: thin dotted #333;-  outline: 5px auto -webkit-focus-ring-color;-  outline-offset: -2px;-}-a:hover,-a:active {-  outline: 0;-}-sub,-sup {-  position: relative;-  font-size: 75%;-  line-height: 0;-  vertical-align: baseline;-}-sup {-  top: -0.5em;-}-sub {-  bottom: -0.25em;-}-img {-  height: auto;-  border: 0;-  -ms-interpolation-mode: bicubic;-  vertical-align: middle;-}-button,-input,-select,-textarea {-  margin: 0;-  font-size: 100%;-  vertical-align: middle;-}-button,-input {-  *overflow: visible;-  line-height: normal;-}-button::-moz-focus-inner,-input::-moz-focus-inner {-  padding: 0;-  border: 0;-}-button,-input[type="button"],-input[type="reset"],-input[type="submit"] {-  cursor: pointer;-  -webkit-appearance: button;-}-input[type="search"] {-  -webkit-appearance: textfield;-  -webkit-box-sizing: content-box;-  -moz-box-sizing: content-box;-  box-sizing: content-box;-}-input[type="search"]::-webkit-search-decoration,-input[type="search"]::-webkit-search-cancel-button {-  -webkit-appearance: none;-}-textarea {-  overflow: auto;-  vertical-align: top;-}-.clearfix {-  *zoom: 1;-}-.clearfix:before,-.clearfix:after {-  display: table;-  content: "";-}-.clearfix:after {-  clear: both;-}-.hide-text {-  overflow: hidden;-  text-indent: 100%;-  white-space: nowrap;-}-.input-block-level {-  display: block;-  width: 100%;-  min-height: 28px;-  /* Make inputs at least the height of their button counterpart */--  /* Makes inputs behave like true block-level elements */--  -webkit-box-sizing: border-box;-  -moz-box-sizing: border-box;-  -ms-box-sizing: border-box;-  box-sizing: border-box;-}-body {-  margin: 0;-  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;-  font-size: 13px;-  line-height: 18px;-  color: #333333;-  background-color: #ffffff;-}-a {-  color: #0088cc;-  text-decoration: none;-}-a:hover {-  color: #005580;-  text-decoration: underline;-}-.row {-  margin-left: -20px;-  *zoom: 1;-}-.row:before,-.row:after {-  display: table;-  content: "";-}-.row:after {-  clear: both;-}-[class*="span"] {-  float: left;-  margin-left: 20px;-}-.container,-.navbar-fixed-top .container,-.navbar-fixed-bottom .container {-  width: 940px;-}-.span12 {-  width: 940px;-}-.span11 {-  width: 860px;-}-.span10 {-  width: 780px;-}-.span9 {-  width: 700px;-}-.span8 {-  width: 620px;-}-.span7 {-  width: 540px;-}-.span6 {-  width: 460px;-}-.span5 {-  width: 380px;-}-.span4 {-  width: 300px;-}-.span3 {-  width: 220px;-}-.span2 {-  width: 140px;-}-.span1 {-  width: 60px;-}-.offset12 {-  margin-left: 980px;-}-.offset11 {-  margin-left: 900px;-}-.offset10 {-  margin-left: 820px;-}-.offset9 {-  margin-left: 740px;-}-.offset8 {-  margin-left: 660px;-}-.offset7 {-  margin-left: 580px;-}-.offset6 {-  margin-left: 500px;-}-.offset5 {-  margin-left: 420px;-}-.offset4 {-  margin-left: 340px;-}-.offset3 {-  margin-left: 260px;-}-.offset2 {-  margin-left: 180px;-}-.offset1 {-  margin-left: 100px;-}-.row-fluid {-  width: 100%;-  *zoom: 1;-}-.row-fluid:before,-.row-fluid:after {-  display: table;-  content: "";-}-.row-fluid:after {-  clear: both;-}-.row-fluid > [class*="span"] {-  float: left;-  margin-left: 2.127659574%;-}-.row-fluid > [class*="span"]:first-child {-  margin-left: 0;-}-.row-fluid > .span12 {-  width: 99.99999998999999%;-}-.row-fluid > .span11 {-  width: 91.489361693%;-}-.row-fluid > .span10 {-  width: 82.97872339599999%;-}-.row-fluid > .span9 {-  width: 74.468085099%;-}-.row-fluid > .span8 {-  width: 65.95744680199999%;-}-.row-fluid > .span7 {-  width: 57.446808505%;-}-.row-fluid > .span6 {-  width: 48.93617020799999%;-}-.row-fluid > .span5 {-  width: 40.425531911%;-}-.row-fluid > .span4 {-  width: 31.914893614%;-}-.row-fluid > .span3 {-  width: 23.404255317%;-}-.row-fluid > .span2 {-  width: 14.89361702%;-}-.row-fluid > .span1 {-  width: 6.382978723%;-}-.container {-  margin-left: auto;-  margin-right: auto;-  *zoom: 1;-}-.container:before,-.container:after {-  display: table;-  content: "";-}-.container:after {-  clear: both;-}-.container-fluid {-  padding-left: 20px;-  padding-right: 20px;-  *zoom: 1;-}-.container-fluid:before,-.container-fluid:after {-  display: table;-  content: "";-}-.container-fluid:after {-  clear: both;-}-p {-  margin: 0 0 9px;-  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;-  font-size: 13px;-  line-height: 18px;-}-p small {-  font-size: 11px;-  color: #999999;-}-.lead {-  margin-bottom: 18px;-  font-size: 20px;-  font-weight: 200;-  line-height: 27px;-}-h1,-h2,-h3,-h4,-h5,-h6 {-  margin: 0;-  font-family: inherit;-  font-weight: bold;-  color: inherit;-  text-rendering: optimizelegibility;-}-h1 small,-h2 small,-h3 small,-h4 small,-h5 small,-h6 small {-  font-weight: normal;-  color: #999999;-}-h1 {-  font-size: 30px;-  line-height: 36px;-}-h1 small {-  font-size: 18px;-}-h2 {-  font-size: 24px;-  line-height: 36px;-}-h2 small {-  font-size: 18px;-}-h3 {-  line-height: 27px;-  font-size: 18px;-}-h3 small {-  font-size: 14px;-}-h4,-h5,-h6 {-  line-height: 18px;-}-h4 {-  font-size: 14px;-}-h4 small {-  font-size: 12px;-}-h5 {-  font-size: 12px;-}-h6 {-  font-size: 11px;-  color: #999999;-  text-transform: uppercase;-}-.page-header {-  padding-bottom: 17px;-  margin: 18px 0;-  border-bottom: 1px solid #eeeeee;-}-.page-header h1 {-  line-height: 1;-}-ul,-ol {-  padding: 0;-  margin: 0 0 9px 25px;-}-ul ul,-ul ol,-ol ol,-ol ul {-  margin-bottom: 0;-}-ul {-  list-style: disc;-}-ol {-  list-style: decimal;-}-li {-  line-height: 18px;-}-ul.unstyled,-ol.unstyled {-  margin-left: 0;-  list-style: none;-}-dl {-  margin-bottom: 18px;-}-dt,-dd {-  line-height: 18px;-}-dt {-  font-weight: bold;-  line-height: 17px;-}-dd {-  margin-left: 9px;-}-.dl-horizontal dt {-  float: left;-  clear: left;-  width: 120px;-  text-align: right;-}-.dl-horizontal dd {-  margin-left: 130px;-}-hr {-  margin: 18px 0;-  border: 0;-  border-top: 1px solid #eeeeee;-  border-bottom: 1px solid #ffffff;-}-strong {-  font-weight: bold;-}-em {-  font-style: italic;-}-.muted {-  color: #999999;-}-abbr[title] {-  border-bottom: 1px dotted #ddd;-  cursor: help;-}-abbr.initialism {-  font-size: 90%;-  text-transform: uppercase;-}-blockquote {-  padding: 0 0 0 15px;-  margin: 0 0 18px;-  border-left: 5px solid #eeeeee;-}-blockquote p {-  margin-bottom: 0;-  font-size: 16px;-  font-weight: 300;-  line-height: 22.5px;-}-blockquote small {-  display: block;-  line-height: 18px;-  color: #999999;-}-blockquote small:before {-  content: '\2014 \00A0';-}-blockquote.pull-right {-  float: right;-  padding-left: 0;-  padding-right: 15px;-  border-left: 0;-  border-right: 5px solid #eeeeee;-}-blockquote.pull-right p,-blockquote.pull-right small {-  text-align: right;-}-q:before,-q:after,-blockquote:before,-blockquote:after {-  content: "";-}-address {-  display: block;-  margin-bottom: 18px;-  line-height: 18px;-  font-style: normal;-}-small {-  font-size: 100%;-}-cite {-  font-style: normal;-}-code,-pre {-  padding: 0 3px 2px;-  font-family: Menlo, Monaco, "Courier New", monospace;-  font-size: 12px;-  color: #333333;-  -webkit-border-radius: 3px;-  -moz-border-radius: 3px;-  border-radius: 3px;-}-code {-  padding: 2px 4px;-  color: #d14;-  background-color: #f7f7f9;-  border: 1px solid #e1e1e8;-}-pre {-  display: block;-  padding: 8.5px;-  margin: 0 0 9px;-  font-size: 12.025px;-  line-height: 18px;-  background-color: #f5f5f5;-  border: 1px solid #ccc;-  border: 1px solid rgba(0, 0, 0, 0.15);-  -webkit-border-radius: 4px;-  -moz-border-radius: 4px;-  border-radius: 4px;-  white-space: pre;-  white-space: pre-wrap;-  word-break: break-all;-  word-wrap: break-word;-}-pre.prettyprint {-  margin-bottom: 18px;-}-pre code {-  padding: 0;-  color: inherit;-  background-color: transparent;-  border: 0;-}-.pre-scrollable {-  max-height: 340px;-  overflow-y: scroll;-}-form {-  margin: 0 0 18px;-}-fieldset {-  padding: 0;-  margin: 0;-  border: 0;-}-legend {-  display: block;-  width: 100%;-  padding: 0;-  margin-bottom: 27px;-  font-size: 19.5px;-  line-height: 36px;-  color: #333333;-  border: 0;-  border-bottom: 1px solid #eee;-}-legend small {-  font-size: 13.5px;-  color: #999999;-}-label,-input,-button,-select,-textarea {-  font-size: 13px;-  font-weight: normal;-  line-height: 18px;-}-input,-button,-select,-textarea {-  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;-}-label {-  display: block;-  margin-bottom: 5px;-  color: #333333;-}-input,-textarea,-select,-.uneditable-input {-  display: inline-block;-  width: 210px;-  height: 18px;-  padding: 4px;-  margin-bottom: 9px;-  font-size: 13px;-  line-height: 18px;-  color: #555555;-  border: 1px solid #cccccc;-  -webkit-border-radius: 3px;-  -moz-border-radius: 3px;-  border-radius: 3px;-}-.uneditable-textarea {-  width: auto;-  height: auto;-}-label input,-label textarea,-label select {-  display: block;-}-input[type="image"],-input[type="checkbox"],-input[type="radio"] {-  width: auto;-  height: auto;-  padding: 0;-  margin: 3px 0;-  *margin-top: 0;-  /* IE7 */--  line-height: normal;-  cursor: pointer;-  -webkit-border-radius: 0;-  -moz-border-radius: 0;-  border-radius: 0;-  border: 0 \9;-  /* IE9 and down */--}-input[type="image"] {-  border: 0;-}-input[type="file"] {-  width: auto;-  padding: initial;-  line-height: initial;-  border: initial;-  background-color: #ffffff;-  background-color: initial;-  -webkit-box-shadow: none;-  -moz-box-shadow: none;-  box-shadow: none;-}-input[type="button"],-input[type="reset"],-input[type="submit"] {-  width: auto;-  height: auto;-}-select,-input[type="file"] {-  height: 28px;-  /* In IE7, the height of the select element cannot be changed by height, only font-size */--  *margin-top: 4px;-  /* For IE7, add top margin to align select with labels */--  line-height: 28px;-}-input[type="file"] {-  line-height: 18px \9;-}-select {-  width: 220px;-  background-color: #ffffff;-}-select[multiple],-select[size] {-  height: auto;-}-input[type="image"] {-  -webkit-box-shadow: none;-  -moz-box-shadow: none;-  box-shadow: none;-}-textarea {-  height: auto;-}-input[type="hidden"] {-  display: none;-}-.radio,-.checkbox {-  padding-left: 18px;-}-.radio input[type="radio"],-.checkbox input[type="checkbox"] {-  float: left;-  margin-left: -18px;-}-.controls > .radio:first-child,-.controls > .checkbox:first-child {-  padding-top: 5px;-}-.radio.inline,-.checkbox.inline {-  display: inline-block;-  padding-top: 5px;-  margin-bottom: 0;-  vertical-align: middle;-}-.radio.inline + .radio.inline,-.checkbox.inline + .checkbox.inline {-  margin-left: 10px;-}-input,-textarea {-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);-  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);-  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);-  -webkit-transition: border linear 0.2s, box-shadow linear 0.2s;-  -moz-transition: border linear 0.2s, box-shadow linear 0.2s;-  -ms-transition: border linear 0.2s, box-shadow linear 0.2s;-  -o-transition: border linear 0.2s, box-shadow linear 0.2s;-  transition: border linear 0.2s, box-shadow linear 0.2s;-}-input:focus,-textarea:focus {-  border-color: rgba(82, 168, 236, 0.8);-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);-  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);-  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);-  outline: 0;-  outline: thin dotted \9;-  /* IE6-9 */--}-input[type="file"]:focus,-input[type="radio"]:focus,-input[type="checkbox"]:focus,-select:focus {-  -webkit-box-shadow: none;-  -moz-box-shadow: none;-  box-shadow: none;-  outline: thin dotted #333;-  outline: 5px auto -webkit-focus-ring-color;-  outline-offset: -2px;-}-.input-mini {-  width: 60px;-}-.input-small {-  width: 90px;-}-.input-medium {-  width: 150px;-}-.input-large {-  width: 210px;-}-.input-xlarge {-  width: 270px;-}-.input-xxlarge {-  width: 530px;-}-input[class*="span"],-select[class*="span"],-textarea[class*="span"],-.uneditable-input {-  float: none;-  margin-left: 0;-}-input,-textarea,-.uneditable-input {-  margin-left: 0;-}-input.span12, textarea.span12, .uneditable-input.span12 {-  width: 930px;-}-input.span11, textarea.span11, .uneditable-input.span11 {-  width: 850px;-}-input.span10, textarea.span10, .uneditable-input.span10 {-  width: 770px;-}-input.span9, textarea.span9, .uneditable-input.span9 {-  width: 690px;-}-input.span8, textarea.span8, .uneditable-input.span8 {-  width: 610px;-}-input.span7, textarea.span7, .uneditable-input.span7 {-  width: 530px;-}-input.span6, textarea.span6, .uneditable-input.span6 {-  width: 450px;-}-input.span5, textarea.span5, .uneditable-input.span5 {-  width: 370px;-}-input.span4, textarea.span4, .uneditable-input.span4 {-  width: 290px;-}-input.span3, textarea.span3, .uneditable-input.span3 {-  width: 210px;-}-input.span2, textarea.span2, .uneditable-input.span2 {-  width: 130px;-}-input.span1, textarea.span1, .uneditable-input.span1 {-  width: 50px;-}-input[disabled],-select[disabled],-textarea[disabled],-input[readonly],-select[readonly],-textarea[readonly] {-  background-color: #eeeeee;-  border-color: #ddd;-  cursor: not-allowed;-}-.control-group.warning > label,-.control-group.warning .help-block,-.control-group.warning .help-inline {-  color: #c09853;-}-.control-group.warning input,-.control-group.warning select,-.control-group.warning textarea {-  color: #c09853;-  border-color: #c09853;-}-.control-group.warning input:focus,-.control-group.warning select:focus,-.control-group.warning textarea:focus {-  border-color: #a47e3c;-  -webkit-box-shadow: 0 0 6px #dbc59e;-  -moz-box-shadow: 0 0 6px #dbc59e;-  box-shadow: 0 0 6px #dbc59e;-}-.control-group.warning .input-prepend .add-on,-.control-group.warning .input-append .add-on {-  color: #c09853;-  background-color: #fcf8e3;-  border-color: #c09853;-}-.control-group.error > label,-.control-group.error .help-block,-.control-group.error .help-inline {-  color: #b94a48;-}-.control-group.error input,-.control-group.error select,-.control-group.error textarea {-  color: #b94a48;-  border-color: #b94a48;-}-.control-group.error input:focus,-.control-group.error select:focus,-.control-group.error textarea:focus {-  border-color: #953b39;-  -webkit-box-shadow: 0 0 6px #d59392;-  -moz-box-shadow: 0 0 6px #d59392;-  box-shadow: 0 0 6px #d59392;-}-.control-group.error .input-prepend .add-on,-.control-group.error .input-append .add-on {-  color: #b94a48;-  background-color: #f2dede;-  border-color: #b94a48;-}-.control-group.success > label,-.control-group.success .help-block,-.control-group.success .help-inline {-  color: #468847;-}-.control-group.success input,-.control-group.success select,-.control-group.success textarea {-  color: #468847;-  border-color: #468847;-}-.control-group.success input:focus,-.control-group.success select:focus,-.control-group.success textarea:focus {-  border-color: #356635;-  -webkit-box-shadow: 0 0 6px #7aba7b;-  -moz-box-shadow: 0 0 6px #7aba7b;-  box-shadow: 0 0 6px #7aba7b;-}-.control-group.success .input-prepend .add-on,-.control-group.success .input-append .add-on {-  color: #468847;-  background-color: #dff0d8;-  border-color: #468847;-}-input:focus:required:invalid,-textarea:focus:required:invalid,-select:focus:required:invalid {-  color: #b94a48;-  border-color: #ee5f5b;-}-input:focus:required:invalid:focus,-textarea:focus:required:invalid:focus,-select:focus:required:invalid:focus {-  border-color: #e9322d;-  -webkit-box-shadow: 0 0 6px #f8b9b7;-  -moz-box-shadow: 0 0 6px #f8b9b7;-  box-shadow: 0 0 6px #f8b9b7;-}-.form-actions {-  padding: 17px 20px 18px;-  margin-top: 18px;-  margin-bottom: 18px;-  background-color: #eeeeee;-  border-top: 1px solid #ddd;-  *zoom: 1;-}-.form-actions:before,-.form-actions:after {-  display: table;-  content: "";-}-.form-actions:after {-  clear: both;-}-.uneditable-input {-  display: block;-  background-color: #ffffff;-  border-color: #eee;-  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);-  -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);-  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);-  cursor: not-allowed;-}-:-moz-placeholder {-  color: #999999;-}-::-webkit-input-placeholder {-  color: #999999;-}-.help-block,-.help-inline {-  color: #555555;-}-.help-block {-  display: block;-  margin-bottom: 9px;-}-.help-inline {-  display: inline-block;-  *display: inline;-  /* IE7 inline-block hack */--  *zoom: 1;-  vertical-align: middle;-  padding-left: 5px;-}-.input-prepend,-.input-append {-  margin-bottom: 5px;-}-.input-prepend input,-.input-append input,-.input-prepend select,-.input-append select,-.input-prepend .uneditable-input,-.input-append .uneditable-input {-  *margin-left: 0;-  -webkit-border-radius: 0 3px 3px 0;-  -moz-border-radius: 0 3px 3px 0;-  border-radius: 0 3px 3px 0;-}-.input-prepend input:focus,-.input-append input:focus,-.input-prepend select:focus,-.input-append select:focus,-.input-prepend .uneditable-input:focus,-.input-append .uneditable-input:focus {-  position: relative;-  z-index: 2;-}-.input-prepend .uneditable-input,-.input-append .uneditable-input {-  border-left-color: #ccc;-}-.input-prepend .add-on,-.input-append .add-on {-  display: inline-block;-  width: auto;-  min-width: 16px;-  height: 18px;-  padding: 4px 5px;-  font-weight: normal;-  line-height: 18px;-  text-align: center;-  text-shadow: 0 1px 0 #ffffff;-  vertical-align: middle;-  background-color: #eeeeee;-  border: 1px solid #ccc;-}-.input-prepend .add-on,-.input-append .add-on,-.input-prepend .btn,-.input-append .btn {-  -webkit-border-radius: 3px 0 0 3px;-  -moz-border-radius: 3px 0 0 3px;-  border-radius: 3px 0 0 3px;-}-.input-prepend .active,-.input-append .active {-  background-color: #a9dba9;-  border-color: #46a546;-}-.input-prepend .add-on,-.input-prepend .btn {-  margin-right: -1px;-}-.input-append input,-.input-append select .uneditable-input {-  -webkit-border-radius: 3px 0 0 3px;-  -moz-border-radius: 3px 0 0 3px;-  border-radius: 3px 0 0 3px;-}-.input-append .uneditable-input {-  border-left-color: #eee;-  border-right-color: #ccc;-}-.input-append .add-on,-.input-append .btn {-  margin-left: -1px;-  -webkit-border-radius: 0 3px 3px 0;-  -moz-border-radius: 0 3px 3px 0;-  border-radius: 0 3px 3px 0;-}-.input-prepend.input-append input,-.input-prepend.input-append select,-.input-prepend.input-append .uneditable-input {-  -webkit-border-radius: 0;-  -moz-border-radius: 0;-  border-radius: 0;-}-.input-prepend.input-append .add-on:first-child,-.input-prepend.input-append .btn:first-child {-  margin-right: -1px;-  -webkit-border-radius: 3px 0 0 3px;-  -moz-border-radius: 3px 0 0 3px;-  border-radius: 3px 0 0 3px;-}-.input-prepend.input-append .add-on:last-child,-.input-prepend.input-append .btn:last-child {-  margin-left: -1px;-  -webkit-border-radius: 0 3px 3px 0;-  -moz-border-radius: 0 3px 3px 0;-  border-radius: 0 3px 3px 0;-}-.search-query {-  padding-left: 14px;-  padding-right: 14px;-  margin-bottom: 0;-  -webkit-border-radius: 14px;-  -moz-border-radius: 14px;-  border-radius: 14px;-}-.form-search input,-.form-inline input,-.form-horizontal input,-.form-search textarea,-.form-inline textarea,-.form-horizontal textarea,-.form-search select,-.form-inline select,-.form-horizontal select,-.form-search .help-inline,-.form-inline .help-inline,-.form-horizontal .help-inline,-.form-search .uneditable-input,-.form-inline .uneditable-input,-.form-horizontal .uneditable-input,-.form-search .input-prepend,-.form-inline .input-prepend,-.form-horizontal .input-prepend,-.form-search .input-append,-.form-inline .input-append,-.form-horizontal .input-append {-  display: inline-block;-  margin-bottom: 0;-}-.form-search .hide,-.form-inline .hide,-.form-horizontal .hide {-  display: none;-}-.form-search label,-.form-inline label {-  display: inline-block;-}-.form-search .input-append,-.form-inline .input-append,-.form-search .input-prepend,-.form-inline .input-prepend {-  margin-bottom: 0;-}-.form-search .radio,-.form-search .checkbox,-.form-inline .radio,-.form-inline .checkbox {-  padding-left: 0;-  margin-bottom: 0;-  vertical-align: middle;-}-.form-search .radio input[type="radio"],-.form-search .checkbox input[type="checkbox"],-.form-inline .radio input[type="radio"],-.form-inline .checkbox input[type="checkbox"] {-  float: left;-  margin-left: 0;-  margin-right: 3px;-}-.control-group {-  margin-bottom: 9px;-}-legend + .control-group {-  margin-top: 18px;-  -webkit-margin-top-collapse: separate;-}-.form-horizontal .control-group {-  margin-bottom: 18px;-  *zoom: 1;-}-.form-horizontal .control-group:before,-.form-horizontal .control-group:after {-  display: table;-  content: "";-}-.form-horizontal .control-group:after {-  clear: both;-}-.form-horizontal .control-label {-  float: left;-  width: 140px;-  padding-top: 5px;-  text-align: right;-}-.form-horizontal .controls {-  margin-left: 160px;-  /* Super jank IE7 fix to ensure the inputs in .input-append and input-prepend don't inherit the margin of the parent, in this case .controls */--  *display: inline-block;-  *margin-left: 0;-  *padding-left: 20px;-}-.form-horizontal .help-block {-  margin-top: 9px;-  margin-bottom: 0;-}-.form-horizontal .form-actions {-  padding-left: 160px;-}-table {-  max-width: 100%;-  border-collapse: collapse;-  border-spacing: 0;-  background-color: transparent;-}-.table {-  width: 100%;-  margin-bottom: 18px;-}-.table th,-.table td {-  padding: 8px;-  line-height: 18px;-  text-align: left;-  vertical-align: top;-  border-top: 1px solid #dddddd;-}-.table th {-  font-weight: bold;-}-.table thead th {-  vertical-align: bottom;-}-.table colgroup + thead tr:first-child th,-.table colgroup + thead tr:first-child td,-.table thead:first-child tr:first-child th,-.table thead:first-child tr:first-child td {-  border-top: 0;-}-.table tbody + tbody {-  border-top: 2px solid #dddddd;-}-.table-condensed th,-.table-condensed td {-  padding: 4px 5px;-}-.table-bordered {-  border: 1px solid #dddddd;-  border-left: 0;-  border-collapse: separate;-  *border-collapse: collapsed;-  -webkit-border-radius: 4px;-  -moz-border-radius: 4px;-  border-radius: 4px;-}-.table-bordered th,-.table-bordered td {-  border-left: 1px solid #dddddd;-}-.table-bordered thead:first-child tr:first-child th,-.table-bordered tbody:first-child tr:first-child th,-.table-bordered tbody:first-child tr:first-child td {-  border-top: 0;-}-.table-bordered thead:first-child tr:first-child th:first-child,-.table-bordered tbody:first-child tr:first-child td:first-child {-  -webkit-border-radius: 4px 0 0 0;-  -moz-border-radius: 4px 0 0 0;-  border-radius: 4px 0 0 0;-}-.table-bordered thead:first-child tr:first-child th:last-child,-.table-bordered tbody:first-child tr:first-child td:last-child {-  -webkit-border-radius: 0 4px 0 0;-  -moz-border-radius: 0 4px 0 0;-  border-radius: 0 4px 0 0;-}-.table-bordered thead:last-child tr:last-child th:first-child,-.table-bordered tbody:last-child tr:last-child td:first-child {-  -webkit-border-radius: 0 0 0 4px;-  -moz-border-radius: 0 0 0 4px;-  border-radius: 0 0 0 4px;-}-.table-bordered thead:last-child tr:last-child th:last-child,-.table-bordered tbody:last-child tr:last-child td:last-child {-  -webkit-border-radius: 0 0 4px 0;-  -moz-border-radius: 0 0 4px 0;-  border-radius: 0 0 4px 0;-}-.table-striped tbody tr:nth-child(odd) td,-.table-striped tbody tr:nth-child(odd) th {-  background-color: #f9f9f9;-}-.table tbody tr:hover td,-.table tbody tr:hover th {-  background-color: #f5f5f5;-}-table .span1 {-  float: none;-  width: 44px;-  margin-left: 0;-}-table .span2 {-  float: none;-  width: 124px;-  margin-left: 0;-}-table .span3 {-  float: none;-  width: 204px;-  margin-left: 0;-}-table .span4 {-  float: none;-  width: 284px;-  margin-left: 0;-}-table .span5 {-  float: none;-  width: 364px;-  margin-left: 0;-}-table .span6 {-  float: none;-  width: 444px;-  margin-left: 0;-}-table .span7 {-  float: none;-  width: 524px;-  margin-left: 0;-}-table .span8 {-  float: none;-  width: 604px;-  margin-left: 0;-}-table .span9 {-  float: none;-  width: 684px;-  margin-left: 0;-}-table .span10 {-  float: none;-  width: 764px;-  margin-left: 0;-}-table .span11 {-  float: none;-  width: 844px;-  margin-left: 0;-}-table .span12 {-  float: none;-  width: 924px;-  margin-left: 0;-}-table .span13 {-  float: none;-  width: 1004px;-  margin-left: 0;-}-table .span14 {-  float: none;-  width: 1084px;-  margin-left: 0;-}-table .span15 {-  float: none;-  width: 1164px;-  margin-left: 0;-}-table .span16 {-  float: none;-  width: 1244px;-  margin-left: 0;-}-table .span17 {-  float: none;-  width: 1324px;-  margin-left: 0;-}-table .span18 {-  float: none;-  width: 1404px;-  margin-left: 0;-}-table .span19 {-  float: none;-  width: 1484px;-  margin-left: 0;-}-table .span20 {-  float: none;-  width: 1564px;-  margin-left: 0;-}-table .span21 {-  float: none;-  width: 1644px;-  margin-left: 0;-}-table .span22 {-  float: none;-  width: 1724px;-  margin-left: 0;-}-table .span23 {-  float: none;-  width: 1804px;-  margin-left: 0;-}-table .span24 {-  float: none;-  width: 1884px;-  margin-left: 0;-}-[class^="icon-"],-[class*=" icon-"] {-  display: inline-block;-  width: 14px;-  height: 14px;-  line-height: 14px;-  vertical-align: text-top;-  background-image: url("../img/glyphicons-halflings.png");-  background-position: 14px 14px;-  background-repeat: no-repeat;-  *margin-right: .3em;-}-[class^="icon-"]:last-child,-[class*=" icon-"]:last-child {-  *margin-left: 0;-}-.icon-white {-  background-image: url("../img/glyphicons-halflings-white.png");-}-.icon-glass {-  background-position: 0      0;-}-.icon-music {-  background-position: -24px 0;-}-.icon-search {-  background-position: -48px 0;-}-.icon-envelope {-  background-position: -72px 0;-}-.icon-heart {-  background-position: -96px 0;-}-.icon-star {-  background-position: -120px 0;-}-.icon-star-empty {-  background-position: -144px 0;-}-.icon-user {-  background-position: -168px 0;-}-.icon-film {-  background-position: -192px 0;-}-.icon-th-large {-  background-position: -216px 0;-}-.icon-th {-  background-position: -240px 0;-}-.icon-th-list {-  background-position: -264px 0;-}-.icon-ok {-  background-position: -288px 0;-}-.icon-remove {-  background-position: -312px 0;-}-.icon-zoom-in {-  background-position: -336px 0;-}-.icon-zoom-out {-  background-position: -360px 0;-}-.icon-off {-  background-position: -384px 0;-}-.icon-signal {-  background-position: -408px 0;-}-.icon-cog {-  background-position: -432px 0;-}-.icon-trash {-  background-position: -456px 0;-}-.icon-home {-  background-position: 0 -24px;-}-.icon-file {-  background-position: -24px -24px;-}-.icon-time {-  background-position: -48px -24px;-}-.icon-road {-  background-position: -72px -24px;-}-.icon-download-alt {-  background-position: -96px -24px;-}-.icon-download {-  background-position: -120px -24px;-}-.icon-upload {-  background-position: -144px -24px;-}-.icon-inbox {-  background-position: -168px -24px;-}-.icon-play-circle {-  background-position: -192px -24px;-}-.icon-repeat {-  background-position: -216px -24px;-}-.icon-refresh {-  background-position: -240px -24px;-}-.icon-list-alt {-  background-position: -264px -24px;-}-.icon-lock {-  background-position: -287px -24px;-}-.icon-flag {-  background-position: -312px -24px;-}-.icon-headphones {-  background-position: -336px -24px;-}-.icon-volume-off {-  background-position: -360px -24px;-}-.icon-volume-down {-  background-position: -384px -24px;-}-.icon-volume-up {-  background-position: -408px -24px;-}-.icon-qrcode {-  background-position: -432px -24px;-}-.icon-barcode {-  background-position: -456px -24px;-}-.icon-tag {-  background-position: 0 -48px;-}-.icon-tags {-  background-position: -25px -48px;-}-.icon-book {-  background-position: -48px -48px;-}-.icon-bookmark {-  background-position: -72px -48px;-}-.icon-print {-  background-position: -96px -48px;-}-.icon-camera {-  background-position: -120px -48px;-}-.icon-font {-  background-position: -144px -48px;-}-.icon-bold {-  background-position: -167px -48px;-}-.icon-italic {-  background-position: -192px -48px;-}-.icon-text-height {-  background-position: -216px -48px;-}-.icon-text-width {-  background-position: -240px -48px;-}-.icon-align-left {-  background-position: -264px -48px;-}-.icon-align-center {-  background-position: -288px -48px;-}-.icon-align-right {-  background-position: -312px -48px;-}-.icon-align-justify {-  background-position: -336px -48px;-}-.icon-list {-  background-position: -360px -48px;-}-.icon-indent-left {-  background-position: -384px -48px;-}-.icon-indent-right {-  background-position: -408px -48px;-}-.icon-facetime-video {-  background-position: -432px -48px;-}-.icon-picture {-  background-position: -456px -48px;-}-.icon-pencil {-  background-position: 0 -72px;-}-.icon-map-marker {-  background-position: -24px -72px;-}-.icon-adjust {-  background-position: -48px -72px;-}-.icon-tint {-  background-position: -72px -72px;-}-.icon-edit {-  background-position: -96px -72px;-}-.icon-share {-  background-position: -120px -72px;-}-.icon-check {-  background-position: -144px -72px;-}-.icon-move {-  background-position: -168px -72px;-}-.icon-step-backward {-  background-position: -192px -72px;-}-.icon-fast-backward {-  background-position: -216px -72px;-}-.icon-backward {-  background-position: -240px -72px;-}-.icon-play {-  background-position: -264px -72px;-}-.icon-pause {-  background-position: -288px -72px;-}-.icon-stop {-  background-position: -312px -72px;-}-.icon-forward {-  background-position: -336px -72px;-}-.icon-fast-forward {-  background-position: -360px -72px;-}-.icon-step-forward {-  background-position: -384px -72px;-}-.icon-eject {-  background-position: -408px -72px;-}-.icon-chevron-left {-  background-position: -432px -72px;-}-.icon-chevron-right {-  background-position: -456px -72px;-}-.icon-plus-sign {-  background-position: 0 -96px;-}-.icon-minus-sign {-  background-position: -24px -96px;-}-.icon-remove-sign {-  background-position: -48px -96px;-}-.icon-ok-sign {-  background-position: -72px -96px;-}-.icon-question-sign {-  background-position: -96px -96px;-}-.icon-info-sign {-  background-position: -120px -96px;-}-.icon-screenshot {-  background-position: -144px -96px;-}-.icon-remove-circle {-  background-position: -168px -96px;-}-.icon-ok-circle {-  background-position: -192px -96px;-}-.icon-ban-circle {-  background-position: -216px -96px;-}-.icon-arrow-left {-  background-position: -240px -96px;-}-.icon-arrow-right {-  background-position: -264px -96px;-}-.icon-arrow-up {-  background-position: -289px -96px;-}-.icon-arrow-down {-  background-position: -312px -96px;-}-.icon-share-alt {-  background-position: -336px -96px;-}-.icon-resize-full {-  background-position: -360px -96px;-}-.icon-resize-small {-  background-position: -384px -96px;-}-.icon-plus {-  background-position: -408px -96px;-}-.icon-minus {-  background-position: -433px -96px;-}-.icon-asterisk {-  background-position: -456px -96px;-}-.icon-exclamation-sign {-  background-position: 0 -120px;-}-.icon-gift {-  background-position: -24px -120px;-}-.icon-leaf {-  background-position: -48px -120px;-}-.icon-fire {-  background-position: -72px -120px;-}-.icon-eye-open {-  background-position: -96px -120px;-}-.icon-eye-close {-  background-position: -120px -120px;-}-.icon-warning-sign {-  background-position: -144px -120px;-}-.icon-plane {-  background-position: -168px -120px;-}-.icon-calendar {-  background-position: -192px -120px;-}-.icon-random {-  background-position: -216px -120px;-}-.icon-comment {-  background-position: -240px -120px;-}-.icon-magnet {-  background-position: -264px -120px;-}-.icon-chevron-up {-  background-position: -288px -120px;-}-.icon-chevron-down {-  background-position: -313px -119px;-}-.icon-retweet {-  background-position: -336px -120px;-}-.icon-shopping-cart {-  background-position: -360px -120px;-}-.icon-folder-close {-  background-position: -384px -120px;-}-.icon-folder-open {-  background-position: -408px -120px;-}-.icon-resize-vertical {-  background-position: -432px -119px;-}-.icon-resize-horizontal {-  background-position: -456px -118px;-}-.dropdown {-  position: relative;-}-.dropdown-toggle {-  *margin-bottom: -3px;-}-.dropdown-toggle:active,-.open .dropdown-toggle {-  outline: 0;-}-.caret {-  display: inline-block;-  width: 0;-  height: 0;-  vertical-align: top;-  border-left: 4px solid transparent;-  border-right: 4px solid transparent;-  border-top: 4px solid #000000;-  opacity: 0.3;-  filter: alpha(opacity=30);-  content: "";-}-.dropdown .caret {-  margin-top: 8px;-  margin-left: 2px;-}-.dropdown:hover .caret,-.open.dropdown .caret {-  opacity: 1;-  filter: alpha(opacity=100);-}-.dropdown-menu {-  position: absolute;-  top: 100%;-  left: 0;-  z-index: 1000;-  float: left;-  display: none;-  min-width: 160px;-  padding: 4px 0;-  margin: 0;-  list-style: none;-  background-color: #ffffff;-  border-color: #ccc;-  border-color: rgba(0, 0, 0, 0.2);-  border-style: solid;-  border-width: 1px;-  -webkit-border-radius: 0 0 5px 5px;-  -moz-border-radius: 0 0 5px 5px;-  border-radius: 0 0 5px 5px;-  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);-  -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);-  box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);-  -webkit-background-clip: padding-box;-  -moz-background-clip: padding;-  background-clip: padding-box;-  *border-right-width: 2px;-  *border-bottom-width: 2px;-}-.dropdown-menu.pull-right {-  right: 0;-  left: auto;-}-.dropdown-menu .divider {-  height: 1px;-  margin: 8px 1px;-  overflow: hidden;-  background-color: #e5e5e5;-  border-bottom: 1px solid #ffffff;-  *width: 100%;-  *margin: -5px 0 5px;-}-.dropdown-menu a {-  display: block;-  padding: 3px 15px;-  clear: both;-  font-weight: normal;-  line-height: 18px;-  color: #333333;-  white-space: nowrap;-}-.dropdown-menu li > a:hover,-.dropdown-menu .active > a,-.dropdown-menu .active > a:hover {-  color: #ffffff;-  text-decoration: none;-  background-color: #0088cc;-}-.dropdown.open {-  *z-index: 1000;-}-.dropdown.open .dropdown-toggle {-  color: #ffffff;-  background: #ccc;-  background: rgba(0, 0, 0, 0.3);-}-.dropdown.open .dropdown-menu {-  display: block;-}-.pull-right .dropdown-menu {-  left: auto;-  right: 0;-}-.dropup .caret,-.navbar-fixed-bottom .dropdown .caret {-  border-top: 0;-  border-bottom: 4px solid #000000;-  content: "\2191";-}-.dropup .dropdown-menu,-.navbar-fixed-bottom .dropdown .dropdown-menu {-  top: auto;-  bottom: 100%;-  margin-bottom: 1px;-}-.typeahead {-  margin-top: 2px;-  -webkit-border-radius: 4px;-  -moz-border-radius: 4px;-  border-radius: 4px;-}-.well {-  min-height: 20px;-  padding: 19px;-  margin-bottom: 20px;-  background-color: #f5f5f5;-  border: 1px solid #eee;-  border: 1px solid rgba(0, 0, 0, 0.05);-  -webkit-border-radius: 4px;-  -moz-border-radius: 4px;-  border-radius: 4px;-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);-  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);-  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);-}-.well blockquote {-  border-color: #ddd;-  border-color: rgba(0, 0, 0, 0.15);-}-.well-large {-  padding: 24px;-  -webkit-border-radius: 6px;-  -moz-border-radius: 6px;-  border-radius: 6px;-}-.well-small {-  padding: 9px;-  -webkit-border-radius: 3px;-  -moz-border-radius: 3px;-  border-radius: 3px;-}-.fade {-  -webkit-transition: opacity 0.15s linear;-  -moz-transition: opacity 0.15s linear;-  -ms-transition: opacity 0.15s linear;-  -o-transition: opacity 0.15s linear;-  transition: opacity 0.15s linear;-  opacity: 0;-}-.fade.in {-  opacity: 1;-}-.collapse {-  -webkit-transition: height 0.35s ease;-  -moz-transition: height 0.35s ease;-  -ms-transition: height 0.35s ease;-  -o-transition: height 0.35s ease;-  transition: height 0.35s ease;-  position: relative;-  overflow: hidden;-  height: 0;-}-.collapse.in {-  height: auto;-}-.close {-  float: right;-  font-size: 20px;-  font-weight: bold;-  line-height: 18px;-  color: #000000;-  text-shadow: 0 1px 0 #ffffff;-  opacity: 0.2;-  filter: alpha(opacity=20);-}-.close:hover {-  color: #000000;-  text-decoration: none;-  opacity: 0.4;-  filter: alpha(opacity=40);-  cursor: pointer;-}-.btn {-  display: inline-block;-  *display: inline;-  /* IE7 inline-block hack */--  *zoom: 1;-  padding: 4px 10px 4px;-  margin-bottom: 0;-  font-size: 13px;-  line-height: 18px;-  color: #333333;-  text-align: center;-  text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);-  vertical-align: middle;-  background-color: #f5f5f5;-  background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6);-  background-image: -ms-linear-gradient(top, #ffffff, #e6e6e6);-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));-  background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6);-  background-image: -o-linear-gradient(top, #ffffff, #e6e6e6);-  background-image: linear-gradient(top, #ffffff, #e6e6e6);-  background-repeat: repeat-x;-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);-  border-color: #e6e6e6 #e6e6e6 #bfbfbf;-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);-  filter: progid:dximagetransform.microsoft.gradient(enabled=false);-  border: 1px solid #cccccc;-  border-bottom-color: #b3b3b3;-  -webkit-border-radius: 4px;-  -moz-border-radius: 4px;-  border-radius: 4px;-  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);-  -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);-  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);-  cursor: pointer;-  *margin-left: .3em;-}-.btn:hover,-.btn:active,-.btn.active,-.btn.disabled,-.btn[disabled] {-  background-color: #e6e6e6;-}-.btn:active,-.btn.active {-  background-color: #cccccc \9;-}-.btn:first-child {-  *margin-left: 0;-}-.btn:hover {-  color: #333333;-  text-decoration: none;-  background-color: #e6e6e6;-  background-position: 0 -15px;-  -webkit-transition: background-position 0.1s linear;-  -moz-transition: background-position 0.1s linear;-  -ms-transition: background-position 0.1s linear;-  -o-transition: background-position 0.1s linear;-  transition: background-position 0.1s linear;-}-.btn:focus {-  outline: thin dotted #333;-  outline: 5px auto -webkit-focus-ring-color;-  outline-offset: -2px;-}-.btn.active,-.btn:active {-  background-image: none;-  -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-  -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-  box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-  background-color: #e6e6e6;-  background-color: #d9d9d9 \9;-  outline: 0;-}-.btn.disabled,-.btn[disabled] {-  cursor: default;-  background-image: none;-  background-color: #e6e6e6;-  opacity: 0.65;-  filter: alpha(opacity=65);-  -webkit-box-shadow: none;-  -moz-box-shadow: none;-  box-shadow: none;-}-.btn-large {-  padding: 9px 14px;-  font-size: 15px;-  line-height: normal;-  -webkit-border-radius: 5px;-  -moz-border-radius: 5px;-  border-radius: 5px;-}-.btn-large [class^="icon-"] {-  margin-top: 1px;-}-.btn-small {-  padding: 5px 9px;-  font-size: 11px;-  line-height: 16px;-}-.btn-small [class^="icon-"] {-  margin-top: -1px;-}-.btn-mini {-  padding: 2px 6px;-  font-size: 11px;-  line-height: 14px;-}-.btn-primary,-.btn-primary:hover,-.btn-warning,-.btn-warning:hover,-.btn-danger,-.btn-danger:hover,-.btn-success,-.btn-success:hover,-.btn-info,-.btn-info:hover,-.btn-inverse,-.btn-inverse:hover {-  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);-  color: #ffffff;-}-.btn-primary.active,-.btn-warning.active,-.btn-danger.active,-.btn-success.active,-.btn-info.active,-.btn-inverse.active {-  color: rgba(255, 255, 255, 0.75);-}-.btn-primary {-  background-color: #0074cc;-  background-image: -moz-linear-gradient(top, #0088cc, #0055cc);-  background-image: -ms-linear-gradient(top, #0088cc, #0055cc);-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0055cc));-  background-image: -webkit-linear-gradient(top, #0088cc, #0055cc);-  background-image: -o-linear-gradient(top, #0088cc, #0055cc);-  background-image: linear-gradient(top, #0088cc, #0055cc);-  background-repeat: repeat-x;-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0055cc', GradientType=0);-  border-color: #0055cc #0055cc #003580;-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);-  filter: progid:dximagetransform.microsoft.gradient(enabled=false);-}-.btn-primary:hover,-.btn-primary:active,-.btn-primary.active,-.btn-primary.disabled,-.btn-primary[disabled] {-  background-color: #0055cc;-}-.btn-primary:active,-.btn-primary.active {-  background-color: #004099 \9;-}-.btn-warning {-  background-color: #faa732;-  background-image: -moz-linear-gradient(top, #fbb450, #f89406);-  background-image: -ms-linear-gradient(top, #fbb450, #f89406);-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));-  background-image: -webkit-linear-gradient(top, #fbb450, #f89406);-  background-image: -o-linear-gradient(top, #fbb450, #f89406);-  background-image: linear-gradient(top, #fbb450, #f89406);-  background-repeat: repeat-x;-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0);-  border-color: #f89406 #f89406 #ad6704;-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);-  filter: progid:dximagetransform.microsoft.gradient(enabled=false);-}-.btn-warning:hover,-.btn-warning:active,-.btn-warning.active,-.btn-warning.disabled,-.btn-warning[disabled] {-  background-color: #f89406;-}-.btn-warning:active,-.btn-warning.active {-  background-color: #c67605 \9;-}-.btn-danger {-  background-color: #da4f49;-  background-image: -moz-linear-gradient(top, #ee5f5b, #bd362f);-  background-image: -ms-linear-gradient(top, #ee5f5b, #bd362f);-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f));-  background-image: -webkit-linear-gradient(top, #ee5f5b, #bd362f);-  background-image: -o-linear-gradient(top, #ee5f5b, #bd362f);-  background-image: linear-gradient(top, #ee5f5b, #bd362f);-  background-repeat: repeat-x;-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#bd362f', GradientType=0);-  border-color: #bd362f #bd362f #802420;-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);-  filter: progid:dximagetransform.microsoft.gradient(enabled=false);-}-.btn-danger:hover,-.btn-danger:active,-.btn-danger.active,-.btn-danger.disabled,-.btn-danger[disabled] {-  background-color: #bd362f;-}-.btn-danger:active,-.btn-danger.active {-  background-color: #942a25 \9;-}-.btn-success {-  background-color: #5bb75b;-  background-image: -moz-linear-gradient(top, #62c462, #51a351);-  background-image: -ms-linear-gradient(top, #62c462, #51a351);-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351));-  background-image: -webkit-linear-gradient(top, #62c462, #51a351);-  background-image: -o-linear-gradient(top, #62c462, #51a351);-  background-image: linear-gradient(top, #62c462, #51a351);-  background-repeat: repeat-x;-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#51a351', GradientType=0);-  border-color: #51a351 #51a351 #387038;-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);-  filter: progid:dximagetransform.microsoft.gradient(enabled=false);-}-.btn-success:hover,-.btn-success:active,-.btn-success.active,-.btn-success.disabled,-.btn-success[disabled] {-  background-color: #51a351;-}-.btn-success:active,-.btn-success.active {-  background-color: #408140 \9;-}-.btn-info {-  background-color: #49afcd;-  background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4);-  background-image: -ms-linear-gradient(top, #5bc0de, #2f96b4);-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4));-  background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4);-  background-image: -o-linear-gradient(top, #5bc0de, #2f96b4);-  background-image: linear-gradient(top, #5bc0de, #2f96b4);-  background-repeat: repeat-x;-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#2f96b4', GradientType=0);-  border-color: #2f96b4 #2f96b4 #1f6377;-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);-  filter: progid:dximagetransform.microsoft.gradient(enabled=false);-}-.btn-info:hover,-.btn-info:active,-.btn-info.active,-.btn-info.disabled,-.btn-info[disabled] {-  background-color: #2f96b4;-}-.btn-info:active,-.btn-info.active {-  background-color: #24748c \9;-}-.btn-inverse {-  background-color: #414141;-  background-image: -moz-linear-gradient(top, #555555, #222222);-  background-image: -ms-linear-gradient(top, #555555, #222222);-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#555555), to(#222222));-  background-image: -webkit-linear-gradient(top, #555555, #222222);-  background-image: -o-linear-gradient(top, #555555, #222222);-  background-image: linear-gradient(top, #555555, #222222);-  background-repeat: repeat-x;-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#555555', endColorstr='#222222', GradientType=0);-  border-color: #222222 #222222 #000000;-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);-  filter: progid:dximagetransform.microsoft.gradient(enabled=false);-}-.btn-inverse:hover,-.btn-inverse:active,-.btn-inverse.active,-.btn-inverse.disabled,-.btn-inverse[disabled] {-  background-color: #222222;-}-.btn-inverse:active,-.btn-inverse.active {-  background-color: #080808 \9;-}-button.btn,-input[type="submit"].btn {-  *padding-top: 2px;-  *padding-bottom: 2px;-}-button.btn::-moz-focus-inner,-input[type="submit"].btn::-moz-focus-inner {-  padding: 0;-  border: 0;-}-button.btn.btn-large,-input[type="submit"].btn.btn-large {-  *padding-top: 7px;-  *padding-bottom: 7px;-}-button.btn.btn-small,-input[type="submit"].btn.btn-small {-  *padding-top: 3px;-  *padding-bottom: 3px;-}-button.btn.btn-mini,-input[type="submit"].btn.btn-mini {-  *padding-top: 1px;-  *padding-bottom: 1px;-}-.btn-group {-  position: relative;-  *zoom: 1;-  *margin-left: .3em;-}-.btn-group:before,-.btn-group:after {-  display: table;-  content: "";-}-.btn-group:after {-  clear: both;-}-.btn-group:first-child {-  *margin-left: 0;-}-.btn-group + .btn-group {-  margin-left: 5px;-}-.btn-toolbar {-  margin-top: 9px;-  margin-bottom: 9px;-}-.btn-toolbar .btn-group {-  display: inline-block;-  *display: inline;-  /* IE7 inline-block hack */--  *zoom: 1;-}-.btn-group .btn {-  position: relative;-  float: left;-  margin-left: -1px;-  -webkit-border-radius: 0;-  -moz-border-radius: 0;-  border-radius: 0;-}-.btn-group .btn:first-child {-  margin-left: 0;-  -webkit-border-top-left-radius: 4px;-  -moz-border-radius-topleft: 4px;-  border-top-left-radius: 4px;-  -webkit-border-bottom-left-radius: 4px;-  -moz-border-radius-bottomleft: 4px;-  border-bottom-left-radius: 4px;-}-.btn-group .btn:last-child,-.btn-group .dropdown-toggle {-  -webkit-border-top-right-radius: 4px;-  -moz-border-radius-topright: 4px;-  border-top-right-radius: 4px;-  -webkit-border-bottom-right-radius: 4px;-  -moz-border-radius-bottomright: 4px;-  border-bottom-right-radius: 4px;-}-.btn-group .btn.large:first-child {-  margin-left: 0;-  -webkit-border-top-left-radius: 6px;-  -moz-border-radius-topleft: 6px;-  border-top-left-radius: 6px;-  -webkit-border-bottom-left-radius: 6px;-  -moz-border-radius-bottomleft: 6px;-  border-bottom-left-radius: 6px;-}-.btn-group .btn.large:last-child,-.btn-group .large.dropdown-toggle {-  -webkit-border-top-right-radius: 6px;-  -moz-border-radius-topright: 6px;-  border-top-right-radius: 6px;-  -webkit-border-bottom-right-radius: 6px;-  -moz-border-radius-bottomright: 6px;-  border-bottom-right-radius: 6px;-}-.btn-group .btn:hover,-.btn-group .btn:focus,-.btn-group .btn:active,-.btn-group .btn.active {-  z-index: 2;-}-.btn-group .dropdown-toggle:active,-.btn-group.open .dropdown-toggle {-  outline: 0;-}-.btn-group .dropdown-toggle {-  padding-left: 8px;-  padding-right: 8px;-  -webkit-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);-  -moz-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);-  box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);-  *padding-top: 3px;-  *padding-bottom: 3px;-}-.btn-group .btn-mini.dropdown-toggle {-  padding-left: 5px;-  padding-right: 5px;-  *padding-top: 1px;-  *padding-bottom: 1px;-}-.btn-group .btn-small.dropdown-toggle {-  *padding-top: 4px;-  *padding-bottom: 4px;-}-.btn-group .btn-large.dropdown-toggle {-  padding-left: 12px;-  padding-right: 12px;-}-.btn-group.open {-  *z-index: 1000;-}-.btn-group.open .dropdown-menu {-  display: block;-  margin-top: 1px;-  -webkit-border-radius: 5px;-  -moz-border-radius: 5px;-  border-radius: 5px;-}-.btn-group.open .dropdown-toggle {-  background-image: none;-  -webkit-box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-  -moz-box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-  box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-}-.btn .caret {-  margin-top: 7px;-  margin-left: 0;-}-.btn:hover .caret,-.open.btn-group .caret {-  opacity: 1;-  filter: alpha(opacity=100);-}-.btn-mini .caret {-  margin-top: 5px;-}-.btn-small .caret {-  margin-top: 6px;-}-.btn-large .caret {-  margin-top: 6px;-  border-left: 5px solid transparent;-  border-right: 5px solid transparent;-  border-top: 5px solid #000000;-}-.btn-primary .caret,-.btn-warning .caret,-.btn-danger .caret,-.btn-info .caret,-.btn-success .caret,-.btn-inverse .caret {-  border-top-color: #ffffff;-  border-bottom-color: #ffffff;-  opacity: 0.75;-  filter: alpha(opacity=75);-}-.alert {-  padding: 8px 35px 8px 14px;-  margin-bottom: 18px;-  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);-  background-color: #fcf8e3;-  border: 1px solid #fbeed5;-  -webkit-border-radius: 4px;-  -moz-border-radius: 4px;-  border-radius: 4px;-  color: #c09853;-}-.alert-heading {-  color: inherit;-}-.alert .close {-  position: relative;-  top: -2px;-  right: -21px;-  line-height: 18px;-}-.alert-success {-  background-color: #dff0d8;-  border-color: #d6e9c6;-  color: #468847;-}-.alert-danger,-.alert-error {-  background-color: #f2dede;-  border-color: #eed3d7;-  color: #b94a48;-}-.alert-info {-  background-color: #d9edf7;-  border-color: #bce8f1;-  color: #3a87ad;-}-.alert-block {-  padding-top: 14px;-  padding-bottom: 14px;-}-.alert-block > p,-.alert-block > ul {-  margin-bottom: 0;-}-.alert-block p + p {-  margin-top: 5px;-}-.nav {-  margin-left: 0;-  margin-bottom: 18px;-  list-style: none;-}-.nav > li > a {-  display: block;-}-.nav > li > a:hover {-  text-decoration: none;-  background-color: #eeeeee;-}-.nav .nav-header {-  display: block;-  padding: 3px 15px;-  font-size: 11px;-  font-weight: bold;-  line-height: 18px;-  color: #999999;-  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);-  text-transform: uppercase;-}-.nav li + .nav-header {-  margin-top: 9px;-}-.nav-list {-  padding-left: 15px;-  padding-right: 15px;-  margin-bottom: 0;-}-.nav-list > li > a,-.nav-list .nav-header {-  margin-left: -15px;-  margin-right: -15px;-  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);-}-.nav-list > li > a {-  padding: 3px 15px;-}-.nav-list > .active > a,-.nav-list > .active > a:hover {-  color: #ffffff;-  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);-  background-color: #0088cc;-}-.nav-list [class^="icon-"] {-  margin-right: 2px;-}-.nav-list .divider {-  height: 1px;-  margin: 8px 1px;-  overflow: hidden;-  background-color: #e5e5e5;-  border-bottom: 1px solid #ffffff;-  *width: 100%;-  *margin: -5px 0 5px;-}-.nav-tabs,-.nav-pills {-  *zoom: 1;-}-.nav-tabs:before,-.nav-pills:before,-.nav-tabs:after,-.nav-pills:after {-  display: table;-  content: "";-}-.nav-tabs:after,-.nav-pills:after {-  clear: both;-}-.nav-tabs > li,-.nav-pills > li {-  float: left;-}-.nav-tabs > li > a,-.nav-pills > li > a {-  padding-right: 12px;-  padding-left: 12px;-  margin-right: 2px;-  line-height: 14px;-}-.nav-tabs {-  border-bottom: 1px solid #ddd;-}-.nav-tabs > li {-  margin-bottom: -1px;-}-.nav-tabs > li > a {-  padding-top: 8px;-  padding-bottom: 8px;-  line-height: 18px;-  border: 1px solid transparent;-  -webkit-border-radius: 4px 4px 0 0;-  -moz-border-radius: 4px 4px 0 0;-  border-radius: 4px 4px 0 0;-}-.nav-tabs > li > a:hover {-  border-color: #eeeeee #eeeeee #dddddd;-}-.nav-tabs > .active > a,-.nav-tabs > .active > a:hover {-  color: #555555;-  background-color: #ffffff;-  border: 1px solid #ddd;-  border-bottom-color: transparent;-  cursor: default;-}-.nav-pills > li > a {-  padding-top: 8px;-  padding-bottom: 8px;-  margin-top: 2px;-  margin-bottom: 2px;-  -webkit-border-radius: 5px;-  -moz-border-radius: 5px;-  border-radius: 5px;-}-.nav-pills > .active > a,-.nav-pills > .active > a:hover {-  color: #ffffff;-  background-color: #0088cc;-}-.nav-stacked > li {-  float: none;-}-.nav-stacked > li > a {-  margin-right: 0;-}-.nav-tabs.nav-stacked {-  border-bottom: 0;-}-.nav-tabs.nav-stacked > li > a {-  border: 1px solid #ddd;-  -webkit-border-radius: 0;-  -moz-border-radius: 0;-  border-radius: 0;-}-.nav-tabs.nav-stacked > li:first-child > a {-  -webkit-border-radius: 4px 4px 0 0;-  -moz-border-radius: 4px 4px 0 0;-  border-radius: 4px 4px 0 0;-}-.nav-tabs.nav-stacked > li:last-child > a {-  -webkit-border-radius: 0 0 4px 4px;-  -moz-border-radius: 0 0 4px 4px;-  border-radius: 0 0 4px 4px;-}-.nav-tabs.nav-stacked > li > a:hover {-  border-color: #ddd;-  z-index: 2;-}-.nav-pills.nav-stacked > li > a {-  margin-bottom: 3px;-}-.nav-pills.nav-stacked > li:last-child > a {-  margin-bottom: 1px;-}-.nav-tabs .dropdown-menu,-.nav-pills .dropdown-menu {-  margin-top: 1px;-  border-width: 1px;-}-.nav-pills .dropdown-menu {-  -webkit-border-radius: 4px;-  -moz-border-radius: 4px;-  border-radius: 4px;-}-.nav-tabs .dropdown-toggle .caret,-.nav-pills .dropdown-toggle .caret {-  border-top-color: #0088cc;-  border-bottom-color: #0088cc;-  margin-top: 6px;-}-.nav-tabs .dropdown-toggle:hover .caret,-.nav-pills .dropdown-toggle:hover .caret {-  border-top-color: #005580;-  border-bottom-color: #005580;-}-.nav-tabs .active .dropdown-toggle .caret,-.nav-pills .active .dropdown-toggle .caret {-  border-top-color: #333333;-  border-bottom-color: #333333;-}-.nav > .dropdown.active > a:hover {-  color: #000000;-  cursor: pointer;-}-.nav-tabs .open .dropdown-toggle,-.nav-pills .open .dropdown-toggle,-.nav > .open.active > a:hover {-  color: #ffffff;-  background-color: #999999;-  border-color: #999999;-}-.nav .open .caret,-.nav .open.active .caret,-.nav .open a:hover .caret {-  border-top-color: #ffffff;-  border-bottom-color: #ffffff;-  opacity: 1;-  filter: alpha(opacity=100);-}-.tabs-stacked .open > a:hover {-  border-color: #999999;-}-.tabbable {-  *zoom: 1;-}-.tabbable:before,-.tabbable:after {-  display: table;-  content: "";-}-.tabbable:after {-  clear: both;-}-.tab-content {-  display: table;-  width: 100%;-}-.tabs-below .nav-tabs,-.tabs-right .nav-tabs,-.tabs-left .nav-tabs {-  border-bottom: 0;-}-.tab-content > .tab-pane,-.pill-content > .pill-pane {-  display: none;-}-.tab-content > .active,-.pill-content > .active {-  display: block;-}-.tabs-below .nav-tabs {-  border-top: 1px solid #ddd;-}-.tabs-below .nav-tabs > li {-  margin-top: -1px;-  margin-bottom: 0;-}-.tabs-below .nav-tabs > li > a {-  -webkit-border-radius: 0 0 4px 4px;-  -moz-border-radius: 0 0 4px 4px;-  border-radius: 0 0 4px 4px;-}-.tabs-below .nav-tabs > li > a:hover {-  border-bottom-color: transparent;-  border-top-color: #ddd;-}-.tabs-below .nav-tabs .active > a,-.tabs-below .nav-tabs .active > a:hover {-  border-color: transparent #ddd #ddd #ddd;-}-.tabs-left .nav-tabs > li,-.tabs-right .nav-tabs > li {-  float: none;-}-.tabs-left .nav-tabs > li > a,-.tabs-right .nav-tabs > li > a {-  min-width: 74px;-  margin-right: 0;-  margin-bottom: 3px;-}-.tabs-left .nav-tabs {-  float: left;-  margin-right: 19px;-  border-right: 1px solid #ddd;-}-.tabs-left .nav-tabs > li > a {-  margin-right: -1px;-  -webkit-border-radius: 4px 0 0 4px;-  -moz-border-radius: 4px 0 0 4px;-  border-radius: 4px 0 0 4px;-}-.tabs-left .nav-tabs > li > a:hover {-  border-color: #eeeeee #dddddd #eeeeee #eeeeee;-}-.tabs-left .nav-tabs .active > a,-.tabs-left .nav-tabs .active > a:hover {-  border-color: #ddd transparent #ddd #ddd;-  *border-right-color: #ffffff;-}-.tabs-right .nav-tabs {-  float: right;-  margin-left: 19px;-  border-left: 1px solid #ddd;-}-.tabs-right .nav-tabs > li > a {-  margin-left: -1px;-  -webkit-border-radius: 0 4px 4px 0;-  -moz-border-radius: 0 4px 4px 0;-  border-radius: 0 4px 4px 0;-}-.tabs-right .nav-tabs > li > a:hover {-  border-color: #eeeeee #eeeeee #eeeeee #dddddd;-}-.tabs-right .nav-tabs .active > a,-.tabs-right .nav-tabs .active > a:hover {-  border-color: #ddd #ddd #ddd transparent;-  *border-left-color: #ffffff;-}-.navbar {-  *position: relative;-  *z-index: 2;-  overflow: visible;-  margin-bottom: 18px;-}-.navbar-inner {-  padding-left: 20px;-  padding-right: 20px;-  background-color: #2c2c2c;-  background-image: -moz-linear-gradient(top, #333333, #222222);-  background-image: -ms-linear-gradient(top, #333333, #222222);-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222));-  background-image: -webkit-linear-gradient(top, #333333, #222222);-  background-image: -o-linear-gradient(top, #333333, #222222);-  background-image: linear-gradient(top, #333333, #222222);-  background-repeat: repeat-x;-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);-  -webkit-border-radius: 4px;-  -moz-border-radius: 4px;-  border-radius: 4px;-  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);-  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);-  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);-}-.navbar .container {-  width: auto;-}-.btn-navbar {-  display: none;-  float: right;-  padding: 7px 10px;-  margin-left: 5px;-  margin-right: 5px;-  background-color: #2c2c2c;-  background-image: -moz-linear-gradient(top, #333333, #222222);-  background-image: -ms-linear-gradient(top, #333333, #222222);-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222));-  background-image: -webkit-linear-gradient(top, #333333, #222222);-  background-image: -o-linear-gradient(top, #333333, #222222);-  background-image: linear-gradient(top, #333333, #222222);-  background-repeat: repeat-x;-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);-  border-color: #222222 #222222 #000000;-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);-  filter: progid:dximagetransform.microsoft.gradient(enabled=false);-  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075);-  -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075);-  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075);-}-.btn-navbar:hover,-.btn-navbar:active,-.btn-navbar.active,-.btn-navbar.disabled,-.btn-navbar[disabled] {-  background-color: #222222;-}-.btn-navbar:active,-.btn-navbar.active {-  background-color: #080808 \9;-}-.btn-navbar .icon-bar {-  display: block;-  width: 18px;-  height: 2px;-  background-color: #f5f5f5;-  -webkit-border-radius: 1px;-  -moz-border-radius: 1px;-  border-radius: 1px;-  -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);-  -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);-  box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);-}-.btn-navbar .icon-bar + .icon-bar {-  margin-top: 3px;-}-.nav-collapse.collapse {-  height: auto;-}-.navbar {-  color: #999999;-}-.navbar .brand:hover {-  text-decoration: none;-}-.navbar .brand {-  float: left;-  display: block;-  padding: 8px 20px 12px;-  margin-left: -20px;-  font-size: 20px;-  font-weight: 200;-  line-height: 1;-  color: #ffffff;-}-.navbar .navbar-text {-  margin-bottom: 0;-  line-height: 40px;-}-.navbar .btn,-.navbar .btn-group {-  margin-top: 5px;-}-.navbar .btn-group .btn {-  margin-top: 0;-}-.navbar-form {-  margin-bottom: 0;-  *zoom: 1;-}-.navbar-form:before,-.navbar-form:after {-  display: table;-  content: "";-}-.navbar-form:after {-  clear: both;-}-.navbar-form input,-.navbar-form select,-.navbar-form .radio,-.navbar-form .checkbox {-  margin-top: 5px;-}-.navbar-form input,-.navbar-form select {-  display: inline-block;-  margin-bottom: 0;-}-.navbar-form input[type="image"],-.navbar-form input[type="checkbox"],-.navbar-form input[type="radio"] {-  margin-top: 3px;-}-.navbar-form .input-append,-.navbar-form .input-prepend {-  margin-top: 6px;-  white-space: nowrap;-}-.navbar-form .input-append input,-.navbar-form .input-prepend input {-  margin-top: 0;-}-.navbar-search {-  position: relative;-  float: left;-  margin-top: 6px;-  margin-bottom: 0;-}-.navbar-search .search-query {-  padding: 4px 9px;-  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;-  font-size: 13px;-  font-weight: normal;-  line-height: 1;-  color: #ffffff;-  background-color: #626262;-  border: 1px solid #151515;-  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.15);-  -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.15);-  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.15);-  -webkit-transition: none;-  -moz-transition: none;-  -ms-transition: none;-  -o-transition: none;-  transition: none;-}-.navbar-search .search-query:-moz-placeholder {-  color: #cccccc;-}-.navbar-search .search-query::-webkit-input-placeholder {-  color: #cccccc;-}-.navbar-search .search-query:focus,-.navbar-search .search-query.focused {-  padding: 5px 10px;-  color: #333333;-  text-shadow: 0 1px 0 #ffffff;-  background-color: #ffffff;-  border: 0;-  -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);-  -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);-  box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);-  outline: 0;-}-.navbar-fixed-top,-.navbar-fixed-bottom {-  position: fixed;-  right: 0;-  left: 0;-  z-index: 1030;-  margin-bottom: 0;-}-.navbar-fixed-top .navbar-inner,-.navbar-fixed-bottom .navbar-inner {-  padding-left: 0;-  padding-right: 0;-  -webkit-border-radius: 0;-  -moz-border-radius: 0;-  border-radius: 0;-}-.navbar-fixed-top .container,-.navbar-fixed-bottom .container {-  width: 940px;-}-.navbar-fixed-top {-  top: 0;-}-.navbar-fixed-bottom {-  bottom: 0;-}-.navbar .nav {-  position: relative;-  left: 0;-  display: block;-  float: left;-  margin: 0 10px 0 0;-}-.navbar .nav.pull-right {-  float: right;-}-.navbar .nav > li {-  display: block;-  float: left;-}-.navbar .nav > li > a {-  float: none;-  padding: 10px 10px 11px;-  line-height: 19px;-  color: #999999;-  text-decoration: none;-  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);-}-.navbar .nav > li > a:hover {-  background-color: transparent;-  color: #ffffff;-  text-decoration: none;-}-.navbar .nav .active > a,-.navbar .nav .active > a:hover {-  color: #ffffff;-  text-decoration: none;-  background-color: #222222;-}-.navbar .divider-vertical {-  height: 40px;-  width: 1px;-  margin: 0 9px;-  overflow: hidden;-  background-color: #222222;-  border-right: 1px solid #333333;-}-.navbar .nav.pull-right {-  margin-left: 10px;-  margin-right: 0;-}-.navbar .dropdown-menu {-  margin-top: 1px;-  -webkit-border-radius: 4px;-  -moz-border-radius: 4px;-  border-radius: 4px;-}-.navbar .dropdown-menu:before {-  content: '';-  display: inline-block;-  border-left: 7px solid transparent;-  border-right: 7px solid transparent;-  border-bottom: 7px solid #ccc;-  border-bottom-color: rgba(0, 0, 0, 0.2);-  position: absolute;-  top: -7px;-  left: 9px;-}-.navbar .dropdown-menu:after {-  content: '';-  display: inline-block;-  border-left: 6px solid transparent;-  border-right: 6px solid transparent;-  border-bottom: 6px solid #ffffff;-  position: absolute;-  top: -6px;-  left: 10px;-}-.navbar-fixed-bottom .dropdown-menu:before {-  border-top: 7px solid #ccc;-  border-top-color: rgba(0, 0, 0, 0.2);-  border-bottom: 0;-  bottom: -7px;-  top: auto;-}-.navbar-fixed-bottom .dropdown-menu:after {-  border-top: 6px solid #ffffff;-  border-bottom: 0;-  bottom: -6px;-  top: auto;-}-.navbar .nav .dropdown-toggle .caret,-.navbar .nav .open.dropdown .caret {-  border-top-color: #ffffff;-  border-bottom-color: #ffffff;-}-.navbar .nav .active .caret {-  opacity: 1;-  filter: alpha(opacity=100);-}-.navbar .nav .open > .dropdown-toggle,-.navbar .nav .active > .dropdown-toggle,-.navbar .nav .open.active > .dropdown-toggle {-  background-color: transparent;-}-.navbar .nav .active > .dropdown-toggle:hover {-  color: #ffffff;-}-.navbar .nav.pull-right .dropdown-menu,-.navbar .nav .dropdown-menu.pull-right {-  left: auto;-  right: 0;-}-.navbar .nav.pull-right .dropdown-menu:before,-.navbar .nav .dropdown-menu.pull-right:before {-  left: auto;-  right: 12px;-}-.navbar .nav.pull-right .dropdown-menu:after,-.navbar .nav .dropdown-menu.pull-right:after {-  left: auto;-  right: 13px;-}-.breadcrumb {-  padding: 7px 14px;-  margin: 0 0 18px;-  list-style: none;-  background-color: #fbfbfb;-  background-image: -moz-linear-gradient(top, #ffffff, #f5f5f5);-  background-image: -ms-linear-gradient(top, #ffffff, #f5f5f5);-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f5f5f5));-  background-image: -webkit-linear-gradient(top, #ffffff, #f5f5f5);-  background-image: -o-linear-gradient(top, #ffffff, #f5f5f5);-  background-image: linear-gradient(top, #ffffff, #f5f5f5);-  background-repeat: repeat-x;-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f5f5f5', GradientType=0);-  border: 1px solid #ddd;-  -webkit-border-radius: 3px;-  -moz-border-radius: 3px;-  border-radius: 3px;-  -webkit-box-shadow: inset 0 1px 0 #ffffff;-  -moz-box-shadow: inset 0 1px 0 #ffffff;-  box-shadow: inset 0 1px 0 #ffffff;-}-.breadcrumb li {-  display: inline-block;-  *display: inline;-  /* IE7 inline-block hack */--  *zoom: 1;-  text-shadow: 0 1px 0 #ffffff;-}-.breadcrumb .divider {-  padding: 0 5px;-  color: #999999;-}-.breadcrumb .active a {-  color: #333333;-}-.pagination {-  height: 36px;-  margin: 18px 0;-}-.pagination ul {-  display: inline-block;-  *display: inline;-  /* IE7 inline-block hack */--  *zoom: 1;-  margin-left: 0;-  margin-bottom: 0;-  -webkit-border-radius: 3px;-  -moz-border-radius: 3px;-  border-radius: 3px;-  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);-  -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);-  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);-}-.pagination li {-  display: inline;-}-.pagination a {-  float: left;-  padding: 0 14px;-  line-height: 34px;-  text-decoration: none;-  border: 1px solid #ddd;-  border-left-width: 0;-}-.pagination a:hover,-.pagination .active a {-  background-color: #f5f5f5;-}-.pagination .active a {-  color: #999999;-  cursor: default;-}-.pagination .disabled span,-.pagination .disabled a,-.pagination .disabled a:hover {-  color: #999999;-  background-color: transparent;-  cursor: default;-}-.pagination li:first-child a {-  border-left-width: 1px;-  -webkit-border-radius: 3px 0 0 3px;-  -moz-border-radius: 3px 0 0 3px;-  border-radius: 3px 0 0 3px;-}-.pagination li:last-child a {-  -webkit-border-radius: 0 3px 3px 0;-  -moz-border-radius: 0 3px 3px 0;-  border-radius: 0 3px 3px 0;-}-.pagination-centered {-  text-align: center;-}-.pagination-right {-  text-align: right;-}-.pager {-  margin-left: 0;-  margin-bottom: 18px;-  list-style: none;-  text-align: center;-  *zoom: 1;-}-.pager:before,-.pager:after {-  display: table;-  content: "";-}-.pager:after {-  clear: both;-}-.pager li {-  display: inline;-}-.pager a {-  display: inline-block;-  padding: 5px 14px;-  background-color: #fff;-  border: 1px solid #ddd;-  -webkit-border-radius: 15px;-  -moz-border-radius: 15px;-  border-radius: 15px;-}-.pager a:hover {-  text-decoration: none;-  background-color: #f5f5f5;-}-.pager .next a {-  float: right;-}-.pager .previous a {-  float: left;-}-.pager .disabled a,-.pager .disabled a:hover {-  color: #999999;-  background-color: #fff;-  cursor: default;-}-.modal-open .dropdown-menu {-  z-index: 2050;-}-.modal-open .dropdown.open {-  *z-index: 2050;-}-.modal-open .popover {-  z-index: 2060;-}-.modal-open .tooltip {-  z-index: 2070;-}-.modal-backdrop {-  position: fixed;-  top: 0;-  right: 0;-  bottom: 0;-  left: 0;-  z-index: 1040;-  background-color: #000000;-}-.modal-backdrop.fade {-  opacity: 0;-}-.modal-backdrop,-.modal-backdrop.fade.in {-  opacity: 0.8;-  filter: alpha(opacity=80);-}-.modal {-  position: fixed;-  top: 50%;-  left: 50%;-  z-index: 1050;-  overflow: auto;-  width: 560px;-  margin: -250px 0 0 -280px;-  background-color: #ffffff;-  border: 1px solid #999;-  border: 1px solid rgba(0, 0, 0, 0.3);-  *border: 1px solid #999;-  /* IE6-7 */--  -webkit-border-radius: 6px;-  -moz-border-radius: 6px;-  border-radius: 6px;-  -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);-  -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);-  box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);-  -webkit-background-clip: padding-box;-  -moz-background-clip: padding-box;-  background-clip: padding-box;-}-.modal.fade {-  -webkit-transition: opacity .3s linear, top .3s ease-out;-  -moz-transition: opacity .3s linear, top .3s ease-out;-  -ms-transition: opacity .3s linear, top .3s ease-out;-  -o-transition: opacity .3s linear, top .3s ease-out;-  transition: opacity .3s linear, top .3s ease-out;-  top: -25%;-}-.modal.fade.in {-  top: 50%;-}-.modal-header {-  padding: 9px 15px;-  border-bottom: 1px solid #eee;-}-.modal-header .close {-  margin-top: 2px;-}-.modal-body {-  overflow-y: auto;-  max-height: 400px;-  padding: 15px;-}-.modal-form {-  margin-bottom: 0;-}-.modal-footer {-  padding: 14px 15px 15px;-  margin-bottom: 0;-  text-align: right;-  background-color: #f5f5f5;-  border-top: 1px solid #ddd;-  -webkit-border-radius: 0 0 6px 6px;-  -moz-border-radius: 0 0 6px 6px;-  border-radius: 0 0 6px 6px;-  -webkit-box-shadow: inset 0 1px 0 #ffffff;-  -moz-box-shadow: inset 0 1px 0 #ffffff;-  box-shadow: inset 0 1px 0 #ffffff;-  *zoom: 1;-}-.modal-footer:before,-.modal-footer:after {-  display: table;-  content: "";-}-.modal-footer:after {-  clear: both;-}-.modal-footer .btn + .btn {-  margin-left: 5px;-  margin-bottom: 0;-}-.modal-footer .btn-group .btn + .btn {-  margin-left: -1px;-}-.tooltip {-  position: absolute;-  z-index: 1020;-  display: block;-  visibility: visible;-  padding: 5px;-  font-size: 11px;-  opacity: 0;-  filter: alpha(opacity=0);-}-.tooltip.in {-  opacity: 0.8;-  filter: alpha(opacity=80);-}-.tooltip.top {-  margin-top: -2px;-}-.tooltip.right {-  margin-left: 2px;-}-.tooltip.bottom {-  margin-top: 2px;-}-.tooltip.left {-  margin-left: -2px;-}-.tooltip.top .tooltip-arrow {-  bottom: 0;-  left: 50%;-  margin-left: -5px;-  border-left: 5px solid transparent;-  border-right: 5px solid transparent;-  border-top: 5px solid #000000;-}-.tooltip.left .tooltip-arrow {-  top: 50%;-  right: 0;-  margin-top: -5px;-  border-top: 5px solid transparent;-  border-bottom: 5px solid transparent;-  border-left: 5px solid #000000;-}-.tooltip.bottom .tooltip-arrow {-  top: 0;-  left: 50%;-  margin-left: -5px;-  border-left: 5px solid transparent;-  border-right: 5px solid transparent;-  border-bottom: 5px solid #000000;-}-.tooltip.right .tooltip-arrow {-  top: 50%;-  left: 0;-  margin-top: -5px;-  border-top: 5px solid transparent;-  border-bottom: 5px solid transparent;-  border-right: 5px solid #000000;-}-.tooltip-inner {-  max-width: 200px;-  padding: 3px 8px;-  color: #ffffff;-  text-align: center;-  text-decoration: none;-  background-color: #000000;-  -webkit-border-radius: 4px;-  -moz-border-radius: 4px;-  border-radius: 4px;-}-.tooltip-arrow {-  position: absolute;-  width: 0;-  height: 0;-}-.popover {-  position: absolute;-  top: 0;-  left: 0;-  z-index: 1010;-  display: none;-  padding: 5px;-}-.popover.top {-  margin-top: -5px;-}-.popover.right {-  margin-left: 5px;-}-.popover.bottom {-  margin-top: 5px;-}-.popover.left {-  margin-left: -5px;-}-.popover.top .arrow {-  bottom: 0;-  left: 50%;-  margin-left: -5px;-  border-left: 5px solid transparent;-  border-right: 5px solid transparent;-  border-top: 5px solid #000000;-}-.popover.right .arrow {-  top: 50%;-  left: 0;-  margin-top: -5px;-  border-top: 5px solid transparent;-  border-bottom: 5px solid transparent;-  border-right: 5px solid #000000;-}-.popover.bottom .arrow {-  top: 0;-  left: 50%;-  margin-left: -5px;-  border-left: 5px solid transparent;-  border-right: 5px solid transparent;-  border-bottom: 5px solid #000000;-}-.popover.left .arrow {-  top: 50%;-  right: 0;-  margin-top: -5px;-  border-top: 5px solid transparent;-  border-bottom: 5px solid transparent;-  border-left: 5px solid #000000;-}-.popover .arrow {-  position: absolute;-  width: 0;-  height: 0;-}-.popover-inner {-  padding: 3px;-  width: 280px;-  overflow: hidden;-  background: #000000;-  background: rgba(0, 0, 0, 0.8);-  -webkit-border-radius: 6px;-  -moz-border-radius: 6px;-  border-radius: 6px;-  -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);-  -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);-  box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);-}-.popover-title {-  padding: 9px 15px;-  line-height: 1;-  background-color: #f5f5f5;-  border-bottom: 1px solid #eee;-  -webkit-border-radius: 3px 3px 0 0;-  -moz-border-radius: 3px 3px 0 0;-  border-radius: 3px 3px 0 0;-}-.popover-content {-  padding: 14px;-  background-color: #ffffff;-  -webkit-border-radius: 0 0 3px 3px;-  -moz-border-radius: 0 0 3px 3px;-  border-radius: 0 0 3px 3px;-  -webkit-background-clip: padding-box;-  -moz-background-clip: padding-box;-  background-clip: padding-box;-}-.popover-content p,-.popover-content ul,-.popover-content ol {-  margin-bottom: 0;-}-.thumbnails {-  margin-left: -20px;-  list-style: none;-  *zoom: 1;-}-.thumbnails:before,-.thumbnails:after {-  display: table;-  content: "";-}-.thumbnails:after {-  clear: both;-}-.thumbnails > li {-  float: left;-  margin: 0 0 18px 20px;-}-.thumbnail {-  display: block;-  padding: 4px;-  line-height: 1;-  border: 1px solid #ddd;-  -webkit-border-radius: 4px;-  -moz-border-radius: 4px;-  border-radius: 4px;-  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075);-  -moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075);-  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075);-}-a.thumbnail:hover {-  border-color: #0088cc;-  -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);-  -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);-  box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);-}-.thumbnail > img {-  display: block;-  max-width: 100%;-  margin-left: auto;-  margin-right: auto;-}-.thumbnail .caption {-  padding: 9px;-}-.label {-  padding: 1px 4px 2px;-  font-size: 10.998px;-  font-weight: bold;-  line-height: 13px;-  color: #ffffff;-  vertical-align: middle;-  white-space: nowrap;-  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);-  background-color: #999999;-  -webkit-border-radius: 3px;-  -moz-border-radius: 3px;-  border-radius: 3px;-}-.label:hover {-  color: #ffffff;-  text-decoration: none;-}-.label-important {-  background-color: #b94a48;-}-.label-important:hover {-  background-color: #953b39;-}-.label-warning {-  background-color: #f89406;-}-.label-warning:hover {-  background-color: #c67605;-}-.label-success {-  background-color: #468847;-}-.label-success:hover {-  background-color: #356635;-}-.label-info {-  background-color: #3a87ad;-}-.label-info:hover {-  background-color: #2d6987;-}-.label-inverse {-  background-color: #333333;-}-.label-inverse:hover {-  background-color: #1a1a1a;-}-.badge {-  padding: 1px 9px 2px;-  font-size: 12.025px;-  font-weight: bold;-  white-space: nowrap;-  color: #ffffff;-  background-color: #999999;-  -webkit-border-radius: 9px;-  -moz-border-radius: 9px;-  border-radius: 9px;-}-.badge:hover {-  color: #ffffff;-  text-decoration: none;-  cursor: pointer;-}-.badge-error {-  background-color: #b94a48;-}-.badge-error:hover {-  background-color: #953b39;-}-.badge-warning {-  background-color: #f89406;-}-.badge-warning:hover {-  background-color: #c67605;-}-.badge-success {-  background-color: #468847;-}-.badge-success:hover {-  background-color: #356635;-}-.badge-info {-  background-color: #3a87ad;-}-.badge-info:hover {-  background-color: #2d6987;-}-.badge-inverse {-  background-color: #333333;-}-.badge-inverse:hover {-  background-color: #1a1a1a;-}-@-webkit-keyframes progress-bar-stripes {-  from {-    background-position: 0 0;-  }-  to {-    background-position: 40px 0;-  }-}-@-moz-keyframes progress-bar-stripes {-  from {-    background-position: 0 0;-  }-  to {-    background-position: 40px 0;-  }-}-@-ms-keyframes progress-bar-stripes {-  from {-    background-position: 0 0;-  }-  to {-    background-position: 40px 0;-  }-}-@keyframes progress-bar-stripes {-  from {-    background-position: 0 0;-  }-  to {-    background-position: 40px 0;-  }-}-.progress {-  overflow: hidden;-  height: 18px;-  margin-bottom: 18px;-  background-color: #f7f7f7;-  background-image: -moz-linear-gradient(top, #f5f5f5, #f9f9f9);-  background-image: -ms-linear-gradient(top, #f5f5f5, #f9f9f9);-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9));-  background-image: -webkit-linear-gradient(top, #f5f5f5, #f9f9f9);-  background-image: -o-linear-gradient(top, #f5f5f5, #f9f9f9);-  background-image: linear-gradient(top, #f5f5f5, #f9f9f9);-  background-repeat: repeat-x;-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5', endColorstr='#f9f9f9', GradientType=0);-  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);-  -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);-  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);-  -webkit-border-radius: 4px;-  -moz-border-radius: 4px;-  border-radius: 4px;-}-.progress .bar {-  width: 0%;-  height: 18px;-  color: #ffffff;-  font-size: 12px;-  text-align: center;-  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);-  background-color: #0e90d2;-  background-image: -moz-linear-gradient(top, #149bdf, #0480be);-  background-image: -ms-linear-gradient(top, #149bdf, #0480be);-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be));-  background-image: -webkit-linear-gradient(top, #149bdf, #0480be);-  background-image: -o-linear-gradient(top, #149bdf, #0480be);-  background-image: linear-gradient(top, #149bdf, #0480be);-  background-repeat: repeat-x;-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#149bdf', endColorstr='#0480be', GradientType=0);-  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);-  -moz-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);-  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);-  -webkit-box-sizing: border-box;-  -moz-box-sizing: border-box;-  -ms-box-sizing: border-box;-  box-sizing: border-box;-  -webkit-transition: width 0.6s ease;-  -moz-transition: width 0.6s ease;-  -ms-transition: width 0.6s ease;-  -o-transition: width 0.6s ease;-  transition: width 0.6s ease;-}-.progress-striped .bar {-  background-color: #149bdf;-  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));-  background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);-  background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);-  background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);-  background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);-  background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);-  -webkit-background-size: 40px 40px;-  -moz-background-size: 40px 40px;-  -o-background-size: 40px 40px;-  background-size: 40px 40px;-}-.progress.active .bar {-  -webkit-animation: progress-bar-stripes 2s linear infinite;-  -moz-animation: progress-bar-stripes 2s linear infinite;-  animation: progress-bar-stripes 2s linear infinite;-}-.progress-danger .bar {-  background-color: #dd514c;-  background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35);-  background-image: -ms-linear-gradient(top, #ee5f5b, #c43c35);-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35));-  background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35);-  background-image: -o-linear-gradient(top, #ee5f5b, #c43c35);-  background-image: linear-gradient(top, #ee5f5b, #c43c35);-  background-repeat: repeat-x;-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0);-}-.progress-danger.progress-striped .bar {-  background-color: #ee5f5b;-  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));-  background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);-  background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);-  background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);-  background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);-  background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);-}-.progress-success .bar {-  background-color: #5eb95e;-  background-image: -moz-linear-gradient(top, #62c462, #57a957);-  background-image: -ms-linear-gradient(top, #62c462, #57a957);-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957));-  background-image: -webkit-linear-gradient(top, #62c462, #57a957);-  background-image: -o-linear-gradient(top, #62c462, #57a957);-  background-image: linear-gradient(top, #62c462, #57a957);-  background-repeat: repeat-x;-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0);-}-.progress-success.progress-striped .bar {-  background-color: #62c462;-  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));-  background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);-  background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);-  background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);-  background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);-  background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);-}-.progress-info .bar {-  background-color: #4bb1cf;-  background-image: -moz-linear-gradient(top, #5bc0de, #339bb9);-  background-image: -ms-linear-gradient(top, #5bc0de, #339bb9);-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9));-  background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9);-  background-image: -o-linear-gradient(top, #5bc0de, #339bb9);-  background-image: linear-gradient(top, #5bc0de, #339bb9);-  background-repeat: repeat-x;-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#339bb9', GradientType=0);-}-.progress-info.progress-striped .bar {-  background-color: #5bc0de;-  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));-  background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);-  background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);-  background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);-  background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);-  background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);-}-.progress-warning .bar {-  background-color: #faa732;-  background-image: -moz-linear-gradient(top, #fbb450, #f89406);-  background-image: -ms-linear-gradient(top, #fbb450, #f89406);-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));-  background-image: -webkit-linear-gradient(top, #fbb450, #f89406);-  background-image: -o-linear-gradient(top, #fbb450, #f89406);-  background-image: linear-gradient(top, #fbb450, #f89406);-  background-repeat: repeat-x;-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0);-}-.progress-warning.progress-striped .bar {-  background-color: #fbb450;-  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));-  background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);-  background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);-  background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);-  background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);-  background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);-}-.accordion {-  margin-bottom: 18px;-}-.accordion-group {-  margin-bottom: 2px;-  border: 1px solid #e5e5e5;-  -webkit-border-radius: 4px;-  -moz-border-radius: 4px;-  border-radius: 4px;-}-.accordion-heading {-  border-bottom: 0;-}-.accordion-heading .accordion-toggle {-  display: block;-  padding: 8px 15px;-}-.accordion-inner {-  padding: 9px 15px;-  border-top: 1px solid #e5e5e5;-}-.carousel {-  position: relative;-  margin-bottom: 18px;-  line-height: 1;-}-.carousel-inner {-  overflow: hidden;-  width: 100%;-  position: relative;-}-.carousel .item {-  display: none;-  position: relative;-  -webkit-transition: 0.6s ease-in-out left;-  -moz-transition: 0.6s ease-in-out left;-  -ms-transition: 0.6s ease-in-out left;-  -o-transition: 0.6s ease-in-out left;-  transition: 0.6s ease-in-out left;-}-.carousel .item > img {-  display: block;-  line-height: 1;-}-.carousel .active,-.carousel .next,-.carousel .prev {-  display: block;-}-.carousel .active {-  left: 0;-}-.carousel .next,-.carousel .prev {-  position: absolute;-  top: 0;-  width: 100%;-}-.carousel .next {-  left: 100%;-}-.carousel .prev {-  left: -100%;-}-.carousel .next.left,-.carousel .prev.right {-  left: 0;-}-.carousel .active.left {-  left: -100%;-}-.carousel .active.right {-  left: 100%;-}-.carousel-control {-  position: absolute;-  top: 40%;-  left: 15px;-  width: 40px;-  height: 40px;-  margin-top: -20px;-  font-size: 60px;-  font-weight: 100;-  line-height: 30px;-  color: #ffffff;-  text-align: center;-  background: #222222;-  border: 3px solid #ffffff;-  -webkit-border-radius: 23px;-  -moz-border-radius: 23px;-  border-radius: 23px;-  opacity: 0.5;-  filter: alpha(opacity=50);-}-.carousel-control.right {-  left: auto;-  right: 15px;-}-.carousel-control:hover {-  color: #ffffff;-  text-decoration: none;-  opacity: 0.9;-  filter: alpha(opacity=90);-}-.carousel-caption {-  position: absolute;-  left: 0;-  right: 0;-  bottom: 0;-  padding: 10px 15px 5px;-  background: #333333;-  background: rgba(0, 0, 0, 0.75);-}-.carousel-caption h4,-.carousel-caption p {-  color: #ffffff;-}-.hero-unit {-  padding: 60px;-  margin-bottom: 30px;-  background-color: #eeeeee;-  -webkit-border-radius: 6px;-  -moz-border-radius: 6px;-  border-radius: 6px;-}-.hero-unit h1 {-  margin-bottom: 0;-  font-size: 60px;-  line-height: 1;-  color: inherit;-  letter-spacing: -1px;-}-.hero-unit p {-  font-size: 18px;-  font-weight: 200;-  line-height: 27px;-  color: inherit;-}-.pull-right {-  float: right;-}-.pull-left {-  float: left;-}-.hide {-  display: none;-}-.show {-  display: block;-}-.invisible {-  visibility: hidden;-}+ * Bootstrap v3.2.0 (http://getbootstrap.com)+ * Copyright 2011-2014 Twitter, Inc.+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)+ */++/*! normalize.css v3.0.1 | MIT License | git.io/normalize */+html {+  font-family: sans-serif;+  -webkit-text-size-adjust: 100%;+      -ms-text-size-adjust: 100%;+}+body {+  margin: 0;+}+article,+aside,+details,+figcaption,+figure,+footer,+header,+hgroup,+main,+nav,+section,+summary {+  display: block;+}+audio,+canvas,+progress,+video {+  display: inline-block;+  vertical-align: baseline;+}+audio:not([controls]) {+  display: none;+  height: 0;+}+[hidden],+template {+  display: none;+}+a {+  background: transparent;+}+a:active,+a:hover {+  outline: 0;+}+abbr[title] {+  border-bottom: 1px dotted;+}+b,+strong {+  font-weight: bold;+}+dfn {+  font-style: italic;+}+h1 {+  margin: .67em 0;+  font-size: 2em;+}+mark {+  color: #000;+  background: #ff0;+}+small {+  font-size: 80%;+}+sub,+sup {+  position: relative;+  font-size: 75%;+  line-height: 0;+  vertical-align: baseline;+}+sup {+  top: -.5em;+}+sub {+  bottom: -.25em;+}+img {+  border: 0;+}+svg:not(:root) {+  overflow: hidden;+}+figure {+  margin: 1em 40px;+}+hr {+  height: 0;+  -webkit-box-sizing: content-box;+     -moz-box-sizing: content-box;+          box-sizing: content-box;+}+pre {+  overflow: auto;+}+code,+kbd,+pre,+samp {+  font-family: monospace, monospace;+  font-size: 1em;+}+button,+input,+optgroup,+select,+textarea {+  margin: 0;+  font: inherit;+  color: inherit;+}+button {+  overflow: visible;+}+button,+select {+  text-transform: none;+}+button,+html input[type="button"],+input[type="reset"],+input[type="submit"] {+  -webkit-appearance: button;+  cursor: pointer;+}+button[disabled],+html input[disabled] {+  cursor: default;+}+button::-moz-focus-inner,+input::-moz-focus-inner {+  padding: 0;+  border: 0;+}+input {+  line-height: normal;+}+input[type="checkbox"],+input[type="radio"] {+  -webkit-box-sizing: border-box;+     -moz-box-sizing: border-box;+          box-sizing: border-box;+  padding: 0;+}+input[type="number"]::-webkit-inner-spin-button,+input[type="number"]::-webkit-outer-spin-button {+  height: auto;+}+input[type="search"] {+  -webkit-box-sizing: content-box;+     -moz-box-sizing: content-box;+          box-sizing: content-box;+  -webkit-appearance: textfield;+}+input[type="search"]::-webkit-search-cancel-button,+input[type="search"]::-webkit-search-decoration {+  -webkit-appearance: none;+}+fieldset {+  padding: .35em .625em .75em;+  margin: 0 2px;+  border: 1px solid #c0c0c0;+}+legend {+  padding: 0;+  border: 0;+}+textarea {+  overflow: auto;+}+optgroup {+  font-weight: bold;+}+table {+  border-spacing: 0;+  border-collapse: collapse;+}+td,+th {+  padding: 0;+}+@media print {+  * {+    color: #000 !important;+    text-shadow: none !important;+    background: transparent !important;+    -webkit-box-shadow: none !important;+            box-shadow: none !important;+  }+  a,+  a:visited {+    text-decoration: underline;+  }+  a[href]:after {+    content: " (" attr(href) ")";+  }+  abbr[title]:after {+    content: " (" attr(title) ")";+  }+  a[href^="javascript:"]:after,+  a[href^="#"]:after {+    content: "";+  }+  pre,+  blockquote {+    border: 1px solid #999;++    page-break-inside: avoid;+  }+  thead {+    display: table-header-group;+  }+  tr,+  img {+    page-break-inside: avoid;+  }+  img {+    max-width: 100% !important;+  }+  p,+  h2,+  h3 {+    orphans: 3;+    widows: 3;+  }+  h2,+  h3 {+    page-break-after: avoid;+  }+  select {+    background: #fff !important;+  }+  .navbar {+    display: none;+  }+  .table td,+  .table th {+    background-color: #fff !important;+  }+  .btn > .caret,+  .dropup > .btn > .caret {+    border-top-color: #000 !important;+  }+  .label {+    border: 1px solid #000;+  }+  .table {+    border-collapse: collapse !important;+  }+  .table-bordered th,+  .table-bordered td {+    border: 1px solid #ddd !important;+  }+}+@font-face {+  font-family: 'Glyphicons Halflings';++  src: url('../fonts/glyphicons-halflings-regular.eot');+  src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');+}+.glyphicon {+  position: relative;+  top: 1px;+  display: inline-block;+  font-family: 'Glyphicons Halflings';+  font-style: normal;+  font-weight: normal;+  line-height: 1;++  -webkit-font-smoothing: antialiased;+  -moz-osx-font-smoothing: grayscale;+}+.glyphicon-asterisk:before {+  content: "\2a";+}+.glyphicon-plus:before {+  content: "\2b";+}+.glyphicon-euro:before {+  content: "\20ac";+}+.glyphicon-minus:before {+  content: "\2212";+}+.glyphicon-cloud:before {+  content: "\2601";+}+.glyphicon-envelope:before {+  content: "\2709";+}+.glyphicon-pencil:before {+  content: "\270f";+}+.glyphicon-glass:before {+  content: "\e001";+}+.glyphicon-music:before {+  content: "\e002";+}+.glyphicon-search:before {+  content: "\e003";+}+.glyphicon-heart:before {+  content: "\e005";+}+.glyphicon-star:before {+  content: "\e006";+}+.glyphicon-star-empty:before {+  content: "\e007";+}+.glyphicon-user:before {+  content: "\e008";+}+.glyphicon-film:before {+  content: "\e009";+}+.glyphicon-th-large:before {+  content: "\e010";+}+.glyphicon-th:before {+  content: "\e011";+}+.glyphicon-th-list:before {+  content: "\e012";+}+.glyphicon-ok:before {+  content: "\e013";+}+.glyphicon-remove:before {+  content: "\e014";+}+.glyphicon-zoom-in:before {+  content: "\e015";+}+.glyphicon-zoom-out:before {+  content: "\e016";+}+.glyphicon-off:before {+  content: "\e017";+}+.glyphicon-signal:before {+  content: "\e018";+}+.glyphicon-cog:before {+  content: "\e019";+}+.glyphicon-trash:before {+  content: "\e020";+}+.glyphicon-home:before {+  content: "\e021";+}+.glyphicon-file:before {+  content: "\e022";+}+.glyphicon-time:before {+  content: "\e023";+}+.glyphicon-road:before {+  content: "\e024";+}+.glyphicon-download-alt:before {+  content: "\e025";+}+.glyphicon-download:before {+  content: "\e026";+}+.glyphicon-upload:before {+  content: "\e027";+}+.glyphicon-inbox:before {+  content: "\e028";+}+.glyphicon-play-circle:before {+  content: "\e029";+}+.glyphicon-repeat:before {+  content: "\e030";+}+.glyphicon-refresh:before {+  content: "\e031";+}+.glyphicon-list-alt:before {+  content: "\e032";+}+.glyphicon-lock:before {+  content: "\e033";+}+.glyphicon-flag:before {+  content: "\e034";+}+.glyphicon-headphones:before {+  content: "\e035";+}+.glyphicon-volume-off:before {+  content: "\e036";+}+.glyphicon-volume-down:before {+  content: "\e037";+}+.glyphicon-volume-up:before {+  content: "\e038";+}+.glyphicon-qrcode:before {+  content: "\e039";+}+.glyphicon-barcode:before {+  content: "\e040";+}+.glyphicon-tag:before {+  content: "\e041";+}+.glyphicon-tags:before {+  content: "\e042";+}+.glyphicon-book:before {+  content: "\e043";+}+.glyphicon-bookmark:before {+  content: "\e044";+}+.glyphicon-print:before {+  content: "\e045";+}+.glyphicon-camera:before {+  content: "\e046";+}+.glyphicon-font:before {+  content: "\e047";+}+.glyphicon-bold:before {+  content: "\e048";+}+.glyphicon-italic:before {+  content: "\e049";+}+.glyphicon-text-height:before {+  content: "\e050";+}+.glyphicon-text-width:before {+  content: "\e051";+}+.glyphicon-align-left:before {+  content: "\e052";+}+.glyphicon-align-center:before {+  content: "\e053";+}+.glyphicon-align-right:before {+  content: "\e054";+}+.glyphicon-align-justify:before {+  content: "\e055";+}+.glyphicon-list:before {+  content: "\e056";+}+.glyphicon-indent-left:before {+  content: "\e057";+}+.glyphicon-indent-right:before {+  content: "\e058";+}+.glyphicon-facetime-video:before {+  content: "\e059";+}+.glyphicon-picture:before {+  content: "\e060";+}+.glyphicon-map-marker:before {+  content: "\e062";+}+.glyphicon-adjust:before {+  content: "\e063";+}+.glyphicon-tint:before {+  content: "\e064";+}+.glyphicon-edit:before {+  content: "\e065";+}+.glyphicon-share:before {+  content: "\e066";+}+.glyphicon-check:before {+  content: "\e067";+}+.glyphicon-move:before {+  content: "\e068";+}+.glyphicon-step-backward:before {+  content: "\e069";+}+.glyphicon-fast-backward:before {+  content: "\e070";+}+.glyphicon-backward:before {+  content: "\e071";+}+.glyphicon-play:before {+  content: "\e072";+}+.glyphicon-pause:before {+  content: "\e073";+}+.glyphicon-stop:before {+  content: "\e074";+}+.glyphicon-forward:before {+  content: "\e075";+}+.glyphicon-fast-forward:before {+  content: "\e076";+}+.glyphicon-step-forward:before {+  content: "\e077";+}+.glyphicon-eject:before {+  content: "\e078";+}+.glyphicon-chevron-left:before {+  content: "\e079";+}+.glyphicon-chevron-right:before {+  content: "\e080";+}+.glyphicon-plus-sign:before {+  content: "\e081";+}+.glyphicon-minus-sign:before {+  content: "\e082";+}+.glyphicon-remove-sign:before {+  content: "\e083";+}+.glyphicon-ok-sign:before {+  content: "\e084";+}+.glyphicon-question-sign:before {+  content: "\e085";+}+.glyphicon-info-sign:before {+  content: "\e086";+}+.glyphicon-screenshot:before {+  content: "\e087";+}+.glyphicon-remove-circle:before {+  content: "\e088";+}+.glyphicon-ok-circle:before {+  content: "\e089";+}+.glyphicon-ban-circle:before {+  content: "\e090";+}+.glyphicon-arrow-left:before {+  content: "\e091";+}+.glyphicon-arrow-right:before {+  content: "\e092";+}+.glyphicon-arrow-up:before {+  content: "\e093";+}+.glyphicon-arrow-down:before {+  content: "\e094";+}+.glyphicon-share-alt:before {+  content: "\e095";+}+.glyphicon-resize-full:before {+  content: "\e096";+}+.glyphicon-resize-small:before {+  content: "\e097";+}+.glyphicon-exclamation-sign:before {+  content: "\e101";+}+.glyphicon-gift:before {+  content: "\e102";+}+.glyphicon-leaf:before {+  content: "\e103";+}+.glyphicon-fire:before {+  content: "\e104";+}+.glyphicon-eye-open:before {+  content: "\e105";+}+.glyphicon-eye-close:before {+  content: "\e106";+}+.glyphicon-warning-sign:before {+  content: "\e107";+}+.glyphicon-plane:before {+  content: "\e108";+}+.glyphicon-calendar:before {+  content: "\e109";+}+.glyphicon-random:before {+  content: "\e110";+}+.glyphicon-comment:before {+  content: "\e111";+}+.glyphicon-magnet:before {+  content: "\e112";+}+.glyphicon-chevron-up:before {+  content: "\e113";+}+.glyphicon-chevron-down:before {+  content: "\e114";+}+.glyphicon-retweet:before {+  content: "\e115";+}+.glyphicon-shopping-cart:before {+  content: "\e116";+}+.glyphicon-folder-close:before {+  content: "\e117";+}+.glyphicon-folder-open:before {+  content: "\e118";+}+.glyphicon-resize-vertical:before {+  content: "\e119";+}+.glyphicon-resize-horizontal:before {+  content: "\e120";+}+.glyphicon-hdd:before {+  content: "\e121";+}+.glyphicon-bullhorn:before {+  content: "\e122";+}+.glyphicon-bell:before {+  content: "\e123";+}+.glyphicon-certificate:before {+  content: "\e124";+}+.glyphicon-thumbs-up:before {+  content: "\e125";+}+.glyphicon-thumbs-down:before {+  content: "\e126";+}+.glyphicon-hand-right:before {+  content: "\e127";+}+.glyphicon-hand-left:before {+  content: "\e128";+}+.glyphicon-hand-up:before {+  content: "\e129";+}+.glyphicon-hand-down:before {+  content: "\e130";+}+.glyphicon-circle-arrow-right:before {+  content: "\e131";+}+.glyphicon-circle-arrow-left:before {+  content: "\e132";+}+.glyphicon-circle-arrow-up:before {+  content: "\e133";+}+.glyphicon-circle-arrow-down:before {+  content: "\e134";+}+.glyphicon-globe:before {+  content: "\e135";+}+.glyphicon-wrench:before {+  content: "\e136";+}+.glyphicon-tasks:before {+  content: "\e137";+}+.glyphicon-filter:before {+  content: "\e138";+}+.glyphicon-briefcase:before {+  content: "\e139";+}+.glyphicon-fullscreen:before {+  content: "\e140";+}+.glyphicon-dashboard:before {+  content: "\e141";+}+.glyphicon-paperclip:before {+  content: "\e142";+}+.glyphicon-heart-empty:before {+  content: "\e143";+}+.glyphicon-link:before {+  content: "\e144";+}+.glyphicon-phone:before {+  content: "\e145";+}+.glyphicon-pushpin:before {+  content: "\e146";+}+.glyphicon-usd:before {+  content: "\e148";+}+.glyphicon-gbp:before {+  content: "\e149";+}+.glyphicon-sort:before {+  content: "\e150";+}+.glyphicon-sort-by-alphabet:before {+  content: "\e151";+}+.glyphicon-sort-by-alphabet-alt:before {+  content: "\e152";+}+.glyphicon-sort-by-order:before {+  content: "\e153";+}+.glyphicon-sort-by-order-alt:before {+  content: "\e154";+}+.glyphicon-sort-by-attributes:before {+  content: "\e155";+}+.glyphicon-sort-by-attributes-alt:before {+  content: "\e156";+}+.glyphicon-unchecked:before {+  content: "\e157";+}+.glyphicon-expand:before {+  content: "\e158";+}+.glyphicon-collapse-down:before {+  content: "\e159";+}+.glyphicon-collapse-up:before {+  content: "\e160";+}+.glyphicon-log-in:before {+  content: "\e161";+}+.glyphicon-flash:before {+  content: "\e162";+}+.glyphicon-log-out:before {+  content: "\e163";+}+.glyphicon-new-window:before {+  content: "\e164";+}+.glyphicon-record:before {+  content: "\e165";+}+.glyphicon-save:before {+  content: "\e166";+}+.glyphicon-open:before {+  content: "\e167";+}+.glyphicon-saved:before {+  content: "\e168";+}+.glyphicon-import:before {+  content: "\e169";+}+.glyphicon-export:before {+  content: "\e170";+}+.glyphicon-send:before {+  content: "\e171";+}+.glyphicon-floppy-disk:before {+  content: "\e172";+}+.glyphicon-floppy-saved:before {+  content: "\e173";+}+.glyphicon-floppy-remove:before {+  content: "\e174";+}+.glyphicon-floppy-save:before {+  content: "\e175";+}+.glyphicon-floppy-open:before {+  content: "\e176";+}+.glyphicon-credit-card:before {+  content: "\e177";+}+.glyphicon-transfer:before {+  content: "\e178";+}+.glyphicon-cutlery:before {+  content: "\e179";+}+.glyphicon-header:before {+  content: "\e180";+}+.glyphicon-compressed:before {+  content: "\e181";+}+.glyphicon-earphone:before {+  content: "\e182";+}+.glyphicon-phone-alt:before {+  content: "\e183";+}+.glyphicon-tower:before {+  content: "\e184";+}+.glyphicon-stats:before {+  content: "\e185";+}+.glyphicon-sd-video:before {+  content: "\e186";+}+.glyphicon-hd-video:before {+  content: "\e187";+}+.glyphicon-subtitles:before {+  content: "\e188";+}+.glyphicon-sound-stereo:before {+  content: "\e189";+}+.glyphicon-sound-dolby:before {+  content: "\e190";+}+.glyphicon-sound-5-1:before {+  content: "\e191";+}+.glyphicon-sound-6-1:before {+  content: "\e192";+}+.glyphicon-sound-7-1:before {+  content: "\e193";+}+.glyphicon-copyright-mark:before {+  content: "\e194";+}+.glyphicon-registration-mark:before {+  content: "\e195";+}+.glyphicon-cloud-download:before {+  content: "\e197";+}+.glyphicon-cloud-upload:before {+  content: "\e198";+}+.glyphicon-tree-conifer:before {+  content: "\e199";+}+.glyphicon-tree-deciduous:before {+  content: "\e200";+}+* {+  -webkit-box-sizing: border-box;+     -moz-box-sizing: border-box;+          box-sizing: border-box;+}+*:before,+*:after {+  -webkit-box-sizing: border-box;+     -moz-box-sizing: border-box;+          box-sizing: border-box;+}+html {+  font-size: 10px;++  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);+}+body {+  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;+  font-size: 14px;+  line-height: 1.42857143;+  color: #333;+  background-color: #fff;+}+input,+button,+select,+textarea {+  font-family: inherit;+  font-size: inherit;+  line-height: inherit;+}+a {+  color: #428bca;+  text-decoration: none;+}+a:hover,+a:focus {+  color: #2a6496;+  text-decoration: underline;+}+a:focus {+  outline: thin dotted;+  outline: 5px auto -webkit-focus-ring-color;+  outline-offset: -2px;+}+figure {+  margin: 0;+}+img {+  vertical-align: middle;+}+.img-responsive,+.thumbnail > img,+.thumbnail a > img,+.carousel-inner > .item > img,+.carousel-inner > .item > a > img {+  display: block;+  width: 100% \9;+  max-width: 100%;+  height: auto;+}+.img-rounded {+  border-radius: 6px;+}+.img-thumbnail {+  display: inline-block;+  width: 100% \9;+  max-width: 100%;+  height: auto;+  padding: 4px;+  line-height: 1.42857143;+  background-color: #fff;+  border: 1px solid #ddd;+  border-radius: 4px;+  -webkit-transition: all .2s ease-in-out;+       -o-transition: all .2s ease-in-out;+          transition: all .2s ease-in-out;+}+.img-circle {+  border-radius: 50%;+}+hr {+  margin-top: 20px;+  margin-bottom: 20px;+  border: 0;+  border-top: 1px solid #eee;+}+.sr-only {+  position: absolute;+  width: 1px;+  height: 1px;+  padding: 0;+  margin: -1px;+  overflow: hidden;+  clip: rect(0, 0, 0, 0);+  border: 0;+}+.sr-only-focusable:active,+.sr-only-focusable:focus {+  position: static;+  width: auto;+  height: auto;+  margin: 0;+  overflow: visible;+  clip: auto;+}+h1,+h2,+h3,+h4,+h5,+h6,+.h1,+.h2,+.h3,+.h4,+.h5,+.h6 {+  font-family: inherit;+  font-weight: 500;+  line-height: 1.1;+  color: inherit;+}+h1 small,+h2 small,+h3 small,+h4 small,+h5 small,+h6 small,+.h1 small,+.h2 small,+.h3 small,+.h4 small,+.h5 small,+.h6 small,+h1 .small,+h2 .small,+h3 .small,+h4 .small,+h5 .small,+h6 .small,+.h1 .small,+.h2 .small,+.h3 .small,+.h4 .small,+.h5 .small,+.h6 .small {+  font-weight: normal;+  line-height: 1;+  color: #777;+}+h1,+.h1,+h2,+.h2,+h3,+.h3 {+  margin-top: 20px;+  margin-bottom: 10px;+}+h1 small,+.h1 small,+h2 small,+.h2 small,+h3 small,+.h3 small,+h1 .small,+.h1 .small,+h2 .small,+.h2 .small,+h3 .small,+.h3 .small {+  font-size: 65%;+}+h4,+.h4,+h5,+.h5,+h6,+.h6 {+  margin-top: 10px;+  margin-bottom: 10px;+}+h4 small,+.h4 small,+h5 small,+.h5 small,+h6 small,+.h6 small,+h4 .small,+.h4 .small,+h5 .small,+.h5 .small,+h6 .small,+.h6 .small {+  font-size: 75%;+}+h1,+.h1 {+  font-size: 36px;+}+h2,+.h2 {+  font-size: 30px;+}+h3,+.h3 {+  font-size: 24px;+}+h4,+.h4 {+  font-size: 18px;+}+h5,+.h5 {+  font-size: 14px;+}+h6,+.h6 {+  font-size: 12px;+}+p {+  margin: 0 0 10px;+}+.lead {+  margin-bottom: 20px;+  font-size: 16px;+  font-weight: 300;+  line-height: 1.4;+}+@media (min-width: 768px) {+  .lead {+    font-size: 21px;+  }+}+small,+.small {+  font-size: 85%;+}+cite {+  font-style: normal;+}+mark,+.mark {+  padding: .2em;+  background-color: #fcf8e3;+}+.text-left {+  text-align: left;+}+.text-right {+  text-align: right;+}+.text-center {+  text-align: center;+}+.text-justify {+  text-align: justify;+}+.text-nowrap {+  white-space: nowrap;+}+.text-lowercase {+  text-transform: lowercase;+}+.text-uppercase {+  text-transform: uppercase;+}+.text-capitalize {+  text-transform: capitalize;+}+.text-muted {+  color: #777;+}+.text-primary {+  color: #428bca;+}+a.text-primary:hover {+  color: #3071a9;+}+.text-success {+  color: #3c763d;+}+a.text-success:hover {+  color: #2b542c;+}+.text-info {+  color: #31708f;+}+a.text-info:hover {+  color: #245269;+}+.text-warning {+  color: #8a6d3b;+}+a.text-warning:hover {+  color: #66512c;+}+.text-danger {+  color: #a94442;+}+a.text-danger:hover {+  color: #843534;+}+.bg-primary {+  color: #fff;+  background-color: #428bca;+}+a.bg-primary:hover {+  background-color: #3071a9;+}+.bg-success {+  background-color: #dff0d8;+}+a.bg-success:hover {+  background-color: #c1e2b3;+}+.bg-info {+  background-color: #d9edf7;+}+a.bg-info:hover {+  background-color: #afd9ee;+}+.bg-warning {+  background-color: #fcf8e3;+}+a.bg-warning:hover {+  background-color: #f7ecb5;+}+.bg-danger {+  background-color: #f2dede;+}+a.bg-danger:hover {+  background-color: #e4b9b9;+}+.page-header {+  padding-bottom: 9px;+  margin: 40px 0 20px;+  border-bottom: 1px solid #eee;+}+ul,+ol {+  margin-top: 0;+  margin-bottom: 10px;+}+ul ul,+ol ul,+ul ol,+ol ol {+  margin-bottom: 0;+}+.list-unstyled {+  padding-left: 0;+  list-style: none;+}+.list-inline {+  padding-left: 0;+  margin-left: -5px;+  list-style: none;+}+.list-inline > li {+  display: inline-block;+  padding-right: 5px;+  padding-left: 5px;+}+dl {+  margin-top: 0;+  margin-bottom: 20px;+}+dt,+dd {+  line-height: 1.42857143;+}+dt {+  font-weight: bold;+}+dd {+  margin-left: 0;+}+@media (min-width: 768px) {+  .dl-horizontal dt {+    float: left;+    width: 160px;+    overflow: hidden;+    clear: left;+    text-align: right;+    text-overflow: ellipsis;+    white-space: nowrap;+  }+  .dl-horizontal dd {+    margin-left: 180px;+  }+}+abbr[title],+abbr[data-original-title] {+  cursor: help;+  border-bottom: 1px dotted #777;+}+.initialism {+  font-size: 90%;+  text-transform: uppercase;+}+blockquote {+  padding: 10px 20px;+  margin: 0 0 20px;+  font-size: 17.5px;+  border-left: 5px solid #eee;+}+blockquote p:last-child,+blockquote ul:last-child,+blockquote ol:last-child {+  margin-bottom: 0;+}+blockquote footer,+blockquote small,+blockquote .small {+  display: block;+  font-size: 80%;+  line-height: 1.42857143;+  color: #777;+}+blockquote footer:before,+blockquote small:before,+blockquote .small:before {+  content: '\2014 \00A0';+}+.blockquote-reverse,+blockquote.pull-right {+  padding-right: 15px;+  padding-left: 0;+  text-align: right;+  border-right: 5px solid #eee;+  border-left: 0;+}+.blockquote-reverse footer:before,+blockquote.pull-right footer:before,+.blockquote-reverse small:before,+blockquote.pull-right small:before,+.blockquote-reverse .small:before,+blockquote.pull-right .small:before {+  content: '';+}+.blockquote-reverse footer:after,+blockquote.pull-right footer:after,+.blockquote-reverse small:after,+blockquote.pull-right small:after,+.blockquote-reverse .small:after,+blockquote.pull-right .small:after {+  content: '\00A0 \2014';+}+blockquote:before,+blockquote:after {+  content: "";+}+address {+  margin-bottom: 20px;+  font-style: normal;+  line-height: 1.42857143;+}+code,+kbd,+pre,+samp {+  font-family: Menlo, Monaco, Consolas, "Courier New", monospace;+}+code {+  padding: 2px 4px;+  font-size: 90%;+  color: #c7254e;+  background-color: #f9f2f4;+  border-radius: 4px;+}+kbd {+  padding: 2px 4px;+  font-size: 90%;+  color: #fff;+  background-color: #333;+  border-radius: 3px;+  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);+          box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);+}+kbd kbd {+  padding: 0;+  font-size: 100%;+  -webkit-box-shadow: none;+          box-shadow: none;+}+pre {+  display: block;+  padding: 9.5px;+  margin: 0 0 10px;+  font-size: 13px;+  line-height: 1.42857143;+  color: #333;+  word-break: break-all;+  word-wrap: break-word;+  background-color: #f5f5f5;+  border: 1px solid #ccc;+  border-radius: 4px;+}+pre code {+  padding: 0;+  font-size: inherit;+  color: inherit;+  white-space: pre-wrap;+  background-color: transparent;+  border-radius: 0;+}+.pre-scrollable {+  max-height: 340px;+  overflow-y: scroll;+}+.container {+  padding-right: 15px;+  padding-left: 15px;+  margin-right: auto;+  margin-left: auto;+}+@media (min-width: 768px) {+  .container {+    width: 750px;+  }+}+@media (min-width: 992px) {+  .container {+    width: 970px;+  }+}+@media (min-width: 1200px) {+  .container {+    width: 1170px;+  }+}+.container-fluid {+  padding-right: 15px;+  padding-left: 15px;+  margin-right: auto;+  margin-left: auto;+}+.row {+  margin-right: -15px;+  margin-left: -15px;+}+.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {+  position: relative;+  min-height: 1px;+  padding-right: 15px;+  padding-left: 15px;+}+.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {+  float: left;+}+.col-xs-12 {+  width: 100%;+}+.col-xs-11 {+  width: 91.66666667%;+}+.col-xs-10 {+  width: 83.33333333%;+}+.col-xs-9 {+  width: 75%;+}+.col-xs-8 {+  width: 66.66666667%;+}+.col-xs-7 {+  width: 58.33333333%;+}+.col-xs-6 {+  width: 50%;+}+.col-xs-5 {+  width: 41.66666667%;+}+.col-xs-4 {+  width: 33.33333333%;+}+.col-xs-3 {+  width: 25%;+}+.col-xs-2 {+  width: 16.66666667%;+}+.col-xs-1 {+  width: 8.33333333%;+}+.col-xs-pull-12 {+  right: 100%;+}+.col-xs-pull-11 {+  right: 91.66666667%;+}+.col-xs-pull-10 {+  right: 83.33333333%;+}+.col-xs-pull-9 {+  right: 75%;+}+.col-xs-pull-8 {+  right: 66.66666667%;+}+.col-xs-pull-7 {+  right: 58.33333333%;+}+.col-xs-pull-6 {+  right: 50%;+}+.col-xs-pull-5 {+  right: 41.66666667%;+}+.col-xs-pull-4 {+  right: 33.33333333%;+}+.col-xs-pull-3 {+  right: 25%;+}+.col-xs-pull-2 {+  right: 16.66666667%;+}+.col-xs-pull-1 {+  right: 8.33333333%;+}+.col-xs-pull-0 {+  right: auto;+}+.col-xs-push-12 {+  left: 100%;+}+.col-xs-push-11 {+  left: 91.66666667%;+}+.col-xs-push-10 {+  left: 83.33333333%;+}+.col-xs-push-9 {+  left: 75%;+}+.col-xs-push-8 {+  left: 66.66666667%;+}+.col-xs-push-7 {+  left: 58.33333333%;+}+.col-xs-push-6 {+  left: 50%;+}+.col-xs-push-5 {+  left: 41.66666667%;+}+.col-xs-push-4 {+  left: 33.33333333%;+}+.col-xs-push-3 {+  left: 25%;+}+.col-xs-push-2 {+  left: 16.66666667%;+}+.col-xs-push-1 {+  left: 8.33333333%;+}+.col-xs-push-0 {+  left: auto;+}+.col-xs-offset-12 {+  margin-left: 100%;+}+.col-xs-offset-11 {+  margin-left: 91.66666667%;+}+.col-xs-offset-10 {+  margin-left: 83.33333333%;+}+.col-xs-offset-9 {+  margin-left: 75%;+}+.col-xs-offset-8 {+  margin-left: 66.66666667%;+}+.col-xs-offset-7 {+  margin-left: 58.33333333%;+}+.col-xs-offset-6 {+  margin-left: 50%;+}+.col-xs-offset-5 {+  margin-left: 41.66666667%;+}+.col-xs-offset-4 {+  margin-left: 33.33333333%;+}+.col-xs-offset-3 {+  margin-left: 25%;+}+.col-xs-offset-2 {+  margin-left: 16.66666667%;+}+.col-xs-offset-1 {+  margin-left: 8.33333333%;+}+.col-xs-offset-0 {+  margin-left: 0;+}+@media (min-width: 768px) {+  .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {+    float: left;+  }+  .col-sm-12 {+    width: 100%;+  }+  .col-sm-11 {+    width: 91.66666667%;+  }+  .col-sm-10 {+    width: 83.33333333%;+  }+  .col-sm-9 {+    width: 75%;+  }+  .col-sm-8 {+    width: 66.66666667%;+  }+  .col-sm-7 {+    width: 58.33333333%;+  }+  .col-sm-6 {+    width: 50%;+  }+  .col-sm-5 {+    width: 41.66666667%;+  }+  .col-sm-4 {+    width: 33.33333333%;+  }+  .col-sm-3 {+    width: 25%;+  }+  .col-sm-2 {+    width: 16.66666667%;+  }+  .col-sm-1 {+    width: 8.33333333%;+  }+  .col-sm-pull-12 {+    right: 100%;+  }+  .col-sm-pull-11 {+    right: 91.66666667%;+  }+  .col-sm-pull-10 {+    right: 83.33333333%;+  }+  .col-sm-pull-9 {+    right: 75%;+  }+  .col-sm-pull-8 {+    right: 66.66666667%;+  }+  .col-sm-pull-7 {+    right: 58.33333333%;+  }+  .col-sm-pull-6 {+    right: 50%;+  }+  .col-sm-pull-5 {+    right: 41.66666667%;+  }+  .col-sm-pull-4 {+    right: 33.33333333%;+  }+  .col-sm-pull-3 {+    right: 25%;+  }+  .col-sm-pull-2 {+    right: 16.66666667%;+  }+  .col-sm-pull-1 {+    right: 8.33333333%;+  }+  .col-sm-pull-0 {+    right: auto;+  }+  .col-sm-push-12 {+    left: 100%;+  }+  .col-sm-push-11 {+    left: 91.66666667%;+  }+  .col-sm-push-10 {+    left: 83.33333333%;+  }+  .col-sm-push-9 {+    left: 75%;+  }+  .col-sm-push-8 {+    left: 66.66666667%;+  }+  .col-sm-push-7 {+    left: 58.33333333%;+  }+  .col-sm-push-6 {+    left: 50%;+  }+  .col-sm-push-5 {+    left: 41.66666667%;+  }+  .col-sm-push-4 {+    left: 33.33333333%;+  }+  .col-sm-push-3 {+    left: 25%;+  }+  .col-sm-push-2 {+    left: 16.66666667%;+  }+  .col-sm-push-1 {+    left: 8.33333333%;+  }+  .col-sm-push-0 {+    left: auto;+  }+  .col-sm-offset-12 {+    margin-left: 100%;+  }+  .col-sm-offset-11 {+    margin-left: 91.66666667%;+  }+  .col-sm-offset-10 {+    margin-left: 83.33333333%;+  }+  .col-sm-offset-9 {+    margin-left: 75%;+  }+  .col-sm-offset-8 {+    margin-left: 66.66666667%;+  }+  .col-sm-offset-7 {+    margin-left: 58.33333333%;+  }+  .col-sm-offset-6 {+    margin-left: 50%;+  }+  .col-sm-offset-5 {+    margin-left: 41.66666667%;+  }+  .col-sm-offset-4 {+    margin-left: 33.33333333%;+  }+  .col-sm-offset-3 {+    margin-left: 25%;+  }+  .col-sm-offset-2 {+    margin-left: 16.66666667%;+  }+  .col-sm-offset-1 {+    margin-left: 8.33333333%;+  }+  .col-sm-offset-0 {+    margin-left: 0;+  }+}+@media (min-width: 992px) {+  .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {+    float: left;+  }+  .col-md-12 {+    width: 100%;+  }+  .col-md-11 {+    width: 91.66666667%;+  }+  .col-md-10 {+    width: 83.33333333%;+  }+  .col-md-9 {+    width: 75%;+  }+  .col-md-8 {+    width: 66.66666667%;+  }+  .col-md-7 {+    width: 58.33333333%;+  }+  .col-md-6 {+    width: 50%;+  }+  .col-md-5 {+    width: 41.66666667%;+  }+  .col-md-4 {+    width: 33.33333333%;+  }+  .col-md-3 {+    width: 25%;+  }+  .col-md-2 {+    width: 16.66666667%;+  }+  .col-md-1 {+    width: 8.33333333%;+  }+  .col-md-pull-12 {+    right: 100%;+  }+  .col-md-pull-11 {+    right: 91.66666667%;+  }+  .col-md-pull-10 {+    right: 83.33333333%;+  }+  .col-md-pull-9 {+    right: 75%;+  }+  .col-md-pull-8 {+    right: 66.66666667%;+  }+  .col-md-pull-7 {+    right: 58.33333333%;+  }+  .col-md-pull-6 {+    right: 50%;+  }+  .col-md-pull-5 {+    right: 41.66666667%;+  }+  .col-md-pull-4 {+    right: 33.33333333%;+  }+  .col-md-pull-3 {+    right: 25%;+  }+  .col-md-pull-2 {+    right: 16.66666667%;+  }+  .col-md-pull-1 {+    right: 8.33333333%;+  }+  .col-md-pull-0 {+    right: auto;+  }+  .col-md-push-12 {+    left: 100%;+  }+  .col-md-push-11 {+    left: 91.66666667%;+  }+  .col-md-push-10 {+    left: 83.33333333%;+  }+  .col-md-push-9 {+    left: 75%;+  }+  .col-md-push-8 {+    left: 66.66666667%;+  }+  .col-md-push-7 {+    left: 58.33333333%;+  }+  .col-md-push-6 {+    left: 50%;+  }+  .col-md-push-5 {+    left: 41.66666667%;+  }+  .col-md-push-4 {+    left: 33.33333333%;+  }+  .col-md-push-3 {+    left: 25%;+  }+  .col-md-push-2 {+    left: 16.66666667%;+  }+  .col-md-push-1 {+    left: 8.33333333%;+  }+  .col-md-push-0 {+    left: auto;+  }+  .col-md-offset-12 {+    margin-left: 100%;+  }+  .col-md-offset-11 {+    margin-left: 91.66666667%;+  }+  .col-md-offset-10 {+    margin-left: 83.33333333%;+  }+  .col-md-offset-9 {+    margin-left: 75%;+  }+  .col-md-offset-8 {+    margin-left: 66.66666667%;+  }+  .col-md-offset-7 {+    margin-left: 58.33333333%;+  }+  .col-md-offset-6 {+    margin-left: 50%;+  }+  .col-md-offset-5 {+    margin-left: 41.66666667%;+  }+  .col-md-offset-4 {+    margin-left: 33.33333333%;+  }+  .col-md-offset-3 {+    margin-left: 25%;+  }+  .col-md-offset-2 {+    margin-left: 16.66666667%;+  }+  .col-md-offset-1 {+    margin-left: 8.33333333%;+  }+  .col-md-offset-0 {+    margin-left: 0;+  }+}+@media (min-width: 1200px) {+  .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {+    float: left;+  }+  .col-lg-12 {+    width: 100%;+  }+  .col-lg-11 {+    width: 91.66666667%;+  }+  .col-lg-10 {+    width: 83.33333333%;+  }+  .col-lg-9 {+    width: 75%;+  }+  .col-lg-8 {+    width: 66.66666667%;+  }+  .col-lg-7 {+    width: 58.33333333%;+  }+  .col-lg-6 {+    width: 50%;+  }+  .col-lg-5 {+    width: 41.66666667%;+  }+  .col-lg-4 {+    width: 33.33333333%;+  }+  .col-lg-3 {+    width: 25%;+  }+  .col-lg-2 {+    width: 16.66666667%;+  }+  .col-lg-1 {+    width: 8.33333333%;+  }+  .col-lg-pull-12 {+    right: 100%;+  }+  .col-lg-pull-11 {+    right: 91.66666667%;+  }+  .col-lg-pull-10 {+    right: 83.33333333%;+  }+  .col-lg-pull-9 {+    right: 75%;+  }+  .col-lg-pull-8 {+    right: 66.66666667%;+  }+  .col-lg-pull-7 {+    right: 58.33333333%;+  }+  .col-lg-pull-6 {+    right: 50%;+  }+  .col-lg-pull-5 {+    right: 41.66666667%;+  }+  .col-lg-pull-4 {+    right: 33.33333333%;+  }+  .col-lg-pull-3 {+    right: 25%;+  }+  .col-lg-pull-2 {+    right: 16.66666667%;+  }+  .col-lg-pull-1 {+    right: 8.33333333%;+  }+  .col-lg-pull-0 {+    right: auto;+  }+  .col-lg-push-12 {+    left: 100%;+  }+  .col-lg-push-11 {+    left: 91.66666667%;+  }+  .col-lg-push-10 {+    left: 83.33333333%;+  }+  .col-lg-push-9 {+    left: 75%;+  }+  .col-lg-push-8 {+    left: 66.66666667%;+  }+  .col-lg-push-7 {+    left: 58.33333333%;+  }+  .col-lg-push-6 {+    left: 50%;+  }+  .col-lg-push-5 {+    left: 41.66666667%;+  }+  .col-lg-push-4 {+    left: 33.33333333%;+  }+  .col-lg-push-3 {+    left: 25%;+  }+  .col-lg-push-2 {+    left: 16.66666667%;+  }+  .col-lg-push-1 {+    left: 8.33333333%;+  }+  .col-lg-push-0 {+    left: auto;+  }+  .col-lg-offset-12 {+    margin-left: 100%;+  }+  .col-lg-offset-11 {+    margin-left: 91.66666667%;+  }+  .col-lg-offset-10 {+    margin-left: 83.33333333%;+  }+  .col-lg-offset-9 {+    margin-left: 75%;+  }+  .col-lg-offset-8 {+    margin-left: 66.66666667%;+  }+  .col-lg-offset-7 {+    margin-left: 58.33333333%;+  }+  .col-lg-offset-6 {+    margin-left: 50%;+  }+  .col-lg-offset-5 {+    margin-left: 41.66666667%;+  }+  .col-lg-offset-4 {+    margin-left: 33.33333333%;+  }+  .col-lg-offset-3 {+    margin-left: 25%;+  }+  .col-lg-offset-2 {+    margin-left: 16.66666667%;+  }+  .col-lg-offset-1 {+    margin-left: 8.33333333%;+  }+  .col-lg-offset-0 {+    margin-left: 0;+  }+}+table {+  background-color: transparent;+}+th {+  text-align: left;+}+.table {+  width: 100%;+  max-width: 100%;+  margin-bottom: 20px;+}+.table > thead > tr > th,+.table > tbody > tr > th,+.table > tfoot > tr > th,+.table > thead > tr > td,+.table > tbody > tr > td,+.table > tfoot > tr > td {+  padding: 8px;+  line-height: 1.42857143;+  vertical-align: top;+  border-top: 1px solid #ddd;+}+.table > thead > tr > th {+  vertical-align: bottom;+  border-bottom: 2px solid #ddd;+}+.table > caption + thead > tr:first-child > th,+.table > colgroup + thead > tr:first-child > th,+.table > thead:first-child > tr:first-child > th,+.table > caption + thead > tr:first-child > td,+.table > colgroup + thead > tr:first-child > td,+.table > thead:first-child > tr:first-child > td {+  border-top: 0;+}+.table > tbody + tbody {+  border-top: 2px solid #ddd;+}+.table .table {+  background-color: #fff;+}+.table-condensed > thead > tr > th,+.table-condensed > tbody > tr > th,+.table-condensed > tfoot > tr > th,+.table-condensed > thead > tr > td,+.table-condensed > tbody > tr > td,+.table-condensed > tfoot > tr > td {+  padding: 5px;+}+.table-bordered {+  border: 1px solid #ddd;+}+.table-bordered > thead > tr > th,+.table-bordered > tbody > tr > th,+.table-bordered > tfoot > tr > th,+.table-bordered > thead > tr > td,+.table-bordered > tbody > tr > td,+.table-bordered > tfoot > tr > td {+  border: 1px solid #ddd;+}+.table-bordered > thead > tr > th,+.table-bordered > thead > tr > td {+  border-bottom-width: 2px;+}+.table-striped > tbody > tr:nth-child(odd) > td,+.table-striped > tbody > tr:nth-child(odd) > th {+  background-color: #f9f9f9;+}+.table-hover > tbody > tr:hover > td,+.table-hover > tbody > tr:hover > th {+  background-color: #f5f5f5;+}+table col[class*="col-"] {+  position: static;+  display: table-column;+  float: none;+}+table td[class*="col-"],+table th[class*="col-"] {+  position: static;+  display: table-cell;+  float: none;+}+.table > thead > tr > td.active,+.table > tbody > tr > td.active,+.table > tfoot > tr > td.active,+.table > thead > tr > th.active,+.table > tbody > tr > th.active,+.table > tfoot > tr > th.active,+.table > thead > tr.active > td,+.table > tbody > tr.active > td,+.table > tfoot > tr.active > td,+.table > thead > tr.active > th,+.table > tbody > tr.active > th,+.table > tfoot > tr.active > th {+  background-color: #f5f5f5;+}+.table-hover > tbody > tr > td.active:hover,+.table-hover > tbody > tr > th.active:hover,+.table-hover > tbody > tr.active:hover > td,+.table-hover > tbody > tr:hover > .active,+.table-hover > tbody > tr.active:hover > th {+  background-color: #e8e8e8;+}+.table > thead > tr > td.success,+.table > tbody > tr > td.success,+.table > tfoot > tr > td.success,+.table > thead > tr > th.success,+.table > tbody > tr > th.success,+.table > tfoot > tr > th.success,+.table > thead > tr.success > td,+.table > tbody > tr.success > td,+.table > tfoot > tr.success > td,+.table > thead > tr.success > th,+.table > tbody > tr.success > th,+.table > tfoot > tr.success > th {+  background-color: #dff0d8;+}+.table-hover > tbody > tr > td.success:hover,+.table-hover > tbody > tr > th.success:hover,+.table-hover > tbody > tr.success:hover > td,+.table-hover > tbody > tr:hover > .success,+.table-hover > tbody > tr.success:hover > th {+  background-color: #d0e9c6;+}+.table > thead > tr > td.info,+.table > tbody > tr > td.info,+.table > tfoot > tr > td.info,+.table > thead > tr > th.info,+.table > tbody > tr > th.info,+.table > tfoot > tr > th.info,+.table > thead > tr.info > td,+.table > tbody > tr.info > td,+.table > tfoot > tr.info > td,+.table > thead > tr.info > th,+.table > tbody > tr.info > th,+.table > tfoot > tr.info > th {+  background-color: #d9edf7;+}+.table-hover > tbody > tr > td.info:hover,+.table-hover > tbody > tr > th.info:hover,+.table-hover > tbody > tr.info:hover > td,+.table-hover > tbody > tr:hover > .info,+.table-hover > tbody > tr.info:hover > th {+  background-color: #c4e3f3;+}+.table > thead > tr > td.warning,+.table > tbody > tr > td.warning,+.table > tfoot > tr > td.warning,+.table > thead > tr > th.warning,+.table > tbody > tr > th.warning,+.table > tfoot > tr > th.warning,+.table > thead > tr.warning > td,+.table > tbody > tr.warning > td,+.table > tfoot > tr.warning > td,+.table > thead > tr.warning > th,+.table > tbody > tr.warning > th,+.table > tfoot > tr.warning > th {+  background-color: #fcf8e3;+}+.table-hover > tbody > tr > td.warning:hover,+.table-hover > tbody > tr > th.warning:hover,+.table-hover > tbody > tr.warning:hover > td,+.table-hover > tbody > tr:hover > .warning,+.table-hover > tbody > tr.warning:hover > th {+  background-color: #faf2cc;+}+.table > thead > tr > td.danger,+.table > tbody > tr > td.danger,+.table > tfoot > tr > td.danger,+.table > thead > tr > th.danger,+.table > tbody > tr > th.danger,+.table > tfoot > tr > th.danger,+.table > thead > tr.danger > td,+.table > tbody > tr.danger > td,+.table > tfoot > tr.danger > td,+.table > thead > tr.danger > th,+.table > tbody > tr.danger > th,+.table > tfoot > tr.danger > th {+  background-color: #f2dede;+}+.table-hover > tbody > tr > td.danger:hover,+.table-hover > tbody > tr > th.danger:hover,+.table-hover > tbody > tr.danger:hover > td,+.table-hover > tbody > tr:hover > .danger,+.table-hover > tbody > tr.danger:hover > th {+  background-color: #ebcccc;+}+@media screen and (max-width: 767px) {+  .table-responsive {+    width: 100%;+    margin-bottom: 15px;+    overflow-x: auto;+    overflow-y: hidden;+    -webkit-overflow-scrolling: touch;+    -ms-overflow-style: -ms-autohiding-scrollbar;+    border: 1px solid #ddd;+  }+  .table-responsive > .table {+    margin-bottom: 0;+  }+  .table-responsive > .table > thead > tr > th,+  .table-responsive > .table > tbody > tr > th,+  .table-responsive > .table > tfoot > tr > th,+  .table-responsive > .table > thead > tr > td,+  .table-responsive > .table > tbody > tr > td,+  .table-responsive > .table > tfoot > tr > td {+    white-space: nowrap;+  }+  .table-responsive > .table-bordered {+    border: 0;+  }+  .table-responsive > .table-bordered > thead > tr > th:first-child,+  .table-responsive > .table-bordered > tbody > tr > th:first-child,+  .table-responsive > .table-bordered > tfoot > tr > th:first-child,+  .table-responsive > .table-bordered > thead > tr > td:first-child,+  .table-responsive > .table-bordered > tbody > tr > td:first-child,+  .table-responsive > .table-bordered > tfoot > tr > td:first-child {+    border-left: 0;+  }+  .table-responsive > .table-bordered > thead > tr > th:last-child,+  .table-responsive > .table-bordered > tbody > tr > th:last-child,+  .table-responsive > .table-bordered > tfoot > tr > th:last-child,+  .table-responsive > .table-bordered > thead > tr > td:last-child,+  .table-responsive > .table-bordered > tbody > tr > td:last-child,+  .table-responsive > .table-bordered > tfoot > tr > td:last-child {+    border-right: 0;+  }+  .table-responsive > .table-bordered > tbody > tr:last-child > th,+  .table-responsive > .table-bordered > tfoot > tr:last-child > th,+  .table-responsive > .table-bordered > tbody > tr:last-child > td,+  .table-responsive > .table-bordered > tfoot > tr:last-child > td {+    border-bottom: 0;+  }+}+fieldset {+  min-width: 0;+  padding: 0;+  margin: 0;+  border: 0;+}+legend {+  display: block;+  width: 100%;+  padding: 0;+  margin-bottom: 20px;+  font-size: 21px;+  line-height: inherit;+  color: #333;+  border: 0;+  border-bottom: 1px solid #e5e5e5;+}+label {+  display: inline-block;+  max-width: 100%;+  margin-bottom: 5px;+  font-weight: bold;+}+input[type="search"] {+  -webkit-box-sizing: border-box;+     -moz-box-sizing: border-box;+          box-sizing: border-box;+}+input[type="radio"],+input[type="checkbox"] {+  margin: 4px 0 0;+  margin-top: 1px \9;+  line-height: normal;+}+input[type="file"] {+  display: block;+}+input[type="range"] {+  display: block;+  width: 100%;+}+select[multiple],+select[size] {+  height: auto;+}+input[type="file"]:focus,+input[type="radio"]:focus,+input[type="checkbox"]:focus {+  outline: thin dotted;+  outline: 5px auto -webkit-focus-ring-color;+  outline-offset: -2px;+}+output {+  display: block;+  padding-top: 7px;+  font-size: 14px;+  line-height: 1.42857143;+  color: #555;+}+.form-control {+  display: block;+  width: 100%;+  height: 34px;+  padding: 6px 12px;+  font-size: 14px;+  line-height: 1.42857143;+  color: #555;+  background-color: #fff;+  background-image: none;+  border: 1px solid #ccc;+  border-radius: 4px;+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);+          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);+  -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;+       -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;+          transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;+}+.form-control:focus {+  border-color: #66afe9;+  outline: 0;+  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);+          box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);+}+.form-control::-moz-placeholder {+  color: #777;+  opacity: 1;+}+.form-control:-ms-input-placeholder {+  color: #777;+}+.form-control::-webkit-input-placeholder {+  color: #777;+}+.form-control[disabled],+.form-control[readonly],+fieldset[disabled] .form-control {+  cursor: not-allowed;+  background-color: #eee;+  opacity: 1;+}+textarea.form-control {+  height: auto;+}+input[type="search"] {+  -webkit-appearance: none;+}+input[type="date"],+input[type="time"],+input[type="datetime-local"],+input[type="month"] {+  line-height: 34px;+  line-height: 1.42857143 \0;+}+input[type="date"].input-sm,+input[type="time"].input-sm,+input[type="datetime-local"].input-sm,+input[type="month"].input-sm {+  line-height: 30px;+}+input[type="date"].input-lg,+input[type="time"].input-lg,+input[type="datetime-local"].input-lg,+input[type="month"].input-lg {+  line-height: 46px;+}+.form-group {+  margin-bottom: 15px;+}+.radio,+.checkbox {+  position: relative;+  display: block;+  min-height: 20px;+  margin-top: 10px;+  margin-bottom: 10px;+}+.radio label,+.checkbox label {+  padding-left: 20px;+  margin-bottom: 0;+  font-weight: normal;+  cursor: pointer;+}+.radio input[type="radio"],+.radio-inline input[type="radio"],+.checkbox input[type="checkbox"],+.checkbox-inline input[type="checkbox"] {+  position: absolute;+  margin-top: 4px \9;+  margin-left: -20px;+}+.radio + .radio,+.checkbox + .checkbox {+  margin-top: -5px;+}+.radio-inline,+.checkbox-inline {+  display: inline-block;+  padding-left: 20px;+  margin-bottom: 0;+  font-weight: normal;+  vertical-align: middle;+  cursor: pointer;+}+.radio-inline + .radio-inline,+.checkbox-inline + .checkbox-inline {+  margin-top: 0;+  margin-left: 10px;+}+input[type="radio"][disabled],+input[type="checkbox"][disabled],+input[type="radio"].disabled,+input[type="checkbox"].disabled,+fieldset[disabled] input[type="radio"],+fieldset[disabled] input[type="checkbox"] {+  cursor: not-allowed;+}+.radio-inline.disabled,+.checkbox-inline.disabled,+fieldset[disabled] .radio-inline,+fieldset[disabled] .checkbox-inline {+  cursor: not-allowed;+}+.radio.disabled label,+.checkbox.disabled label,+fieldset[disabled] .radio label,+fieldset[disabled] .checkbox label {+  cursor: not-allowed;+}+.form-control-static {+  padding-top: 7px;+  padding-bottom: 7px;+  margin-bottom: 0;+}+.form-control-static.input-lg,+.form-control-static.input-sm {+  padding-right: 0;+  padding-left: 0;+}+.input-sm,+.form-horizontal .form-group-sm .form-control {+  height: 30px;+  padding: 5px 10px;+  font-size: 12px;+  line-height: 1.5;+  border-radius: 3px;+}+select.input-sm {+  height: 30px;+  line-height: 30px;+}+textarea.input-sm,+select[multiple].input-sm {+  height: auto;+}+.input-lg,+.form-horizontal .form-group-lg .form-control {+  height: 46px;+  padding: 10px 16px;+  font-size: 18px;+  line-height: 1.33;+  border-radius: 6px;+}+select.input-lg {+  height: 46px;+  line-height: 46px;+}+textarea.input-lg,+select[multiple].input-lg {+  height: auto;+}+.has-feedback {+  position: relative;+}+.has-feedback .form-control {+  padding-right: 42.5px;+}+.form-control-feedback {+  position: absolute;+  top: 25px;+  right: 0;+  z-index: 2;+  display: block;+  width: 34px;+  height: 34px;+  line-height: 34px;+  text-align: center;+}+.input-lg + .form-control-feedback {+  width: 46px;+  height: 46px;+  line-height: 46px;+}+.input-sm + .form-control-feedback {+  width: 30px;+  height: 30px;+  line-height: 30px;+}+.has-success .help-block,+.has-success .control-label,+.has-success .radio,+.has-success .checkbox,+.has-success .radio-inline,+.has-success .checkbox-inline {+  color: #3c763d;+}+.has-success .form-control {+  border-color: #3c763d;+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);+          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);+}+.has-success .form-control:focus {+  border-color: #2b542c;+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;+          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;+}+.has-success .input-group-addon {+  color: #3c763d;+  background-color: #dff0d8;+  border-color: #3c763d;+}+.has-success .form-control-feedback {+  color: #3c763d;+}+.has-warning .help-block,+.has-warning .control-label,+.has-warning .radio,+.has-warning .checkbox,+.has-warning .radio-inline,+.has-warning .checkbox-inline {+  color: #8a6d3b;+}+.has-warning .form-control {+  border-color: #8a6d3b;+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);+          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);+}+.has-warning .form-control:focus {+  border-color: #66512c;+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;+          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;+}+.has-warning .input-group-addon {+  color: #8a6d3b;+  background-color: #fcf8e3;+  border-color: #8a6d3b;+}+.has-warning .form-control-feedback {+  color: #8a6d3b;+}+.has-error .help-block,+.has-error .control-label,+.has-error .radio,+.has-error .checkbox,+.has-error .radio-inline,+.has-error .checkbox-inline {+  color: #a94442;+}+.has-error .form-control {+  border-color: #a94442;+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);+          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);+}+.has-error .form-control:focus {+  border-color: #843534;+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;+          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;+}+.has-error .input-group-addon {+  color: #a94442;+  background-color: #f2dede;+  border-color: #a94442;+}+.has-error .form-control-feedback {+  color: #a94442;+}+.has-feedback label.sr-only ~ .form-control-feedback {+  top: 0;+}+.help-block {+  display: block;+  margin-top: 5px;+  margin-bottom: 10px;+  color: #737373;+}+@media (min-width: 768px) {+  .form-inline .form-group {+    display: inline-block;+    margin-bottom: 0;+    vertical-align: middle;+  }+  .form-inline .form-control {+    display: inline-block;+    width: auto;+    vertical-align: middle;+  }+  .form-inline .input-group {+    display: inline-table;+    vertical-align: middle;+  }+  .form-inline .input-group .input-group-addon,+  .form-inline .input-group .input-group-btn,+  .form-inline .input-group .form-control {+    width: auto;+  }+  .form-inline .input-group > .form-control {+    width: 100%;+  }+  .form-inline .control-label {+    margin-bottom: 0;+    vertical-align: middle;+  }+  .form-inline .radio,+  .form-inline .checkbox {+    display: inline-block;+    margin-top: 0;+    margin-bottom: 0;+    vertical-align: middle;+  }+  .form-inline .radio label,+  .form-inline .checkbox label {+    padding-left: 0;+  }+  .form-inline .radio input[type="radio"],+  .form-inline .checkbox input[type="checkbox"] {+    position: relative;+    margin-left: 0;+  }+  .form-inline .has-feedback .form-control-feedback {+    top: 0;+  }+}+.form-horizontal .radio,+.form-horizontal .checkbox,+.form-horizontal .radio-inline,+.form-horizontal .checkbox-inline {+  padding-top: 7px;+  margin-top: 0;+  margin-bottom: 0;+}+.form-horizontal .radio,+.form-horizontal .checkbox {+  min-height: 27px;+}+.form-horizontal .form-group {+  margin-right: -15px;+  margin-left: -15px;+}+@media (min-width: 768px) {+  .form-horizontal .control-label {+    padding-top: 7px;+    margin-bottom: 0;+    text-align: right;+  }+}+.form-horizontal .has-feedback .form-control-feedback {+  top: 0;+  right: 15px;+}+@media (min-width: 768px) {+  .form-horizontal .form-group-lg .control-label {+    padding-top: 14.3px;+  }+}+@media (min-width: 768px) {+  .form-horizontal .form-group-sm .control-label {+    padding-top: 6px;+  }+}+.btn {+  display: inline-block;+  padding: 6px 12px;+  margin-bottom: 0;+  font-size: 14px;+  font-weight: normal;+  line-height: 1.42857143;+  text-align: center;+  white-space: nowrap;+  vertical-align: middle;+  cursor: pointer;+  -webkit-user-select: none;+     -moz-user-select: none;+      -ms-user-select: none;+          user-select: none;+  background-image: none;+  border: 1px solid transparent;+  border-radius: 4px;+}+.btn:focus,+.btn:active:focus,+.btn.active:focus {+  outline: thin dotted;+  outline: 5px auto -webkit-focus-ring-color;+  outline-offset: -2px;+}+.btn:hover,+.btn:focus {+  color: #333;+  text-decoration: none;+}+.btn:active,+.btn.active {+  background-image: none;+  outline: 0;+  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);+          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);+}+.btn.disabled,+.btn[disabled],+fieldset[disabled] .btn {+  pointer-events: none;+  cursor: not-allowed;+  filter: alpha(opacity=65);+  -webkit-box-shadow: none;+          box-shadow: none;+  opacity: .65;+}+.btn-default {+  color: #333;+  background-color: #fff;+  border-color: #ccc;+}+.btn-default:hover,+.btn-default:focus,+.btn-default:active,+.btn-default.active,+.open > .dropdown-toggle.btn-default {+  color: #333;+  background-color: #e6e6e6;+  border-color: #adadad;+}+.btn-default:active,+.btn-default.active,+.open > .dropdown-toggle.btn-default {+  background-image: none;+}+.btn-default.disabled,+.btn-default[disabled],+fieldset[disabled] .btn-default,+.btn-default.disabled:hover,+.btn-default[disabled]:hover,+fieldset[disabled] .btn-default:hover,+.btn-default.disabled:focus,+.btn-default[disabled]:focus,+fieldset[disabled] .btn-default:focus,+.btn-default.disabled:active,+.btn-default[disabled]:active,+fieldset[disabled] .btn-default:active,+.btn-default.disabled.active,+.btn-default[disabled].active,+fieldset[disabled] .btn-default.active {+  background-color: #fff;+  border-color: #ccc;+}+.btn-default .badge {+  color: #fff;+  background-color: #333;+}+.btn-primary {+  color: #fff;+  background-color: #428bca;+  border-color: #357ebd;+}+.btn-primary:hover,+.btn-primary:focus,+.btn-primary:active,+.btn-primary.active,+.open > .dropdown-toggle.btn-primary {+  color: #fff;+  background-color: #3071a9;+  border-color: #285e8e;+}+.btn-primary:active,+.btn-primary.active,+.open > .dropdown-toggle.btn-primary {+  background-image: none;+}+.btn-primary.disabled,+.btn-primary[disabled],+fieldset[disabled] .btn-primary,+.btn-primary.disabled:hover,+.btn-primary[disabled]:hover,+fieldset[disabled] .btn-primary:hover,+.btn-primary.disabled:focus,+.btn-primary[disabled]:focus,+fieldset[disabled] .btn-primary:focus,+.btn-primary.disabled:active,+.btn-primary[disabled]:active,+fieldset[disabled] .btn-primary:active,+.btn-primary.disabled.active,+.btn-primary[disabled].active,+fieldset[disabled] .btn-primary.active {+  background-color: #428bca;+  border-color: #357ebd;+}+.btn-primary .badge {+  color: #428bca;+  background-color: #fff;+}+.btn-success {+  color: #fff;+  background-color: #5cb85c;+  border-color: #4cae4c;+}+.btn-success:hover,+.btn-success:focus,+.btn-success:active,+.btn-success.active,+.open > .dropdown-toggle.btn-success {+  color: #fff;+  background-color: #449d44;+  border-color: #398439;+}+.btn-success:active,+.btn-success.active,+.open > .dropdown-toggle.btn-success {+  background-image: none;+}+.btn-success.disabled,+.btn-success[disabled],+fieldset[disabled] .btn-success,+.btn-success.disabled:hover,+.btn-success[disabled]:hover,+fieldset[disabled] .btn-success:hover,+.btn-success.disabled:focus,+.btn-success[disabled]:focus,+fieldset[disabled] .btn-success:focus,+.btn-success.disabled:active,+.btn-success[disabled]:active,+fieldset[disabled] .btn-success:active,+.btn-success.disabled.active,+.btn-success[disabled].active,+fieldset[disabled] .btn-success.active {+  background-color: #5cb85c;+  border-color: #4cae4c;+}+.btn-success .badge {+  color: #5cb85c;+  background-color: #fff;+}+.btn-info {+  color: #fff;+  background-color: #5bc0de;+  border-color: #46b8da;+}+.btn-info:hover,+.btn-info:focus,+.btn-info:active,+.btn-info.active,+.open > .dropdown-toggle.btn-info {+  color: #fff;+  background-color: #31b0d5;+  border-color: #269abc;+}+.btn-info:active,+.btn-info.active,+.open > .dropdown-toggle.btn-info {+  background-image: none;+}+.btn-info.disabled,+.btn-info[disabled],+fieldset[disabled] .btn-info,+.btn-info.disabled:hover,+.btn-info[disabled]:hover,+fieldset[disabled] .btn-info:hover,+.btn-info.disabled:focus,+.btn-info[disabled]:focus,+fieldset[disabled] .btn-info:focus,+.btn-info.disabled:active,+.btn-info[disabled]:active,+fieldset[disabled] .btn-info:active,+.btn-info.disabled.active,+.btn-info[disabled].active,+fieldset[disabled] .btn-info.active {+  background-color: #5bc0de;+  border-color: #46b8da;+}+.btn-info .badge {+  color: #5bc0de;+  background-color: #fff;+}+.btn-warning {+  color: #fff;+  background-color: #f0ad4e;+  border-color: #eea236;+}+.btn-warning:hover,+.btn-warning:focus,+.btn-warning:active,+.btn-warning.active,+.open > .dropdown-toggle.btn-warning {+  color: #fff;+  background-color: #ec971f;+  border-color: #d58512;+}+.btn-warning:active,+.btn-warning.active,+.open > .dropdown-toggle.btn-warning {+  background-image: none;+}+.btn-warning.disabled,+.btn-warning[disabled],+fieldset[disabled] .btn-warning,+.btn-warning.disabled:hover,+.btn-warning[disabled]:hover,+fieldset[disabled] .btn-warning:hover,+.btn-warning.disabled:focus,+.btn-warning[disabled]:focus,+fieldset[disabled] .btn-warning:focus,+.btn-warning.disabled:active,+.btn-warning[disabled]:active,+fieldset[disabled] .btn-warning:active,+.btn-warning.disabled.active,+.btn-warning[disabled].active,+fieldset[disabled] .btn-warning.active {+  background-color: #f0ad4e;+  border-color: #eea236;+}+.btn-warning .badge {+  color: #f0ad4e;+  background-color: #fff;+}+.btn-danger {+  color: #fff;+  background-color: #d9534f;+  border-color: #d43f3a;+}+.btn-danger:hover,+.btn-danger:focus,+.btn-danger:active,+.btn-danger.active,+.open > .dropdown-toggle.btn-danger {+  color: #fff;+  background-color: #c9302c;+  border-color: #ac2925;+}+.btn-danger:active,+.btn-danger.active,+.open > .dropdown-toggle.btn-danger {+  background-image: none;+}+.btn-danger.disabled,+.btn-danger[disabled],+fieldset[disabled] .btn-danger,+.btn-danger.disabled:hover,+.btn-danger[disabled]:hover,+fieldset[disabled] .btn-danger:hover,+.btn-danger.disabled:focus,+.btn-danger[disabled]:focus,+fieldset[disabled] .btn-danger:focus,+.btn-danger.disabled:active,+.btn-danger[disabled]:active,+fieldset[disabled] .btn-danger:active,+.btn-danger.disabled.active,+.btn-danger[disabled].active,+fieldset[disabled] .btn-danger.active {+  background-color: #d9534f;+  border-color: #d43f3a;+}+.btn-danger .badge {+  color: #d9534f;+  background-color: #fff;+}+.btn-link {+  font-weight: normal;+  color: #428bca;+  cursor: pointer;+  border-radius: 0;+}+.btn-link,+.btn-link:active,+.btn-link[disabled],+fieldset[disabled] .btn-link {+  background-color: transparent;+  -webkit-box-shadow: none;+          box-shadow: none;+}+.btn-link,+.btn-link:hover,+.btn-link:focus,+.btn-link:active {+  border-color: transparent;+}+.btn-link:hover,+.btn-link:focus {+  color: #2a6496;+  text-decoration: underline;+  background-color: transparent;+}+.btn-link[disabled]:hover,+fieldset[disabled] .btn-link:hover,+.btn-link[disabled]:focus,+fieldset[disabled] .btn-link:focus {+  color: #777;+  text-decoration: none;+}+.btn-lg,+.btn-group-lg > .btn {+  padding: 10px 16px;+  font-size: 18px;+  line-height: 1.33;+  border-radius: 6px;+}+.btn-sm,+.btn-group-sm > .btn {+  padding: 5px 10px;+  font-size: 12px;+  line-height: 1.5;+  border-radius: 3px;+}+.btn-xs,+.btn-group-xs > .btn {+  padding: 1px 5px;+  font-size: 12px;+  line-height: 1.5;+  border-radius: 3px;+}+.btn-block {+  display: block;+  width: 100%;+}+.btn-block + .btn-block {+  margin-top: 5px;+}+input[type="submit"].btn-block,+input[type="reset"].btn-block,+input[type="button"].btn-block {+  width: 100%;+}+.fade {+  opacity: 0;+  -webkit-transition: opacity .15s linear;+       -o-transition: opacity .15s linear;+          transition: opacity .15s linear;+}+.fade.in {+  opacity: 1;+}+.collapse {+  display: none;+}+.collapse.in {+  display: block;+}+tr.collapse.in {+  display: table-row;+}+tbody.collapse.in {+  display: table-row-group;+}+.collapsing {+  position: relative;+  height: 0;+  overflow: hidden;+  -webkit-transition: height .35s ease;+       -o-transition: height .35s ease;+          transition: height .35s ease;+}+.caret {+  display: inline-block;+  width: 0;+  height: 0;+  margin-left: 2px;+  vertical-align: middle;+  border-top: 4px solid;+  border-right: 4px solid transparent;+  border-left: 4px solid transparent;+}+.dropdown {+  position: relative;+}+.dropdown-toggle:focus {+  outline: 0;+}+.dropdown-menu {+  position: absolute;+  top: 100%;+  left: 0;+  z-index: 1000;+  display: none;+  float: left;+  min-width: 160px;+  padding: 5px 0;+  margin: 2px 0 0;+  font-size: 14px;+  text-align: left;+  list-style: none;+  background-color: #fff;+  -webkit-background-clip: padding-box;+          background-clip: padding-box;+  border: 1px solid #ccc;+  border: 1px solid rgba(0, 0, 0, .15);+  border-radius: 4px;+  -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);+          box-shadow: 0 6px 12px rgba(0, 0, 0, .175);+}+.dropdown-menu.pull-right {+  right: 0;+  left: auto;+}+.dropdown-menu .divider {+  height: 1px;+  margin: 9px 0;+  overflow: hidden;+  background-color: #e5e5e5;+}+.dropdown-menu > li > a {+  display: block;+  padding: 3px 20px;+  clear: both;+  font-weight: normal;+  line-height: 1.42857143;+  color: #333;+  white-space: nowrap;+}+.dropdown-menu > li > a:hover,+.dropdown-menu > li > a:focus {+  color: #262626;+  text-decoration: none;+  background-color: #f5f5f5;+}+.dropdown-menu > .active > a,+.dropdown-menu > .active > a:hover,+.dropdown-menu > .active > a:focus {+  color: #fff;+  text-decoration: none;+  background-color: #428bca;+  outline: 0;+}+.dropdown-menu > .disabled > a,+.dropdown-menu > .disabled > a:hover,+.dropdown-menu > .disabled > a:focus {+  color: #777;+}+.dropdown-menu > .disabled > a:hover,+.dropdown-menu > .disabled > a:focus {+  text-decoration: none;+  cursor: not-allowed;+  background-color: transparent;+  background-image: none;+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);+}+.open > .dropdown-menu {+  display: block;+}+.open > a {+  outline: 0;+}+.dropdown-menu-right {+  right: 0;+  left: auto;+}+.dropdown-menu-left {+  right: auto;+  left: 0;+}+.dropdown-header {+  display: block;+  padding: 3px 20px;+  font-size: 12px;+  line-height: 1.42857143;+  color: #777;+  white-space: nowrap;+}+.dropdown-backdrop {+  position: fixed;+  top: 0;+  right: 0;+  bottom: 0;+  left: 0;+  z-index: 990;+}+.pull-right > .dropdown-menu {+  right: 0;+  left: auto;+}+.dropup .caret,+.navbar-fixed-bottom .dropdown .caret {+  content: "";+  border-top: 0;+  border-bottom: 4px solid;+}+.dropup .dropdown-menu,+.navbar-fixed-bottom .dropdown .dropdown-menu {+  top: auto;+  bottom: 100%;+  margin-bottom: 1px;+}+@media (min-width: 768px) {+  .navbar-right .dropdown-menu {+    right: 0;+    left: auto;+  }+  .navbar-right .dropdown-menu-left {+    right: auto;+    left: 0;+  }+}+.btn-group,+.btn-group-vertical {+  position: relative;+  display: inline-block;+  vertical-align: middle;+}+.btn-group > .btn,+.btn-group-vertical > .btn {+  position: relative;+  float: left;+}+.btn-group > .btn:hover,+.btn-group-vertical > .btn:hover,+.btn-group > .btn:focus,+.btn-group-vertical > .btn:focus,+.btn-group > .btn:active,+.btn-group-vertical > .btn:active,+.btn-group > .btn.active,+.btn-group-vertical > .btn.active {+  z-index: 2;+}+.btn-group > .btn:focus,+.btn-group-vertical > .btn:focus {+  outline: 0;+}+.btn-group .btn + .btn,+.btn-group .btn + .btn-group,+.btn-group .btn-group + .btn,+.btn-group .btn-group + .btn-group {+  margin-left: -1px;+}+.btn-toolbar {+  margin-left: -5px;+}+.btn-toolbar .btn-group,+.btn-toolbar .input-group {+  float: left;+}+.btn-toolbar > .btn,+.btn-toolbar > .btn-group,+.btn-toolbar > .input-group {+  margin-left: 5px;+}+.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {+  border-radius: 0;+}+.btn-group > .btn:first-child {+  margin-left: 0;+}+.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {+  border-top-right-radius: 0;+  border-bottom-right-radius: 0;+}+.btn-group > .btn:last-child:not(:first-child),+.btn-group > .dropdown-toggle:not(:first-child) {+  border-top-left-radius: 0;+  border-bottom-left-radius: 0;+}+.btn-group > .btn-group {+  float: left;+}+.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {+  border-radius: 0;+}+.btn-group > .btn-group:first-child > .btn:last-child,+.btn-group > .btn-group:first-child > .dropdown-toggle {+  border-top-right-radius: 0;+  border-bottom-right-radius: 0;+}+.btn-group > .btn-group:last-child > .btn:first-child {+  border-top-left-radius: 0;+  border-bottom-left-radius: 0;+}+.btn-group .dropdown-toggle:active,+.btn-group.open .dropdown-toggle {+  outline: 0;+}+.btn-group > .btn + .dropdown-toggle {+  padding-right: 8px;+  padding-left: 8px;+}+.btn-group > .btn-lg + .dropdown-toggle {+  padding-right: 12px;+  padding-left: 12px;+}+.btn-group.open .dropdown-toggle {+  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);+          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);+}+.btn-group.open .dropdown-toggle.btn-link {+  -webkit-box-shadow: none;+          box-shadow: none;+}+.btn .caret {+  margin-left: 0;+}+.btn-lg .caret {+  border-width: 5px 5px 0;+  border-bottom-width: 0;+}+.dropup .btn-lg .caret {+  border-width: 0 5px 5px;+}+.btn-group-vertical > .btn,+.btn-group-vertical > .btn-group,+.btn-group-vertical > .btn-group > .btn {+  display: block;+  float: none;+  width: 100%;+  max-width: 100%;+}+.btn-group-vertical > .btn-group > .btn {+  float: none;+}+.btn-group-vertical > .btn + .btn,+.btn-group-vertical > .btn + .btn-group,+.btn-group-vertical > .btn-group + .btn,+.btn-group-vertical > .btn-group + .btn-group {+  margin-top: -1px;+  margin-left: 0;+}+.btn-group-vertical > .btn:not(:first-child):not(:last-child) {+  border-radius: 0;+}+.btn-group-vertical > .btn:first-child:not(:last-child) {+  border-top-right-radius: 4px;+  border-bottom-right-radius: 0;+  border-bottom-left-radius: 0;+}+.btn-group-vertical > .btn:last-child:not(:first-child) {+  border-top-left-radius: 0;+  border-top-right-radius: 0;+  border-bottom-left-radius: 4px;+}+.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {+  border-radius: 0;+}+.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,+.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {+  border-bottom-right-radius: 0;+  border-bottom-left-radius: 0;+}+.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {+  border-top-left-radius: 0;+  border-top-right-radius: 0;+}+.btn-group-justified {+  display: table;+  width: 100%;+  table-layout: fixed;+  border-collapse: separate;+}+.btn-group-justified > .btn,+.btn-group-justified > .btn-group {+  display: table-cell;+  float: none;+  width: 1%;+}+.btn-group-justified > .btn-group .btn {+  width: 100%;+}+.btn-group-justified > .btn-group .dropdown-menu {+  left: auto;+}+[data-toggle="buttons"] > .btn > input[type="radio"],+[data-toggle="buttons"] > .btn > input[type="checkbox"] {+  position: absolute;+  z-index: -1;+  filter: alpha(opacity=0);+  opacity: 0;+}+.input-group {+  position: relative;+  display: table;+  border-collapse: separate;+}+.input-group[class*="col-"] {+  float: none;+  padding-right: 0;+  padding-left: 0;+}+.input-group .form-control {+  position: relative;+  z-index: 2;+  float: left;+  width: 100%;+  margin-bottom: 0;+}+.input-group-lg > .form-control,+.input-group-lg > .input-group-addon,+.input-group-lg > .input-group-btn > .btn {+  height: 46px;+  padding: 10px 16px;+  font-size: 18px;+  line-height: 1.33;+  border-radius: 6px;+}+select.input-group-lg > .form-control,+select.input-group-lg > .input-group-addon,+select.input-group-lg > .input-group-btn > .btn {+  height: 46px;+  line-height: 46px;+}+textarea.input-group-lg > .form-control,+textarea.input-group-lg > .input-group-addon,+textarea.input-group-lg > .input-group-btn > .btn,+select[multiple].input-group-lg > .form-control,+select[multiple].input-group-lg > .input-group-addon,+select[multiple].input-group-lg > .input-group-btn > .btn {+  height: auto;+}+.input-group-sm > .form-control,+.input-group-sm > .input-group-addon,+.input-group-sm > .input-group-btn > .btn {+  height: 30px;+  padding: 5px 10px;+  font-size: 12px;+  line-height: 1.5;+  border-radius: 3px;+}+select.input-group-sm > .form-control,+select.input-group-sm > .input-group-addon,+select.input-group-sm > .input-group-btn > .btn {+  height: 30px;+  line-height: 30px;+}+textarea.input-group-sm > .form-control,+textarea.input-group-sm > .input-group-addon,+textarea.input-group-sm > .input-group-btn > .btn,+select[multiple].input-group-sm > .form-control,+select[multiple].input-group-sm > .input-group-addon,+select[multiple].input-group-sm > .input-group-btn > .btn {+  height: auto;+}+.input-group-addon,+.input-group-btn,+.input-group .form-control {+  display: table-cell;+}+.input-group-addon:not(:first-child):not(:last-child),+.input-group-btn:not(:first-child):not(:last-child),+.input-group .form-control:not(:first-child):not(:last-child) {+  border-radius: 0;+}+.input-group-addon,+.input-group-btn {+  width: 1%;+  white-space: nowrap;+  vertical-align: middle;+}+.input-group-addon {+  padding: 6px 12px;+  font-size: 14px;+  font-weight: normal;+  line-height: 1;+  color: #555;+  text-align: center;+  background-color: #eee;+  border: 1px solid #ccc;+  border-radius: 4px;+}+.input-group-addon.input-sm {+  padding: 5px 10px;+  font-size: 12px;+  border-radius: 3px;+}+.input-group-addon.input-lg {+  padding: 10px 16px;+  font-size: 18px;+  border-radius: 6px;+}+.input-group-addon input[type="radio"],+.input-group-addon input[type="checkbox"] {+  margin-top: 0;+}+.input-group .form-control:first-child,+.input-group-addon:first-child,+.input-group-btn:first-child > .btn,+.input-group-btn:first-child > .btn-group > .btn,+.input-group-btn:first-child > .dropdown-toggle,+.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),+.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {+  border-top-right-radius: 0;+  border-bottom-right-radius: 0;+}+.input-group-addon:first-child {+  border-right: 0;+}+.input-group .form-control:last-child,+.input-group-addon:last-child,+.input-group-btn:last-child > .btn,+.input-group-btn:last-child > .btn-group > .btn,+.input-group-btn:last-child > .dropdown-toggle,+.input-group-btn:first-child > .btn:not(:first-child),+.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {+  border-top-left-radius: 0;+  border-bottom-left-radius: 0;+}+.input-group-addon:last-child {+  border-left: 0;+}+.input-group-btn {+  position: relative;+  font-size: 0;+  white-space: nowrap;+}+.input-group-btn > .btn {+  position: relative;+}+.input-group-btn > .btn + .btn {+  margin-left: -1px;+}+.input-group-btn > .btn:hover,+.input-group-btn > .btn:focus,+.input-group-btn > .btn:active {+  z-index: 2;+}+.input-group-btn:first-child > .btn,+.input-group-btn:first-child > .btn-group {+  margin-right: -1px;+}+.input-group-btn:last-child > .btn,+.input-group-btn:last-child > .btn-group {+  margin-left: -1px;+}+.nav {+  padding-left: 0;+  margin-bottom: 0;+  list-style: none;+}+.nav > li {+  position: relative;+  display: block;+}+.nav > li > a {+  position: relative;+  display: block;+  padding: 10px 15px;+}+.nav > li > a:hover,+.nav > li > a:focus {+  text-decoration: none;+  background-color: #eee;+}+.nav > li.disabled > a {+  color: #777;+}+.nav > li.disabled > a:hover,+.nav > li.disabled > a:focus {+  color: #777;+  text-decoration: none;+  cursor: not-allowed;+  background-color: transparent;+}+.nav .open > a,+.nav .open > a:hover,+.nav .open > a:focus {+  background-color: #eee;+  border-color: #428bca;+}+.nav .nav-divider {+  height: 1px;+  margin: 9px 0;+  overflow: hidden;+  background-color: #e5e5e5;+}+.nav > li > a > img {+  max-width: none;+}+.nav-tabs {+  border-bottom: 1px solid #ddd;+}+.nav-tabs > li {+  float: left;+  margin-bottom: -1px;+}+.nav-tabs > li > a {+  margin-right: 2px;+  line-height: 1.42857143;+  border: 1px solid transparent;+  border-radius: 4px 4px 0 0;+}+.nav-tabs > li > a:hover {+  border-color: #eee #eee #ddd;+}+.nav-tabs > li.active > a,+.nav-tabs > li.active > a:hover,+.nav-tabs > li.active > a:focus {+  color: #555;+  cursor: default;+  background-color: #fff;+  border: 1px solid #ddd;+  border-bottom-color: transparent;+}+.nav-tabs.nav-justified {+  width: 100%;+  border-bottom: 0;+}+.nav-tabs.nav-justified > li {+  float: none;+}+.nav-tabs.nav-justified > li > a {+  margin-bottom: 5px;+  text-align: center;+}+.nav-tabs.nav-justified > .dropdown .dropdown-menu {+  top: auto;+  left: auto;+}+@media (min-width: 768px) {+  .nav-tabs.nav-justified > li {+    display: table-cell;+    width: 1%;+  }+  .nav-tabs.nav-justified > li > a {+    margin-bottom: 0;+  }+}+.nav-tabs.nav-justified > li > a {+  margin-right: 0;+  border-radius: 4px;+}+.nav-tabs.nav-justified > .active > a,+.nav-tabs.nav-justified > .active > a:hover,+.nav-tabs.nav-justified > .active > a:focus {+  border: 1px solid #ddd;+}+@media (min-width: 768px) {+  .nav-tabs.nav-justified > li > a {+    border-bottom: 1px solid #ddd;+    border-radius: 4px 4px 0 0;+  }+  .nav-tabs.nav-justified > .active > a,+  .nav-tabs.nav-justified > .active > a:hover,+  .nav-tabs.nav-justified > .active > a:focus {+    border-bottom-color: #fff;+  }+}+.nav-pills > li {+  float: left;+}+.nav-pills > li > a {+  border-radius: 4px;+}+.nav-pills > li + li {+  margin-left: 2px;+}+.nav-pills > li.active > a,+.nav-pills > li.active > a:hover,+.nav-pills > li.active > a:focus {+  color: #fff;+  background-color: #428bca;+}+.nav-stacked > li {+  float: none;+}+.nav-stacked > li + li {+  margin-top: 2px;+  margin-left: 0;+}+.nav-justified {+  width: 100%;+}+.nav-justified > li {+  float: none;+}+.nav-justified > li > a {+  margin-bottom: 5px;+  text-align: center;+}+.nav-justified > .dropdown .dropdown-menu {+  top: auto;+  left: auto;+}+@media (min-width: 768px) {+  .nav-justified > li {+    display: table-cell;+    width: 1%;+  }+  .nav-justified > li > a {+    margin-bottom: 0;+  }+}+.nav-tabs-justified {+  border-bottom: 0;+}+.nav-tabs-justified > li > a {+  margin-right: 0;+  border-radius: 4px;+}+.nav-tabs-justified > .active > a,+.nav-tabs-justified > .active > a:hover,+.nav-tabs-justified > .active > a:focus {+  border: 1px solid #ddd;+}+@media (min-width: 768px) {+  .nav-tabs-justified > li > a {+    border-bottom: 1px solid #ddd;+    border-radius: 4px 4px 0 0;+  }+  .nav-tabs-justified > .active > a,+  .nav-tabs-justified > .active > a:hover,+  .nav-tabs-justified > .active > a:focus {+    border-bottom-color: #fff;+  }+}+.tab-content > .tab-pane {+  display: none;+}+.tab-content > .active {+  display: block;+}+.nav-tabs .dropdown-menu {+  margin-top: -1px;+  border-top-left-radius: 0;+  border-top-right-radius: 0;+}+.navbar {+  position: relative;+  min-height: 50px;+  margin-bottom: 20px;+  border: 1px solid transparent;+}+@media (min-width: 768px) {+  .navbar {+    border-radius: 4px;+  }+}+@media (min-width: 768px) {+  .navbar-header {+    float: left;+  }+}+.navbar-collapse {+  padding-right: 15px;+  padding-left: 15px;+  overflow-x: visible;+  -webkit-overflow-scrolling: touch;+  border-top: 1px solid transparent;+  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);+          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);+}+.navbar-collapse.in {+  overflow-y: auto;+}+@media (min-width: 768px) {+  .navbar-collapse {+    width: auto;+    border-top: 0;+    -webkit-box-shadow: none;+            box-shadow: none;+  }+  .navbar-collapse.collapse {+    display: block !important;+    height: auto !important;+    padding-bottom: 0;+    overflow: visible !important;+  }+  .navbar-collapse.in {+    overflow-y: visible;+  }+  .navbar-fixed-top .navbar-collapse,+  .navbar-static-top .navbar-collapse,+  .navbar-fixed-bottom .navbar-collapse {+    padding-right: 0;+    padding-left: 0;+  }+}+.navbar-fixed-top .navbar-collapse,+.navbar-fixed-bottom .navbar-collapse {+  max-height: 340px;+}+@media (max-width: 480px) and (orientation: landscape) {+  .navbar-fixed-top .navbar-collapse,+  .navbar-fixed-bottom .navbar-collapse {+    max-height: 200px;+  }+}+.container > .navbar-header,+.container-fluid > .navbar-header,+.container > .navbar-collapse,+.container-fluid > .navbar-collapse {+  margin-right: -15px;+  margin-left: -15px;+}+@media (min-width: 768px) {+  .container > .navbar-header,+  .container-fluid > .navbar-header,+  .container > .navbar-collapse,+  .container-fluid > .navbar-collapse {+    margin-right: 0;+    margin-left: 0;+  }+}+.navbar-static-top {+  z-index: 1000;+  border-width: 0 0 1px;+}+@media (min-width: 768px) {+  .navbar-static-top {+    border-radius: 0;+  }+}+.navbar-fixed-top,+.navbar-fixed-bottom {+  position: fixed;+  right: 0;+  left: 0;+  z-index: 1030;+  -webkit-transform: translate3d(0, 0, 0);+       -o-transform: translate3d(0, 0, 0);+          transform: translate3d(0, 0, 0);+}+@media (min-width: 768px) {+  .navbar-fixed-top,+  .navbar-fixed-bottom {+    border-radius: 0;+  }+}+.navbar-fixed-top {+  top: 0;+  border-width: 0 0 1px;+}+.navbar-fixed-bottom {+  bottom: 0;+  margin-bottom: 0;+  border-width: 1px 0 0;+}+.navbar-brand {+  float: left;+  height: 50px;+  padding: 15px 15px;+  font-size: 18px;+  line-height: 20px;+}+.navbar-brand:hover,+.navbar-brand:focus {+  text-decoration: none;+}+@media (min-width: 768px) {+  .navbar > .container .navbar-brand,+  .navbar > .container-fluid .navbar-brand {+    margin-left: -15px;+  }+}+.navbar-toggle {+  position: relative;+  float: right;+  padding: 9px 10px;+  margin-top: 8px;+  margin-right: 15px;+  margin-bottom: 8px;+  background-color: transparent;+  background-image: none;+  border: 1px solid transparent;+  border-radius: 4px;+}+.navbar-toggle:focus {+  outline: 0;+}+.navbar-toggle .icon-bar {+  display: block;+  width: 22px;+  height: 2px;+  border-radius: 1px;+}+.navbar-toggle .icon-bar + .icon-bar {+  margin-top: 4px;+}+@media (min-width: 768px) {+  .navbar-toggle {+    display: none;+  }+}+.navbar-nav {+  margin: 7.5px -15px;+}+.navbar-nav > li > a {+  padding-top: 10px;+  padding-bottom: 10px;+  line-height: 20px;+}+@media (max-width: 767px) {+  .navbar-nav .open .dropdown-menu {+    position: static;+    float: none;+    width: auto;+    margin-top: 0;+    background-color: transparent;+    border: 0;+    -webkit-box-shadow: none;+            box-shadow: none;+  }+  .navbar-nav .open .dropdown-menu > li > a,+  .navbar-nav .open .dropdown-menu .dropdown-header {+    padding: 5px 15px 5px 25px;+  }+  .navbar-nav .open .dropdown-menu > li > a {+    line-height: 20px;+  }+  .navbar-nav .open .dropdown-menu > li > a:hover,+  .navbar-nav .open .dropdown-menu > li > a:focus {+    background-image: none;+  }+}+@media (min-width: 768px) {+  .navbar-nav {+    float: left;+    margin: 0;+  }+  .navbar-nav > li {+    float: left;+  }+  .navbar-nav > li > a {+    padding-top: 15px;+    padding-bottom: 15px;+  }+  .navbar-nav.navbar-right:last-child {+    margin-right: -15px;+  }+}+@media (min-width: 768px) {+  .navbar-left {+    float: left !important;+  }+  .navbar-right {+    float: right !important;+  }+}+.navbar-form {+  padding: 10px 15px;+  margin-top: 8px;+  margin-right: -15px;+  margin-bottom: 8px;+  margin-left: -15px;+  border-top: 1px solid transparent;+  border-bottom: 1px solid transparent;+  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);+          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);+}+@media (min-width: 768px) {+  .navbar-form .form-group {+    display: inline-block;+    margin-bottom: 0;+    vertical-align: middle;+  }+  .navbar-form .form-control {+    display: inline-block;+    width: auto;+    vertical-align: middle;+  }+  .navbar-form .input-group {+    display: inline-table;+    vertical-align: middle;+  }+  .navbar-form .input-group .input-group-addon,+  .navbar-form .input-group .input-group-btn,+  .navbar-form .input-group .form-control {+    width: auto;+  }+  .navbar-form .input-group > .form-control {+    width: 100%;+  }+  .navbar-form .control-label {+    margin-bottom: 0;+    vertical-align: middle;+  }+  .navbar-form .radio,+  .navbar-form .checkbox {+    display: inline-block;+    margin-top: 0;+    margin-bottom: 0;+    vertical-align: middle;+  }+  .navbar-form .radio label,+  .navbar-form .checkbox label {+    padding-left: 0;+  }+  .navbar-form .radio input[type="radio"],+  .navbar-form .checkbox input[type="checkbox"] {+    position: relative;+    margin-left: 0;+  }+  .navbar-form .has-feedback .form-control-feedback {+    top: 0;+  }+}+@media (max-width: 767px) {+  .navbar-form .form-group {+    margin-bottom: 5px;+  }+}+@media (min-width: 768px) {+  .navbar-form {+    width: auto;+    padding-top: 0;+    padding-bottom: 0;+    margin-right: 0;+    margin-left: 0;+    border: 0;+    -webkit-box-shadow: none;+            box-shadow: none;+  }+  .navbar-form.navbar-right:last-child {+    margin-right: -15px;+  }+}+.navbar-nav > li > .dropdown-menu {+  margin-top: 0;+  border-top-left-radius: 0;+  border-top-right-radius: 0;+}+.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {+  border-bottom-right-radius: 0;+  border-bottom-left-radius: 0;+}+.navbar-btn {+  margin-top: 8px;+  margin-bottom: 8px;+}+.navbar-btn.btn-sm {+  margin-top: 10px;+  margin-bottom: 10px;+}+.navbar-btn.btn-xs {+  margin-top: 14px;+  margin-bottom: 14px;+}+.navbar-text {+  margin-top: 15px;+  margin-bottom: 15px;+}+@media (min-width: 768px) {+  .navbar-text {+    float: left;+    margin-right: 15px;+    margin-left: 15px;+  }+  .navbar-text.navbar-right:last-child {+    margin-right: 0;+  }+}+.navbar-default {+  background-color: #f8f8f8;+  border-color: #e7e7e7;+}+.navbar-default .navbar-brand {+  color: #777;+}+.navbar-default .navbar-brand:hover,+.navbar-default .navbar-brand:focus {+  color: #5e5e5e;+  background-color: transparent;+}+.navbar-default .navbar-text {+  color: #777;+}+.navbar-default .navbar-nav > li > a {+  color: #777;+}+.navbar-default .navbar-nav > li > a:hover,+.navbar-default .navbar-nav > li > a:focus {+  color: #333;+  background-color: transparent;+}+.navbar-default .navbar-nav > .active > a,+.navbar-default .navbar-nav > .active > a:hover,+.navbar-default .navbar-nav > .active > a:focus {+  color: #555;+  background-color: #e7e7e7;+}+.navbar-default .navbar-nav > .disabled > a,+.navbar-default .navbar-nav > .disabled > a:hover,+.navbar-default .navbar-nav > .disabled > a:focus {+  color: #ccc;+  background-color: transparent;+}+.navbar-default .navbar-toggle {+  border-color: #ddd;+}+.navbar-default .navbar-toggle:hover,+.navbar-default .navbar-toggle:focus {+  background-color: #ddd;+}+.navbar-default .navbar-toggle .icon-bar {+  background-color: #888;+}+.navbar-default .navbar-collapse,+.navbar-default .navbar-form {+  border-color: #e7e7e7;+}+.navbar-default .navbar-nav > .open > a,+.navbar-default .navbar-nav > .open > a:hover,+.navbar-default .navbar-nav > .open > a:focus {+  color: #555;+  background-color: #e7e7e7;+}+@media (max-width: 767px) {+  .navbar-default .navbar-nav .open .dropdown-menu > li > a {+    color: #777;+  }+  .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,+  .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {+    color: #333;+    background-color: transparent;+  }+  .navbar-default .navbar-nav .open .dropdown-menu > .active > a,+  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,+  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {+    color: #555;+    background-color: #e7e7e7;+  }+  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,+  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,+  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {+    color: #ccc;+    background-color: transparent;+  }+}+.navbar-default .navbar-link {+  color: #777;+}+.navbar-default .navbar-link:hover {+  color: #333;+}+.navbar-default .btn-link {+  color: #777;+}+.navbar-default .btn-link:hover,+.navbar-default .btn-link:focus {+  color: #333;+}+.navbar-default .btn-link[disabled]:hover,+fieldset[disabled] .navbar-default .btn-link:hover,+.navbar-default .btn-link[disabled]:focus,+fieldset[disabled] .navbar-default .btn-link:focus {+  color: #ccc;+}+.navbar-inverse {+  background-color: #222;+  border-color: #080808;+}+.navbar-inverse .navbar-brand {+  color: #777;+}+.navbar-inverse .navbar-brand:hover,+.navbar-inverse .navbar-brand:focus {+  color: #fff;+  background-color: transparent;+}+.navbar-inverse .navbar-text {+  color: #777;+}+.navbar-inverse .navbar-nav > li > a {+  color: #777;+}+.navbar-inverse .navbar-nav > li > a:hover,+.navbar-inverse .navbar-nav > li > a:focus {+  color: #fff;+  background-color: transparent;+}+.navbar-inverse .navbar-nav > .active > a,+.navbar-inverse .navbar-nav > .active > a:hover,+.navbar-inverse .navbar-nav > .active > a:focus {+  color: #fff;+  background-color: #080808;+}+.navbar-inverse .navbar-nav > .disabled > a,+.navbar-inverse .navbar-nav > .disabled > a:hover,+.navbar-inverse .navbar-nav > .disabled > a:focus {+  color: #444;+  background-color: transparent;+}+.navbar-inverse .navbar-toggle {+  border-color: #333;+}+.navbar-inverse .navbar-toggle:hover,+.navbar-inverse .navbar-toggle:focus {+  background-color: #333;+}+.navbar-inverse .navbar-toggle .icon-bar {+  background-color: #fff;+}+.navbar-inverse .navbar-collapse,+.navbar-inverse .navbar-form {+  border-color: #101010;+}+.navbar-inverse .navbar-nav > .open > a,+.navbar-inverse .navbar-nav > .open > a:hover,+.navbar-inverse .navbar-nav > .open > a:focus {+  color: #fff;+  background-color: #080808;+}+@media (max-width: 767px) {+  .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {+    border-color: #080808;+  }+  .navbar-inverse .navbar-nav .open .dropdown-menu .divider {+    background-color: #080808;+  }+  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {+    color: #777;+  }+  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,+  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {+    color: #fff;+    background-color: transparent;+  }+  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,+  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,+  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {+    color: #fff;+    background-color: #080808;+  }+  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,+  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,+  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {+    color: #444;+    background-color: transparent;+  }+}+.navbar-inverse .navbar-link {+  color: #777;+}+.navbar-inverse .navbar-link:hover {+  color: #fff;+}+.navbar-inverse .btn-link {+  color: #777;+}+.navbar-inverse .btn-link:hover,+.navbar-inverse .btn-link:focus {+  color: #fff;+}+.navbar-inverse .btn-link[disabled]:hover,+fieldset[disabled] .navbar-inverse .btn-link:hover,+.navbar-inverse .btn-link[disabled]:focus,+fieldset[disabled] .navbar-inverse .btn-link:focus {+  color: #444;+}+.breadcrumb {+  padding: 8px 15px;+  margin-bottom: 20px;+  list-style: none;+  background-color: #f5f5f5;+  border-radius: 4px;+}+.breadcrumb > li {+  display: inline-block;+}+.breadcrumb > li + li:before {+  padding: 0 5px;+  color: #ccc;+  content: "/\00a0";+}+.breadcrumb > .active {+  color: #777;+}+.pagination {+  display: inline-block;+  padding-left: 0;+  margin: 20px 0;+  border-radius: 4px;+}+.pagination > li {+  display: inline;+}+.pagination > li > a,+.pagination > li > span {+  position: relative;+  float: left;+  padding: 6px 12px;+  margin-left: -1px;+  line-height: 1.42857143;+  color: #428bca;+  text-decoration: none;+  background-color: #fff;+  border: 1px solid #ddd;+}+.pagination > li:first-child > a,+.pagination > li:first-child > span {+  margin-left: 0;+  border-top-left-radius: 4px;+  border-bottom-left-radius: 4px;+}+.pagination > li:last-child > a,+.pagination > li:last-child > span {+  border-top-right-radius: 4px;+  border-bottom-right-radius: 4px;+}+.pagination > li > a:hover,+.pagination > li > span:hover,+.pagination > li > a:focus,+.pagination > li > span:focus {+  color: #2a6496;+  background-color: #eee;+  border-color: #ddd;+}+.pagination > .active > a,+.pagination > .active > span,+.pagination > .active > a:hover,+.pagination > .active > span:hover,+.pagination > .active > a:focus,+.pagination > .active > span:focus {+  z-index: 2;+  color: #fff;+  cursor: default;+  background-color: #428bca;+  border-color: #428bca;+}+.pagination > .disabled > span,+.pagination > .disabled > span:hover,+.pagination > .disabled > span:focus,+.pagination > .disabled > a,+.pagination > .disabled > a:hover,+.pagination > .disabled > a:focus {+  color: #777;+  cursor: not-allowed;+  background-color: #fff;+  border-color: #ddd;+}+.pagination-lg > li > a,+.pagination-lg > li > span {+  padding: 10px 16px;+  font-size: 18px;+}+.pagination-lg > li:first-child > a,+.pagination-lg > li:first-child > span {+  border-top-left-radius: 6px;+  border-bottom-left-radius: 6px;+}+.pagination-lg > li:last-child > a,+.pagination-lg > li:last-child > span {+  border-top-right-radius: 6px;+  border-bottom-right-radius: 6px;+}+.pagination-sm > li > a,+.pagination-sm > li > span {+  padding: 5px 10px;+  font-size: 12px;+}+.pagination-sm > li:first-child > a,+.pagination-sm > li:first-child > span {+  border-top-left-radius: 3px;+  border-bottom-left-radius: 3px;+}+.pagination-sm > li:last-child > a,+.pagination-sm > li:last-child > span {+  border-top-right-radius: 3px;+  border-bottom-right-radius: 3px;+}+.pager {+  padding-left: 0;+  margin: 20px 0;+  text-align: center;+  list-style: none;+}+.pager li {+  display: inline;+}+.pager li > a,+.pager li > span {+  display: inline-block;+  padding: 5px 14px;+  background-color: #fff;+  border: 1px solid #ddd;+  border-radius: 15px;+}+.pager li > a:hover,+.pager li > a:focus {+  text-decoration: none;+  background-color: #eee;+}+.pager .next > a,+.pager .next > span {+  float: right;+}+.pager .previous > a,+.pager .previous > span {+  float: left;+}+.pager .disabled > a,+.pager .disabled > a:hover,+.pager .disabled > a:focus,+.pager .disabled > span {+  color: #777;+  cursor: not-allowed;+  background-color: #fff;+}+.label {+  display: inline;+  padding: .2em .6em .3em;+  font-size: 75%;+  font-weight: bold;+  line-height: 1;+  color: #fff;+  text-align: center;+  white-space: nowrap;+  vertical-align: baseline;+  border-radius: .25em;+}+a.label:hover,+a.label:focus {+  color: #fff;+  text-decoration: none;+  cursor: pointer;+}+.label:empty {+  display: none;+}+.btn .label {+  position: relative;+  top: -1px;+}+.label-default {+  background-color: #777;+}+.label-default[href]:hover,+.label-default[href]:focus {+  background-color: #5e5e5e;+}+.label-primary {+  background-color: #428bca;+}+.label-primary[href]:hover,+.label-primary[href]:focus {+  background-color: #3071a9;+}+.label-success {+  background-color: #5cb85c;+}+.label-success[href]:hover,+.label-success[href]:focus {+  background-color: #449d44;+}+.label-info {+  background-color: #5bc0de;+}+.label-info[href]:hover,+.label-info[href]:focus {+  background-color: #31b0d5;+}+.label-warning {+  background-color: #f0ad4e;+}+.label-warning[href]:hover,+.label-warning[href]:focus {+  background-color: #ec971f;+}+.label-danger {+  background-color: #d9534f;+}+.label-danger[href]:hover,+.label-danger[href]:focus {+  background-color: #c9302c;+}+.badge {+  display: inline-block;+  min-width: 10px;+  padding: 3px 7px;+  font-size: 12px;+  font-weight: bold;+  line-height: 1;+  color: #fff;+  text-align: center;+  white-space: nowrap;+  vertical-align: baseline;+  background-color: #777;+  border-radius: 10px;+}+.badge:empty {+  display: none;+}+.btn .badge {+  position: relative;+  top: -1px;+}+.btn-xs .badge {+  top: 0;+  padding: 1px 5px;+}+a.badge:hover,+a.badge:focus {+  color: #fff;+  text-decoration: none;+  cursor: pointer;+}+a.list-group-item.active > .badge,+.nav-pills > .active > a > .badge {+  color: #428bca;+  background-color: #fff;+}+.nav-pills > li > a > .badge {+  margin-left: 3px;+}+.jumbotron {+  padding: 30px;+  margin-bottom: 30px;+  color: inherit;+  background-color: #eee;+}+.jumbotron h1,+.jumbotron .h1 {+  color: inherit;+}+.jumbotron p {+  margin-bottom: 15px;+  font-size: 21px;+  font-weight: 200;+}+.jumbotron > hr {+  border-top-color: #d5d5d5;+}+.container .jumbotron {+  border-radius: 6px;+}+.jumbotron .container {+  max-width: 100%;+}+@media screen and (min-width: 768px) {+  .jumbotron {+    padding-top: 48px;+    padding-bottom: 48px;+  }+  .container .jumbotron {+    padding-right: 60px;+    padding-left: 60px;+  }+  .jumbotron h1,+  .jumbotron .h1 {+    font-size: 63px;+  }+}+.thumbnail {+  display: block;+  padding: 4px;+  margin-bottom: 20px;+  line-height: 1.42857143;+  background-color: #fff;+  border: 1px solid #ddd;+  border-radius: 4px;+  -webkit-transition: all .2s ease-in-out;+       -o-transition: all .2s ease-in-out;+          transition: all .2s ease-in-out;+}+.thumbnail > img,+.thumbnail a > img {+  margin-right: auto;+  margin-left: auto;+}+a.thumbnail:hover,+a.thumbnail:focus,+a.thumbnail.active {+  border-color: #428bca;+}+.thumbnail .caption {+  padding: 9px;+  color: #333;+}+.alert {+  padding: 15px;+  margin-bottom: 20px;+  border: 1px solid transparent;+  border-radius: 4px;+}+.alert h4 {+  margin-top: 0;+  color: inherit;+}+.alert .alert-link {+  font-weight: bold;+}+.alert > p,+.alert > ul {+  margin-bottom: 0;+}+.alert > p + p {+  margin-top: 5px;+}+.alert-dismissable,+.alert-dismissible {+  padding-right: 35px;+}+.alert-dismissable .close,+.alert-dismissible .close {+  position: relative;+  top: -2px;+  right: -21px;+  color: inherit;+}+.alert-success {+  color: #3c763d;+  background-color: #dff0d8;+  border-color: #d6e9c6;+}+.alert-success hr {+  border-top-color: #c9e2b3;+}+.alert-success .alert-link {+  color: #2b542c;+}+.alert-info {+  color: #31708f;+  background-color: #d9edf7;+  border-color: #bce8f1;+}+.alert-info hr {+  border-top-color: #a6e1ec;+}+.alert-info .alert-link {+  color: #245269;+}+.alert-warning {+  color: #8a6d3b;+  background-color: #fcf8e3;+  border-color: #faebcc;+}+.alert-warning hr {+  border-top-color: #f7e1b5;+}+.alert-warning .alert-link {+  color: #66512c;+}+.alert-danger {+  color: #a94442;+  background-color: #f2dede;+  border-color: #ebccd1;+}+.alert-danger hr {+  border-top-color: #e4b9c0;+}+.alert-danger .alert-link {+  color: #843534;+}+@-webkit-keyframes progress-bar-stripes {+  from {+    background-position: 40px 0;+  }+  to {+    background-position: 0 0;+  }+}+@-o-keyframes progress-bar-stripes {+  from {+    background-position: 40px 0;+  }+  to {+    background-position: 0 0;+  }+}+@keyframes progress-bar-stripes {+  from {+    background-position: 40px 0;+  }+  to {+    background-position: 0 0;+  }+}+.progress {+  height: 20px;+  margin-bottom: 20px;+  overflow: hidden;+  background-color: #f5f5f5;+  border-radius: 4px;+  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);+          box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);+}+.progress-bar {+  float: left;+  width: 0;+  height: 100%;+  font-size: 12px;+  line-height: 20px;+  color: #fff;+  text-align: center;+  background-color: #428bca;+  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);+          box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);+  -webkit-transition: width .6s ease;+       -o-transition: width .6s ease;+          transition: width .6s ease;+}+.progress-striped .progress-bar,+.progress-bar-striped {+  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);+  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);+  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);+  -webkit-background-size: 40px 40px;+          background-size: 40px 40px;+}+.progress.active .progress-bar,+.progress-bar.active {+  -webkit-animation: progress-bar-stripes 2s linear infinite;+       -o-animation: progress-bar-stripes 2s linear infinite;+          animation: progress-bar-stripes 2s linear infinite;+}+.progress-bar[aria-valuenow="1"],+.progress-bar[aria-valuenow="2"] {+  min-width: 30px;+}+.progress-bar[aria-valuenow="0"] {+  min-width: 30px;+  color: #777;+  background-color: transparent;+  background-image: none;+  -webkit-box-shadow: none;+          box-shadow: none;+}+.progress-bar-success {+  background-color: #5cb85c;+}+.progress-striped .progress-bar-success {+  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);+  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);+  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);+}+.progress-bar-info {+  background-color: #5bc0de;+}+.progress-striped .progress-bar-info {+  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);+  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);+  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);+}+.progress-bar-warning {+  background-color: #f0ad4e;+}+.progress-striped .progress-bar-warning {+  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);+  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);+  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);+}+.progress-bar-danger {+  background-color: #d9534f;+}+.progress-striped .progress-bar-danger {+  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);+  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);+  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);+}+.media,+.media-body {+  overflow: hidden;+  zoom: 1;+}+.media,+.media .media {+  margin-top: 15px;+}+.media:first-child {+  margin-top: 0;+}+.media-object {+  display: block;+}+.media-heading {+  margin: 0 0 5px;+}+.media > .pull-left {+  margin-right: 10px;+}+.media > .pull-right {+  margin-left: 10px;+}+.media-list {+  padding-left: 0;+  list-style: none;+}+.list-group {+  padding-left: 0;+  margin-bottom: 20px;+}+.list-group-item {+  position: relative;+  display: block;+  padding: 10px 15px;+  margin-bottom: -1px;+  background-color: #fff;+  border: 1px solid #ddd;+}+.list-group-item:first-child {+  border-top-left-radius: 4px;+  border-top-right-radius: 4px;+}+.list-group-item:last-child {+  margin-bottom: 0;+  border-bottom-right-radius: 4px;+  border-bottom-left-radius: 4px;+}+.list-group-item > .badge {+  float: right;+}+.list-group-item > .badge + .badge {+  margin-right: 5px;+}+a.list-group-item {+  color: #555;+}+a.list-group-item .list-group-item-heading {+  color: #333;+}+a.list-group-item:hover,+a.list-group-item:focus {+  color: #555;+  text-decoration: none;+  background-color: #f5f5f5;+}+.list-group-item.disabled,+.list-group-item.disabled:hover,+.list-group-item.disabled:focus {+  color: #777;+  background-color: #eee;+}+.list-group-item.disabled .list-group-item-heading,+.list-group-item.disabled:hover .list-group-item-heading,+.list-group-item.disabled:focus .list-group-item-heading {+  color: inherit;+}+.list-group-item.disabled .list-group-item-text,+.list-group-item.disabled:hover .list-group-item-text,+.list-group-item.disabled:focus .list-group-item-text {+  color: #777;+}+.list-group-item.active,+.list-group-item.active:hover,+.list-group-item.active:focus {+  z-index: 2;+  color: #fff;+  background-color: #428bca;+  border-color: #428bca;+}+.list-group-item.active .list-group-item-heading,+.list-group-item.active:hover .list-group-item-heading,+.list-group-item.active:focus .list-group-item-heading,+.list-group-item.active .list-group-item-heading > small,+.list-group-item.active:hover .list-group-item-heading > small,+.list-group-item.active:focus .list-group-item-heading > small,+.list-group-item.active .list-group-item-heading > .small,+.list-group-item.active:hover .list-group-item-heading > .small,+.list-group-item.active:focus .list-group-item-heading > .small {+  color: inherit;+}+.list-group-item.active .list-group-item-text,+.list-group-item.active:hover .list-group-item-text,+.list-group-item.active:focus .list-group-item-text {+  color: #e1edf7;+}+.list-group-item-success {+  color: #3c763d;+  background-color: #dff0d8;+}+a.list-group-item-success {+  color: #3c763d;+}+a.list-group-item-success .list-group-item-heading {+  color: inherit;+}+a.list-group-item-success:hover,+a.list-group-item-success:focus {+  color: #3c763d;+  background-color: #d0e9c6;+}+a.list-group-item-success.active,+a.list-group-item-success.active:hover,+a.list-group-item-success.active:focus {+  color: #fff;+  background-color: #3c763d;+  border-color: #3c763d;+}+.list-group-item-info {+  color: #31708f;+  background-color: #d9edf7;+}+a.list-group-item-info {+  color: #31708f;+}+a.list-group-item-info .list-group-item-heading {+  color: inherit;+}+a.list-group-item-info:hover,+a.list-group-item-info:focus {+  color: #31708f;+  background-color: #c4e3f3;+}+a.list-group-item-info.active,+a.list-group-item-info.active:hover,+a.list-group-item-info.active:focus {+  color: #fff;+  background-color: #31708f;+  border-color: #31708f;+}+.list-group-item-warning {+  color: #8a6d3b;+  background-color: #fcf8e3;+}+a.list-group-item-warning {+  color: #8a6d3b;+}+a.list-group-item-warning .list-group-item-heading {+  color: inherit;+}+a.list-group-item-warning:hover,+a.list-group-item-warning:focus {+  color: #8a6d3b;+  background-color: #faf2cc;+}+a.list-group-item-warning.active,+a.list-group-item-warning.active:hover,+a.list-group-item-warning.active:focus {+  color: #fff;+  background-color: #8a6d3b;+  border-color: #8a6d3b;+}+.list-group-item-danger {+  color: #a94442;+  background-color: #f2dede;+}+a.list-group-item-danger {+  color: #a94442;+}+a.list-group-item-danger .list-group-item-heading {+  color: inherit;+}+a.list-group-item-danger:hover,+a.list-group-item-danger:focus {+  color: #a94442;+  background-color: #ebcccc;+}+a.list-group-item-danger.active,+a.list-group-item-danger.active:hover,+a.list-group-item-danger.active:focus {+  color: #fff;+  background-color: #a94442;+  border-color: #a94442;+}+.list-group-item-heading {+  margin-top: 0;+  margin-bottom: 5px;+}+.list-group-item-text {+  margin-bottom: 0;+  line-height: 1.3;+}+.panel {+  margin-bottom: 20px;+  background-color: #fff;+  border: 1px solid transparent;+  border-radius: 4px;+  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05);+          box-shadow: 0 1px 1px rgba(0, 0, 0, .05);+}+.panel-body {+  padding: 15px;+}+.panel-heading {+  padding: 10px 15px;+  border-bottom: 1px solid transparent;+  border-top-left-radius: 3px;+  border-top-right-radius: 3px;+}+.panel-heading > .dropdown .dropdown-toggle {+  color: inherit;+}+.panel-title {+  margin-top: 0;+  margin-bottom: 0;+  font-size: 16px;+  color: inherit;+}+.panel-title > a {+  color: inherit;+}+.panel-footer {+  padding: 10px 15px;+  background-color: #f5f5f5;+  border-top: 1px solid #ddd;+  border-bottom-right-radius: 3px;+  border-bottom-left-radius: 3px;+}+.panel > .list-group {+  margin-bottom: 0;+}+.panel > .list-group .list-group-item {+  border-width: 1px 0;+  border-radius: 0;+}+.panel > .list-group:first-child .list-group-item:first-child {+  border-top: 0;+  border-top-left-radius: 3px;+  border-top-right-radius: 3px;+}+.panel > .list-group:last-child .list-group-item:last-child {+  border-bottom: 0;+  border-bottom-right-radius: 3px;+  border-bottom-left-radius: 3px;+}+.panel-heading + .list-group .list-group-item:first-child {+  border-top-width: 0;+}+.list-group + .panel-footer {+  border-top-width: 0;+}+.panel > .table,+.panel > .table-responsive > .table,+.panel > .panel-collapse > .table {+  margin-bottom: 0;+}+.panel > .table:first-child,+.panel > .table-responsive:first-child > .table:first-child {+  border-top-left-radius: 3px;+  border-top-right-radius: 3px;+}+.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,+.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,+.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,+.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {+  border-top-left-radius: 3px;+}+.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,+.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,+.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,+.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {+  border-top-right-radius: 3px;+}+.panel > .table:last-child,+.panel > .table-responsive:last-child > .table:last-child {+  border-bottom-right-radius: 3px;+  border-bottom-left-radius: 3px;+}+.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,+.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,+.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,+.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {+  border-bottom-left-radius: 3px;+}+.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,+.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,+.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,+.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {+  border-bottom-right-radius: 3px;+}+.panel > .panel-body + .table,+.panel > .panel-body + .table-responsive {+  border-top: 1px solid #ddd;+}+.panel > .table > tbody:first-child > tr:first-child th,+.panel > .table > tbody:first-child > tr:first-child td {+  border-top: 0;+}+.panel > .table-bordered,+.panel > .table-responsive > .table-bordered {+  border: 0;+}+.panel > .table-bordered > thead > tr > th:first-child,+.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,+.panel > .table-bordered > tbody > tr > th:first-child,+.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,+.panel > .table-bordered > tfoot > tr > th:first-child,+.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,+.panel > .table-bordered > thead > tr > td:first-child,+.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,+.panel > .table-bordered > tbody > tr > td:first-child,+.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,+.panel > .table-bordered > tfoot > tr > td:first-child,+.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {+  border-left: 0;+}+.panel > .table-bordered > thead > tr > th:last-child,+.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,+.panel > .table-bordered > tbody > tr > th:last-child,+.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,+.panel > .table-bordered > tfoot > tr > th:last-child,+.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,+.panel > .table-bordered > thead > tr > td:last-child,+.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,+.panel > .table-bordered > tbody > tr > td:last-child,+.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,+.panel > .table-bordered > tfoot > tr > td:last-child,+.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {+  border-right: 0;+}+.panel > .table-bordered > thead > tr:first-child > td,+.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,+.panel > .table-bordered > tbody > tr:first-child > td,+.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,+.panel > .table-bordered > thead > tr:first-child > th,+.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,+.panel > .table-bordered > tbody > tr:first-child > th,+.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {+  border-bottom: 0;+}+.panel > .table-bordered > tbody > tr:last-child > td,+.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,+.panel > .table-bordered > tfoot > tr:last-child > td,+.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,+.panel > .table-bordered > tbody > tr:last-child > th,+.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,+.panel > .table-bordered > tfoot > tr:last-child > th,+.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {+  border-bottom: 0;+}+.panel > .table-responsive {+  margin-bottom: 0;+  border: 0;+}+.panel-group {+  margin-bottom: 20px;+}+.panel-group .panel {+  margin-bottom: 0;+  border-radius: 4px;+}+.panel-group .panel + .panel {+  margin-top: 5px;+}+.panel-group .panel-heading {+  border-bottom: 0;+}+.panel-group .panel-heading + .panel-collapse > .panel-body {+  border-top: 1px solid #ddd;+}+.panel-group .panel-footer {+  border-top: 0;+}+.panel-group .panel-footer + .panel-collapse .panel-body {+  border-bottom: 1px solid #ddd;+}+.panel-default {+  border-color: #ddd;+}+.panel-default > .panel-heading {+  color: #333;+  background-color: #f5f5f5;+  border-color: #ddd;+}+.panel-default > .panel-heading + .panel-collapse > .panel-body {+  border-top-color: #ddd;+}+.panel-default > .panel-heading .badge {+  color: #f5f5f5;+  background-color: #333;+}+.panel-default > .panel-footer + .panel-collapse > .panel-body {+  border-bottom-color: #ddd;+}+.panel-primary {+  border-color: #428bca;+}+.panel-primary > .panel-heading {+  color: #fff;+  background-color: #428bca;+  border-color: #428bca;+}+.panel-primary > .panel-heading + .panel-collapse > .panel-body {+  border-top-color: #428bca;+}+.panel-primary > .panel-heading .badge {+  color: #428bca;+  background-color: #fff;+}+.panel-primary > .panel-footer + .panel-collapse > .panel-body {+  border-bottom-color: #428bca;+}+.panel-success {+  border-color: #d6e9c6;+}+.panel-success > .panel-heading {+  color: #3c763d;+  background-color: #dff0d8;+  border-color: #d6e9c6;+}+.panel-success > .panel-heading + .panel-collapse > .panel-body {+  border-top-color: #d6e9c6;+}+.panel-success > .panel-heading .badge {+  color: #dff0d8;+  background-color: #3c763d;+}+.panel-success > .panel-footer + .panel-collapse > .panel-body {+  border-bottom-color: #d6e9c6;+}+.panel-info {+  border-color: #bce8f1;+}+.panel-info > .panel-heading {+  color: #31708f;+  background-color: #d9edf7;+  border-color: #bce8f1;+}+.panel-info > .panel-heading + .panel-collapse > .panel-body {+  border-top-color: #bce8f1;+}+.panel-info > .panel-heading .badge {+  color: #d9edf7;+  background-color: #31708f;+}+.panel-info > .panel-footer + .panel-collapse > .panel-body {+  border-bottom-color: #bce8f1;+}+.panel-warning {+  border-color: #faebcc;+}+.panel-warning > .panel-heading {+  color: #8a6d3b;+  background-color: #fcf8e3;+  border-color: #faebcc;+}+.panel-warning > .panel-heading + .panel-collapse > .panel-body {+  border-top-color: #faebcc;+}+.panel-warning > .panel-heading .badge {+  color: #fcf8e3;+  background-color: #8a6d3b;+}+.panel-warning > .panel-footer + .panel-collapse > .panel-body {+  border-bottom-color: #faebcc;+}+.panel-danger {+  border-color: #ebccd1;+}+.panel-danger > .panel-heading {+  color: #a94442;+  background-color: #f2dede;+  border-color: #ebccd1;+}+.panel-danger > .panel-heading + .panel-collapse > .panel-body {+  border-top-color: #ebccd1;+}+.panel-danger > .panel-heading .badge {+  color: #f2dede;+  background-color: #a94442;+}+.panel-danger > .panel-footer + .panel-collapse > .panel-body {+  border-bottom-color: #ebccd1;+}+.embed-responsive {+  position: relative;+  display: block;+  height: 0;+  padding: 0;+  overflow: hidden;+}+.embed-responsive .embed-responsive-item,+.embed-responsive iframe,+.embed-responsive embed,+.embed-responsive object {+  position: absolute;+  top: 0;+  bottom: 0;+  left: 0;+  width: 100%;+  height: 100%;+  border: 0;+}+.embed-responsive.embed-responsive-16by9 {+  padding-bottom: 56.25%;+}+.embed-responsive.embed-responsive-4by3 {+  padding-bottom: 75%;+}+.well {+  min-height: 20px;+  padding: 19px;+  margin-bottom: 20px;+  background-color: #f5f5f5;+  border: 1px solid #e3e3e3;+  border-radius: 4px;+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);+          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);+}+.well blockquote {+  border-color: #ddd;+  border-color: rgba(0, 0, 0, .15);+}+.well-lg {+  padding: 24px;+  border-radius: 6px;+}+.well-sm {+  padding: 9px;+  border-radius: 3px;+}+.close {+  float: right;+  font-size: 21px;+  font-weight: bold;+  line-height: 1;+  color: #000;+  text-shadow: 0 1px 0 #fff;+  filter: alpha(opacity=20);+  opacity: .2;+}+.close:hover,+.close:focus {+  color: #000;+  text-decoration: none;+  cursor: pointer;+  filter: alpha(opacity=50);+  opacity: .5;+}+button.close {+  -webkit-appearance: none;+  padding: 0;+  cursor: pointer;+  background: transparent;+  border: 0;+}+.modal-open {+  overflow: hidden;+}+.modal {+  position: fixed;+  top: 0;+  right: 0;+  bottom: 0;+  left: 0;+  z-index: 1050;+  display: none;+  overflow: hidden;+  -webkit-overflow-scrolling: touch;+  outline: 0;+}+.modal.fade .modal-dialog {+  -webkit-transition: -webkit-transform .3s ease-out;+       -o-transition:      -o-transform .3s ease-out;+          transition:         transform .3s ease-out;+  -webkit-transform: translate3d(0, -25%, 0);+       -o-transform: translate3d(0, -25%, 0);+          transform: translate3d(0, -25%, 0);+}+.modal.in .modal-dialog {+  -webkit-transform: translate3d(0, 0, 0);+       -o-transform: translate3d(0, 0, 0);+          transform: translate3d(0, 0, 0);+}+.modal-open .modal {+  overflow-x: hidden;+  overflow-y: auto;+}+.modal-dialog {+  position: relative;+  width: auto;+  margin: 10px;+}+.modal-content {+  position: relative;+  background-color: #fff;+  -webkit-background-clip: padding-box;+          background-clip: padding-box;+  border: 1px solid #999;+  border: 1px solid rgba(0, 0, 0, .2);+  border-radius: 6px;+  outline: 0;+  -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5);+          box-shadow: 0 3px 9px rgba(0, 0, 0, .5);+}+.modal-backdrop {+  position: fixed;+  top: 0;+  right: 0;+  bottom: 0;+  left: 0;+  z-index: 1040;+  background-color: #000;+}+.modal-backdrop.fade {+  filter: alpha(opacity=0);+  opacity: 0;+}+.modal-backdrop.in {+  filter: alpha(opacity=50);+  opacity: .5;+}+.modal-header {+  min-height: 16.42857143px;+  padding: 15px;+  border-bottom: 1px solid #e5e5e5;+}+.modal-header .close {+  margin-top: -2px;+}+.modal-title {+  margin: 0;+  line-height: 1.42857143;+}+.modal-body {+  position: relative;+  padding: 15px;+}+.modal-footer {+  padding: 15px;+  text-align: right;+  border-top: 1px solid #e5e5e5;+}+.modal-footer .btn + .btn {+  margin-bottom: 0;+  margin-left: 5px;+}+.modal-footer .btn-group .btn + .btn {+  margin-left: -1px;+}+.modal-footer .btn-block + .btn-block {+  margin-left: 0;+}+.modal-scrollbar-measure {+  position: absolute;+  top: -9999px;+  width: 50px;+  height: 50px;+  overflow: scroll;+}+@media (min-width: 768px) {+  .modal-dialog {+    width: 600px;+    margin: 30px auto;+  }+  .modal-content {+    -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5);+            box-shadow: 0 5px 15px rgba(0, 0, 0, .5);+  }+  .modal-sm {+    width: 300px;+  }+}+@media (min-width: 992px) {+  .modal-lg {+    width: 900px;+  }+}+.tooltip {+  position: absolute;+  z-index: 1070;+  display: block;+  font-size: 12px;+  line-height: 1.4;+  visibility: visible;+  filter: alpha(opacity=0);+  opacity: 0;+}+.tooltip.in {+  filter: alpha(opacity=90);+  opacity: .9;+}+.tooltip.top {+  padding: 5px 0;+  margin-top: -3px;+}+.tooltip.right {+  padding: 0 5px;+  margin-left: 3px;+}+.tooltip.bottom {+  padding: 5px 0;+  margin-top: 3px;+}+.tooltip.left {+  padding: 0 5px;+  margin-left: -3px;+}+.tooltip-inner {+  max-width: 200px;+  padding: 3px 8px;+  color: #fff;+  text-align: center;+  text-decoration: none;+  background-color: #000;+  border-radius: 4px;+}+.tooltip-arrow {+  position: absolute;+  width: 0;+  height: 0;+  border-color: transparent;+  border-style: solid;+}+.tooltip.top .tooltip-arrow {+  bottom: 0;+  left: 50%;+  margin-left: -5px;+  border-width: 5px 5px 0;+  border-top-color: #000;+}+.tooltip.top-left .tooltip-arrow {+  bottom: 0;+  left: 5px;+  border-width: 5px 5px 0;+  border-top-color: #000;+}+.tooltip.top-right .tooltip-arrow {+  right: 5px;+  bottom: 0;+  border-width: 5px 5px 0;+  border-top-color: #000;+}+.tooltip.right .tooltip-arrow {+  top: 50%;+  left: 0;+  margin-top: -5px;+  border-width: 5px 5px 5px 0;+  border-right-color: #000;+}+.tooltip.left .tooltip-arrow {+  top: 50%;+  right: 0;+  margin-top: -5px;+  border-width: 5px 0 5px 5px;+  border-left-color: #000;+}+.tooltip.bottom .tooltip-arrow {+  top: 0;+  left: 50%;+  margin-left: -5px;+  border-width: 0 5px 5px;+  border-bottom-color: #000;+}+.tooltip.bottom-left .tooltip-arrow {+  top: 0;+  left: 5px;+  border-width: 0 5px 5px;+  border-bottom-color: #000;+}+.tooltip.bottom-right .tooltip-arrow {+  top: 0;+  right: 5px;+  border-width: 0 5px 5px;+  border-bottom-color: #000;+}+.popover {+  position: absolute;+  top: 0;+  left: 0;+  z-index: 1060;+  display: none;+  max-width: 276px;+  padding: 1px;+  text-align: left;+  white-space: normal;+  background-color: #fff;+  -webkit-background-clip: padding-box;+          background-clip: padding-box;+  border: 1px solid #ccc;+  border: 1px solid rgba(0, 0, 0, .2);+  border-radius: 6px;+  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2);+          box-shadow: 0 5px 10px rgba(0, 0, 0, .2);+}+.popover.top {+  margin-top: -10px;+}+.popover.right {+  margin-left: 10px;+}+.popover.bottom {+  margin-top: 10px;+}+.popover.left {+  margin-left: -10px;+}+.popover-title {+  padding: 8px 14px;+  margin: 0;+  font-size: 14px;+  font-weight: normal;+  line-height: 18px;+  background-color: #f7f7f7;+  border-bottom: 1px solid #ebebeb;+  border-radius: 5px 5px 0 0;+}+.popover-content {+  padding: 9px 14px;+}+.popover > .arrow,+.popover > .arrow:after {+  position: absolute;+  display: block;+  width: 0;+  height: 0;+  border-color: transparent;+  border-style: solid;+}+.popover > .arrow {+  border-width: 11px;+}+.popover > .arrow:after {+  content: "";+  border-width: 10px;+}+.popover.top > .arrow {+  bottom: -11px;+  left: 50%;+  margin-left: -11px;+  border-top-color: #999;+  border-top-color: rgba(0, 0, 0, .25);+  border-bottom-width: 0;+}+.popover.top > .arrow:after {+  bottom: 1px;+  margin-left: -10px;+  content: " ";+  border-top-color: #fff;+  border-bottom-width: 0;+}+.popover.right > .arrow {+  top: 50%;+  left: -11px;+  margin-top: -11px;+  border-right-color: #999;+  border-right-color: rgba(0, 0, 0, .25);+  border-left-width: 0;+}+.popover.right > .arrow:after {+  bottom: -10px;+  left: 1px;+  content: " ";+  border-right-color: #fff;+  border-left-width: 0;+}+.popover.bottom > .arrow {+  top: -11px;+  left: 50%;+  margin-left: -11px;+  border-top-width: 0;+  border-bottom-color: #999;+  border-bottom-color: rgba(0, 0, 0, .25);+}+.popover.bottom > .arrow:after {+  top: 1px;+  margin-left: -10px;+  content: " ";+  border-top-width: 0;+  border-bottom-color: #fff;+}+.popover.left > .arrow {+  top: 50%;+  right: -11px;+  margin-top: -11px;+  border-right-width: 0;+  border-left-color: #999;+  border-left-color: rgba(0, 0, 0, .25);+}+.popover.left > .arrow:after {+  right: 1px;+  bottom: -10px;+  content: " ";+  border-right-width: 0;+  border-left-color: #fff;+}+.carousel {+  position: relative;+}+.carousel-inner {+  position: relative;+  width: 100%;+  overflow: hidden;+}+.carousel-inner > .item {+  position: relative;+  display: none;+  -webkit-transition: .6s ease-in-out left;+       -o-transition: .6s ease-in-out left;+          transition: .6s ease-in-out left;+}+.carousel-inner > .item > img,+.carousel-inner > .item > a > img {+  line-height: 1;+}+.carousel-inner > .active,+.carousel-inner > .next,+.carousel-inner > .prev {+  display: block;+}+.carousel-inner > .active {+  left: 0;+}+.carousel-inner > .next,+.carousel-inner > .prev {+  position: absolute;+  top: 0;+  width: 100%;+}+.carousel-inner > .next {+  left: 100%;+}+.carousel-inner > .prev {+  left: -100%;+}+.carousel-inner > .next.left,+.carousel-inner > .prev.right {+  left: 0;+}+.carousel-inner > .active.left {+  left: -100%;+}+.carousel-inner > .active.right {+  left: 100%;+}+.carousel-control {+  position: absolute;+  top: 0;+  bottom: 0;+  left: 0;+  width: 15%;+  font-size: 20px;+  color: #fff;+  text-align: center;+  text-shadow: 0 1px 2px rgba(0, 0, 0, .6);+  filter: alpha(opacity=50);+  opacity: .5;+}+.carousel-control.left {+  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);+  background-image:      -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);+  background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001)));+  background-image:         linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);+  background-repeat: repeat-x;+}+.carousel-control.right {+  right: 0;+  left: auto;+  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);+  background-image:      -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);+  background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5)));+  background-image:         linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);+  background-repeat: repeat-x;+}+.carousel-control:hover,+.carousel-control:focus {+  color: #fff;+  text-decoration: none;+  filter: alpha(opacity=90);+  outline: 0;+  opacity: .9;+}+.carousel-control .icon-prev,+.carousel-control .icon-next,+.carousel-control .glyphicon-chevron-left,+.carousel-control .glyphicon-chevron-right {+  position: absolute;+  top: 50%;+  z-index: 5;+  display: inline-block;+}+.carousel-control .icon-prev,+.carousel-control .glyphicon-chevron-left {+  left: 50%;+  margin-left: -10px;+}+.carousel-control .icon-next,+.carousel-control .glyphicon-chevron-right {+  right: 50%;+  margin-right: -10px;+}+.carousel-control .icon-prev,+.carousel-control .icon-next {+  width: 20px;+  height: 20px;+  margin-top: -10px;+  font-family: serif;+}+.carousel-control .icon-prev:before {+  content: '\2039';+}+.carousel-control .icon-next:before {+  content: '\203a';+}+.carousel-indicators {+  position: absolute;+  bottom: 10px;+  left: 50%;+  z-index: 15;+  width: 60%;+  padding-left: 0;+  margin-left: -30%;+  text-align: center;+  list-style: none;+}+.carousel-indicators li {+  display: inline-block;+  width: 10px;+  height: 10px;+  margin: 1px;+  text-indent: -999px;+  cursor: pointer;+  background-color: #000 \9;+  background-color: rgba(0, 0, 0, 0);+  border: 1px solid #fff;+  border-radius: 10px;+}+.carousel-indicators .active {+  width: 12px;+  height: 12px;+  margin: 0;+  background-color: #fff;+}+.carousel-caption {+  position: absolute;+  right: 15%;+  bottom: 20px;+  left: 15%;+  z-index: 10;+  padding-top: 20px;+  padding-bottom: 20px;+  color: #fff;+  text-align: center;+  text-shadow: 0 1px 2px rgba(0, 0, 0, .6);+}+.carousel-caption .btn {+  text-shadow: none;+}+@media screen and (min-width: 768px) {+  .carousel-control .glyphicon-chevron-left,+  .carousel-control .glyphicon-chevron-right,+  .carousel-control .icon-prev,+  .carousel-control .icon-next {+    width: 30px;+    height: 30px;+    margin-top: -15px;+    font-size: 30px;+  }+  .carousel-control .glyphicon-chevron-left,+  .carousel-control .icon-prev {+    margin-left: -15px;+  }+  .carousel-control .glyphicon-chevron-right,+  .carousel-control .icon-next {+    margin-right: -15px;+  }+  .carousel-caption {+    right: 20%;+    left: 20%;+    padding-bottom: 30px;+  }+  .carousel-indicators {+    bottom: 20px;+  }+}+.clearfix:before,+.clearfix:after,+.dl-horizontal dd:before,+.dl-horizontal dd:after,+.container:before,+.container:after,+.container-fluid:before,+.container-fluid:after,+.row:before,+.row:after,+.form-horizontal .form-group:before,+.form-horizontal .form-group:after,+.btn-toolbar:before,+.btn-toolbar:after,+.btn-group-vertical > .btn-group:before,+.btn-group-vertical > .btn-group:after,+.nav:before,+.nav:after,+.navbar:before,+.navbar:after,+.navbar-header:before,+.navbar-header:after,+.navbar-collapse:before,+.navbar-collapse:after,+.pager:before,+.pager:after,+.panel-body:before,+.panel-body:after,+.modal-footer:before,+.modal-footer:after {+  display: table;+  content: " ";+}+.clearfix:after,+.dl-horizontal dd:after,+.container:after,+.container-fluid:after,+.row:after,+.form-horizontal .form-group:after,+.btn-toolbar:after,+.btn-group-vertical > .btn-group:after,+.nav:after,+.navbar:after,+.navbar-header:after,+.navbar-collapse:after,+.pager:after,+.panel-body:after,+.modal-footer:after {+  clear: both;+}+.center-block {+  display: block;+  margin-right: auto;+  margin-left: auto;+}+.pull-right {+  float: right !important;+}+.pull-left {+  float: left !important;+}+.hide {+  display: none !important;+}+.show {+  display: block !important;+}+.invisible {+  visibility: hidden;+}+.text-hide {+  font: 0/0 a;+  color: transparent;+  text-shadow: none;+  background-color: transparent;+  border: 0;+}+.hidden {+  display: none !important;+  visibility: hidden !important;+}+.affix {+  position: fixed;+  -webkit-transform: translate3d(0, 0, 0);+       -o-transform: translate3d(0, 0, 0);+          transform: translate3d(0, 0, 0);+}+@-ms-viewport {+  width: device-width;+}+.visible-xs,+.visible-sm,+.visible-md,+.visible-lg {+  display: none !important;+}+.visible-xs-block,+.visible-xs-inline,+.visible-xs-inline-block,+.visible-sm-block,+.visible-sm-inline,+.visible-sm-inline-block,+.visible-md-block,+.visible-md-inline,+.visible-md-inline-block,+.visible-lg-block,+.visible-lg-inline,+.visible-lg-inline-block {+  display: none !important;+}+@media (max-width: 767px) {+  .visible-xs {+    display: block !important;+  }+  table.visible-xs {+    display: table;+  }+  tr.visible-xs {+    display: table-row !important;+  }+  th.visible-xs,+  td.visible-xs {+    display: table-cell !important;+  }+}+@media (max-width: 767px) {+  .visible-xs-block {+    display: block !important;+  }+}+@media (max-width: 767px) {+  .visible-xs-inline {+    display: inline !important;+  }+}+@media (max-width: 767px) {+  .visible-xs-inline-block {+    display: inline-block !important;+  }+}+@media (min-width: 768px) and (max-width: 991px) {+  .visible-sm {+    display: block !important;+  }+  table.visible-sm {+    display: table;+  }+  tr.visible-sm {+    display: table-row !important;+  }+  th.visible-sm,+  td.visible-sm {+    display: table-cell !important;+  }+}+@media (min-width: 768px) and (max-width: 991px) {+  .visible-sm-block {+    display: block !important;+  }+}+@media (min-width: 768px) and (max-width: 991px) {+  .visible-sm-inline {+    display: inline !important;+  }+}+@media (min-width: 768px) and (max-width: 991px) {+  .visible-sm-inline-block {+    display: inline-block !important;+  }+}+@media (min-width: 992px) and (max-width: 1199px) {+  .visible-md {+    display: block !important;+  }+  table.visible-md {+    display: table;+  }+  tr.visible-md {+    display: table-row !important;+  }+  th.visible-md,+  td.visible-md {+    display: table-cell !important;+  }+}+@media (min-width: 992px) and (max-width: 1199px) {+  .visible-md-block {+    display: block !important;+  }+}+@media (min-width: 992px) and (max-width: 1199px) {+  .visible-md-inline {+    display: inline !important;+  }+}+@media (min-width: 992px) and (max-width: 1199px) {+  .visible-md-inline-block {+    display: inline-block !important;+  }+}+@media (min-width: 1200px) {+  .visible-lg {+    display: block !important;+  }+  table.visible-lg {+    display: table;+  }+  tr.visible-lg {+    display: table-row !important;+  }+  th.visible-lg,+  td.visible-lg {+    display: table-cell !important;+  }+}+@media (min-width: 1200px) {+  .visible-lg-block {+    display: block !important;+  }+}+@media (min-width: 1200px) {+  .visible-lg-inline {+    display: inline !important;+  }+}+@media (min-width: 1200px) {+  .visible-lg-inline-block {+    display: inline-block !important;+  }+}+@media (max-width: 767px) {+  .hidden-xs {+    display: none !important;+  }+}+@media (min-width: 768px) and (max-width: 991px) {+  .hidden-sm {+    display: none !important;+  }+}+@media (min-width: 992px) and (max-width: 1199px) {+  .hidden-md {+    display: none !important;+  }+}+@media (min-width: 1200px) {+  .hidden-lg {+    display: none !important;+  }+}+.visible-print {+  display: none !important;+}+@media print {+  .visible-print {+    display: block !important;+  }+  table.visible-print {+    display: table;+  }+  tr.visible-print {+    display: table-row !important;+  }+  th.visible-print,+  td.visible-print {+    display: table-cell !important;+  }+}+.visible-print-block {+  display: none !important;+}+@media print {+  .visible-print-block {+    display: block !important;+  }+}+.visible-print-inline {+  display: none !important;+}+@media print {+  .visible-print-inline {+    display: inline !important;+  }+}+.visible-print-inline-block {+  display: none !important;+}+@media print {+  .visible-print-inline-block {+    display: inline-block !important;+  }+}+@media print {+  .hidden-print {+    display: none !important;+  }+}+/*# sourceMappingURL=bootstrap.css.map */
+ static/css/bootstrap.css.map view
@@ -0,0 +1,1 @@+{"version":3,"file":"bootstrap.css","sources":["bootstrap.css","less/normalize.less","less/print.less","less/glyphicons.less","less/scaffolding.less","less/mixins/vendor-prefixes.less","less/mixins/tab-focus.less","less/mixins/image.less","less/type.less","less/mixins/text-emphasis.less","less/mixins/background-variant.less","less/mixins/text-overflow.less","less/code.less","less/grid.less","less/mixins/grid.less","less/mixins/grid-framework.less","less/tables.less","less/mixins/table-row.less","less/forms.less","less/mixins/forms.less","less/buttons.less","less/mixins/buttons.less","less/mixins/opacity.less","less/component-animations.less","less/dropdowns.less","less/mixins/nav-divider.less","less/mixins/reset-filter.less","less/button-groups.less","less/mixins/border-radius.less","less/input-groups.less","less/navs.less","less/navbar.less","less/mixins/nav-vertical-align.less","less/utilities.less","less/breadcrumbs.less","less/pagination.less","less/mixins/pagination.less","less/pager.less","less/labels.less","less/mixins/labels.less","less/badges.less","less/jumbotron.less","less/thumbnails.less","less/alerts.less","less/mixins/alerts.less","less/progress-bars.less","less/mixins/gradients.less","less/mixins/progress-bar.less","less/media.less","less/list-group.less","less/mixins/list-group.less","less/panels.less","less/mixins/panels.less","less/responsive-embed.less","less/wells.less","less/close.less","less/modals.less","less/tooltip.less","less/popovers.less","less/carousel.less","less/mixins/clearfix.less","less/mixins/center-block.less","less/mixins/hide-text.less","less/responsive-utilities.less","less/mixins/responsive-visibility.less"],"names":[],"mappings":"AAAA,6DAA4D;ACQ5D;EACE,yBAAA;EACA,4BAAA;EACA,gCAAA;EDND;ACaD;EACE,WAAA;EDXD;ACuBD;;;;;;;;;;;;EAYE,gBAAA;EDrBD;AC6BD;;;;EAIE,uBAAA;EACA,0BAAA;ED3BD;ACmCD;EACE,eAAA;EACA,WAAA;EDjCD;ACyCD;;EAEE,eAAA;EDvCD;ACiDD;EACE,yBAAA;ED/CD;ACsDD;;EAEE,YAAA;EDpDD;AC8DD;EACE,2BAAA;ED5DD;ACmED;;EAEE,mBAAA;EDjED;ACwED;EACE,oBAAA;EDtED;AC8ED;EACE,gBAAA;EACA,kBAAA;ED5ED;ACmFD;EACE,kBAAA;EACA,aAAA;EDjFD;ACwFD;EACE,gBAAA;EDtFD;AC6FD;;EAEE,gBAAA;EACA,gBAAA;EACA,oBAAA;EACA,0BAAA;ED3FD;AC8FD;EACE,aAAA;ED5FD;AC+FD;EACE,iBAAA;ED7FD;ACuGD;EACE,WAAA;EDrGD;AC4GD;EACE,kBAAA;ED1GD;ACoHD;EACE,kBAAA;EDlHD;ACyHD;EACE,8BAAA;EACA,iCAAA;EAAA,yBAAA;EACA,WAAA;EDvHD;AC8HD;EACE,gBAAA;ED5HD;ACmID;;;;EAIE,mCAAA;EACA,gBAAA;EDjID;ACmJD;;;;;EAKE,gBAAA;EACA,eAAA;EACA,WAAA;EDjJD;ACwJD;EACE,mBAAA;EDtJD;ACgKD;;EAEE,sBAAA;ED9JD;ACyKD;;;;EAIE,4BAAA;EACA,iBAAA;EDvKD;AC8KD;;EAEE,iBAAA;ED5KD;ACmLD;;EAEE,WAAA;EACA,YAAA;EDjLD;ACyLD;EACE,qBAAA;EDvLD;ACkMD;;EAEE,gCAAA;EAAA,6BAAA;EAAA,wBAAA;EACA,YAAA;EDhMD;ACyMD;;EAEE,cAAA;EDvMD;ACgND;EACE,+BAAA;EACA,8BAAA;EACA,iCAAA;EACA,yBAAA;ED9MD;ACuND;;EAEE,0BAAA;EDrND;AC4ND;EACE,2BAAA;EACA,eAAA;EACA,gCAAA;ED1ND;ACkOD;EACE,WAAA;EACA,YAAA;EDhOD;ACuOD;EACE,gBAAA;EDrOD;AC6OD;EACE,mBAAA;ED3OD;ACqPD;EACE,2BAAA;EACA,mBAAA;EDnPD;ACsPD;;EAEE,YAAA;EDpPD;AE9ED;EA9FE;IACE,8BAAA;IACA,wBAAA;IACA,oCAAA;IACA,qCAAA;IAAA,6BAAA;IF+KD;EE5KD;;IAEE,4BAAA;IF8KD;EE3KD;IACE,8BAAA;IF6KD;EE1KD;IACE,+BAAA;IF4KD;EExKD;;IAEE,aAAA;IF0KD;EEvKD;;IAEE,wBAAA;IACA,0BAAA;IFyKD;EEtKD;IACE,6BAAA;IFwKD;EErKD;;IAEE,0BAAA;IFuKD;EEpKD;IACE,4BAAA;IFsKD;EEnKD;;;IAGE,YAAA;IACA,WAAA;IFqKD;EElKD;;IAEE,yBAAA;IFoKD;EE/JD;IACE,6BAAA;IFiKD;EE7JD;IACE,eAAA;IF+JD;EE7JD;;IAGI,mCAAA;IF8JH;EE3JD;;IAGI,mCAAA;IF4JH;EEzJD;IACE,wBAAA;IF2JD;EExJD;IACE,sCAAA;IF0JD;EExJD;;IAGI,mCAAA;IFyJH;EACF;AGhPD;EACE,qCAAA;EACA,uDAAA;EACA,6TAAA;EHkPD;AG3OD;EACE,oBAAA;EACA,UAAA;EACA,uBAAA;EACA,qCAAA;EACA,oBAAA;EACA,qBAAA;EACA,gBAAA;EACA,qCAAA;EACA,oCAAA;EH6OD;AGzOmC;EAAW,gBAAA;EH4O9C;AG3OmC;EAAW,gBAAA;EH8O9C;AG7OmC;EAAW,kBAAA;EHgP9C;AG/OmC;EAAW,kBAAA;EHkP9C;AGjPmC;EAAW,kBAAA;EHoP9C;AGnPmC;EAAW,kBAAA;EHsP9C;AGrPmC;EAAW,kBAAA;EHwP9C;AGvPmC;EAAW,kBAAA;EH0P9C;AGzPmC;EAAW,kBAAA;EH4P9C;AG3PmC;EAAW,kBAAA;EH8P9C;AG7PmC;EAAW,kBAAA;EHgQ9C;AG/PmC;EAAW,kBAAA;EHkQ9C;AGjQmC;EAAW,kBAAA;EHoQ9C;AGnQmC;EAAW,kBAAA;EHsQ9C;AGrQmC;EAAW,kBAAA;EHwQ9C;AGvQmC;EAAW,kBAAA;EH0Q9C;AGzQmC;EAAW,kBAAA;EH4Q9C;AG3QmC;EAAW,kBAAA;EH8Q9C;AG7QmC;EAAW,kBAAA;EHgR9C;AG/QmC;EAAW,kBAAA;EHkR9C;AGjRmC;EAAW,kBAAA;EHoR9C;AGnRmC;EAAW,kBAAA;EHsR9C;AGrRmC;EAAW,kBAAA;EHwR9C;AGvRmC;EAAW,kBAAA;EH0R9C;AGzRmC;EAAW,kBAAA;EH4R9C;AG3RmC;EAAW,kBAAA;EH8R9C;AG7RmC;EAAW,kBAAA;EHgS9C;AG/RmC;EAAW,kBAAA;EHkS9C;AGjSmC;EAAW,kBAAA;EHoS9C;AGnSmC;EAAW,kBAAA;EHsS9C;AGrSmC;EAAW,kBAAA;EHwS9C;AGvSmC;EAAW,kBAAA;EH0S9C;AGzSmC;EAAW,kBAAA;EH4S9C;AG3SmC;EAAW,kBAAA;EH8S9C;AG7SmC;EAAW,kBAAA;EHgT9C;AG/SmC;EAAW,kBAAA;EHkT9C;AGjTmC;EAAW,kBAAA;EHoT9C;AGnTmC;EAAW,kBAAA;EHsT9C;AGrTmC;EAAW,kBAAA;EHwT9C;AGvTmC;EAAW,kBAAA;EH0T9C;AGzTmC;EAAW,kBAAA;EH4T9C;AG3TmC;EAAW,kBAAA;EH8T9C;AG7TmC;EAAW,kBAAA;EHgU9C;AG/TmC;EAAW,kBAAA;EHkU9C;AGjUmC;EAAW,kBAAA;EHoU9C;AGnUmC;EAAW,kBAAA;EHsU9C;AGrUmC;EAAW,kBAAA;EHwU9C;AGvUmC;EAAW,kBAAA;EH0U9C;AGzUmC;EAAW,kBAAA;EH4U9C;AG3UmC;EAAW,kBAAA;EH8U9C;AG7UmC;EAAW,kBAAA;EHgV9C;AG/UmC;EAAW,kBAAA;EHkV9C;AGjVmC;EAAW,kBAAA;EHoV9C;AGnVmC;EAAW,kBAAA;EHsV9C;AGrVmC;EAAW,kBAAA;EHwV9C;AGvVmC;EAAW,kBAAA;EH0V9C;AGzVmC;EAAW,kBAAA;EH4V9C;AG3VmC;EAAW,kBAAA;EH8V9C;AG7VmC;EAAW,kBAAA;EHgW9C;AG/VmC;EAAW,kBAAA;EHkW9C;AGjWmC;EAAW,kBAAA;EHoW9C;AGnWmC;EAAW,kBAAA;EHsW9C;AGrWmC;EAAW,kBAAA;EHwW9C;AGvWmC;EAAW,kBAAA;EH0W9C;AGzWmC;EAAW,kBAAA;EH4W9C;AG3WmC;EAAW,kBAAA;EH8W9C;AG7WmC;EAAW,kBAAA;EHgX9C;AG/WmC;EAAW,kBAAA;EHkX9C;AGjXmC;EAAW,kBAAA;EHoX9C;AGnXmC;EAAW,kBAAA;EHsX9C;AGrXmC;EAAW,kBAAA;EHwX9C;AGvXmC;EAAW,kBAAA;EH0X9C;AGzXmC;EAAW,kBAAA;EH4X9C;AG3XmC;EAAW,kBAAA;EH8X9C;AG7XmC;EAAW,kBAAA;EHgY9C;AG/XmC;EAAW,kBAAA;EHkY9C;AGjYmC;EAAW,kBAAA;EHoY9C;AGnYmC;EAAW,kBAAA;EHsY9C;AGrYmC;EAAW,kBAAA;EHwY9C;AGvYmC;EAAW,kBAAA;EH0Y9C;AGzYmC;EAAW,kBAAA;EH4Y9C;AG3YmC;EAAW,kBAAA;EH8Y9C;AG7YmC;EAAW,kBAAA;EHgZ9C;AG/YmC;EAAW,kBAAA;EHkZ9C;AGjZmC;EAAW,kBAAA;EHoZ9C;AGnZmC;EAAW,kBAAA;EHsZ9C;AGrZmC;EAAW,kBAAA;EHwZ9C;AGvZmC;EAAW,kBAAA;EH0Z9C;AGzZmC;EAAW,kBAAA;EH4Z9C;AG3ZmC;EAAW,kBAAA;EH8Z9C;AG7ZmC;EAAW,kBAAA;EHga9C;AG/ZmC;EAAW,kBAAA;EHka9C;AGjamC;EAAW,kBAAA;EHoa9C;AGnamC;EAAW,kBAAA;EHsa9C;AGramC;EAAW,kBAAA;EHwa9C;AGvamC;EAAW,kBAAA;EH0a9C;AGzamC;EAAW,kBAAA;EH4a9C;AG3amC;EAAW,kBAAA;EH8a9C;AG7amC;EAAW,kBAAA;EHgb9C;AG/amC;EAAW,kBAAA;EHkb9C;AGjbmC;EAAW,kBAAA;EHob9C;AGnbmC;EAAW,kBAAA;EHsb9C;AGrbmC;EAAW,kBAAA;EHwb9C;AGvbmC;EAAW,kBAAA;EH0b9C;AGzbmC;EAAW,kBAAA;EH4b9C;AG3bmC;EAAW,kBAAA;EH8b9C;AG7bmC;EAAW,kBAAA;EHgc9C;AG/bmC;EAAW,kBAAA;EHkc9C;AGjcmC;EAAW,kBAAA;EHoc9C;AGncmC;EAAW,kBAAA;EHsc9C;AGrcmC;EAAW,kBAAA;EHwc9C;AGvcmC;EAAW,kBAAA;EH0c9C;AGzcmC;EAAW,kBAAA;EH4c9C;AG3cmC;EAAW,kBAAA;EH8c9C;AG7cmC;EAAW,kBAAA;EHgd9C;AG/cmC;EAAW,kBAAA;EHkd9C;AGjdmC;EAAW,kBAAA;EHod9C;AGndmC;EAAW,kBAAA;EHsd9C;AGrdmC;EAAW,kBAAA;EHwd9C;AGvdmC;EAAW,kBAAA;EH0d9C;AGzdmC;EAAW,kBAAA;EH4d9C;AG3dmC;EAAW,kBAAA;EH8d9C;AG7dmC;EAAW,kBAAA;EHge9C;AG/dmC;EAAW,kBAAA;EHke9C;AGjemC;EAAW,kBAAA;EHoe9C;AGnemC;EAAW,kBAAA;EHse9C;AGremC;EAAW,kBAAA;EHwe9C;AGvemC;EAAW,kBAAA;EH0e9C;AGzemC;EAAW,kBAAA;EH4e9C;AG3emC;EAAW,kBAAA;EH8e9C;AG7emC;EAAW,kBAAA;EHgf9C;AG/emC;EAAW,kBAAA;EHkf9C;AGjfmC;EAAW,kBAAA;EHof9C;AGnfmC;EAAW,kBAAA;EHsf9C;AGrfmC;EAAW,kBAAA;EHwf9C;AGvfmC;EAAW,kBAAA;EH0f9C;AGzfmC;EAAW,kBAAA;EH4f9C;AG3fmC;EAAW,kBAAA;EH8f9C;AG7fmC;EAAW,kBAAA;EHggB9C;AG/fmC;EAAW,kBAAA;EHkgB9C;AGjgBmC;EAAW,kBAAA;EHogB9C;AGngBmC;EAAW,kBAAA;EHsgB9C;AGrgBmC;EAAW,kBAAA;EHwgB9C;AGvgBmC;EAAW,kBAAA;EH0gB9C;AGzgBmC;EAAW,kBAAA;EH4gB9C;AG3gBmC;EAAW,kBAAA;EH8gB9C;AG7gBmC;EAAW,kBAAA;EHghB9C;AG/gBmC;EAAW,kBAAA;EHkhB9C;AGjhBmC;EAAW,kBAAA;EHohB9C;AGnhBmC;EAAW,kBAAA;EHshB9C;AGrhBmC;EAAW,kBAAA;EHwhB9C;AGvhBmC;EAAW,kBAAA;EH0hB9C;AGzhBmC;EAAW,kBAAA;EH4hB9C;AG3hBmC;EAAW,kBAAA;EH8hB9C;AG7hBmC;EAAW,kBAAA;EHgiB9C;AG/hBmC;EAAW,kBAAA;EHkiB9C;AGjiBmC;EAAW,kBAAA;EHoiB9C;AGniBmC;EAAW,kBAAA;EHsiB9C;AGriBmC;EAAW,kBAAA;EHwiB9C;AGviBmC;EAAW,kBAAA;EH0iB9C;AGziBmC;EAAW,kBAAA;EH4iB9C;AG3iBmC;EAAW,kBAAA;EH8iB9C;AG7iBmC;EAAW,kBAAA;EHgjB9C;AG/iBmC;EAAW,kBAAA;EHkjB9C;AGjjBmC;EAAW,kBAAA;EHojB9C;AGnjBmC;EAAW,kBAAA;EHsjB9C;AGrjBmC;EAAW,kBAAA;EHwjB9C;AGvjBmC;EAAW,kBAAA;EH0jB9C;AGzjBmC;EAAW,kBAAA;EH4jB9C;AG3jBmC;EAAW,kBAAA;EH8jB9C;AG7jBmC;EAAW,kBAAA;EHgkB9C;AG/jBmC;EAAW,kBAAA;EHkkB9C;AGjkBmC;EAAW,kBAAA;EHokB9C;AGnkBmC;EAAW,kBAAA;EHskB9C;AGrkBmC;EAAW,kBAAA;EHwkB9C;AGvkBmC;EAAW,kBAAA;EH0kB9C;AGzkBmC;EAAW,kBAAA;EH4kB9C;AG3kBmC;EAAW,kBAAA;EH8kB9C;AG7kBmC;EAAW,kBAAA;EHglB9C;AG/kBmC;EAAW,kBAAA;EHklB9C;AGjlBmC;EAAW,kBAAA;EHolB9C;AGnlBmC;EAAW,kBAAA;EHslB9C;AGrlBmC;EAAW,kBAAA;EHwlB9C;AGvlBmC;EAAW,kBAAA;EH0lB9C;AGzlBmC;EAAW,kBAAA;EH4lB9C;AG3lBmC;EAAW,kBAAA;EH8lB9C;AG7lBmC;EAAW,kBAAA;EHgmB9C;AG/lBmC;EAAW,kBAAA;EHkmB9C;AGjmBmC;EAAW,kBAAA;EHomB9C;AGnmBmC;EAAW,kBAAA;EHsmB9C;AGrmBmC;EAAW,kBAAA;EHwmB9C;AGvmBmC;EAAW,kBAAA;EH0mB9C;AGzmBmC;EAAW,kBAAA;EH4mB9C;AG3mBmC;EAAW,kBAAA;EH8mB9C;AG7mBmC;EAAW,kBAAA;EHgnB9C;AG/mBmC;EAAW,kBAAA;EHknB9C;AGjnBmC;EAAW,kBAAA;EHonB9C;AGnnBmC;EAAW,kBAAA;EHsnB9C;AGrnBmC;EAAW,kBAAA;EHwnB9C;AGvnBmC;EAAW,kBAAA;EH0nB9C;AIx1BD;ECgEE,gCAAA;EACG,6BAAA;EACK,wBAAA;EL2xBT;AI11BD;;EC6DE,gCAAA;EACG,6BAAA;EACK,wBAAA;ELiyBT;AIx1BD;EACE,iBAAA;EACA,+CAAA;EJ01BD;AIv1BD;EACE,6DAAA;EACA,iBAAA;EACA,yBAAA;EACA,gBAAA;EACA,2BAAA;EJy1BD;AIr1BD;;;;EAIE,sBAAA;EACA,oBAAA;EACA,sBAAA;EJu1BD;AIj1BD;EACE,gBAAA;EACA,uBAAA;EJm1BD;AIj1BC;;EAEE,gBAAA;EACA,4BAAA;EJm1BH;AIh1BC;EErDA,sBAAA;EAEA,4CAAA;EACA,sBAAA;ENu4BD;AI10BD;EACE,WAAA;EJ40BD;AIt0BD;EACE,wBAAA;EJw0BD;AIp0BD;;;;;EGvEE,gBAAA;EACA,gBAAA;EACA,iBAAA;EACA,cAAA;EPk5BD;AIz0BD;EACE,oBAAA;EJ20BD;AIr0BD;EACE,cAAA;EACA,yBAAA;EACA,2BAAA;EACA,2BAAA;EACA,oBAAA;EC0FA,0CAAA;EACK,qCAAA;EACG,kCAAA;EEpLR,uBAAA;EACA,gBAAA;EACA,iBAAA;EACA,cAAA;EPm6BD;AIt0BD;EACE,oBAAA;EJw0BD;AIl0BD;EACE,kBAAA;EACA,qBAAA;EACA,WAAA;EACA,+BAAA;EJo0BD;AI5zBD;EACE,oBAAA;EACA,YAAA;EACA,aAAA;EACA,cAAA;EACA,YAAA;EACA,kBAAA;EACA,wBAAA;EACA,WAAA;EJ8zBD;AItzBC;;EAEE,kBAAA;EACA,aAAA;EACA,cAAA;EACA,WAAA;EACA,mBAAA;EACA,YAAA;EJwzBH;AQn8BD;;;;;;;;;;;;EAEE,sBAAA;EACA,kBAAA;EACA,kBAAA;EACA,gBAAA;ER+8BD;AQp9BD;;;;;;;;;;;;;;;;;;;;;;;;EASI,qBAAA;EACA,gBAAA;EACA,gBAAA;ERq+BH;AQj+BD;;;;;;EAGE,kBAAA;EACA,qBAAA;ERs+BD;AQ1+BD;;;;;;;;;;;;EAQI,gBAAA;ERg/BH;AQ7+BD;;;;;;EAGE,kBAAA;EACA,qBAAA;ERk/BD;AQt/BD;;;;;;;;;;;;EAQI,gBAAA;ER4/BH;AQx/BD;;EAAU,iBAAA;ER4/BT;AQ3/BD;;EAAU,iBAAA;ER+/BT;AQ9/BD;;EAAU,iBAAA;ERkgCT;AQjgCD;;EAAU,iBAAA;ERqgCT;AQpgCD;;EAAU,iBAAA;ERwgCT;AQvgCD;;EAAU,iBAAA;ER2gCT;AQrgCD;EACE,kBAAA;ERugCD;AQpgCD;EACE,qBAAA;EACA,iBAAA;EACA,kBAAA;EACA,kBAAA;ERsgCD;AQjgCD;EAAA;IAFI,iBAAA;IRugCD;EACF;AQ//BD;;EAEE,gBAAA;ERigCD;AQ7/BD;EACE,oBAAA;ER+/BD;AQ5/BD;;EAEE,2BAAA;EACA,eAAA;ER8/BD;AQ1/BD;EAAuB,kBAAA;ER6/BtB;AQ5/BD;EAAuB,mBAAA;ER+/BtB;AQ9/BD;EAAuB,oBAAA;ERigCtB;AQhgCD;EAAuB,qBAAA;ERmgCtB;AQlgCD;EAAuB,qBAAA;ERqgCtB;AQlgCD;EAAuB,2BAAA;ERqgCtB;AQpgCD;EAAuB,2BAAA;ERugCtB;AQtgCD;EAAuB,4BAAA;ERygCtB;AQtgCD;EACE,gBAAA;ERwgCD;AQtgCD;EC1GE,gBAAA;ETmnCD;ASlnCC;EACE,gBAAA;ETonCH;AQzgCD;EC7GE,gBAAA;ETynCD;ASxnCC;EACE,gBAAA;ET0nCH;AQ5gCD;EChHE,gBAAA;ET+nCD;AS9nCC;EACE,gBAAA;ETgoCH;AQ/gCD;ECnHE,gBAAA;ETqoCD;ASpoCC;EACE,gBAAA;ETsoCH;AQlhCD;ECtHE,gBAAA;ET2oCD;AS1oCC;EACE,gBAAA;ET4oCH;AQjhCD;EAGE,aAAA;EEhIA,2BAAA;EVkpCD;AUjpCC;EACE,2BAAA;EVmpCH;AQlhCD;EEnIE,2BAAA;EVwpCD;AUvpCC;EACE,2BAAA;EVypCH;AQrhCD;EEtIE,2BAAA;EV8pCD;AU7pCC;EACE,2BAAA;EV+pCH;AQxhCD;EEzIE,2BAAA;EVoqCD;AUnqCC;EACE,2BAAA;EVqqCH;AQ3hCD;EE5IE,2BAAA;EV0qCD;AUzqCC;EACE,2BAAA;EV2qCH;AQzhCD;EACE,qBAAA;EACA,qBAAA;EACA,kCAAA;ER2hCD;AQnhCD;;EAEE,eAAA;EACA,qBAAA;ERqhCD;AQxhCD;;;;EAMI,kBAAA;ERwhCH;AQjhCD;EACE,iBAAA;EACA,kBAAA;ERmhCD;AQ/gCD;EALE,iBAAA;EACA,kBAAA;EAMA,mBAAA;ERkhCD;AQphCD;EAKI,uBAAA;EACA,mBAAA;EACA,oBAAA;ERkhCH;AQ7gCD;EACE,eAAA;EACA,qBAAA;ER+gCD;AQ7gCD;;EAEE,yBAAA;ER+gCD;AQ7gCD;EACE,mBAAA;ER+gCD;AQ7gCD;EACE,gBAAA;ER+gCD;AQt/BD;EAAA;IAVM,aAAA;IACA,cAAA;IACA,aAAA;IACA,mBAAA;IG3NJ,kBAAA;IACA,yBAAA;IACA,qBAAA;IXguCC;EQhgCH;IAHM,oBAAA;IRsgCH;EACF;AQ7/BD;;EAGE,cAAA;EACA,mCAAA;ER8/BD;AQ5/BD;EACE,gBAAA;EACA,2BAAA;ER8/BD;AQ1/BD;EACE,oBAAA;EACA,kBAAA;EACA,mBAAA;EACA,gCAAA;ER4/BD;AQv/BG;;;EACE,kBAAA;ER2/BL;AQrgCD;;;EAmBI,gBAAA;EACA,gBAAA;EACA,yBAAA;EACA,gBAAA;ERu/BH;AQr/BG;;;EACE,wBAAA;ERy/BL;AQj/BD;;EAEE,qBAAA;EACA,iBAAA;EACA,iCAAA;EACA,gBAAA;EACA,mBAAA;ERm/BD;AQ7+BG;;;;;;EAAW,aAAA;ERq/Bd;AQp/BG;;;;;;EACE,wBAAA;ER2/BL;AQr/BD;;EAEE,aAAA;ERu/BD;AQn/BD;EACE,qBAAA;EACA,oBAAA;EACA,yBAAA;ERq/BD;AYtyCD;;;;EAIE,gEAAA;EZwyCD;AYpyCD;EACE,kBAAA;EACA,gBAAA;EACA,gBAAA;EACA,2BAAA;EACA,oBAAA;EZsyCD;AYlyCD;EACE,kBAAA;EACA,gBAAA;EACA,gBAAA;EACA,2BAAA;EACA,oBAAA;EACA,wDAAA;EAAA,gDAAA;EZoyCD;AY1yCD;EASI,YAAA;EACA,iBAAA;EACA,0BAAA;EAAA,kBAAA;EZoyCH;AY/xCD;EACE,gBAAA;EACA,gBAAA;EACA,kBAAA;EACA,iBAAA;EACA,yBAAA;EACA,uBAAA;EACA,uBAAA;EACA,gBAAA;EACA,2BAAA;EACA,2BAAA;EACA,oBAAA;EZiyCD;AY5yCD;EAeI,YAAA;EACA,oBAAA;EACA,gBAAA;EACA,uBAAA;EACA,+BAAA;EACA,kBAAA;EZgyCH;AY3xCD;EACE,mBAAA;EACA,oBAAA;EZ6xCD;Aat1CD;ECHE,oBAAA;EACA,mBAAA;EACA,oBAAA;EACA,qBAAA;Ed41CD;Aat1CC;EAAA;IAFE,cAAA;Ib41CD;EACF;Aax1CC;EAAA;IAFE,cAAA;Ib81CD;EACF;Aa11CD;EAAA;IAFI,eAAA;Ibg2CD;EACF;Aav1CD;ECvBE,oBAAA;EACA,mBAAA;EACA,oBAAA;EACA,qBAAA;Edi3CD;Aap1CD;ECvBE,oBAAA;EACA,qBAAA;Ed82CD;Ae92CG;EACE,oBAAA;EAEA,iBAAA;EAEA,oBAAA;EACA,qBAAA;Ef82CL;Ae91CG;EACE,aAAA;Efg2CL;Aez1CC;EACE,aAAA;Ef21CH;Ae51CC;EACE,qBAAA;Ef81CH;Ae/1CC;EACE,qBAAA;Efi2CH;Ael2CC;EACE,YAAA;Efo2CH;Aer2CC;EACE,qBAAA;Efu2CH;Aex2CC;EACE,qBAAA;Ef02CH;Ae32CC;EACE,YAAA;Ef62CH;Ae92CC;EACE,qBAAA;Efg3CH;Aej3CC;EACE,qBAAA;Efm3CH;Aep3CC;EACE,YAAA;Efs3CH;Aev3CC;EACE,qBAAA;Efy3CH;Ae13CC;EACE,oBAAA;Ef43CH;Ae92CC;EACE,aAAA;Efg3CH;Aej3CC;EACE,qBAAA;Efm3CH;Aep3CC;EACE,qBAAA;Efs3CH;Aev3CC;EACE,YAAA;Efy3CH;Ae13CC;EACE,qBAAA;Ef43CH;Ae73CC;EACE,qBAAA;Ef+3CH;Aeh4CC;EACE,YAAA;Efk4CH;Aen4CC;EACE,qBAAA;Efq4CH;Aet4CC;EACE,qBAAA;Efw4CH;Aez4CC;EACE,YAAA;Ef24CH;Ae54CC;EACE,qBAAA;Ef84CH;Ae/4CC;EACE,oBAAA;Efi5CH;Ae74CC;EACE,aAAA;Ef+4CH;Ae/5CC;EACE,YAAA;Efi6CH;Ael6CC;EACE,oBAAA;Efo6CH;Aer6CC;EACE,oBAAA;Efu6CH;Aex6CC;EACE,WAAA;Ef06CH;Ae36CC;EACE,oBAAA;Ef66CH;Ae96CC;EACE,oBAAA;Efg7CH;Aej7CC;EACE,WAAA;Efm7CH;Aep7CC;EACE,oBAAA;Efs7CH;Aev7CC;EACE,oBAAA;Efy7CH;Ae17CC;EACE,WAAA;Ef47CH;Ae77CC;EACE,oBAAA;Ef+7CH;Aeh8CC;EACE,mBAAA;Efk8CH;Ae97CC;EACE,YAAA;Efg8CH;Ael7CC;EACE,mBAAA;Efo7CH;Aer7CC;EACE,2BAAA;Efu7CH;Aex7CC;EACE,2BAAA;Ef07CH;Ae37CC;EACE,kBAAA;Ef67CH;Ae97CC;EACE,2BAAA;Efg8CH;Aej8CC;EACE,2BAAA;Efm8CH;Aep8CC;EACE,kBAAA;Efs8CH;Aev8CC;EACE,2BAAA;Efy8CH;Ae18CC;EACE,2BAAA;Ef48CH;Ae78CC;EACE,kBAAA;Ef+8CH;Aeh9CC;EACE,2BAAA;Efk9CH;Aen9CC;EACE,0BAAA;Efq9CH;Aet9CC;EACE,iBAAA;Efw9CH;Aa59CD;EE9BI;IACE,aAAA;If6/CH;Eet/CD;IACE,aAAA;Ifw/CD;Eez/CD;IACE,qBAAA;If2/CD;Ee5/CD;IACE,qBAAA;If8/CD;Ee//CD;IACE,YAAA;IfigDD;EelgDD;IACE,qBAAA;IfogDD;EergDD;IACE,qBAAA;IfugDD;EexgDD;IACE,YAAA;If0gDD;Ee3gDD;IACE,qBAAA;If6gDD;Ee9gDD;IACE,qBAAA;IfghDD;EejhDD;IACE,YAAA;IfmhDD;EephDD;IACE,qBAAA;IfshDD;EevhDD;IACE,oBAAA;IfyhDD;Ee3gDD;IACE,aAAA;If6gDD;Ee9gDD;IACE,qBAAA;IfghDD;EejhDD;IACE,qBAAA;IfmhDD;EephDD;IACE,YAAA;IfshDD;EevhDD;IACE,qBAAA;IfyhDD;Ee1hDD;IACE,qBAAA;If4hDD;Ee7hDD;IACE,YAAA;If+hDD;EehiDD;IACE,qBAAA;IfkiDD;EeniDD;IACE,qBAAA;IfqiDD;EetiDD;IACE,YAAA;IfwiDD;EeziDD;IACE,qBAAA;If2iDD;Ee5iDD;IACE,oBAAA;If8iDD;Ee1iDD;IACE,aAAA;If4iDD;Ee5jDD;IACE,YAAA;If8jDD;Ee/jDD;IACE,oBAAA;IfikDD;EelkDD;IACE,oBAAA;IfokDD;EerkDD;IACE,WAAA;IfukDD;EexkDD;IACE,oBAAA;If0kDD;Ee3kDD;IACE,oBAAA;If6kDD;Ee9kDD;IACE,WAAA;IfglDD;EejlDD;IACE,oBAAA;IfmlDD;EeplDD;IACE,oBAAA;IfslDD;EevlDD;IACE,WAAA;IfylDD;Ee1lDD;IACE,oBAAA;If4lDD;Ee7lDD;IACE,mBAAA;If+lDD;Ee3lDD;IACE,YAAA;If6lDD;Ee/kDD;IACE,mBAAA;IfilDD;EellDD;IACE,2BAAA;IfolDD;EerlDD;IACE,2BAAA;IfulDD;EexlDD;IACE,kBAAA;If0lDD;Ee3lDD;IACE,2BAAA;If6lDD;Ee9lDD;IACE,2BAAA;IfgmDD;EejmDD;IACE,kBAAA;IfmmDD;EepmDD;IACE,2BAAA;IfsmDD;EevmDD;IACE,2BAAA;IfymDD;Ee1mDD;IACE,kBAAA;If4mDD;Ee7mDD;IACE,2BAAA;If+mDD;EehnDD;IACE,0BAAA;IfknDD;EennDD;IACE,iBAAA;IfqnDD;EACF;AajnDD;EEvCI;IACE,aAAA;If2pDH;EeppDD;IACE,aAAA;IfspDD;EevpDD;IACE,qBAAA;IfypDD;Ee1pDD;IACE,qBAAA;If4pDD;Ee7pDD;IACE,YAAA;If+pDD;EehqDD;IACE,qBAAA;IfkqDD;EenqDD;IACE,qBAAA;IfqqDD;EetqDD;IACE,YAAA;IfwqDD;EezqDD;IACE,qBAAA;If2qDD;Ee5qDD;IACE,qBAAA;If8qDD;Ee/qDD;IACE,YAAA;IfirDD;EelrDD;IACE,qBAAA;IforDD;EerrDD;IACE,oBAAA;IfurDD;EezqDD;IACE,aAAA;If2qDD;Ee5qDD;IACE,qBAAA;If8qDD;Ee/qDD;IACE,qBAAA;IfirDD;EelrDD;IACE,YAAA;IforDD;EerrDD;IACE,qBAAA;IfurDD;EexrDD;IACE,qBAAA;If0rDD;Ee3rDD;IACE,YAAA;If6rDD;Ee9rDD;IACE,qBAAA;IfgsDD;EejsDD;IACE,qBAAA;IfmsDD;EepsDD;IACE,YAAA;IfssDD;EevsDD;IACE,qBAAA;IfysDD;Ee1sDD;IACE,oBAAA;If4sDD;EexsDD;IACE,aAAA;If0sDD;Ee1tDD;IACE,YAAA;If4tDD;Ee7tDD;IACE,oBAAA;If+tDD;EehuDD;IACE,oBAAA;IfkuDD;EenuDD;IACE,WAAA;IfquDD;EetuDD;IACE,oBAAA;IfwuDD;EezuDD;IACE,oBAAA;If2uDD;Ee5uDD;IACE,WAAA;If8uDD;Ee/uDD;IACE,oBAAA;IfivDD;EelvDD;IACE,oBAAA;IfovDD;EervDD;IACE,WAAA;IfuvDD;EexvDD;IACE,oBAAA;If0vDD;Ee3vDD;IACE,mBAAA;If6vDD;EezvDD;IACE,YAAA;If2vDD;Ee7uDD;IACE,mBAAA;If+uDD;EehvDD;IACE,2BAAA;IfkvDD;EenvDD;IACE,2BAAA;IfqvDD;EetvDD;IACE,kBAAA;IfwvDD;EezvDD;IACE,2BAAA;If2vDD;Ee5vDD;IACE,2BAAA;If8vDD;Ee/vDD;IACE,kBAAA;IfiwDD;EelwDD;IACE,2BAAA;IfowDD;EerwDD;IACE,2BAAA;IfuwDD;EexwDD;IACE,kBAAA;If0wDD;Ee3wDD;IACE,2BAAA;If6wDD;Ee9wDD;IACE,0BAAA;IfgxDD;EejxDD;IACE,iBAAA;IfmxDD;EACF;AaxwDD;EE9CI;IACE,aAAA;IfyzDH;EelzDD;IACE,aAAA;IfozDD;EerzDD;IACE,qBAAA;IfuzDD;EexzDD;IACE,qBAAA;If0zDD;Ee3zDD;IACE,YAAA;If6zDD;Ee9zDD;IACE,qBAAA;Ifg0DD;Eej0DD;IACE,qBAAA;Ifm0DD;Eep0DD;IACE,YAAA;Ifs0DD;Eev0DD;IACE,qBAAA;Ify0DD;Ee10DD;IACE,qBAAA;If40DD;Ee70DD;IACE,YAAA;If+0DD;Eeh1DD;IACE,qBAAA;Ifk1DD;Een1DD;IACE,oBAAA;Ifq1DD;Eev0DD;IACE,aAAA;Ify0DD;Ee10DD;IACE,qBAAA;If40DD;Ee70DD;IACE,qBAAA;If+0DD;Eeh1DD;IACE,YAAA;Ifk1DD;Een1DD;IACE,qBAAA;Ifq1DD;Eet1DD;IACE,qBAAA;Ifw1DD;Eez1DD;IACE,YAAA;If21DD;Ee51DD;IACE,qBAAA;If81DD;Ee/1DD;IACE,qBAAA;Ifi2DD;Eel2DD;IACE,YAAA;Ifo2DD;Eer2DD;IACE,qBAAA;Ifu2DD;Eex2DD;IACE,oBAAA;If02DD;Eet2DD;IACE,aAAA;Ifw2DD;Eex3DD;IACE,YAAA;If03DD;Ee33DD;IACE,oBAAA;If63DD;Ee93DD;IACE,oBAAA;Ifg4DD;Eej4DD;IACE,WAAA;Ifm4DD;Eep4DD;IACE,oBAAA;Ifs4DD;Eev4DD;IACE,oBAAA;Ify4DD;Ee14DD;IACE,WAAA;If44DD;Ee74DD;IACE,oBAAA;If+4DD;Eeh5DD;IACE,oBAAA;Ifk5DD;Een5DD;IACE,WAAA;Ifq5DD;Eet5DD;IACE,oBAAA;Ifw5DD;Eez5DD;IACE,mBAAA;If25DD;Eev5DD;IACE,YAAA;Ify5DD;Ee34DD;IACE,mBAAA;If64DD;Ee94DD;IACE,2BAAA;Ifg5DD;Eej5DD;IACE,2BAAA;Ifm5DD;Eep5DD;IACE,kBAAA;Ifs5DD;Eev5DD;IACE,2BAAA;Ify5DD;Ee15DD;IACE,2BAAA;If45DD;Ee75DD;IACE,kBAAA;If+5DD;Eeh6DD;IACE,2BAAA;Ifk6DD;Een6DD;IACE,2BAAA;Ifq6DD;Eet6DD;IACE,kBAAA;Ifw6DD;Eez6DD;IACE,2BAAA;If26DD;Ee56DD;IACE,0BAAA;If86DD;Ee/6DD;IACE,iBAAA;Ifi7DD;EACF;AgBr/DD;EACE,+BAAA;EhBu/DD;AgBr/DD;EACE,kBAAA;EhBu/DD;AgBj/DD;EACE,aAAA;EACA,iBAAA;EACA,qBAAA;EhBm/DD;AgBt/DD;;;;;;EAWQ,cAAA;EACA,yBAAA;EACA,qBAAA;EACA,+BAAA;EhBm/DP;AgBjgED;EAoBI,wBAAA;EACA,kCAAA;EhBg/DH;AgBrgED;;;;;;EA8BQ,eAAA;EhB++DP;AgB7gED;EAoCI,+BAAA;EhB4+DH;AgBhhED;EAyCI,2BAAA;EhB0+DH;AgBn+DD;;;;;;EAOQ,cAAA;EhBo+DP;AgBz9DD;EACE,2BAAA;EhB29DD;AgB59DD;;;;;;EAQQ,2BAAA;EhB49DP;AgBp+DD;;EAeM,0BAAA;EhBy9DL;AgB/8DD;;EAIM,2BAAA;EhB+8DL;AgBr8DD;;EAIM,2BAAA;EhBq8DL;AgB37DD;EACE,kBAAA;EACA,aAAA;EACA,uBAAA;EhB67DD;AgBx7DG;;EACE,kBAAA;EACA,aAAA;EACA,qBAAA;EhB27DL;AiBvkEC;;;;;;;;;;;;EAOI,2BAAA;EjB8kEL;AiBxkEC;;;;;EAMI,2BAAA;EjBykEL;AiB5lEC;;;;;;;;;;;;EAOI,2BAAA;EjBmmEL;AiB7lEC;;;;;EAMI,2BAAA;EjB8lEL;AiBjnEC;;;;;;;;;;;;EAOI,2BAAA;EjBwnEL;AiBlnEC;;;;;EAMI,2BAAA;EjBmnEL;AiBtoEC;;;;;;;;;;;;EAOI,2BAAA;EjB6oEL;AiBvoEC;;;;;EAMI,2BAAA;EjBwoEL;AiB3pEC;;;;;;;;;;;;EAOI,2BAAA;EjBkqEL;AiB5pEC;;;;;EAMI,2BAAA;EjB6pEL;AgB78DD;EAAA;IA5DI,aAAA;IACA,qBAAA;IACA,oBAAA;IACA,kBAAA;IACA,8CAAA;IACA,2BAAA;IACA,mCAAA;IhB6gED;EgBv9DH;IAlDM,kBAAA;IhB4gEH;EgB19DH;;;;;;IAzCY,qBAAA;IhB2gET;EgBl+DH;IAjCM,WAAA;IhBsgEH;EgBr+DH;;;;;;IAxBY,gBAAA;IhBqgET;EgB7+DH;;;;;;IApBY,iBAAA;IhBygET;EgBr/DH;;;;IAPY,kBAAA;IhBkgET;EACF;AkB3tED;EACE,YAAA;EACA,WAAA;EACA,WAAA;EAIA,cAAA;ElB0tED;AkBvtED;EACE,gBAAA;EACA,aAAA;EACA,YAAA;EACA,qBAAA;EACA,iBAAA;EACA,sBAAA;EACA,gBAAA;EACA,WAAA;EACA,kCAAA;ElBytED;AkBttED;EACE,uBAAA;EACA,iBAAA;EACA,oBAAA;EACA,mBAAA;ElBwtED;AkB7sED;Eb4BE,gCAAA;EACG,6BAAA;EACK,wBAAA;ELorET;AkB7sED;;EAEE,iBAAA;EACA,oBAAA;EACA,qBAAA;ElB+sED;AkB3sED;EACE,gBAAA;ElB6sED;AkBzsED;EACE,gBAAA;EACA,aAAA;ElB2sED;AkBvsED;;EAEE,cAAA;ElBysED;AkBrsED;;;EZxEE,sBAAA;EAEA,4CAAA;EACA,sBAAA;ENixED;AkBrsED;EACE,gBAAA;EACA,kBAAA;EACA,iBAAA;EACA,yBAAA;EACA,gBAAA;ElBusED;AkB7qED;EACE,gBAAA;EACA,aAAA;EACA,cAAA;EACA,mBAAA;EACA,iBAAA;EACA,yBAAA;EACA,gBAAA;EACA,2BAAA;EACA,wBAAA;EACA,2BAAA;EACA,oBAAA;EbzDA,0DAAA;EACQ,kDAAA;EAsHR,wFAAA;EACK,2EAAA;EACG,wEAAA;ELonET;AmB7vEC;EACE,uBAAA;EACA,YAAA;EdcF,wFAAA;EACQ,gFAAA;ELkvET;AKltEC;EAAgC,gBAAA;EACA,YAAA;ELqtEjC;AKptEC;EAAgC,gBAAA;ELutEjC;AKttEC;EAAgC,gBAAA;ELytEjC;AkBrrEC;;;EAGE,qBAAA;EACA,2BAAA;EACA,YAAA;ElBurEH;AkBnrEC;EACE,cAAA;ElBqrEH;AkBzqED;EACE,0BAAA;ElB2qED;AkB/pED;;;;EAIE,mBAAA;EAEA,4BAAA;ElBgqED;AkB9pEC;;;;EACE,mBAAA;ElBmqEH;AkBjqEC;;;;EACE,mBAAA;ElBsqEH;AkB5pED;EACE,qBAAA;ElB8pED;AkBtpED;;EAEE,oBAAA;EACA,gBAAA;EACA,kBAAA;EACA,kBAAA;EACA,qBAAA;ElBwpED;AkB9pED;;EASI,oBAAA;EACA,kBAAA;EACA,qBAAA;EACA,iBAAA;ElBypEH;AkBtpED;;;;EAIE,oBAAA;EACA,oBAAA;EACA,oBAAA;ElBwpED;AkBrpED;;EAEE,kBAAA;ElBupED;AkBnpED;;EAEE,uBAAA;EACA,oBAAA;EACA,kBAAA;EACA,wBAAA;EACA,qBAAA;EACA,iBAAA;ElBqpED;AkBnpED;;EAEE,eAAA;EACA,mBAAA;ElBqpED;AkB5oEC;;;;;;EAGE,qBAAA;ElBipEH;AkB3oEC;;;;EAEE,qBAAA;ElB+oEH;AkBzoEC;;;;EAGI,qBAAA;ElB4oEL;AkBjoED;EAEE,kBAAA;EACA,qBAAA;EAEA,kBAAA;ElBioED;AkB/nEC;;EAEE,iBAAA;EACA,kBAAA;ElBioEH;AkBvnED;;ECnPE,cAAA;EACA,mBAAA;EACA,iBAAA;EACA,kBAAA;EACA,oBAAA;EnB82ED;AmB52EC;EACE,cAAA;EACA,mBAAA;EnB82EH;AmB32EC;;EAEE,cAAA;EnB62EH;AkBnoED;;ECvPE,cAAA;EACA,oBAAA;EACA,iBAAA;EACA,mBAAA;EACA,oBAAA;EnB83ED;AmB53EC;EACE,cAAA;EACA,mBAAA;EnB83EH;AmB33EC;;EAEE,cAAA;EnB63EH;AkB1oED;EAEE,oBAAA;ElB2oED;AkB7oED;EAMI,uBAAA;ElB0oEH;AkBtoED;EACE,oBAAA;EACA,WAAA;EACA,UAAA;EACA,YAAA;EACA,gBAAA;EACA,aAAA;EACA,cAAA;EACA,mBAAA;EACA,oBAAA;ElBwoED;AkBtoED;EACE,aAAA;EACA,cAAA;EACA,mBAAA;ElBwoED;AkBtoED;EACE,aAAA;EACA,cAAA;EACA,mBAAA;ElBwoED;AkBpoED;;;;;;ECrVI,gBAAA;EnBi+EH;AkB5oED;ECjVI,uBAAA;EdmDF,0DAAA;EACQ,kDAAA;EL86ET;AmBh+EG;EACE,uBAAA;EdgDJ,2EAAA;EACQ,mEAAA;ELm7ET;AkBtpED;ECvUI,gBAAA;EACA,uBAAA;EACA,2BAAA;EnBg+EH;AkB3pED;ECjUI,gBAAA;EnB+9EH;AkB3pED;;;;;;ECxVI,gBAAA;EnB2/EH;AkBnqED;ECpVI,uBAAA;EdmDF,0DAAA;EACQ,kDAAA;ELw8ET;AmB1/EG;EACE,uBAAA;EdgDJ,2EAAA;EACQ,mEAAA;EL68ET;AkB7qED;EC1UI,gBAAA;EACA,uBAAA;EACA,2BAAA;EnB0/EH;AkBlrED;ECpUI,gBAAA;EnBy/EH;AkBlrED;;;;;;EC3VI,gBAAA;EnBqhFH;AkB1rED;ECvVI,uBAAA;EdmDF,0DAAA;EACQ,kDAAA;ELk+ET;AmBphFG;EACE,uBAAA;EdgDJ,2EAAA;EACQ,mEAAA;ELu+ET;AkBpsED;EC7UI,gBAAA;EACA,uBAAA;EACA,2BAAA;EnBohFH;AkBzsED;ECvUI,gBAAA;EnBmhFH;AkBtsED;EACE,QAAA;ElBwsED;AkB/rED;EACE,gBAAA;EACA,iBAAA;EACA,qBAAA;EACA,gBAAA;ElBisED;AkB9mED;EAAA;IA7DM,uBAAA;IACA,kBAAA;IACA,wBAAA;IlB+qEH;EkBpnEH;IAtDM,uBAAA;IACA,aAAA;IACA,wBAAA;IlB6qEH;EkBznEH;IAhDM,uBAAA;IACA,wBAAA;IlB4qEH;EkB7nEH;;;IA1CQ,aAAA;IlB4qEL;EkBloEH;IApCM,aAAA;IlByqEH;EkBroEH;IAhCM,kBAAA;IACA,wBAAA;IlBwqEH;EkBzoEH;;IAvBM,uBAAA;IACA,eAAA;IACA,kBAAA;IACA,wBAAA;IlBoqEH;EkBhpEH;;IAjBQ,iBAAA;IlBqqEL;EkBppEH;;IAZM,oBAAA;IACA,gBAAA;IlBoqEH;EkBzpEH;IAHM,QAAA;IlB+pEH;EACF;AkBrpED;;;;EASI,eAAA;EACA,kBAAA;EACA,kBAAA;ElBkpEH;AkB7pED;;EAiBI,kBAAA;ElBgpEH;AkBjqED;EJxcE,oBAAA;EACA,qBAAA;Ed4mFD;AkBloEC;EAAA;IANI,mBAAA;IACA,kBAAA;IACA,kBAAA;IlB4oEH;EACF;AkB5qED;EAwCI,QAAA;EACA,aAAA;ElBuoEH;AkB1nEG;EAAA;IAHI,qBAAA;IlBioEL;EACF;AkBrnEG;EAAA;IAHI,kBAAA;IlB4nEL;EACF;AoBzoFD;EACE,uBAAA;EACA,kBAAA;EACA,qBAAA;EACA,oBAAA;EACA,wBAAA;EACA,iBAAA;EACA,wBAAA;EACA,+BAAA;EACA,qBAAA;EC4BA,mBAAA;EACA,iBAAA;EACA,yBAAA;EACA,oBAAA;EhB2KA,2BAAA;EACG,wBAAA;EACC,uBAAA;EACI,mBAAA;ELs8ET;AoB5oFG;;;EdpBF,sBAAA;EAEA,4CAAA;EACA,sBAAA;ENoqFD;AoB9oFC;;EAEE,gBAAA;EACA,uBAAA;EpBgpFH;AoB7oFC;;EAEE,YAAA;EACA,wBAAA;Ef8BF,0DAAA;EACQ,kDAAA;ELknFT;AoB7oFC;;;EAGE,qBAAA;EACA,sBAAA;EE3CF,eAAA;EAGA,2BAAA;EjB8DA,0BAAA;EACQ,kBAAA;EL4nFT;AoBzoFD;EClDE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErB8rFD;AqB5rFC;;;;;EAKE,gBAAA;EACA,2BAAA;EACI,uBAAA;ErB8rFP;AqB5rFC;;;EAGE,wBAAA;ErB8rFH;AqBzrFG;;;;;;;;;;;;;;;EAKE,2BAAA;EACI,uBAAA;ErBqsFT;AoB9qFD;EClBI,gBAAA;EACA,2BAAA;ErBmsFH;AoB/qFD;ECrDE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErBuuFD;AqBruFC;;;;;EAKE,gBAAA;EACA,2BAAA;EACI,uBAAA;ErBuuFP;AqBruFC;;;EAGE,wBAAA;ErBuuFH;AqBluFG;;;;;;;;;;;;;;;EAKE,2BAAA;EACI,uBAAA;ErB8uFT;AoBptFD;ECrBI,gBAAA;EACA,2BAAA;ErB4uFH;AoBptFD;ECzDE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErBgxFD;AqB9wFC;;;;;EAKE,gBAAA;EACA,2BAAA;EACI,uBAAA;ErBgxFP;AqB9wFC;;;EAGE,wBAAA;ErBgxFH;AqB3wFG;;;;;;;;;;;;;;;EAKE,2BAAA;EACI,uBAAA;ErBuxFT;AoBzvFD;ECzBI,gBAAA;EACA,2BAAA;ErBqxFH;AoBzvFD;EC7DE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErByzFD;AqBvzFC;;;;;EAKE,gBAAA;EACA,2BAAA;EACI,uBAAA;ErByzFP;AqBvzFC;;;EAGE,wBAAA;ErByzFH;AqBpzFG;;;;;;;;;;;;;;;EAKE,2BAAA;EACI,uBAAA;ErBg0FT;AoB9xFD;EC7BI,gBAAA;EACA,2BAAA;ErB8zFH;AoB9xFD;ECjEE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErBk2FD;AqBh2FC;;;;;EAKE,gBAAA;EACA,2BAAA;EACI,uBAAA;ErBk2FP;AqBh2FC;;;EAGE,wBAAA;ErBk2FH;AqB71FG;;;;;;;;;;;;;;;EAKE,2BAAA;EACI,uBAAA;ErBy2FT;AoBn0FD;ECjCI,gBAAA;EACA,2BAAA;ErBu2FH;AoBn0FD;ECrEE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErB24FD;AqBz4FC;;;;;EAKE,gBAAA;EACA,2BAAA;EACI,uBAAA;ErB24FP;AqBz4FC;;;EAGE,wBAAA;ErB24FH;AqBt4FG;;;;;;;;;;;;;;;EAKE,2BAAA;EACI,uBAAA;ErBk5FT;AoBx2FD;ECrCI,gBAAA;EACA,2BAAA;ErBg5FH;AoBn2FD;EACE,gBAAA;EACA,qBAAA;EACA,iBAAA;EACA,kBAAA;EpBq2FD;AoBn2FC;;;;EAIE,+BAAA;Ef1BF,0BAAA;EACQ,kBAAA;ELg4FT;AoBp2FC;;;;EAIE,2BAAA;EpBs2FH;AoBp2FC;;EAEE,gBAAA;EACA,4BAAA;EACA,+BAAA;EpBs2FH;AoBl2FG;;;;EAEE,gBAAA;EACA,uBAAA;EpBs2FL;AoB71FD;;EC9EE,oBAAA;EACA,iBAAA;EACA,mBAAA;EACA,oBAAA;ErB+6FD;AoBh2FD;;EClFE,mBAAA;EACA,iBAAA;EACA,kBAAA;EACA,oBAAA;ErBs7FD;AoBn2FD;;ECtFE,kBAAA;EACA,iBAAA;EACA,kBAAA;EACA,oBAAA;ErB67FD;AoBl2FD;EACE,gBAAA;EACA,aAAA;EpBo2FD;AoBh2FD;EACE,iBAAA;EpBk2FD;AoB31FC;;;EACE,aAAA;EpB+1FH;AuBh/FD;EACE,YAAA;ElBiLA,0CAAA;EACK,qCAAA;EACG,kCAAA;ELk0FT;AuBn/FC;EACE,YAAA;EvBq/FH;AuBj/FD;EACE,eAAA;EvBm/FD;AuBj/FC;EAAY,gBAAA;EvBo/Fb;AuBn/FC;EAAY,oBAAA;EvBs/Fb;AuBr/FC;EAAY,0BAAA;EvBw/Fb;AuBr/FD;EACE,oBAAA;EACA,WAAA;EACA,kBAAA;ElB+JA,uCAAA;EACK,kCAAA;EACG,+BAAA;ELy1FT;AwBhhGD;EACE,uBAAA;EACA,UAAA;EACA,WAAA;EACA,kBAAA;EACA,wBAAA;EACA,uBAAA;EACA,qCAAA;EACA,oCAAA;ExBkhGD;AwB9gGD;EACE,oBAAA;ExBghGD;AwB5gGD;EACE,YAAA;ExB8gGD;AwB1gGD;EACE,oBAAA;EACA,WAAA;EACA,SAAA;EACA,eAAA;EACA,eAAA;EACA,aAAA;EACA,kBAAA;EACA,gBAAA;EACA,iBAAA;EACA,kBAAA;EACA,iBAAA;EACA,kBAAA;EACA,2BAAA;EACA,2BAAA;EACA,uCAAA;EACA,oBAAA;EnBwBA,qDAAA;EACQ,6CAAA;EmBvBR,sCAAA;EAAA,8BAAA;ExB6gGD;AwBxgGC;EACE,UAAA;EACA,YAAA;ExB0gGH;AwBniGD;ECvBE,aAAA;EACA,eAAA;EACA,kBAAA;EACA,2BAAA;EzB6jGD;AwBziGD;EAmCI,gBAAA;EACA,mBAAA;EACA,aAAA;EACA,qBAAA;EACA,yBAAA;EACA,gBAAA;EACA,qBAAA;ExBygGH;AwBngGC;;EAEE,uBAAA;EACA,gBAAA;EACA,2BAAA;ExBqgGH;AwB//FC;;;EAGE,gBAAA;EACA,uBAAA;EACA,YAAA;EACA,2BAAA;ExBigGH;AwBx/FC;;;EAGE,gBAAA;ExB0/FH;AwBr/FC;;EAEE,uBAAA;EACA,+BAAA;EACA,wBAAA;EE1GF,qEAAA;EF4GE,qBAAA;ExBu/FH;AwBl/FD;EAGI,gBAAA;ExBk/FH;AwBr/FD;EAQI,YAAA;ExBg/FH;AwBx+FD;EACE,YAAA;EACA,UAAA;ExB0+FD;AwBl+FD;EACE,SAAA;EACA,aAAA;ExBo+FD;AwBh+FD;EACE,gBAAA;EACA,mBAAA;EACA,iBAAA;EACA,yBAAA;EACA,gBAAA;EACA,qBAAA;ExBk+FD;AwB99FD;EACE,iBAAA;EACA,SAAA;EACA,UAAA;EACA,WAAA;EACA,QAAA;EACA,cAAA;ExBg+FD;AwB59FD;EACE,UAAA;EACA,YAAA;ExB89FD;AwBt9FD;;EAII,eAAA;EACA,0BAAA;EACA,aAAA;ExBs9FH;AwB59FD;;EAUI,WAAA;EACA,cAAA;EACA,oBAAA;ExBs9FH;AwBh8FD;EAZE;IAnEA,YAAA;IACA,UAAA;IxBmhGC;EwBj9FD;IAzDA,SAAA;IACA,aAAA;IxB6gGC;EACF;A2B5pGD;;EAEE,oBAAA;EACA,uBAAA;EACA,wBAAA;E3B8pGD;A2BlqGD;;EAMI,oBAAA;EACA,aAAA;E3BgqGH;A2B9pGG;;;;;;;;EAIE,YAAA;E3BoqGL;A2BlqGG;;EAEE,YAAA;E3BoqGL;A2B9pGD;;;;EAKI,mBAAA;E3B+pGH;A2B1pGD;EACE,mBAAA;E3B4pGD;A2B7pGD;;EAMI,aAAA;E3B2pGH;A2BjqGD;;;EAWI,kBAAA;E3B2pGH;A2BvpGD;EACE,kBAAA;E3BypGD;A2BrpGD;EACE,gBAAA;E3BupGD;A2BtpGC;ECrDA,+BAAA;EACG,4BAAA;E5B8sGJ;A2BrpGD;;EClDE,8BAAA;EACG,2BAAA;E5B2sGJ;A2BppGD;EACE,aAAA;E3BspGD;A2BppGD;EACE,kBAAA;E3BspGD;A2BppGD;;ECtEE,+BAAA;EACG,4BAAA;E5B8tGJ;A2BnpGD;ECpEE,8BAAA;EACG,2BAAA;E5B0tGJ;A2BlpGD;;EAEE,YAAA;E3BopGD;A2BnoGD;EACE,mBAAA;EACA,oBAAA;E3BqoGD;A2BnoGD;EACE,oBAAA;EACA,qBAAA;E3BqoGD;A2BhoGD;EtBlDE,0DAAA;EACQ,kDAAA;ELqrGT;A2BhoGC;EtBtDA,0BAAA;EACQ,kBAAA;ELyrGT;A2B7nGD;EACE,gBAAA;E3B+nGD;A2B5nGD;EACE,yBAAA;EACA,wBAAA;E3B8nGD;A2B3nGD;EACE,yBAAA;E3B6nGD;A2BtnGD;;;EAII,gBAAA;EACA,aAAA;EACA,aAAA;EACA,iBAAA;E3BunGH;A2B9nGD;EAcM,aAAA;E3BmnGL;A2BjoGD;;;;EAsBI,kBAAA;EACA,gBAAA;E3BinGH;A2B5mGC;EACE,kBAAA;E3B8mGH;A2B5mGC;EACE,8BAAA;ECvKF,+BAAA;EACC,8BAAA;E5BsxGF;A2B7mGC;EACE,gCAAA;ECnLF,4BAAA;EACC,2BAAA;E5BmyGF;A2B7mGD;EACE,kBAAA;E3B+mGD;A2B7mGD;;EClLE,+BAAA;EACC,8BAAA;E5BmyGF;A2B5mGD;EChME,4BAAA;EACC,2BAAA;E5B+yGF;A2BvmGD;EACE,gBAAA;EACA,aAAA;EACA,qBAAA;EACA,2BAAA;E3BymGD;A2B7mGD;;EAOI,aAAA;EACA,qBAAA;EACA,WAAA;E3B0mGH;A2BnnGD;EAYI,aAAA;E3B0mGH;A2BtnGD;EAgBI,YAAA;E3BymGH;A2B3lGD;;EAEE,oBAAA;EACA,aAAA;EL1OA,YAAA;EAGA,0BAAA;EtBs0GD;A6Bt0GD;EACE,oBAAA;EACA,gBAAA;EACA,2BAAA;E7Bw0GD;A6Br0GC;EACE,aAAA;EACA,iBAAA;EACA,kBAAA;E7Bu0GH;A6Bh1GD;EAeI,oBAAA;EACA,YAAA;EAKA,aAAA;EAEA,aAAA;EACA,kBAAA;E7B+zGH;A6BtzGD;;;EV0BE,cAAA;EACA,oBAAA;EACA,iBAAA;EACA,mBAAA;EACA,oBAAA;EnBiyGD;AmB/xGC;;;EACE,cAAA;EACA,mBAAA;EnBmyGH;AmBhyGC;;;;;;EAEE,cAAA;EnBsyGH;A6Bx0GD;;;EVqBE,cAAA;EACA,mBAAA;EACA,iBAAA;EACA,kBAAA;EACA,oBAAA;EnBwzGD;AmBtzGC;;;EACE,cAAA;EACA,mBAAA;EnB0zGH;AmBvzGC;;;;;;EAEE,cAAA;EnB6zGH;A6Bt1GD;;;EAGE,qBAAA;E7Bw1GD;A6Bt1GC;;;EACE,kBAAA;E7B01GH;A6Bt1GD;;EAEE,WAAA;EACA,qBAAA;EACA,wBAAA;E7Bw1GD;A6Bn1GD;EACE,mBAAA;EACA,iBAAA;EACA,qBAAA;EACA,gBAAA;EACA,gBAAA;EACA,oBAAA;EACA,2BAAA;EACA,2BAAA;EACA,oBAAA;E7Bq1GD;A6Bl1GC;EACE,mBAAA;EACA,iBAAA;EACA,oBAAA;E7Bo1GH;A6Bl1GC;EACE,oBAAA;EACA,iBAAA;EACA,oBAAA;E7Bo1GH;A6Bx2GD;;EA0BI,eAAA;E7Bk1GH;A6B70GD;;;;;;;EDhGE,+BAAA;EACG,4BAAA;E5Bs7GJ;A6B90GD;EACE,iBAAA;E7Bg1GD;A6B90GD;;;;;;;EDpGE,8BAAA;EACG,2BAAA;E5B27GJ;A6B/0GD;EACE,gBAAA;E7Bi1GD;A6B50GD;EACE,oBAAA;EAGA,cAAA;EACA,qBAAA;E7B40GD;A6Bj1GD;EAUI,oBAAA;E7B00GH;A6Bp1GD;EAYM,mBAAA;E7B20GL;A6Bx0GG;;;EAGE,YAAA;E7B00GL;A6Br0GC;;EAGI,oBAAA;E7Bs0GL;A6Bn0GC;;EAGI,mBAAA;E7Bo0GL;A8B99GD;EACE,kBAAA;EACA,iBAAA;EACA,kBAAA;E9Bg+GD;A8Bn+GD;EAOI,oBAAA;EACA,gBAAA;E9B+9GH;A8Bv+GD;EAWM,oBAAA;EACA,gBAAA;EACA,oBAAA;E9B+9GL;A8B99GK;;EAEE,uBAAA;EACA,2BAAA;E9Bg+GP;A8B39GG;EACE,gBAAA;E9B69GL;A8B39GK;;EAEE,gBAAA;EACA,uBAAA;EACA,+BAAA;EACA,qBAAA;E9B69GP;A8Bt9GG;;;EAGE,2BAAA;EACA,uBAAA;E9Bw9GL;A8BjgHD;ELHE,aAAA;EACA,eAAA;EACA,kBAAA;EACA,2BAAA;EzBugHD;A8BvgHD;EA0DI,iBAAA;E9Bg9GH;A8Bv8GD;EACE,kCAAA;E9By8GD;A8B18GD;EAGI,aAAA;EAEA,qBAAA;E9By8GH;A8B98GD;EASM,mBAAA;EACA,yBAAA;EACA,+BAAA;EACA,4BAAA;E9Bw8GL;A8Bv8GK;EACE,uCAAA;E9By8GP;A8Bn8GK;;;EAGE,gBAAA;EACA,2BAAA;EACA,2BAAA;EACA,kCAAA;EACA,iBAAA;E9Bq8GP;A8Bh8GC;EAqDA,aAAA;EA8BA,kBAAA;E9Bi3GD;A8Bp8GC;EAwDE,aAAA;E9B+4GH;A8Bv8GC;EA0DI,oBAAA;EACA,oBAAA;E9Bg5GL;A8B38GC;EAgEE,WAAA;EACA,YAAA;E9B84GH;A8Bl4GD;EAAA;IAPM,qBAAA;IACA,WAAA;I9B64GH;E8Bv4GH;IAJQ,kBAAA;I9B84GL;EACF;A8Bx9GC;EAuFE,iBAAA;EACA,oBAAA;E9Bo4GH;A8B59GC;;;EA8FE,2BAAA;E9Bm4GH;A8Br3GD;EAAA;IATM,kCAAA;IACA,4BAAA;I9Bk4GH;E8B13GH;;;IAHM,8BAAA;I9Bk4GH;EACF;A8Bn+GD;EAEI,aAAA;E9Bo+GH;A8Bt+GD;EAMM,oBAAA;E9Bm+GL;A8Bz+GD;EASM,kBAAA;E9Bm+GL;A8B99GK;;;EAGE,gBAAA;EACA,2BAAA;E9Bg+GP;A8Bx9GD;EAEI,aAAA;E9By9GH;A8B39GD;EAIM,iBAAA;EACA,gBAAA;E9B09GL;A8B98GD;EACE,aAAA;E9Bg9GD;A8Bj9GD;EAII,aAAA;E9Bg9GH;A8Bp9GD;EAMM,oBAAA;EACA,oBAAA;E9Bi9GL;A8Bx9GD;EAYI,WAAA;EACA,YAAA;E9B+8GH;A8Bn8GD;EAAA;IAPM,qBAAA;IACA,WAAA;I9B88GH;E8Bx8GH;IAJQ,kBAAA;I9B+8GL;EACF;A8Bv8GD;EACE,kBAAA;E9By8GD;A8B18GD;EAKI,iBAAA;EACA,oBAAA;E9Bw8GH;A8B98GD;;;EAYI,2BAAA;E9Bu8GH;A8Bz7GD;EAAA;IATM,kCAAA;IACA,4BAAA;I9Bs8GH;E8B97GH;;;IAHM,8BAAA;I9Bs8GH;EACF;A8B77GD;EAEI,eAAA;E9B87GH;A8Bh8GD;EAKI,gBAAA;E9B87GH;A8Br7GD;EAEE,kBAAA;EF3OA,4BAAA;EACC,2BAAA;E5BkqHF;A+B5pHD;EACE,oBAAA;EACA,kBAAA;EACA,qBAAA;EACA,+BAAA;E/B8pHD;A+BtpHD;EAAA;IAFI,oBAAA;I/B4pHD;EACF;A+B7oHD;EAAA;IAFI,aAAA;I/BmpHD;EACF;A+BroHD;EACE,qBAAA;EACA,qBAAA;EACA,oBAAA;EACA,mCAAA;EACA,4DAAA;EAAA,oDAAA;EAEA,mCAAA;E/BsoHD;A+BpoHC;EACE,kBAAA;E/BsoHH;A+B1mHD;EAAA;IAxBI,aAAA;IACA,eAAA;IACA,0BAAA;IAAA,kBAAA;I/BsoHD;E+BpoHC;IACE,2BAAA;IACA,yBAAA;IACA,mBAAA;IACA,8BAAA;I/BsoHH;E+BnoHC;IACE,qBAAA;I/BqoHH;E+BhoHC;;;IAGE,iBAAA;IACA,kBAAA;I/BkoHH;EACF;A+B9nHD;;EAGI,mBAAA;E/B+nHH;A+B1nHC;EAAA;;IAFI,mBAAA;I/BioHH;EACF;A+BxnHD;;;;EAII,qBAAA;EACA,oBAAA;E/B0nHH;A+BpnHC;EAAA;;;;IAHI,iBAAA;IACA,gBAAA;I/B8nHH;EACF;A+BlnHD;EACE,eAAA;EACA,uBAAA;E/BonHD;A+B/mHD;EAAA;IAFI,kBAAA;I/BqnHD;EACF;A+BjnHD;;EAEE,iBAAA;EACA,UAAA;EACA,SAAA;EACA,eAAA;E1BGA,yCAAA;EACQ,oCAAA;EAAA,iCAAA;ELinHT;A+B9mHD;EAAA;;IAFI,kBAAA;I/BqnHD;EACF;A+BnnHD;EACE,QAAA;EACA,uBAAA;E/BqnHD;A+BnnHD;EACE,WAAA;EACA,kBAAA;EACA,uBAAA;E/BqnHD;A+B/mHD;EACE,aAAA;EACA,oBAAA;EACA,iBAAA;EACA,mBAAA;EACA,cAAA;E/BinHD;A+B/mHC;;EAEE,uBAAA;E/BinHH;A+BxmHD;EALI;;IAEE,oBAAA;I/BgnHH;EACF;A+BtmHD;EACE,oBAAA;EACA,cAAA;EACA,oBAAA;EACA,mBAAA;EC3LA,iBAAA;EACA,oBAAA;ED4LA,+BAAA;EACA,wBAAA;EACA,+BAAA;EACA,oBAAA;E/BymHD;A+BrmHC;EACE,YAAA;E/BumHH;A+BrnHD;EAmBI,gBAAA;EACA,aAAA;EACA,aAAA;EACA,oBAAA;E/BqmHH;A+B3nHD;EAyBI,iBAAA;E/BqmHH;A+B/lHD;EAAA;IAFI,eAAA;I/BqmHD;EACF;A+B5lHD;EACE,qBAAA;E/B8lHD;A+B/lHD;EAII,mBAAA;EACA,sBAAA;EACA,mBAAA;E/B8lHH;A+BnkHC;EAAA;IArBI,kBAAA;IACA,aAAA;IACA,aAAA;IACA,eAAA;IACA,+BAAA;IACA,WAAA;IACA,0BAAA;IAAA,kBAAA;I/B4lHH;E+B7kHD;;IAZM,4BAAA;I/B6lHL;E+BjlHD;IATM,mBAAA;I/B6lHL;E+B5lHK;;IAEE,wBAAA;I/B8lHP;EACF;A+BxkHD;EAAA;IAfI,aAAA;IACA,WAAA;I/B2lHD;E+B7kHH;IAXM,aAAA;I/B2lHH;E+BhlHH;IATQ,mBAAA;IACA,sBAAA;I/B4lHL;E+BxlHC;IACE,qBAAA;I/B0lHH;EACF;A+BzkHD;EALE;IE9QA,wBAAA;IjCg2HC;E+BjlHD;IElRA,yBAAA;IjCs2HC;EACF;A+B5kHD;EACE,oBAAA;EACA,qBAAA;EACA,oBAAA;EACA,mCAAA;EACA,sCAAA;E1B3OA,8FAAA;EACQ,sFAAA;E2B/DR,iBAAA;EACA,oBAAA;EhC03HD;AkBl7GD;EAAA;IA7DM,uBAAA;IACA,kBAAA;IACA,wBAAA;IlBm/GH;EkBx7GH;IAtDM,uBAAA;IACA,aAAA;IACA,wBAAA;IlBi/GH;EkB77GH;IAhDM,uBAAA;IACA,wBAAA;IlBg/GH;EkBj8GH;;;IA1CQ,aAAA;IlBg/GL;EkBt8GH;IApCM,aAAA;IlB6+GH;EkBz8GH;IAhCM,kBAAA;IACA,wBAAA;IlB4+GH;EkB78GH;;IAvBM,uBAAA;IACA,eAAA;IACA,kBAAA;IACA,wBAAA;IlBw+GH;EkBp9GH;;IAjBQ,iBAAA;IlBy+GL;EkBx9GH;;IAZM,oBAAA;IACA,gBAAA;IlBw+GH;EkB79GH;IAHM,QAAA;IlBm+GH;EACF;A+BtnHC;EAAA;IAFI,oBAAA;I/B4nHH;EACF;A+BvmHD;EAAA;IAbI,aAAA;IACA,WAAA;IACA,gBAAA;IACA,iBAAA;IACA,gBAAA;IACA,mBAAA;I1BlQF,0BAAA;IACQ,kBAAA;IL23HP;E+BtnHC;IACE,qBAAA;I/BwnHH;EACF;A+BhnHD;EACE,eAAA;EHlVA,4BAAA;EACC,2BAAA;E5Bq8HF;A+BhnHD;EH9UE,+BAAA;EACC,8BAAA;E5Bi8HF;A+B3mHD;EC5VE,iBAAA;EACA,oBAAA;EhC08HD;A+B5mHC;EC/VA,kBAAA;EACA,qBAAA;EhC88HD;A+B7mHC;EClWA,kBAAA;EACA,qBAAA;EhCk9HD;A+BvmHD;EC5WE,kBAAA;EACA,qBAAA;EhCs9HD;A+B9lHD;EAAA;IATI,aAAA;IACA,mBAAA;IACA,oBAAA;I/B2mHD;E+BxmHC;IACE,iBAAA;I/B0mHH;EACF;A+BlmHD;EACE,2BAAA;EACA,uBAAA;E/BomHD;A+BtmHD;EAKI,gBAAA;E/BomHH;A+BnmHG;;EAEE,gBAAA;EACA,+BAAA;E/BqmHL;A+B9mHD;EAcI,gBAAA;E/BmmHH;A+BjnHD;EAmBM,gBAAA;E/BimHL;A+B/lHK;;EAEE,gBAAA;EACA,+BAAA;E/BimHP;A+B7lHK;;;EAGE,gBAAA;EACA,2BAAA;E/B+lHP;A+B3lHK;;;EAGE,gBAAA;EACA,+BAAA;E/B6lHP;A+BroHD;EA8CI,uBAAA;E/B0lHH;A+BzlHG;;EAEE,2BAAA;E/B2lHL;A+B5oHD;EAoDM,2BAAA;E/B2lHL;A+B/oHD;;EA0DI,uBAAA;E/BylHH;A+BllHK;;;EAGE,2BAAA;EACA,gBAAA;E/BolHP;A+BnjHC;EAAA;IAzBQ,gBAAA;I/BglHP;E+B/kHO;;IAEE,gBAAA;IACA,+BAAA;I/BilHT;E+B7kHO;;;IAGE,gBAAA;IACA,2BAAA;I/B+kHT;E+B3kHO;;;IAGE,gBAAA;IACA,+BAAA;I/B6kHT;EACF;A+B/qHD;EA8GI,gBAAA;E/BokHH;A+BnkHG;EACE,gBAAA;E/BqkHL;A+BrrHD;EAqHI,gBAAA;E/BmkHH;A+BlkHG;;EAEE,gBAAA;E/BokHL;A+BhkHK;;;;EAEE,gBAAA;E/BokHP;A+B5jHD;EACE,2BAAA;EACA,uBAAA;E/B8jHD;A+BhkHD;EAKI,gBAAA;E/B8jHH;A+B7jHG;;EAEE,gBAAA;EACA,+BAAA;E/B+jHL;A+BxkHD;EAcI,gBAAA;E/B6jHH;A+B3kHD;EAmBM,gBAAA;E/B2jHL;A+BzjHK;;EAEE,gBAAA;EACA,+BAAA;E/B2jHP;A+BvjHK;;;EAGE,gBAAA;EACA,2BAAA;E/ByjHP;A+BrjHK;;;EAGE,gBAAA;EACA,+BAAA;E/BujHP;A+B/lHD;EA+CI,uBAAA;E/BmjHH;A+BljHG;;EAEE,2BAAA;E/BojHL;A+BtmHD;EAqDM,2BAAA;E/BojHL;A+BzmHD;;EA2DI,uBAAA;E/BkjHH;A+B5iHK;;;EAGE,2BAAA;EACA,gBAAA;E/B8iHP;A+BvgHC;EAAA;IA/BQ,uBAAA;I/B0iHP;E+B3gHD;IA5BQ,2BAAA;I/B0iHP;E+B9gHD;IAzBQ,gBAAA;I/B0iHP;E+BziHO;;IAEE,gBAAA;IACA,+BAAA;I/B2iHT;E+BviHO;;;IAGE,gBAAA;IACA,2BAAA;I/ByiHT;E+BriHO;;;IAGE,gBAAA;IACA,+BAAA;I/BuiHT;EACF;A+B/oHD;EA+GI,gBAAA;E/BmiHH;A+BliHG;EACE,gBAAA;E/BoiHL;A+BrpHD;EAsHI,gBAAA;E/BkiHH;A+BjiHG;;EAEE,gBAAA;E/BmiHL;A+B/hHK;;;;EAEE,gBAAA;E/BmiHP;AkCxqID;EACE,mBAAA;EACA,qBAAA;EACA,kBAAA;EACA,2BAAA;EACA,oBAAA;ElC0qID;AkC/qID;EAQI,uBAAA;ElC0qIH;AkClrID;EAWM,mBAAA;EACA,gBAAA;EACA,gBAAA;ElC0qIL;AkCvrID;EAkBI,gBAAA;ElCwqIH;AmC5rID;EACE,uBAAA;EACA,iBAAA;EACA,gBAAA;EACA,oBAAA;EnC8rID;AmClsID;EAOI,iBAAA;EnC8rIH;AmCrsID;;EAUM,oBAAA;EACA,aAAA;EACA,mBAAA;EACA,yBAAA;EACA,uBAAA;EACA,gBAAA;EACA,2BAAA;EACA,2BAAA;EACA,mBAAA;EnC+rIL;AmC7rIG;;EAGI,gBAAA;EPXN,gCAAA;EACG,6BAAA;E5B0sIJ;AmC5rIG;;EPvBF,iCAAA;EACG,8BAAA;E5ButIJ;AmCvrIG;;;;EAEE,gBAAA;EACA,2BAAA;EACA,uBAAA;EnC2rIL;AmCrrIG;;;;;;EAGE,YAAA;EACA,gBAAA;EACA,2BAAA;EACA,uBAAA;EACA,iBAAA;EnC0rIL;AmChvID;;;;;;EAiEM,gBAAA;EACA,2BAAA;EACA,uBAAA;EACA,qBAAA;EnCurIL;AmC9qID;;EC1EM,oBAAA;EACA,iBAAA;EpC4vIL;AoC1vIG;;ERMF,gCAAA;EACG,6BAAA;E5BwvIJ;AoCzvIG;;ERRF,iCAAA;EACG,8BAAA;E5BqwIJ;AmCxrID;;EC/EM,mBAAA;EACA,iBAAA;EpC2wIL;AoCzwIG;;ERMF,gCAAA;EACG,6BAAA;E5BuwIJ;AoCxwIG;;ERRF,iCAAA;EACG,8BAAA;E5BoxIJ;AqCvxID;EACE,iBAAA;EACA,gBAAA;EACA,kBAAA;EACA,oBAAA;ErCyxID;AqC7xID;EAOI,iBAAA;ErCyxIH;AqChyID;;EAUM,uBAAA;EACA,mBAAA;EACA,2BAAA;EACA,2BAAA;EACA,qBAAA;ErC0xIL;AqCxyID;;EAmBM,uBAAA;EACA,2BAAA;ErCyxIL;AqC7yID;;EA2BM,cAAA;ErCsxIL;AqCjzID;;EAkCM,aAAA;ErCmxIL;AqCrzID;;;;EA2CM,gBAAA;EACA,2BAAA;EACA,qBAAA;ErCgxIL;AsC9zID;EACE,iBAAA;EACA,yBAAA;EACA,gBAAA;EACA,mBAAA;EACA,gBAAA;EACA,gBAAA;EACA,oBAAA;EACA,qBAAA;EACA,0BAAA;EACA,sBAAA;EtCg0ID;AsC5zIG;;EAEE,gBAAA;EACA,uBAAA;EACA,iBAAA;EtC8zIL;AsCzzIC;EACE,eAAA;EtC2zIH;AsCvzIC;EACE,oBAAA;EACA,WAAA;EtCyzIH;AsClzID;ECtCE,2BAAA;EvC21ID;AuCx1IG;;EAEE,2BAAA;EvC01IL;AsCrzID;EC1CE,2BAAA;EvCk2ID;AuC/1IG;;EAEE,2BAAA;EvCi2IL;AsCxzID;EC9CE,2BAAA;EvCy2ID;AuCt2IG;;EAEE,2BAAA;EvCw2IL;AsC3zID;EClDE,2BAAA;EvCg3ID;AuC72IG;;EAEE,2BAAA;EvC+2IL;AsC9zID;ECtDE,2BAAA;EvCu3ID;AuCp3IG;;EAEE,2BAAA;EvCs3IL;AsCj0ID;EC1DE,2BAAA;EvC83ID;AuC33IG;;EAEE,2BAAA;EvC63IL;AwC/3ID;EACE,uBAAA;EACA,iBAAA;EACA,kBAAA;EACA,iBAAA;EACA,mBAAA;EACA,gBAAA;EACA,gBAAA;EACA,0BAAA;EACA,qBAAA;EACA,oBAAA;EACA,2BAAA;EACA,qBAAA;ExCi4ID;AwC93IC;EACE,eAAA;ExCg4IH;AwC53IC;EACE,oBAAA;EACA,WAAA;ExC83IH;AwC53IC;EACE,QAAA;EACA,kBAAA;ExC83IH;AwCz3IG;;EAEE,gBAAA;EACA,uBAAA;EACA,iBAAA;ExC23IL;AwCt3IC;;EAEE,gBAAA;EACA,2BAAA;ExCw3IH;AwCt3IC;EACE,kBAAA;ExCw3IH;AyCv6ID;EACE,eAAA;EACA,qBAAA;EACA,gBAAA;EACA,2BAAA;EzCy6ID;AyC76ID;;EAQI,gBAAA;EzCy6IH;AyCj7ID;EAWI,qBAAA;EACA,iBAAA;EACA,kBAAA;EzCy6IH;AyCt7ID;EAiBI,2BAAA;EzCw6IH;AyCr6IC;EACE,oBAAA;EzCu6IH;AyC57ID;EAyBI,iBAAA;EzCs6IH;AyCr5ID;EAAA;IAbI,mBAAA;IACA,sBAAA;IzCs6ID;EyCp6IC;IACE,oBAAA;IACA,qBAAA;IzCs6IH;EyC95IH;;IAHM,iBAAA;IzCq6IH;EACF;A0C58ID;EACE,gBAAA;EACA,cAAA;EACA,qBAAA;EACA,yBAAA;EACA,2BAAA;EACA,2BAAA;EACA,oBAAA;ErC8KA,0CAAA;EACK,qCAAA;EACG,kCAAA;ELiyIT;A0Cx9ID;;EAaI,mBAAA;EACA,oBAAA;E1C+8IH;A0C38IC;;;EAGE,uBAAA;E1C68IH;A0Cl+ID;EA0BI,cAAA;EACA,gBAAA;E1C28IH;A2Cp+ID;EACE,eAAA;EACA,qBAAA;EACA,+BAAA;EACA,oBAAA;E3Cs+ID;A2C1+ID;EAQI,eAAA;EAEA,gBAAA;E3Co+IH;A2C9+ID;EAcI,mBAAA;E3Cm+IH;A2Cj/ID;;EAoBI,kBAAA;E3Ci+IH;A2Cr/ID;EAuBI,iBAAA;E3Ci+IH;A2Cz9ID;;EAEE,qBAAA;E3C29ID;A2C79ID;;EAMI,oBAAA;EACA,WAAA;EACA,cAAA;EACA,gBAAA;E3C29IH;A2Cn9ID;ECrDE,2BAAA;EACA,uBAAA;EACA,gBAAA;E5C2gJD;A2Cx9ID;EChDI,2BAAA;E5C2gJH;A2C39ID;EC7CI,gBAAA;E5C2gJH;A2C39ID;ECxDE,2BAAA;EACA,uBAAA;EACA,gBAAA;E5CshJD;A2Ch+ID;ECnDI,2BAAA;E5CshJH;A2Cn+ID;EChDI,gBAAA;E5CshJH;A2Cn+ID;EC3DE,2BAAA;EACA,uBAAA;EACA,gBAAA;E5CiiJD;A2Cx+ID;ECtDI,2BAAA;E5CiiJH;A2C3+ID;ECnDI,gBAAA;E5CiiJH;A2C3+ID;EC9DE,2BAAA;EACA,uBAAA;EACA,gBAAA;E5C4iJD;A2Ch/ID;ECzDI,2BAAA;E5C4iJH;A2Cn/ID;ECtDI,gBAAA;E5C4iJH;A6C9iJD;EACE;IAAQ,6BAAA;I7CijJP;E6ChjJD;IAAQ,0BAAA;I7CmjJP;EACF;A6ChjJD;EACE;IAAQ,6BAAA;I7CmjJP;E6CljJD;IAAQ,0BAAA;I7CqjJP;EACF;A6CxjJD;EACE;IAAQ,6BAAA;I7CmjJP;E6CljJD;IAAQ,0BAAA;I7CqjJP;EACF;A6C7iJD;EACE,kBAAA;EACA,cAAA;EACA,qBAAA;EACA,2BAAA;EACA,oBAAA;ExCqCA,wDAAA;EACQ,gDAAA;EL2gJT;A6C5iJD;EACE,aAAA;EACA,WAAA;EACA,cAAA;EACA,iBAAA;EACA,mBAAA;EACA,gBAAA;EACA,oBAAA;EACA,2BAAA;ExCwBA,wDAAA;EACQ,gDAAA;EAsHR,qCAAA;EACK,gCAAA;EACG,6BAAA;ELk6IT;A6CziJD;;ECAI,+MAAA;EACA,0MAAA;EACA,uMAAA;EDCF,oCAAA;EAAA,4BAAA;E7C6iJD;A6CtiJD;;ExC7CE,4DAAA;EACK,uDAAA;EACG,oDAAA;ELulJT;A6CriJC;;EAEE,iBAAA;E7CuiJH;A6CpiJC;EACE,gBAAA;EACA,iBAAA;EACA,+BAAA;EACA,wBAAA;EACA,0BAAA;EAAA,kBAAA;E7CsiJH;A6C7hJD;EEvFE,2BAAA;E/CunJD;A+CpnJC;EDgDE,+MAAA;EACA,0MAAA;EACA,uMAAA;E9CukJH;A6CjiJD;EE3FE,2BAAA;E/C+nJD;A+C5nJC;EDgDE,+MAAA;EACA,0MAAA;EACA,uMAAA;E9C+kJH;A6CriJD;EE/FE,2BAAA;E/CuoJD;A+CpoJC;EDgDE,+MAAA;EACA,0MAAA;EACA,uMAAA;E9CulJH;A6CziJD;EEnGE,2BAAA;E/C+oJD;A+C5oJC;EDgDE,+MAAA;EACA,0MAAA;EACA,uMAAA;E9C+lJH;AgD9oJD;;EAEE,kBAAA;EACA,SAAA;EhDgpJD;AgD5oJD;;EAEE,kBAAA;EhD8oJD;AgD5oJD;EACE,eAAA;EhD8oJD;AgD1oJD;EACE,gBAAA;EhD4oJD;AgDxoJD;EACE,iBAAA;EhD0oJD;AgDnoJD;EAEI,oBAAA;EhDooJH;AgDtoJD;EAKI,mBAAA;EhDooJH;AgD3nJD;EACE,iBAAA;EACA,kBAAA;EhD6nJD;AiD1qJD;EAEE,qBAAA;EACA,iBAAA;EjD2qJD;AiDnqJD;EACE,oBAAA;EACA,gBAAA;EACA,oBAAA;EAEA,qBAAA;EACA,2BAAA;EACA,2BAAA;EjDoqJD;AiDjqJC;ErB3BA,8BAAA;EACC,6BAAA;E5B+rJF;AiDlqJC;EACE,kBAAA;ErBvBF,iCAAA;EACC,gCAAA;E5B4rJF;AiDprJD;EAoBI,cAAA;EjDmqJH;AiDvrJD;EAuBI,mBAAA;EjDmqJH;AiDzpJD;EACE,gBAAA;EjD2pJD;AiD5pJD;EAII,gBAAA;EjD2pJH;AiDvpJC;;EAEE,uBAAA;EACA,gBAAA;EACA,2BAAA;EjDypJH;AiDnpJC;;;EAGE,2BAAA;EACA,gBAAA;EjDqpJH;AiDzpJC;;;EAQI,gBAAA;EjDspJL;AiD9pJC;;;EAWI,gBAAA;EjDwpJL;AiDnpJC;;;EAGE,YAAA;EACA,gBAAA;EACA,2BAAA;EACA,uBAAA;EjDqpJH;AiD3pJC;;;;;;;;;EAYI,gBAAA;EjD0pJL;AiDtqJC;;;EAeI,gBAAA;EjD4pJL;AkD/vJC;EACE,gBAAA;EACA,2BAAA;ElDiwJH;AkD/vJG;EACE,gBAAA;ElDiwJL;AkDlwJG;EAII,gBAAA;ElDiwJP;AkD9vJK;;EAEE,gBAAA;EACA,2BAAA;ElDgwJP;AkD9vJK;;;EAGE,aAAA;EACA,2BAAA;EACA,uBAAA;ElDgwJP;AkDrxJC;EACE,gBAAA;EACA,2BAAA;ElDuxJH;AkDrxJG;EACE,gBAAA;ElDuxJL;AkDxxJG;EAII,gBAAA;ElDuxJP;AkDpxJK;;EAEE,gBAAA;EACA,2BAAA;ElDsxJP;AkDpxJK;;;EAGE,aAAA;EACA,2BAAA;EACA,uBAAA;ElDsxJP;AkD3yJC;EACE,gBAAA;EACA,2BAAA;ElD6yJH;AkD3yJG;EACE,gBAAA;ElD6yJL;AkD9yJG;EAII,gBAAA;ElD6yJP;AkD1yJK;;EAEE,gBAAA;EACA,2BAAA;ElD4yJP;AkD1yJK;;;EAGE,aAAA;EACA,2BAAA;EACA,uBAAA;ElD4yJP;AkDj0JC;EACE,gBAAA;EACA,2BAAA;ElDm0JH;AkDj0JG;EACE,gBAAA;ElDm0JL;AkDp0JG;EAII,gBAAA;ElDm0JP;AkDh0JK;;EAEE,gBAAA;EACA,2BAAA;ElDk0JP;AkDh0JK;;;EAGE,aAAA;EACA,2BAAA;EACA,uBAAA;ElDk0JP;AiD/tJD;EACE,eAAA;EACA,oBAAA;EjDiuJD;AiD/tJD;EACE,kBAAA;EACA,kBAAA;EjDiuJD;AmD51JD;EACE,qBAAA;EACA,2BAAA;EACA,+BAAA;EACA,oBAAA;E9C0DA,mDAAA;EACQ,2CAAA;ELqyJT;AmD31JD;EACE,eAAA;EnD61JD;AmDx1JD;EACE,oBAAA;EACA,sCAAA;EvBpBA,8BAAA;EACC,6BAAA;E5B+2JF;AmD91JD;EAMI,gBAAA;EnD21JH;AmDt1JD;EACE,eAAA;EACA,kBAAA;EACA,iBAAA;EACA,gBAAA;EnDw1JD;AmD51JD;EAOI,gBAAA;EnDw1JH;AmDn1JD;EACE,oBAAA;EACA,2BAAA;EACA,+BAAA;EvBpCA,iCAAA;EACC,gCAAA;E5B03JF;AmD70JD;EAEI,kBAAA;EnD80JH;AmDh1JD;EAKM,qBAAA;EACA,kBAAA;EnD80JL;AmD10JG;EAEI,eAAA;EvBlEN,8BAAA;EACC,6BAAA;E5B84JF;AmDx0JG;EAEI,kBAAA;EvBjEN,iCAAA;EACC,gCAAA;E5B24JF;AmDp0JD;EAEI,qBAAA;EnDq0JH;AmDl0JD;EACE,qBAAA;EnDo0JD;AmD5zJD;;;EAII,kBAAA;EnD6zJH;AmDj0JD;;EvB9FE,8BAAA;EACC,6BAAA;E5Bm6JF;AmDt0JD;;;;;;;;EAgBU,6BAAA;EnDg0JT;AmDh1JD;;;;;;;;EAoBU,8BAAA;EnDs0JT;AmD11JD;;EvBtFE,iCAAA;EACC,gCAAA;E5Bo7JF;AmD/1JD;;;;;;;;EAmCU,gCAAA;EnDs0JT;AmDz2JD;;;;;;;;EAuCU,iCAAA;EnD40JT;AmDn3JD;;EA8CI,+BAAA;EnDy0JH;AmDv3JD;;EAkDI,eAAA;EnDy0JH;AmD33JD;;EAsDI,WAAA;EnDy0JH;AmD/3JD;;;;;;;;;;;;EA6DU,gBAAA;EnDg1JT;AmD74JD;;;;;;;;;;;;EAiEU,iBAAA;EnD01JT;AmD35JD;;;;;;;;EA0EU,kBAAA;EnD21JT;AmDr6JD;;;;;;;;EAmFU,kBAAA;EnD41JT;AmD/6JD;EAyFI,WAAA;EACA,kBAAA;EnDy1JH;AmD/0JD;EACE,qBAAA;EnDi1JD;AmDl1JD;EAKI,kBAAA;EACA,oBAAA;EnDg1JH;AmDt1JD;EAQM,iBAAA;EnDi1JL;AmDz1JD;EAaI,kBAAA;EnD+0JH;AmD51JD;EAeM,+BAAA;EnDg1JL;AmD/1JD;EAmBI,eAAA;EnD+0JH;AmDl2JD;EAqBM,kCAAA;EnDg1JL;AmDz0JD;EC9NE,uBAAA;EpD0iKD;AoDxiKC;EACE,gBAAA;EACA,2BAAA;EACA,uBAAA;EpD0iKH;AoD7iKC;EAMI,2BAAA;EpD0iKL;AoDhjKC;EASI,gBAAA;EACA,2BAAA;EpD0iKL;AoDviKC;EAEI,8BAAA;EpDwiKL;AmDx1JD;ECjOE,uBAAA;EpD4jKD;AoD1jKC;EACE,gBAAA;EACA,2BAAA;EACA,uBAAA;EpD4jKH;AoD/jKC;EAMI,2BAAA;EpD4jKL;AoDlkKC;EASI,gBAAA;EACA,2BAAA;EpD4jKL;AoDzjKC;EAEI,8BAAA;EpD0jKL;AmDv2JD;ECpOE,uBAAA;EpD8kKD;AoD5kKC;EACE,gBAAA;EACA,2BAAA;EACA,uBAAA;EpD8kKH;AoDjlKC;EAMI,2BAAA;EpD8kKL;AoDplKC;EASI,gBAAA;EACA,2BAAA;EpD8kKL;AoD3kKC;EAEI,8BAAA;EpD4kKL;AmDt3JD;ECvOE,uBAAA;EpDgmKD;AoD9lKC;EACE,gBAAA;EACA,2BAAA;EACA,uBAAA;EpDgmKH;AoDnmKC;EAMI,2BAAA;EpDgmKL;AoDtmKC;EASI,gBAAA;EACA,2BAAA;EpDgmKL;AoD7lKC;EAEI,8BAAA;EpD8lKL;AmDr4JD;EC1OE,uBAAA;EpDknKD;AoDhnKC;EACE,gBAAA;EACA,2BAAA;EACA,uBAAA;EpDknKH;AoDrnKC;EAMI,2BAAA;EpDknKL;AoDxnKC;EASI,gBAAA;EACA,2BAAA;EpDknKL;AoD/mKC;EAEI,8BAAA;EpDgnKL;AmDp5JD;EC7OE,uBAAA;EpDooKD;AoDloKC;EACE,gBAAA;EACA,2BAAA;EACA,uBAAA;EpDooKH;AoDvoKC;EAMI,2BAAA;EpDooKL;AoD1oKC;EASI,gBAAA;EACA,2BAAA;EpDooKL;AoDjoKC;EAEI,8BAAA;EpDkoKL;AqDlpKD;EACE,oBAAA;EACA,gBAAA;EACA,WAAA;EACA,YAAA;EACA,kBAAA;ErDopKD;AqDzpKD;;;;EAWI,oBAAA;EACA,QAAA;EACA,SAAA;EACA,WAAA;EACA,cAAA;EACA,aAAA;EACA,WAAA;ErDopKH;AqDhpKC;EACE,wBAAA;ErDkpKH;AqD9oKC;EACE,qBAAA;ErDgpKH;AsDzqKD;EACE,kBAAA;EACA,eAAA;EACA,qBAAA;EACA,2BAAA;EACA,2BAAA;EACA,oBAAA;EjDwDA,yDAAA;EACQ,iDAAA;ELonKT;AsDnrKD;EASI,oBAAA;EACA,mCAAA;EtD6qKH;AsDxqKD;EACE,eAAA;EACA,oBAAA;EtD0qKD;AsDxqKD;EACE,cAAA;EACA,oBAAA;EtD0qKD;AuDhsKD;EACE,cAAA;EACA,iBAAA;EACA,mBAAA;EACA,gBAAA;EACA,gBAAA;EACA,8BAAA;EjCRA,cAAA;EAGA,2BAAA;EtBysKD;AuDjsKC;;EAEE,gBAAA;EACA,uBAAA;EACA,iBAAA;EjCfF,cAAA;EAGA,2BAAA;EtBitKD;AuD9rKC;EACE,YAAA;EACA,iBAAA;EACA,yBAAA;EACA,WAAA;EACA,0BAAA;EvDgsKH;AwDptKD;EACE,kBAAA;ExDstKD;AwDltKD;EACE,eAAA;EACA,kBAAA;EACA,iBAAA;EACA,QAAA;EACA,UAAA;EACA,WAAA;EACA,SAAA;EACA,eAAA;EACA,mCAAA;EAIA,YAAA;ExDitKD;AwD9sKC;EnDkHA,4CAAA;EACQ,uCAAA;EAAA,oCAAA;EA8DR,qDAAA;EAEK,2CAAA;EACG,qCAAA;ELkiKT;AwDltKC;EnD8GA,yCAAA;EACQ,oCAAA;EAAA,iCAAA;ELumKT;AwDptKD;EACE,oBAAA;EACA,kBAAA;ExDstKD;AwDltKD;EACE,oBAAA;EACA,aAAA;EACA,cAAA;ExDotKD;AwDhtKD;EACE,oBAAA;EACA,2BAAA;EACA,2BAAA;EACA,sCAAA;EACA,oBAAA;EnDaA,kDAAA;EACQ,0CAAA;EmDZR,sCAAA;EAAA,8BAAA;EAEA,YAAA;ExDktKD;AwD9sKD;EACE,iBAAA;EACA,QAAA;EACA,UAAA;EACA,WAAA;EACA,SAAA;EACA,eAAA;EACA,2BAAA;ExDgtKD;AwD9sKC;ElCrEA,YAAA;EAGA,0BAAA;EtBoxKD;AwDjtKC;ElCtEA,cAAA;EAGA,2BAAA;EtBwxKD;AwDhtKD;EACE,eAAA;EACA,kCAAA;EACA,2BAAA;ExDktKD;AwD/sKD;EACE,kBAAA;ExDitKD;AwD7sKD;EACE,WAAA;EACA,yBAAA;ExD+sKD;AwD1sKD;EACE,oBAAA;EACA,eAAA;ExD4sKD;AwDxsKD;EACE,eAAA;EACA,mBAAA;EACA,+BAAA;ExD0sKD;AwD7sKD;EAQI,kBAAA;EACA,kBAAA;ExDwsKH;AwDjtKD;EAaI,mBAAA;ExDusKH;AwDptKD;EAiBI,gBAAA;ExDssKH;AwDjsKD;EACE,oBAAA;EACA,cAAA;EACA,aAAA;EACA,cAAA;EACA,kBAAA;ExDmsKD;AwDjrKD;EAZE;IACE,cAAA;IACA,mBAAA;IxDgsKD;EwD9rKD;InDvEA,mDAAA;IACQ,2CAAA;ILwwKP;EwD7rKD;IAAY,cAAA;IxDgsKX;EACF;AwD3rKD;EAFE;IAAY,cAAA;IxDisKX;EACF;AyDh1KD;EACE,oBAAA;EACA,eAAA;EACA,gBAAA;EACA,qBAAA;EACA,iBAAA;EACA,kBAAA;EnCTA,YAAA;EAGA,0BAAA;EtB01KD;AyDj1KC;EnCZA,cAAA;EAGA,2BAAA;EtB81KD;AyDp1KC;EAAW,kBAAA;EAAmB,gBAAA;EzDw1K/B;AyDv1KC;EAAW,kBAAA;EAAmB,gBAAA;EzD21K/B;AyD11KC;EAAW,iBAAA;EAAmB,gBAAA;EzD81K/B;AyD71KC;EAAW,mBAAA;EAAmB,gBAAA;EzDi2K/B;AyD71KD;EACE,kBAAA;EACA,kBAAA;EACA,gBAAA;EACA,oBAAA;EACA,uBAAA;EACA,2BAAA;EACA,oBAAA;EzD+1KD;AyD31KD;EACE,oBAAA;EACA,UAAA;EACA,WAAA;EACA,2BAAA;EACA,qBAAA;EzD61KD;AyD11KC;EACE,WAAA;EACA,WAAA;EACA,mBAAA;EACA,yBAAA;EACA,2BAAA;EzD41KH;AyD11KC;EACE,WAAA;EACA,WAAA;EACA,yBAAA;EACA,2BAAA;EzD41KH;AyD11KC;EACE,WAAA;EACA,YAAA;EACA,yBAAA;EACA,2BAAA;EzD41KH;AyD11KC;EACE,UAAA;EACA,SAAA;EACA,kBAAA;EACA,6BAAA;EACA,6BAAA;EzD41KH;AyD11KC;EACE,UAAA;EACA,UAAA;EACA,kBAAA;EACA,6BAAA;EACA,4BAAA;EzD41KH;AyD11KC;EACE,QAAA;EACA,WAAA;EACA,mBAAA;EACA,yBAAA;EACA,8BAAA;EzD41KH;AyD11KC;EACE,QAAA;EACA,WAAA;EACA,yBAAA;EACA,8BAAA;EzD41KH;AyD11KC;EACE,QAAA;EACA,YAAA;EACA,yBAAA;EACA,8BAAA;EzD41KH;A0Dn7KD;EACE,oBAAA;EACA,QAAA;EACA,SAAA;EACA,eAAA;EACA,eAAA;EACA,kBAAA;EACA,cAAA;EACA,kBAAA;EACA,2BAAA;EACA,sCAAA;EAAA,8BAAA;EACA,2BAAA;EACA,sCAAA;EACA,oBAAA;ErDkDA,mDAAA;EACQ,2CAAA;EqD/CR,qBAAA;E1Do7KD;A0Dj7KC;EAAY,mBAAA;E1Do7Kb;A0Dn7KC;EAAY,mBAAA;E1Ds7Kb;A0Dr7KC;EAAY,kBAAA;E1Dw7Kb;A0Dv7KC;EAAY,oBAAA;E1D07Kb;A0Dv7KD;EACE,WAAA;EACA,mBAAA;EACA,iBAAA;EACA,qBAAA;EACA,mBAAA;EACA,2BAAA;EACA,kCAAA;EACA,4BAAA;E1Dy7KD;A0Dt7KD;EACE,mBAAA;E1Dw7KD;A0Dh7KC;;EAEE,oBAAA;EACA,gBAAA;EACA,UAAA;EACA,WAAA;EACA,2BAAA;EACA,qBAAA;E1Dk7KH;A0D/6KD;EACE,oBAAA;E1Di7KD;A0D/6KD;EACE,oBAAA;EACA,aAAA;E1Di7KD;A0D76KC;EACE,WAAA;EACA,oBAAA;EACA,wBAAA;EACA,2BAAA;EACA,uCAAA;EACA,eAAA;E1D+6KH;A0D96KG;EACE,cAAA;EACA,aAAA;EACA,oBAAA;EACA,wBAAA;EACA,2BAAA;E1Dg7KL;A0D76KC;EACE,UAAA;EACA,aAAA;EACA,mBAAA;EACA,sBAAA;EACA,6BAAA;EACA,yCAAA;E1D+6KH;A0D96KG;EACE,cAAA;EACA,WAAA;EACA,eAAA;EACA,sBAAA;EACA,6BAAA;E1Dg7KL;A0D76KC;EACE,WAAA;EACA,oBAAA;EACA,qBAAA;EACA,8BAAA;EACA,0CAAA;EACA,YAAA;E1D+6KH;A0D96KG;EACE,cAAA;EACA,UAAA;EACA,oBAAA;EACA,qBAAA;EACA,8BAAA;E1Dg7KL;A0D56KC;EACE,UAAA;EACA,cAAA;EACA,mBAAA;EACA,uBAAA;EACA,4BAAA;EACA,wCAAA;E1D86KH;A0D76KG;EACE,cAAA;EACA,YAAA;EACA,uBAAA;EACA,4BAAA;EACA,eAAA;E1D+6KL;A2DziLD;EACE,oBAAA;E3D2iLD;A2DxiLD;EACE,oBAAA;EACA,kBAAA;EACA,aAAA;E3D0iLD;A2D7iLD;EAMI,eAAA;EACA,oBAAA;EtD0KF,2CAAA;EACK,sCAAA;EACG,mCAAA;ELi4KT;A2DpjLD;;EAcM,gBAAA;E3D0iLL;A2DxjLD;;;EAqBI,gBAAA;E3DwiLH;A2D7jLD;EAyBI,SAAA;E3DuiLH;A2DhkLD;;EA8BI,oBAAA;EACA,QAAA;EACA,aAAA;E3DsiLH;A2DtkLD;EAoCI,YAAA;E3DqiLH;A2DzkLD;EAuCI,aAAA;E3DqiLH;A2D5kLD;;EA2CI,SAAA;E3DqiLH;A2DhlLD;EA+CI,aAAA;E3DoiLH;A2DnlLD;EAkDI,YAAA;E3DoiLH;A2D5hLD;EACE,oBAAA;EACA,QAAA;EACA,SAAA;EACA,WAAA;EACA,YAAA;ErCtEA,cAAA;EAGA,2BAAA;EqCqEA,iBAAA;EACA,gBAAA;EACA,oBAAA;EACA,2CAAA;E3D+hLD;A2D1hLC;Eb1EE,oGAAA;EACA,+FAAA;EACA,sHAAA;EAAA,gGAAA;EACA,6BAAA;EACA,wHAAA;E9CumLH;A2D9hLC;EACE,YAAA;EACA,UAAA;Eb/EA,oGAAA;EACA,+FAAA;EACA,sHAAA;EAAA,gGAAA;EACA,6BAAA;EACA,wHAAA;E9CgnLH;A2DhiLC;;EAEE,YAAA;EACA,gBAAA;EACA,uBAAA;ErC9FF,cAAA;EAGA,2BAAA;EtB+nLD;A2DjkLD;;;;EAsCI,oBAAA;EACA,UAAA;EACA,YAAA;EACA,uBAAA;E3DiiLH;A2D1kLD;;EA6CI,WAAA;EACA,oBAAA;E3DiiLH;A2D/kLD;;EAkDI,YAAA;EACA,qBAAA;E3DiiLH;A2DplLD;;EAuDI,aAAA;EACA,cAAA;EACA,mBAAA;EACA,oBAAA;E3DiiLH;A2D5hLG;EACE,kBAAA;E3D8hLL;A2D1hLG;EACE,kBAAA;E3D4hLL;A2DlhLD;EACE,oBAAA;EACA,cAAA;EACA,WAAA;EACA,aAAA;EACA,YAAA;EACA,mBAAA;EACA,iBAAA;EACA,kBAAA;EACA,oBAAA;E3DohLD;A2D7hLD;EAYI,uBAAA;EACA,aAAA;EACA,cAAA;EACA,aAAA;EACA,qBAAA;EACA,2BAAA;EACA,qBAAA;EACA,iBAAA;EAUA,2BAAA;EACA,oCAAA;E3D2gLH;A2DziLD;EAiCI,WAAA;EACA,aAAA;EACA,cAAA;EACA,2BAAA;E3D2gLH;A2DpgLD;EACE,oBAAA;EACA,WAAA;EACA,YAAA;EACA,cAAA;EACA,aAAA;EACA,mBAAA;EACA,sBAAA;EACA,gBAAA;EACA,oBAAA;EACA,2CAAA;E3DsgLD;A2DrgLC;EACE,mBAAA;E3DugLH;A2D99KD;EAhCE;;;;IAKI,aAAA;IACA,cAAA;IACA,mBAAA;IACA,iBAAA;I3DggLH;E2DxgLD;;IAYI,oBAAA;I3DggLH;E2D5gLD;;IAgBI,qBAAA;I3DggLH;E2D3/KD;IACE,WAAA;IACA,YAAA;IACA,sBAAA;I3D6/KD;E2Dz/KD;IACE,cAAA;I3D2/KD;EACF;A4D/tLC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAEE,cAAA;EACA,gBAAA;E5D6vLH;A4D3vLC;;;;;;;;;;;;;;;EACE,aAAA;E5D2wLH;AiCnxLD;E4BRE,gBAAA;EACA,mBAAA;EACA,oBAAA;E7D8xLD;AiCrxLD;EACE,yBAAA;EjCuxLD;AiCrxLD;EACE,wBAAA;EjCuxLD;AiC/wLD;EACE,0BAAA;EjCixLD;AiC/wLD;EACE,2BAAA;EjCixLD;AiC/wLD;EACE,oBAAA;EjCixLD;AiC/wLD;E6BzBE,aAAA;EACA,oBAAA;EACA,mBAAA;EACA,+BAAA;EACA,WAAA;E9D2yLD;AiC7wLD;EACE,0BAAA;EACA,+BAAA;EjC+wLD;AiCxwLD;EACE,iBAAA;E5B2FA,yCAAA;EACQ,oCAAA;EAAA,iCAAA;ELgrLT;A+D9yLD;EACE,qBAAA;E/DgzLD;A+D1yLD;;;;ECdE,0BAAA;EhE8zLD;A+DzyLD;;;;;;;;;;;;EAYE,0BAAA;E/D2yLD;A+DpyLD;EAAA;IChDE,2BAAA;IhEw1LC;EgEv1LD;IAAU,gBAAA;IhE01LT;EgEz1LD;IAAU,+BAAA;IhE41LT;EgE31LD;;IACU,gCAAA;IhE81LT;EACF;A+D9yLD;EAAA;IAFI,2BAAA;I/DozLD;EACF;A+D9yLD;EAAA;IAFI,4BAAA;I/DozLD;EACF;A+D9yLD;EAAA;IAFI,kCAAA;I/DozLD;EACF;A+D7yLD;EAAA;ICrEE,2BAAA;IhEs3LC;EgEr3LD;IAAU,gBAAA;IhEw3LT;EgEv3LD;IAAU,+BAAA;IhE03LT;EgEz3LD;;IACU,gCAAA;IhE43LT;EACF;A+DvzLD;EAAA;IAFI,2BAAA;I/D6zLD;EACF;A+DvzLD;EAAA;IAFI,4BAAA;I/D6zLD;EACF;A+DvzLD;EAAA;IAFI,kCAAA;I/D6zLD;EACF;A+DtzLD;EAAA;IC1FE,2BAAA;IhEo5LC;EgEn5LD;IAAU,gBAAA;IhEs5LT;EgEr5LD;IAAU,+BAAA;IhEw5LT;EgEv5LD;;IACU,gCAAA;IhE05LT;EACF;A+Dh0LD;EAAA;IAFI,2BAAA;I/Ds0LD;EACF;A+Dh0LD;EAAA;IAFI,4BAAA;I/Ds0LD;EACF;A+Dh0LD;EAAA;IAFI,kCAAA;I/Ds0LD;EACF;A+D/zLD;EAAA;IC/GE,2BAAA;IhEk7LC;EgEj7LD;IAAU,gBAAA;IhEo7LT;EgEn7LD;IAAU,+BAAA;IhEs7LT;EgEr7LD;;IACU,gCAAA;IhEw7LT;EACF;A+Dz0LD;EAAA;IAFI,2BAAA;I/D+0LD;EACF;A+Dz0LD;EAAA;IAFI,4BAAA;I/D+0LD;EACF;A+Dz0LD;EAAA;IAFI,kCAAA;I/D+0LD;EACF;A+Dx0LD;EAAA;IC5HE,0BAAA;IhEw8LC;EACF;A+Dx0LD;EAAA;ICjIE,0BAAA;IhE68LC;EACF;A+Dx0LD;EAAA;ICtIE,0BAAA;IhEk9LC;EACF;A+Dx0LD;EAAA;IC3IE,0BAAA;IhEu9LC;EACF;A+Dr0LD;ECnJE,0BAAA;EhE29LD;A+Dl0LD;EAAA;ICjKE,2BAAA;IhEu+LC;EgEt+LD;IAAU,gBAAA;IhEy+LT;EgEx+LD;IAAU,+BAAA;IhE2+LT;EgE1+LD;;IACU,gCAAA;IhE6+LT;EACF;A+Dh1LD;EACE,0BAAA;E/Dk1LD;A+D70LD;EAAA;IAFI,2BAAA;I/Dm1LD;EACF;A+Dj1LD;EACE,0BAAA;E/Dm1LD;A+D90LD;EAAA;IAFI,4BAAA;I/Do1LD;EACF;A+Dl1LD;EACE,0BAAA;E/Do1LD;A+D/0LD;EAAA;IAFI,kCAAA;I/Dq1LD;EACF;A+D90LD;EAAA;ICpLE,0BAAA;IhEsgMC;EACF","sourcesContent":[null,"/*! normalize.css v3.0.1 | MIT License | git.io/normalize */\n\n//\n// 1. Set default font family to sans-serif.\n// 2. Prevent iOS text size adjust after orientation change, without disabling\n//    user zoom.\n//\n\nhtml {\n  font-family: sans-serif; // 1\n  -ms-text-size-adjust: 100%; // 2\n  -webkit-text-size-adjust: 100%; // 2\n}\n\n//\n// Remove default margin.\n//\n\nbody {\n  margin: 0;\n}\n\n// HTML5 display definitions\n// ==========================================================================\n\n//\n// Correct `block` display not defined for any HTML5 element in IE 8/9.\n// Correct `block` display not defined for `details` or `summary` in IE 10/11 and Firefox.\n// Correct `block` display not defined for `main` in IE 11.\n//\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nnav,\nsection,\nsummary {\n  display: block;\n}\n\n//\n// 1. Correct `inline-block` display not defined in IE 8/9.\n// 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n//\n\naudio,\ncanvas,\nprogress,\nvideo {\n  display: inline-block; // 1\n  vertical-align: baseline; // 2\n}\n\n//\n// Prevent modern browsers from displaying `audio` without controls.\n// Remove excess height in iOS 5 devices.\n//\n\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n\n//\n// Address `[hidden]` styling not present in IE 8/9/10.\n// Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.\n//\n\n[hidden],\ntemplate {\n  display: none;\n}\n\n// Links\n// ==========================================================================\n\n//\n// Remove the gray background color from active links in IE 10.\n//\n\na {\n  background: transparent;\n}\n\n//\n// Improve readability when focused and also mouse hovered in all browsers.\n//\n\na:active,\na:hover {\n  outline: 0;\n}\n\n// Text-level semantics\n// ==========================================================================\n\n//\n// Address styling not present in IE 8/9/10/11, Safari, and Chrome.\n//\n\nabbr[title] {\n  border-bottom: 1px dotted;\n}\n\n//\n// Address style set to `bolder` in Firefox 4+, Safari, and Chrome.\n//\n\nb,\nstrong {\n  font-weight: bold;\n}\n\n//\n// Address styling not present in Safari and Chrome.\n//\n\ndfn {\n  font-style: italic;\n}\n\n//\n// Address variable `h1` font-size and margin within `section` and `article`\n// contexts in Firefox 4+, Safari, and Chrome.\n//\n\nh1 {\n  font-size: 2em;\n  margin: 0.67em 0;\n}\n\n//\n// Address styling not present in IE 8/9.\n//\n\nmark {\n  background: #ff0;\n  color: #000;\n}\n\n//\n// Address inconsistent and variable font size in all browsers.\n//\n\nsmall {\n  font-size: 80%;\n}\n\n//\n// Prevent `sub` and `sup` affecting `line-height` in all browsers.\n//\n\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\n\nsup {\n  top: -0.5em;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\n// Embedded content\n// ==========================================================================\n\n//\n// Remove border when inside `a` element in IE 8/9/10.\n//\n\nimg {\n  border: 0;\n}\n\n//\n// Correct overflow not hidden in IE 9/10/11.\n//\n\nsvg:not(:root) {\n  overflow: hidden;\n}\n\n// Grouping content\n// ==========================================================================\n\n//\n// Address margin not present in IE 8/9 and Safari.\n//\n\nfigure {\n  margin: 1em 40px;\n}\n\n//\n// Address differences between Firefox and other browsers.\n//\n\nhr {\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n  height: 0;\n}\n\n//\n// Contain overflow in all browsers.\n//\n\npre {\n  overflow: auto;\n}\n\n//\n// Address odd `em`-unit font size rendering in all browsers.\n//\n\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, monospace;\n  font-size: 1em;\n}\n\n// Forms\n// ==========================================================================\n\n//\n// Known limitation: by default, Chrome and Safari on OS X allow very limited\n// styling of `select`, unless a `border` property is set.\n//\n\n//\n// 1. Correct color not being inherited.\n//    Known issue: affects color of disabled elements.\n// 2. Correct font properties not being inherited.\n// 3. Address margins set differently in Firefox 4+, Safari, and Chrome.\n//\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  color: inherit; // 1\n  font: inherit; // 2\n  margin: 0; // 3\n}\n\n//\n// Address `overflow` set to `hidden` in IE 8/9/10/11.\n//\n\nbutton {\n  overflow: visible;\n}\n\n//\n// Address inconsistent `text-transform` inheritance for `button` and `select`.\n// All other form control elements do not inherit `text-transform` values.\n// Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.\n// Correct `select` style inheritance in Firefox.\n//\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n//\n// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n//    and `video` controls.\n// 2. Correct inability to style clickable `input` types in iOS.\n// 3. Improve usability and consistency of cursor style between image-type\n//    `input` and others.\n//\n\nbutton,\nhtml input[type=\"button\"], // 1\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  -webkit-appearance: button; // 2\n  cursor: pointer; // 3\n}\n\n//\n// Re-set default cursor for disabled elements.\n//\n\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default;\n}\n\n//\n// Remove inner padding and border in Firefox 4+.\n//\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  border: 0;\n  padding: 0;\n}\n\n//\n// Address Firefox 4+ setting `line-height` on `input` using `!important` in\n// the UA stylesheet.\n//\n\ninput {\n  line-height: normal;\n}\n\n//\n// It's recommended that you don't attempt to style these elements.\n// Firefox's implementation doesn't respect box-sizing, padding, or width.\n//\n// 1. Address box sizing set to `content-box` in IE 8/9/10.\n// 2. Remove excess padding in IE 8/9/10.\n//\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  box-sizing: border-box; // 1\n  padding: 0; // 2\n}\n\n//\n// Fix the cursor style for Chrome's increment/decrement buttons. For certain\n// `font-size` values of the `input`, it causes the cursor style of the\n// decrement button to change from `default` to `text`.\n//\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\n\n//\n// 1. Address `appearance` set to `searchfield` in Safari and Chrome.\n// 2. Address `box-sizing` set to `border-box` in Safari and Chrome\n//    (include `-moz` to future-proof).\n//\n\ninput[type=\"search\"] {\n  -webkit-appearance: textfield; // 1\n  -moz-box-sizing: content-box;\n  -webkit-box-sizing: content-box; // 2\n  box-sizing: content-box;\n}\n\n//\n// Remove inner padding and search cancel button in Safari and Chrome on OS X.\n// Safari (but not Chrome) clips the cancel button when the search input has\n// padding (and `textfield` appearance).\n//\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n//\n// Define consistent border, margin, and padding.\n//\n\nfieldset {\n  border: 1px solid #c0c0c0;\n  margin: 0 2px;\n  padding: 0.35em 0.625em 0.75em;\n}\n\n//\n// 1. Correct `color` not being inherited in IE 8/9/10/11.\n// 2. Remove padding so people aren't caught out if they zero out fieldsets.\n//\n\nlegend {\n  border: 0; // 1\n  padding: 0; // 2\n}\n\n//\n// Remove default vertical scrollbar in IE 8/9/10/11.\n//\n\ntextarea {\n  overflow: auto;\n}\n\n//\n// Don't inherit the `font-weight` (applied by a rule above).\n// NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n//\n\noptgroup {\n  font-weight: bold;\n}\n\n// Tables\n// ==========================================================================\n\n//\n// Remove most spacing between table cells.\n//\n\ntable {\n  border-collapse: collapse;\n  border-spacing: 0;\n}\n\ntd,\nth {\n  padding: 0;\n}\n","//\n// Basic print styles\n// --------------------------------------------------\n// Source: https://github.com/h5bp/html5-boilerplate/blob/master/css/main.css\n\n@media print {\n\n  * {\n    text-shadow: none !important;\n    color: #000 !important; // Black prints faster: h5bp.com/s\n    background: transparent !important;\n    box-shadow: none !important;\n  }\n\n  a,\n  a:visited {\n    text-decoration: underline;\n  }\n\n  a[href]:after {\n    content: \" (\" attr(href) \")\";\n  }\n\n  abbr[title]:after {\n    content: \" (\" attr(title) \")\";\n  }\n\n  // Don't show links for images, or javascript/internal links\n  a[href^=\"javascript:\"]:after,\n  a[href^=\"#\"]:after {\n    content: \"\";\n  }\n\n  pre,\n  blockquote {\n    border: 1px solid #999;\n    page-break-inside: avoid;\n  }\n\n  thead {\n    display: table-header-group; // h5bp.com/t\n  }\n\n  tr,\n  img {\n    page-break-inside: avoid;\n  }\n\n  img {\n    max-width: 100% !important;\n  }\n\n  p,\n  h2,\n  h3 {\n    orphans: 3;\n    widows: 3;\n  }\n\n  h2,\n  h3 {\n    page-break-after: avoid;\n  }\n\n  // Chrome (OSX) fix for https://github.com/twbs/bootstrap/issues/11245\n  // Once fixed, we can just straight up remove this.\n  select {\n    background: #fff !important;\n  }\n\n  // Bootstrap components\n  .navbar {\n    display: none;\n  }\n  .table {\n    td,\n    th {\n      background-color: #fff !important;\n    }\n  }\n  .btn,\n  .dropup > .btn {\n    > .caret {\n      border-top-color: #000 !important;\n    }\n  }\n  .label {\n    border: 1px solid #000;\n  }\n\n  .table {\n    border-collapse: collapse !important;\n  }\n  .table-bordered {\n    th,\n    td {\n      border: 1px solid #ddd !important;\n    }\n  }\n\n}\n","//\n// Glyphicons for Bootstrap\n//\n// Since icons are fonts, they can be placed anywhere text is placed and are\n// thus automatically sized to match the surrounding child. To use, create an\n// inline element with the appropriate classes, like so:\n//\n// <a href=\"#\"><span class=\"glyphicon glyphicon-star\"></span> Star</a>\n\n// Import the fonts\n@font-face {\n  font-family: 'Glyphicons Halflings';\n  src: url('@{icon-font-path}@{icon-font-name}.eot');\n  src: url('@{icon-font-path}@{icon-font-name}.eot?#iefix') format('embedded-opentype'),\n       url('@{icon-font-path}@{icon-font-name}.woff') format('woff'),\n       url('@{icon-font-path}@{icon-font-name}.ttf') format('truetype'),\n       url('@{icon-font-path}@{icon-font-name}.svg#@{icon-font-svg-id}') format('svg');\n}\n\n// Catchall baseclass\n.glyphicon {\n  position: relative;\n  top: 1px;\n  display: inline-block;\n  font-family: 'Glyphicons Halflings';\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\n// Individual icons\n.glyphicon-asterisk               { &:before { content: \"\\2a\"; } }\n.glyphicon-plus                   { &:before { content: \"\\2b\"; } }\n.glyphicon-euro                   { &:before { content: \"\\20ac\"; } }\n.glyphicon-minus                  { &:before { content: \"\\2212\"; } }\n.glyphicon-cloud                  { &:before { content: \"\\2601\"; } }\n.glyphicon-envelope               { &:before { content: \"\\2709\"; } }\n.glyphicon-pencil                 { &:before { content: \"\\270f\"; } }\n.glyphicon-glass                  { &:before { content: \"\\e001\"; } }\n.glyphicon-music                  { &:before { content: \"\\e002\"; } }\n.glyphicon-search                 { &:before { content: \"\\e003\"; } }\n.glyphicon-heart                  { &:before { content: \"\\e005\"; } }\n.glyphicon-star                   { &:before { content: \"\\e006\"; } }\n.glyphicon-star-empty             { &:before { content: \"\\e007\"; } }\n.glyphicon-user                   { &:before { content: \"\\e008\"; } }\n.glyphicon-film                   { &:before { content: \"\\e009\"; } }\n.glyphicon-th-large               { &:before { content: \"\\e010\"; } }\n.glyphicon-th                     { &:before { content: \"\\e011\"; } }\n.glyphicon-th-list                { &:before { content: \"\\e012\"; } }\n.glyphicon-ok                     { &:before { content: \"\\e013\"; } }\n.glyphicon-remove                 { &:before { content: \"\\e014\"; } }\n.glyphicon-zoom-in                { &:before { content: \"\\e015\"; } }\n.glyphicon-zoom-out               { &:before { content: \"\\e016\"; } }\n.glyphicon-off                    { &:before { content: \"\\e017\"; } }\n.glyphicon-signal                 { &:before { content: \"\\e018\"; } }\n.glyphicon-cog                    { &:before { content: \"\\e019\"; } }\n.glyphicon-trash                  { &:before { content: \"\\e020\"; } }\n.glyphicon-home                   { &:before { content: \"\\e021\"; } }\n.glyphicon-file                   { &:before { content: \"\\e022\"; } }\n.glyphicon-time                   { &:before { content: \"\\e023\"; } }\n.glyphicon-road                   { &:before { content: \"\\e024\"; } }\n.glyphicon-download-alt           { &:before { content: \"\\e025\"; } }\n.glyphicon-download               { &:before { content: \"\\e026\"; } }\n.glyphicon-upload                 { &:before { content: \"\\e027\"; } }\n.glyphicon-inbox                  { &:before { content: \"\\e028\"; } }\n.glyphicon-play-circle            { &:before { content: \"\\e029\"; } }\n.glyphicon-repeat                 { &:before { content: \"\\e030\"; } }\n.glyphicon-refresh                { &:before { content: \"\\e031\"; } }\n.glyphicon-list-alt               { &:before { content: \"\\e032\"; } }\n.glyphicon-lock                   { &:before { content: \"\\e033\"; } }\n.glyphicon-flag                   { &:before { content: \"\\e034\"; } }\n.glyphicon-headphones             { &:before { content: \"\\e035\"; } }\n.glyphicon-volume-off             { &:before { content: \"\\e036\"; } }\n.glyphicon-volume-down            { &:before { content: \"\\e037\"; } }\n.glyphicon-volume-up              { &:before { content: \"\\e038\"; } }\n.glyphicon-qrcode                 { &:before { content: \"\\e039\"; } }\n.glyphicon-barcode                { &:before { content: \"\\e040\"; } }\n.glyphicon-tag                    { &:before { content: \"\\e041\"; } }\n.glyphicon-tags                   { &:before { content: \"\\e042\"; } }\n.glyphicon-book                   { &:before { content: \"\\e043\"; } }\n.glyphicon-bookmark               { &:before { content: \"\\e044\"; } }\n.glyphicon-print                  { &:before { content: \"\\e045\"; } }\n.glyphicon-camera                 { &:before { content: \"\\e046\"; } }\n.glyphicon-font                   { &:before { content: \"\\e047\"; } }\n.glyphicon-bold                   { &:before { content: \"\\e048\"; } }\n.glyphicon-italic                 { &:before { content: \"\\e049\"; } }\n.glyphicon-text-height            { &:before { content: \"\\e050\"; } }\n.glyphicon-text-width             { &:before { content: \"\\e051\"; } }\n.glyphicon-align-left             { &:before { content: \"\\e052\"; } }\n.glyphicon-align-center           { &:before { content: \"\\e053\"; } }\n.glyphicon-align-right            { &:before { content: \"\\e054\"; } }\n.glyphicon-align-justify          { &:before { content: \"\\e055\"; } }\n.glyphicon-list                   { &:before { content: \"\\e056\"; } }\n.glyphicon-indent-left            { &:before { content: \"\\e057\"; } }\n.glyphicon-indent-right           { &:before { content: \"\\e058\"; } }\n.glyphicon-facetime-video         { &:before { content: \"\\e059\"; } }\n.glyphicon-picture                { &:before { content: \"\\e060\"; } }\n.glyphicon-map-marker             { &:before { content: \"\\e062\"; } }\n.glyphicon-adjust                 { &:before { content: \"\\e063\"; } }\n.glyphicon-tint                   { &:before { content: \"\\e064\"; } }\n.glyphicon-edit                   { &:before { content: \"\\e065\"; } }\n.glyphicon-share                  { &:before { content: \"\\e066\"; } }\n.glyphicon-check                  { &:before { content: \"\\e067\"; } }\n.glyphicon-move                   { &:before { content: \"\\e068\"; } }\n.glyphicon-step-backward          { &:before { content: \"\\e069\"; } }\n.glyphicon-fast-backward          { &:before { content: \"\\e070\"; } }\n.glyphicon-backward               { &:before { content: \"\\e071\"; } }\n.glyphicon-play                   { &:before { content: \"\\e072\"; } }\n.glyphicon-pause                  { &:before { content: \"\\e073\"; } }\n.glyphicon-stop                   { &:before { content: \"\\e074\"; } }\n.glyphicon-forward                { &:before { content: \"\\e075\"; } }\n.glyphicon-fast-forward           { &:before { content: \"\\e076\"; } }\n.glyphicon-step-forward           { &:before { content: \"\\e077\"; } }\n.glyphicon-eject                  { &:before { content: \"\\e078\"; } }\n.glyphicon-chevron-left           { &:before { content: \"\\e079\"; } }\n.glyphicon-chevron-right          { &:before { content: \"\\e080\"; } }\n.glyphicon-plus-sign              { &:before { content: \"\\e081\"; } }\n.glyphicon-minus-sign             { &:before { content: \"\\e082\"; } }\n.glyphicon-remove-sign            { &:before { content: \"\\e083\"; } }\n.glyphicon-ok-sign                { &:before { content: \"\\e084\"; } }\n.glyphicon-question-sign          { &:before { content: \"\\e085\"; } }\n.glyphicon-info-sign              { &:before { content: \"\\e086\"; } }\n.glyphicon-screenshot             { &:before { content: \"\\e087\"; } }\n.glyphicon-remove-circle          { &:before { content: \"\\e088\"; } }\n.glyphicon-ok-circle              { &:before { content: \"\\e089\"; } }\n.glyphicon-ban-circle             { &:before { content: \"\\e090\"; } }\n.glyphicon-arrow-left             { &:before { content: \"\\e091\"; } }\n.glyphicon-arrow-right            { &:before { content: \"\\e092\"; } }\n.glyphicon-arrow-up               { &:before { content: \"\\e093\"; } }\n.glyphicon-arrow-down             { &:before { content: \"\\e094\"; } }\n.glyphicon-share-alt              { &:before { content: \"\\e095\"; } }\n.glyphicon-resize-full            { &:before { content: \"\\e096\"; } }\n.glyphicon-resize-small           { &:before { content: \"\\e097\"; } }\n.glyphicon-exclamation-sign       { &:before { content: \"\\e101\"; } }\n.glyphicon-gift                   { &:before { content: \"\\e102\"; } }\n.glyphicon-leaf                   { &:before { content: \"\\e103\"; } }\n.glyphicon-fire                   { &:before { content: \"\\e104\"; } }\n.glyphicon-eye-open               { &:before { content: \"\\e105\"; } }\n.glyphicon-eye-close              { &:before { content: \"\\e106\"; } }\n.glyphicon-warning-sign           { &:before { content: \"\\e107\"; } }\n.glyphicon-plane                  { &:before { content: \"\\e108\"; } }\n.glyphicon-calendar               { &:before { content: \"\\e109\"; } }\n.glyphicon-random                 { &:before { content: \"\\e110\"; } }\n.glyphicon-comment                { &:before { content: \"\\e111\"; } }\n.glyphicon-magnet                 { &:before { content: \"\\e112\"; } }\n.glyphicon-chevron-up             { &:before { content: \"\\e113\"; } }\n.glyphicon-chevron-down           { &:before { content: \"\\e114\"; } }\n.glyphicon-retweet                { &:before { content: \"\\e115\"; } }\n.glyphicon-shopping-cart          { &:before { content: \"\\e116\"; } }\n.glyphicon-folder-close           { &:before { content: \"\\e117\"; } }\n.glyphicon-folder-open            { &:before { content: \"\\e118\"; } }\n.glyphicon-resize-vertical        { &:before { content: \"\\e119\"; } }\n.glyphicon-resize-horizontal      { &:before { content: \"\\e120\"; } }\n.glyphicon-hdd                    { &:before { content: \"\\e121\"; } }\n.glyphicon-bullhorn               { &:before { content: \"\\e122\"; } }\n.glyphicon-bell                   { &:before { content: \"\\e123\"; } }\n.glyphicon-certificate            { &:before { content: \"\\e124\"; } }\n.glyphicon-thumbs-up              { &:before { content: \"\\e125\"; } }\n.glyphicon-thumbs-down            { &:before { content: \"\\e126\"; } }\n.glyphicon-hand-right             { &:before { content: \"\\e127\"; } }\n.glyphicon-hand-left              { &:before { content: \"\\e128\"; } }\n.glyphicon-hand-up                { &:before { content: \"\\e129\"; } }\n.glyphicon-hand-down              { &:before { content: \"\\e130\"; } }\n.glyphicon-circle-arrow-right     { &:before { content: \"\\e131\"; } }\n.glyphicon-circle-arrow-left      { &:before { content: \"\\e132\"; } }\n.glyphicon-circle-arrow-up        { &:before { content: \"\\e133\"; } }\n.glyphicon-circle-arrow-down      { &:before { content: \"\\e134\"; } }\n.glyphicon-globe                  { &:before { content: \"\\e135\"; } }\n.glyphicon-wrench                 { &:before { content: \"\\e136\"; } }\n.glyphicon-tasks                  { &:before { content: \"\\e137\"; } }\n.glyphicon-filter                 { &:before { content: \"\\e138\"; } }\n.glyphicon-briefcase              { &:before { content: \"\\e139\"; } }\n.glyphicon-fullscreen             { &:before { content: \"\\e140\"; } }\n.glyphicon-dashboard              { &:before { content: \"\\e141\"; } }\n.glyphicon-paperclip              { &:before { content: \"\\e142\"; } }\n.glyphicon-heart-empty            { &:before { content: \"\\e143\"; } }\n.glyphicon-link                   { &:before { content: \"\\e144\"; } }\n.glyphicon-phone                  { &:before { content: \"\\e145\"; } }\n.glyphicon-pushpin                { &:before { content: \"\\e146\"; } }\n.glyphicon-usd                    { &:before { content: \"\\e148\"; } }\n.glyphicon-gbp                    { &:before { content: \"\\e149\"; } }\n.glyphicon-sort                   { &:before { content: \"\\e150\"; } }\n.glyphicon-sort-by-alphabet       { &:before { content: \"\\e151\"; } }\n.glyphicon-sort-by-alphabet-alt   { &:before { content: \"\\e152\"; } }\n.glyphicon-sort-by-order          { &:before { content: \"\\e153\"; } }\n.glyphicon-sort-by-order-alt      { &:before { content: \"\\e154\"; } }\n.glyphicon-sort-by-attributes     { &:before { content: \"\\e155\"; } }\n.glyphicon-sort-by-attributes-alt { &:before { content: \"\\e156\"; } }\n.glyphicon-unchecked              { &:before { content: \"\\e157\"; } }\n.glyphicon-expand                 { &:before { content: \"\\e158\"; } }\n.glyphicon-collapse-down          { &:before { content: \"\\e159\"; } }\n.glyphicon-collapse-up            { &:before { content: \"\\e160\"; } }\n.glyphicon-log-in                 { &:before { content: \"\\e161\"; } }\n.glyphicon-flash                  { &:before { content: \"\\e162\"; } }\n.glyphicon-log-out                { &:before { content: \"\\e163\"; } }\n.glyphicon-new-window             { &:before { content: \"\\e164\"; } }\n.glyphicon-record                 { &:before { content: \"\\e165\"; } }\n.glyphicon-save                   { &:before { content: \"\\e166\"; } }\n.glyphicon-open                   { &:before { content: \"\\e167\"; } }\n.glyphicon-saved                  { &:before { content: \"\\e168\"; } }\n.glyphicon-import                 { &:before { content: \"\\e169\"; } }\n.glyphicon-export                 { &:before { content: \"\\e170\"; } }\n.glyphicon-send                   { &:before { content: \"\\e171\"; } }\n.glyphicon-floppy-disk            { &:before { content: \"\\e172\"; } }\n.glyphicon-floppy-saved           { &:before { content: \"\\e173\"; } }\n.glyphicon-floppy-remove          { &:before { content: \"\\e174\"; } }\n.glyphicon-floppy-save            { &:before { content: \"\\e175\"; } }\n.glyphicon-floppy-open            { &:before { content: \"\\e176\"; } }\n.glyphicon-credit-card            { &:before { content: \"\\e177\"; } }\n.glyphicon-transfer               { &:before { content: \"\\e178\"; } }\n.glyphicon-cutlery                { &:before { content: \"\\e179\"; } }\n.glyphicon-header                 { &:before { content: \"\\e180\"; } }\n.glyphicon-compressed             { &:before { content: \"\\e181\"; } }\n.glyphicon-earphone               { &:before { content: \"\\e182\"; } }\n.glyphicon-phone-alt              { &:before { content: \"\\e183\"; } }\n.glyphicon-tower                  { &:before { content: \"\\e184\"; } }\n.glyphicon-stats                  { &:before { content: \"\\e185\"; } }\n.glyphicon-sd-video               { &:before { content: \"\\e186\"; } }\n.glyphicon-hd-video               { &:before { content: \"\\e187\"; } }\n.glyphicon-subtitles              { &:before { content: \"\\e188\"; } }\n.glyphicon-sound-stereo           { &:before { content: \"\\e189\"; } }\n.glyphicon-sound-dolby            { &:before { content: \"\\e190\"; } }\n.glyphicon-sound-5-1              { &:before { content: \"\\e191\"; } }\n.glyphicon-sound-6-1              { &:before { content: \"\\e192\"; } }\n.glyphicon-sound-7-1              { &:before { content: \"\\e193\"; } }\n.glyphicon-copyright-mark         { &:before { content: \"\\e194\"; } }\n.glyphicon-registration-mark      { &:before { content: \"\\e195\"; } }\n.glyphicon-cloud-download         { &:before { content: \"\\e197\"; } }\n.glyphicon-cloud-upload           { &:before { content: \"\\e198\"; } }\n.glyphicon-tree-conifer           { &:before { content: \"\\e199\"; } }\n.glyphicon-tree-deciduous         { &:before { content: \"\\e200\"; } }\n","//\n// Scaffolding\n// --------------------------------------------------\n\n\n// Reset the box-sizing\n//\n// Heads up! This reset may cause conflicts with some third-party widgets.\n// For recommendations on resolving such conflicts, see\n// http://getbootstrap.com/getting-started/#third-box-sizing\n* {\n  .box-sizing(border-box);\n}\n*:before,\n*:after {\n  .box-sizing(border-box);\n}\n\n\n// Body reset\n\nhtml {\n  font-size: 10px;\n  -webkit-tap-highlight-color: rgba(0,0,0,0);\n}\n\nbody {\n  font-family: @font-family-base;\n  font-size: @font-size-base;\n  line-height: @line-height-base;\n  color: @text-color;\n  background-color: @body-bg;\n}\n\n// Reset fonts for relevant elements\ninput,\nbutton,\nselect,\ntextarea {\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\n\n\n// Links\n\na {\n  color: @link-color;\n  text-decoration: none;\n\n  &:hover,\n  &:focus {\n    color: @link-hover-color;\n    text-decoration: underline;\n  }\n\n  &:focus {\n    .tab-focus();\n  }\n}\n\n\n// Figures\n//\n// We reset this here because previously Normalize had no `figure` margins. This\n// ensures we don't break anyone's use of the element.\n\nfigure {\n  margin: 0;\n}\n\n\n// Images\n\nimg {\n  vertical-align: middle;\n}\n\n// Responsive images (ensure images don't scale beyond their parents)\n.img-responsive {\n  .img-responsive();\n}\n\n// Rounded corners\n.img-rounded {\n  border-radius: @border-radius-large;\n}\n\n// Image thumbnails\n//\n// Heads up! This is mixin-ed into thumbnails.less for `.thumbnail`.\n.img-thumbnail {\n  padding: @thumbnail-padding;\n  line-height: @line-height-base;\n  background-color: @thumbnail-bg;\n  border: 1px solid @thumbnail-border;\n  border-radius: @thumbnail-border-radius;\n  .transition(all .2s ease-in-out);\n\n  // Keep them at most 100% wide\n  .img-responsive(inline-block);\n}\n\n// Perfect circle\n.img-circle {\n  border-radius: 50%; // set radius in percents\n}\n\n\n// Horizontal rules\n\nhr {\n  margin-top:    @line-height-computed;\n  margin-bottom: @line-height-computed;\n  border: 0;\n  border-top: 1px solid @hr-border;\n}\n\n\n// Only display content to screen readers\n//\n// See: http://a11yproject.com/posts/how-to-hide-content/\n\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  margin: -1px;\n  padding: 0;\n  overflow: hidden;\n  clip: rect(0,0,0,0);\n  border: 0;\n}\n\n// Use in conjunction with .sr-only to only display content when it's focused.\n// Useful for \"Skip to main content\" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n// Credit: HTML5 Boilerplate\n\n.sr-only-focusable {\n  &:active,\n  &:focus {\n    position: static;\n    width: auto;\n    height: auto;\n    margin: 0;\n    overflow: visible;\n    clip: auto;\n  }\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They will be removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n  -webkit-animation: @animation;\n       -o-animation: @animation;\n          animation: @animation;\n}\n.animation-name(@name) {\n  -webkit-animation-name: @name;\n          animation-name: @name;\n}\n.animation-duration(@duration) {\n  -webkit-animation-duration: @duration;\n          animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n  -webkit-animation-timing-function: @timing-function;\n          animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n  -webkit-animation-delay: @delay;\n          animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n  -webkit-animation-iteration-count: @iteration-count;\n          animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n  -webkit-animation-direction: @direction;\n          animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n  -webkit-animation-fill-mode: @fill-mode;\n          animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility){\n  -webkit-backface-visibility: @visibility;\n     -moz-backface-visibility: @visibility;\n          backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n  -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n          box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n  -webkit-box-sizing: @boxmodel;\n     -moz-box-sizing: @boxmodel;\n          box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n  -webkit-column-count: @column-count;\n     -moz-column-count: @column-count;\n          column-count: @column-count;\n  -webkit-column-gap: @column-gap;\n     -moz-column-gap: @column-gap;\n          column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n  word-wrap: break-word;\n  -webkit-hyphens: @mode;\n     -moz-hyphens: @mode;\n      -ms-hyphens: @mode; // IE10+\n       -o-hyphens: @mode;\n          hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n  &::-moz-placeholder           { color: @color;   // Firefox\n                                  opacity: 1; } // See https://github.com/twbs/bootstrap/pull/11526\n  &:-ms-input-placeholder       { color: @color; } // Internet Explorer 10+\n  &::-webkit-input-placeholder  { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n  -webkit-transform: scale(@ratio);\n      -ms-transform: scale(@ratio); // IE9 only\n       -o-transform: scale(@ratio);\n          transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n  -webkit-transform: scale(@ratioX, @ratioY);\n      -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n       -o-transform: scale(@ratioX, @ratioY);\n          transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n  -webkit-transform: scaleX(@ratio);\n      -ms-transform: scaleX(@ratio); // IE9 only\n       -o-transform: scaleX(@ratio);\n          transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n  -webkit-transform: scaleY(@ratio);\n      -ms-transform: scaleY(@ratio); // IE9 only\n       -o-transform: scaleY(@ratio);\n          transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n  -webkit-transform: skewX(@x) skewY(@y);\n      -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n       -o-transform: skewX(@x) skewY(@y);\n          transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n  -webkit-transform: translate(@x, @y);\n      -ms-transform: translate(@x, @y); // IE9 only\n       -o-transform: translate(@x, @y);\n          transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n  -webkit-transform: translate3d(@x, @y, @z);\n          transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n  -webkit-transform: rotate(@degrees);\n      -ms-transform: rotate(@degrees); // IE9 only\n       -o-transform: rotate(@degrees);\n          transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n  -webkit-transform: rotateX(@degrees);\n      -ms-transform: rotateX(@degrees); // IE9 only\n       -o-transform: rotateX(@degrees);\n          transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n  -webkit-transform: rotateY(@degrees);\n      -ms-transform: rotateY(@degrees); // IE9 only\n       -o-transform: rotateY(@degrees);\n          transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n  -webkit-perspective: @perspective;\n     -moz-perspective: @perspective;\n          perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n  -webkit-perspective-origin: @perspective;\n     -moz-perspective-origin: @perspective;\n          perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n  -webkit-transform-origin: @origin;\n     -moz-transform-origin: @origin;\n      -ms-transform-origin: @origin; // IE9 only\n          transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n  -webkit-transition: @transition;\n       -o-transition: @transition;\n          transition: @transition;\n}\n.transition-property(@transition-property) {\n  -webkit-transition-property: @transition-property;\n          transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n  -webkit-transition-delay: @transition-delay;\n          transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n  -webkit-transition-duration: @transition-duration;\n          transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n  -webkit-transition-timing-function: @timing-function;\n          transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n  -webkit-transition: -webkit-transform @transition;\n     -moz-transition: -moz-transform @transition;\n       -o-transition: -o-transform @transition;\n          transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n  -webkit-user-select: @select;\n     -moz-user-select: @select;\n      -ms-user-select: @select; // IE10+\n          user-select: @select;\n}\n","// WebKit-style focus\n\n.tab-focus() {\n  // Default\n  outline: thin dotted;\n  // WebKit\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n","// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n.img-responsive(@display: block) {\n  display: @display;\n  width: 100% \\9; // Force IE10 and below to size SVG images correctly\n  max-width: 100%; // Part 1: Set a maximum relative to the parent\n  height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching\n}\n\n\n// Retina image\n//\n// Short retina mixin for setting background-image and -size. Note that the\n// spelling of `min--moz-device-pixel-ratio` is intentional.\n.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) {\n  background-image: url(\"@{file-1x}\");\n\n  @media\n  only screen and (-webkit-min-device-pixel-ratio: 2),\n  only screen and (   min--moz-device-pixel-ratio: 2),\n  only screen and (     -o-min-device-pixel-ratio: 2/1),\n  only screen and (        min-device-pixel-ratio: 2),\n  only screen and (                min-resolution: 192dpi),\n  only screen and (                min-resolution: 2dppx) {\n    background-image: url(\"@{file-2x}\");\n    background-size: @width-1x @height-1x;\n  }\n}\n","//\n// Typography\n// --------------------------------------------------\n\n\n// Headings\n// -------------------------\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n  font-family: @headings-font-family;\n  font-weight: @headings-font-weight;\n  line-height: @headings-line-height;\n  color: @headings-color;\n\n  small,\n  .small {\n    font-weight: normal;\n    line-height: 1;\n    color: @headings-small-color;\n  }\n}\n\nh1, .h1,\nh2, .h2,\nh3, .h3 {\n  margin-top: @line-height-computed;\n  margin-bottom: (@line-height-computed / 2);\n\n  small,\n  .small {\n    font-size: 65%;\n  }\n}\nh4, .h4,\nh5, .h5,\nh6, .h6 {\n  margin-top: (@line-height-computed / 2);\n  margin-bottom: (@line-height-computed / 2);\n\n  small,\n  .small {\n    font-size: 75%;\n  }\n}\n\nh1, .h1 { font-size: @font-size-h1; }\nh2, .h2 { font-size: @font-size-h2; }\nh3, .h3 { font-size: @font-size-h3; }\nh4, .h4 { font-size: @font-size-h4; }\nh5, .h5 { font-size: @font-size-h5; }\nh6, .h6 { font-size: @font-size-h6; }\n\n\n// Body text\n// -------------------------\n\np {\n  margin: 0 0 (@line-height-computed / 2);\n}\n\n.lead {\n  margin-bottom: @line-height-computed;\n  font-size: floor((@font-size-base * 1.15));\n  font-weight: 300;\n  line-height: 1.4;\n\n  @media (min-width: @screen-sm-min) {\n    font-size: (@font-size-base * 1.5);\n  }\n}\n\n\n// Emphasis & misc\n// -------------------------\n\n// Ex: (12px small font / 14px base font) * 100% = about 85%\nsmall,\n.small {\n  font-size: floor((100% * @font-size-small / @font-size-base));\n}\n\n// Undo browser default styling\ncite {\n  font-style: normal;\n}\n\nmark,\n.mark {\n  background-color: @state-warning-bg;\n  padding: .2em;\n}\n\n// Alignment\n.text-left           { text-align: left; }\n.text-right          { text-align: right; }\n.text-center         { text-align: center; }\n.text-justify        { text-align: justify; }\n.text-nowrap         { white-space: nowrap; }\n\n// Transformation\n.text-lowercase      { text-transform: lowercase; }\n.text-uppercase      { text-transform: uppercase; }\n.text-capitalize     { text-transform: capitalize; }\n\n// Contextual colors\n.text-muted {\n  color: @text-muted;\n}\n.text-primary {\n  .text-emphasis-variant(@brand-primary);\n}\n.text-success {\n  .text-emphasis-variant(@state-success-text);\n}\n.text-info {\n  .text-emphasis-variant(@state-info-text);\n}\n.text-warning {\n  .text-emphasis-variant(@state-warning-text);\n}\n.text-danger {\n  .text-emphasis-variant(@state-danger-text);\n}\n\n// Contextual backgrounds\n// For now we'll leave these alongside the text classes until v4 when we can\n// safely shift things around (per SemVer rules).\n.bg-primary {\n  // Given the contrast here, this is the only class to have its color inverted\n  // automatically.\n  color: #fff;\n  .bg-variant(@brand-primary);\n}\n.bg-success {\n  .bg-variant(@state-success-bg);\n}\n.bg-info {\n  .bg-variant(@state-info-bg);\n}\n.bg-warning {\n  .bg-variant(@state-warning-bg);\n}\n.bg-danger {\n  .bg-variant(@state-danger-bg);\n}\n\n\n// Page header\n// -------------------------\n\n.page-header {\n  padding-bottom: ((@line-height-computed / 2) - 1);\n  margin: (@line-height-computed * 2) 0 @line-height-computed;\n  border-bottom: 1px solid @page-header-border-color;\n}\n\n\n// Lists\n// -------------------------\n\n// Unordered and Ordered lists\nul,\nol {\n  margin-top: 0;\n  margin-bottom: (@line-height-computed / 2);\n  ul,\n  ol {\n    margin-bottom: 0;\n  }\n}\n\n// List options\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n  .list-unstyled();\n  margin-left: -5px;\n\n  > li {\n    display: inline-block;\n    padding-left: 5px;\n    padding-right: 5px;\n  }\n}\n\n// Description Lists\ndl {\n  margin-top: 0; // Remove browser default\n  margin-bottom: @line-height-computed;\n}\ndt,\ndd {\n  line-height: @line-height-base;\n}\ndt {\n  font-weight: bold;\n}\ndd {\n  margin-left: 0; // Undo browser default\n}\n\n// Horizontal description lists\n//\n// Defaults to being stacked without any of the below styles applied, until the\n// grid breakpoint is reached (default of ~768px).\n\n.dl-horizontal {\n  dd {\n    &:extend(.clearfix all); // Clear the floated `dt` if an empty `dd` is present\n  }\n\n  @media (min-width: @grid-float-breakpoint) {\n    dt {\n      float: left;\n      width: (@dl-horizontal-offset - 20);\n      clear: left;\n      text-align: right;\n      .text-overflow();\n    }\n    dd {\n      margin-left: @dl-horizontal-offset;\n    }\n  }\n}\n\n\n// Misc\n// -------------------------\n\n// Abbreviations and acronyms\nabbr[title],\n// Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257\nabbr[data-original-title] {\n  cursor: help;\n  border-bottom: 1px dotted @abbr-border-color;\n}\n.initialism {\n  font-size: 90%;\n  text-transform: uppercase;\n}\n\n// Blockquotes\nblockquote {\n  padding: (@line-height-computed / 2) @line-height-computed;\n  margin: 0 0 @line-height-computed;\n  font-size: @blockquote-font-size;\n  border-left: 5px solid @blockquote-border-color;\n\n  p,\n  ul,\n  ol {\n    &:last-child {\n      margin-bottom: 0;\n    }\n  }\n\n  // Note: Deprecated small and .small as of v3.1.0\n  // Context: https://github.com/twbs/bootstrap/issues/11660\n  footer,\n  small,\n  .small {\n    display: block;\n    font-size: 80%; // back to default font-size\n    line-height: @line-height-base;\n    color: @blockquote-small-color;\n\n    &:before {\n      content: '\\2014 \\00A0'; // em dash, nbsp\n    }\n  }\n}\n\n// Opposite alignment of blockquote\n//\n// Heads up: `blockquote.pull-right` has been deprecated as of v3.1.0.\n.blockquote-reverse,\nblockquote.pull-right {\n  padding-right: 15px;\n  padding-left: 0;\n  border-right: 5px solid @blockquote-border-color;\n  border-left: 0;\n  text-align: right;\n\n  // Account for citation\n  footer,\n  small,\n  .small {\n    &:before { content: ''; }\n    &:after {\n      content: '\\00A0 \\2014'; // nbsp, em dash\n    }\n  }\n}\n\n// Quotes\nblockquote:before,\nblockquote:after {\n  content: \"\";\n}\n\n// Addresses\naddress {\n  margin-bottom: @line-height-computed;\n  font-style: normal;\n  line-height: @line-height-base;\n}\n","// Typography\n\n.text-emphasis-variant(@color) {\n  color: @color;\n  a&:hover {\n    color: darken(@color, 10%);\n  }\n}\n","// Contextual backgrounds\n\n.bg-variant(@color) {\n  background-color: @color;\n  a&:hover {\n    background-color: darken(@color, 10%);\n  }\n}\n","// Text overflow\n// Requires inline-block or block for proper styling\n\n.text-overflow() {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n","//\n// Code (inline and block)\n// --------------------------------------------------\n\n\n// Inline and block code styles\ncode,\nkbd,\npre,\nsamp {\n  font-family: @font-family-monospace;\n}\n\n// Inline code\ncode {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: @code-color;\n  background-color: @code-bg;\n  border-radius: @border-radius-base;\n}\n\n// User input typically entered via keyboard\nkbd {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: @kbd-color;\n  background-color: @kbd-bg;\n  border-radius: @border-radius-small;\n  box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);\n\n  kbd {\n    padding: 0;\n    font-size: 100%;\n    box-shadow: none;\n  }\n}\n\n// Blocks of code\npre {\n  display: block;\n  padding: ((@line-height-computed - 1) / 2);\n  margin: 0 0 (@line-height-computed / 2);\n  font-size: (@font-size-base - 1); // 14px to 13px\n  line-height: @line-height-base;\n  word-break: break-all;\n  word-wrap: break-word;\n  color: @pre-color;\n  background-color: @pre-bg;\n  border: 1px solid @pre-border-color;\n  border-radius: @border-radius-base;\n\n  // Account for some code outputs that place code tags in pre tags\n  code {\n    padding: 0;\n    font-size: inherit;\n    color: inherit;\n    white-space: pre-wrap;\n    background-color: transparent;\n    border-radius: 0;\n  }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n  max-height: @pre-scrollable-max-height;\n  overflow-y: scroll;\n}\n","//\n// Grid system\n// --------------------------------------------------\n\n\n// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n.container {\n  .container-fixed();\n\n  @media (min-width: @screen-sm-min) {\n    width: @container-sm;\n  }\n  @media (min-width: @screen-md-min) {\n    width: @container-md;\n  }\n  @media (min-width: @screen-lg-min) {\n    width: @container-lg;\n  }\n}\n\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but without any defined\n// width for fluid, full width layouts.\n\n.container-fluid {\n  .container-fixed();\n}\n\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n.row {\n  .make-row();\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n.make-grid-columns();\n\n\n// Extra small grid\n//\n// Columns, offsets, pushes, and pulls for extra small devices like\n// smartphones.\n\n.make-grid(xs);\n\n\n// Small grid\n//\n// Columns, offsets, pushes, and pulls for the small device range, from phones\n// to tablets.\n\n@media (min-width: @screen-sm-min) {\n  .make-grid(sm);\n}\n\n\n// Medium grid\n//\n// Columns, offsets, pushes, and pulls for the desktop device range.\n\n@media (min-width: @screen-md-min) {\n  .make-grid(md);\n}\n\n\n// Large grid\n//\n// Columns, offsets, pushes, and pulls for the large desktop device range.\n\n@media (min-width: @screen-lg-min) {\n  .make-grid(lg);\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n// Centered container element\n.container-fixed(@gutter: @grid-gutter-width) {\n  margin-right: auto;\n  margin-left: auto;\n  padding-left:  (@gutter / 2);\n  padding-right: (@gutter / 2);\n  &:extend(.clearfix all);\n}\n\n// Creates a wrapper for a series of columns\n.make-row(@gutter: @grid-gutter-width) {\n  margin-left:  (@gutter / -2);\n  margin-right: (@gutter / -2);\n  &:extend(.clearfix all);\n}\n\n// Generate the extra small columns\n.make-xs-column(@columns; @gutter: @grid-gutter-width) {\n  position: relative;\n  float: left;\n  width: percentage((@columns / @grid-columns));\n  min-height: 1px;\n  padding-left:  (@gutter / 2);\n  padding-right: (@gutter / 2);\n}\n.make-xs-column-offset(@columns) {\n  margin-left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-push(@columns) {\n  left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-pull(@columns) {\n  right: percentage((@columns / @grid-columns));\n}\n\n// Generate the small columns\n.make-sm-column(@columns; @gutter: @grid-gutter-width) {\n  position: relative;\n  min-height: 1px;\n  padding-left:  (@gutter / 2);\n  padding-right: (@gutter / 2);\n\n  @media (min-width: @screen-sm-min) {\n    float: left;\n    width: percentage((@columns / @grid-columns));\n  }\n}\n.make-sm-column-offset(@columns) {\n  @media (min-width: @screen-sm-min) {\n    margin-left: percentage((@columns / @grid-columns));\n  }\n}\n.make-sm-column-push(@columns) {\n  @media (min-width: @screen-sm-min) {\n    left: percentage((@columns / @grid-columns));\n  }\n}\n.make-sm-column-pull(@columns) {\n  @media (min-width: @screen-sm-min) {\n    right: percentage((@columns / @grid-columns));\n  }\n}\n\n// Generate the medium columns\n.make-md-column(@columns; @gutter: @grid-gutter-width) {\n  position: relative;\n  min-height: 1px;\n  padding-left:  (@gutter / 2);\n  padding-right: (@gutter / 2);\n\n  @media (min-width: @screen-md-min) {\n    float: left;\n    width: percentage((@columns / @grid-columns));\n  }\n}\n.make-md-column-offset(@columns) {\n  @media (min-width: @screen-md-min) {\n    margin-left: percentage((@columns / @grid-columns));\n  }\n}\n.make-md-column-push(@columns) {\n  @media (min-width: @screen-md-min) {\n    left: percentage((@columns / @grid-columns));\n  }\n}\n.make-md-column-pull(@columns) {\n  @media (min-width: @screen-md-min) {\n    right: percentage((@columns / @grid-columns));\n  }\n}\n\n// Generate the large columns\n.make-lg-column(@columns; @gutter: @grid-gutter-width) {\n  position: relative;\n  min-height: 1px;\n  padding-left:  (@gutter / 2);\n  padding-right: (@gutter / 2);\n\n  @media (min-width: @screen-lg-min) {\n    float: left;\n    width: percentage((@columns / @grid-columns));\n  }\n}\n.make-lg-column-offset(@columns) {\n  @media (min-width: @screen-lg-min) {\n    margin-left: percentage((@columns / @grid-columns));\n  }\n}\n.make-lg-column-push(@columns) {\n  @media (min-width: @screen-lg-min) {\n    left: percentage((@columns / @grid-columns));\n  }\n}\n.make-lg-column-pull(@columns) {\n  @media (min-width: @screen-lg-min) {\n    right: percentage((@columns / @grid-columns));\n  }\n}\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `@grid-columns`.\n\n.make-grid-columns() {\n  // Common styles for all sizes of grid columns, widths 1-12\n  .col(@index) when (@index = 1) { // initial\n    @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n    .col((@index + 1), @item);\n  }\n  .col(@index, @list) when (@index =< @grid-columns) { // general; \"=<\" isn't a typo\n    @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n    .col((@index + 1), ~\"@{list}, @{item}\");\n  }\n  .col(@index, @list) when (@index > @grid-columns) { // terminal\n    @{list} {\n      position: relative;\n      // Prevent columns from collapsing when empty\n      min-height: 1px;\n      // Inner gutter via padding\n      padding-left:  (@grid-gutter-width / 2);\n      padding-right: (@grid-gutter-width / 2);\n    }\n  }\n  .col(1); // kickstart it\n}\n\n.float-grid-columns(@class) {\n  .col(@index) when (@index = 1) { // initial\n    @item: ~\".col-@{class}-@{index}\";\n    .col((@index + 1), @item);\n  }\n  .col(@index, @list) when (@index =< @grid-columns) { // general\n    @item: ~\".col-@{class}-@{index}\";\n    .col((@index + 1), ~\"@{list}, @{item}\");\n  }\n  .col(@index, @list) when (@index > @grid-columns) { // terminal\n    @{list} {\n      float: left;\n    }\n  }\n  .col(1); // kickstart it\n}\n\n.calc-grid-column(@index, @class, @type) when (@type = width) and (@index > 0) {\n  .col-@{class}-@{index} {\n    width: percentage((@index / @grid-columns));\n  }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index > 0) {\n  .col-@{class}-push-@{index} {\n    left: percentage((@index / @grid-columns));\n  }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index = 0) {\n  .col-@{class}-push-0 {\n    left: auto;\n  }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index > 0) {\n  .col-@{class}-pull-@{index} {\n    right: percentage((@index / @grid-columns));\n  }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index = 0) {\n  .col-@{class}-pull-0 {\n    right: auto;\n  }\n}\n.calc-grid-column(@index, @class, @type) when (@type = offset) {\n  .col-@{class}-offset-@{index} {\n    margin-left: percentage((@index / @grid-columns));\n  }\n}\n\n// Basic looping in LESS\n.loop-grid-columns(@index, @class, @type) when (@index >= 0) {\n  .calc-grid-column(@index, @class, @type);\n  // next iteration\n  .loop-grid-columns((@index - 1), @class, @type);\n}\n\n// Create grid for specific class\n.make-grid(@class) {\n  .float-grid-columns(@class);\n  .loop-grid-columns(@grid-columns, @class, width);\n  .loop-grid-columns(@grid-columns, @class, pull);\n  .loop-grid-columns(@grid-columns, @class, push);\n  .loop-grid-columns(@grid-columns, @class, offset);\n}\n","//\n// Tables\n// --------------------------------------------------\n\n\ntable {\n  background-color: @table-bg;\n}\nth {\n  text-align: left;\n}\n\n\n// Baseline styles\n\n.table {\n  width: 100%;\n  max-width: 100%;\n  margin-bottom: @line-height-computed;\n  // Cells\n  > thead,\n  > tbody,\n  > tfoot {\n    > tr {\n      > th,\n      > td {\n        padding: @table-cell-padding;\n        line-height: @line-height-base;\n        vertical-align: top;\n        border-top: 1px solid @table-border-color;\n      }\n    }\n  }\n  // Bottom align for column headings\n  > thead > tr > th {\n    vertical-align: bottom;\n    border-bottom: 2px solid @table-border-color;\n  }\n  // Remove top border from thead by default\n  > caption + thead,\n  > colgroup + thead,\n  > thead:first-child {\n    > tr:first-child {\n      > th,\n      > td {\n        border-top: 0;\n      }\n    }\n  }\n  // Account for multiple tbody instances\n  > tbody + tbody {\n    border-top: 2px solid @table-border-color;\n  }\n\n  // Nesting\n  .table {\n    background-color: @body-bg;\n  }\n}\n\n\n// Condensed table w/ half padding\n\n.table-condensed {\n  > thead,\n  > tbody,\n  > tfoot {\n    > tr {\n      > th,\n      > td {\n        padding: @table-condensed-cell-padding;\n      }\n    }\n  }\n}\n\n\n// Bordered version\n//\n// Add borders all around the table and between all the columns.\n\n.table-bordered {\n  border: 1px solid @table-border-color;\n  > thead,\n  > tbody,\n  > tfoot {\n    > tr {\n      > th,\n      > td {\n        border: 1px solid @table-border-color;\n      }\n    }\n  }\n  > thead > tr {\n    > th,\n    > td {\n      border-bottom-width: 2px;\n    }\n  }\n}\n\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n  > tbody > tr:nth-child(odd) {\n    > td,\n    > th {\n      background-color: @table-bg-accent;\n    }\n  }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n  > tbody > tr:hover {\n    > td,\n    > th {\n      background-color: @table-bg-hover;\n    }\n  }\n}\n\n\n// Table cell sizing\n//\n// Reset default table behavior\n\ntable col[class*=\"col-\"] {\n  position: static; // Prevent border hiding in Firefox and IE9/10 (see https://github.com/twbs/bootstrap/issues/11623)\n  float: none;\n  display: table-column;\n}\ntable {\n  td,\n  th {\n    &[class*=\"col-\"] {\n      position: static; // Prevent border hiding in Firefox and IE9/10 (see https://github.com/twbs/bootstrap/issues/11623)\n      float: none;\n      display: table-cell;\n    }\n  }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n// Generate the contextual variants\n.table-row-variant(active; @table-bg-active);\n.table-row-variant(success; @state-success-bg);\n.table-row-variant(info; @state-info-bg);\n.table-row-variant(warning; @state-warning-bg);\n.table-row-variant(danger; @state-danger-bg);\n\n\n// Responsive tables\n//\n// Wrap your tables in `.table-responsive` and we'll make them mobile friendly\n// by enabling horizontal scrolling. Only applies <768px. Everything above that\n// will display normally.\n\n.table-responsive {\n  @media screen and (max-width: @screen-xs-max) {\n    width: 100%;\n    margin-bottom: (@line-height-computed * 0.75);\n    overflow-y: hidden;\n    overflow-x: auto;\n    -ms-overflow-style: -ms-autohiding-scrollbar;\n    border: 1px solid @table-border-color;\n    -webkit-overflow-scrolling: touch;\n\n    // Tighten up spacing\n    > .table {\n      margin-bottom: 0;\n\n      // Ensure the content doesn't wrap\n      > thead,\n      > tbody,\n      > tfoot {\n        > tr {\n          > th,\n          > td {\n            white-space: nowrap;\n          }\n        }\n      }\n    }\n\n    // Special overrides for the bordered tables\n    > .table-bordered {\n      border: 0;\n\n      // Nuke the appropriate borders so that the parent can handle them\n      > thead,\n      > tbody,\n      > tfoot {\n        > tr {\n          > th:first-child,\n          > td:first-child {\n            border-left: 0;\n          }\n          > th:last-child,\n          > td:last-child {\n            border-right: 0;\n          }\n        }\n      }\n\n      // Only nuke the last row's bottom-border in `tbody` and `tfoot` since\n      // chances are there will be only one `tr` in a `thead` and that would\n      // remove the border altogether.\n      > tbody,\n      > tfoot {\n        > tr:last-child {\n          > th,\n          > td {\n            border-bottom: 0;\n          }\n        }\n      }\n\n    }\n  }\n}\n","// Tables\n\n.table-row-variant(@state; @background) {\n  // Exact selectors below required to override `.table-striped` and prevent\n  // inheritance to nested tables.\n  .table > thead > tr,\n  .table > tbody > tr,\n  .table > tfoot > tr {\n    > td.@{state},\n    > th.@{state},\n    &.@{state} > td,\n    &.@{state} > th {\n      background-color: @background;\n    }\n  }\n\n  // Hover states for `.table-hover`\n  // Note: this is not available for cells or rows within `thead` or `tfoot`.\n  .table-hover > tbody > tr {\n    > td.@{state}:hover,\n    > th.@{state}:hover,\n    &.@{state}:hover > td,\n    &:hover > .@{state},\n    &.@{state}:hover > th {\n      background-color: darken(@background, 5%);\n    }\n  }\n}\n","//\n// Forms\n// --------------------------------------------------\n\n\n// Normalize non-controls\n//\n// Restyle and baseline non-control form elements.\n\nfieldset {\n  padding: 0;\n  margin: 0;\n  border: 0;\n  // Chrome and Firefox set a `min-width: min-content;` on fieldsets,\n  // so we reset that to ensure it behaves more like a standard block element.\n  // See https://github.com/twbs/bootstrap/issues/12359.\n  min-width: 0;\n}\n\nlegend {\n  display: block;\n  width: 100%;\n  padding: 0;\n  margin-bottom: @line-height-computed;\n  font-size: (@font-size-base * 1.5);\n  line-height: inherit;\n  color: @legend-color;\n  border: 0;\n  border-bottom: 1px solid @legend-border-color;\n}\n\nlabel {\n  display: inline-block;\n  max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141)\n  margin-bottom: 5px;\n  font-weight: bold;\n}\n\n\n// Normalize form controls\n//\n// While most of our form styles require extra classes, some basic normalization\n// is required to ensure optimum display with or without those classes to better\n// address browser inconsistencies.\n\n// Override content-box in Normalize (* isn't specific enough)\ninput[type=\"search\"] {\n  .box-sizing(border-box);\n}\n\n// Position radios and checkboxes better\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  margin: 4px 0 0;\n  margin-top: 1px \\9; // IE8-9\n  line-height: normal;\n}\n\n// Set the height of file controls to match text inputs\ninput[type=\"file\"] {\n  display: block;\n}\n\n// Make range inputs behave like textual form controls\ninput[type=\"range\"] {\n  display: block;\n  width: 100%;\n}\n\n// Make multiple select elements height not fixed\nselect[multiple],\nselect[size] {\n  height: auto;\n}\n\n// Focus for file, radio, and checkbox\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n  .tab-focus();\n}\n\n// Adjust output element\noutput {\n  display: block;\n  padding-top: (@padding-base-vertical + 1);\n  font-size: @font-size-base;\n  line-height: @line-height-base;\n  color: @input-color;\n}\n\n\n// Common form controls\n//\n// Shared size and type resets for form controls. Apply `.form-control` to any\n// of the following form controls:\n//\n// select\n// textarea\n// input[type=\"text\"]\n// input[type=\"password\"]\n// input[type=\"datetime\"]\n// input[type=\"datetime-local\"]\n// input[type=\"date\"]\n// input[type=\"month\"]\n// input[type=\"time\"]\n// input[type=\"week\"]\n// input[type=\"number\"]\n// input[type=\"email\"]\n// input[type=\"url\"]\n// input[type=\"search\"]\n// input[type=\"tel\"]\n// input[type=\"color\"]\n\n.form-control {\n  display: block;\n  width: 100%;\n  height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)\n  padding: @padding-base-vertical @padding-base-horizontal;\n  font-size: @font-size-base;\n  line-height: @line-height-base;\n  color: @input-color;\n  background-color: @input-bg;\n  background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n  border: 1px solid @input-border;\n  border-radius: @input-border-radius;\n  .box-shadow(inset 0 1px 1px rgba(0,0,0,.075));\n  .transition(~\"border-color ease-in-out .15s, box-shadow ease-in-out .15s\");\n\n  // Customize the `:focus` state to imitate native WebKit styles.\n  .form-control-focus();\n\n  // Placeholder\n  .placeholder();\n\n  // Disabled and read-only inputs\n  //\n  // HTML5 says that controls under a fieldset > legend:first-child won't be\n  // disabled if the fieldset is disabled. Due to implementation difficulty, we\n  // don't honor that edge case; we style them as disabled anyway.\n  &[disabled],\n  &[readonly],\n  fieldset[disabled] & {\n    cursor: not-allowed;\n    background-color: @input-bg-disabled;\n    opacity: 1; // iOS fix for unreadable disabled content\n  }\n\n  // Reset height for `textarea`s\n  textarea& {\n    height: auto;\n  }\n}\n\n\n// Search inputs in iOS\n//\n// This overrides the extra rounded corners on search inputs in iOS so that our\n// `.form-control` class can properly style them. Note that this cannot simply\n// be added to `.form-control` as it's not specific enough. For details, see\n// https://github.com/twbs/bootstrap/issues/11586.\n\ninput[type=\"search\"] {\n  -webkit-appearance: none;\n}\n\n\n// Special styles for iOS temporal inputs\n//\n// In Mobile Safari, setting `display: block` on temporal inputs causes the\n// text within the input to become vertically misaligned.\n// As a workaround, we set a pixel line-height that matches the\n// given height of the input. Since this fucks up everything else, we have to\n// appropriately reset it for Internet Explorer and the size variations.\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n  line-height: @input-height-base;\n  // IE8+ misaligns the text within date inputs, so we reset\n  line-height: @line-height-base ~\"\\0\";\n\n  &.input-sm {\n    line-height: @input-height-small;\n  }\n  &.input-lg {\n    line-height: @input-height-large;\n  }\n}\n\n\n// Form groups\n//\n// Designed to help with the organization and spacing of vertical forms. For\n// horizontal forms, use the predefined grid classes.\n\n.form-group {\n  margin-bottom: 15px;\n}\n\n\n// Checkboxes and radios\n//\n// Indent the labels to position radios/checkboxes as hanging controls.\n\n.radio,\n.checkbox {\n  position: relative;\n  display: block;\n  min-height: @line-height-computed; // clear the floating input if there is no label text\n  margin-top: 10px;\n  margin-bottom: 10px;\n\n  label {\n    padding-left: 20px;\n    margin-bottom: 0;\n    font-weight: normal;\n    cursor: pointer;\n  }\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n  position: absolute;\n  margin-left: -20px;\n  margin-top: 4px \\9;\n}\n\n.radio + .radio,\n.checkbox + .checkbox {\n  margin-top: -5px; // Move up sibling radios or checkboxes for tighter spacing\n}\n\n// Radios and checkboxes on same line\n.radio-inline,\n.checkbox-inline {\n  display: inline-block;\n  padding-left: 20px;\n  margin-bottom: 0;\n  vertical-align: middle;\n  font-weight: normal;\n  cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n  margin-top: 0;\n  margin-left: 10px; // space out consecutive inline controls\n}\n\n// Apply same disabled cursor tweak as for inputs\n// Some special care is needed because <label>s don't inherit their parent's `cursor`.\n//\n// Note: Neither radios nor checkboxes can be readonly.\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  &[disabled],\n  &.disabled,\n  fieldset[disabled] & {\n    cursor: not-allowed;\n  }\n}\n// These classes are used directly on <label>s\n.radio-inline,\n.checkbox-inline {\n  &.disabled,\n  fieldset[disabled] & {\n    cursor: not-allowed;\n  }\n}\n// These classes are used on elements with <label> descendants\n.radio,\n.checkbox {\n  &.disabled,\n  fieldset[disabled] & {\n    label {\n      cursor: not-allowed;\n    }\n  }\n}\n\n\n// Static form control text\n//\n// Apply class to a `p` element to make any string of text align with labels in\n// a horizontal form layout.\n\n.form-control-static {\n  // Size it appropriately next to real form controls\n  padding-top: (@padding-base-vertical + 1);\n  padding-bottom: (@padding-base-vertical + 1);\n  // Remove default margin from `p`\n  margin-bottom: 0;\n\n  &.input-lg,\n  &.input-sm {\n    padding-left: 0;\n    padding-right: 0;\n  }\n}\n\n\n// Form control sizing\n//\n// Build on `.form-control` with modifier classes to decrease or increase the\n// height and font-size of form controls.\n\n.input-sm {\n  .input-size(@input-height-small; @padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n\n.input-lg {\n  .input-size(@input-height-large; @padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);\n}\n\n\n// Form control feedback states\n//\n// Apply contextual and semantic states to individual form controls.\n\n.has-feedback {\n  // Enable absolute positioning\n  position: relative;\n\n  // Ensure icons don't overlap text\n  .form-control {\n    padding-right: (@input-height-base * 1.25);\n  }\n}\n// Feedback icon (requires .glyphicon classes)\n.form-control-feedback {\n  position: absolute;\n  top: (@line-height-computed + 5); // Height of the `label` and its margin\n  right: 0;\n  z-index: 2; // Ensure icon is above input groups\n  display: block;\n  width: @input-height-base;\n  height: @input-height-base;\n  line-height: @input-height-base;\n  text-align: center;\n}\n.input-lg + .form-control-feedback {\n  width: @input-height-large;\n  height: @input-height-large;\n  line-height: @input-height-large;\n}\n.input-sm + .form-control-feedback {\n  width: @input-height-small;\n  height: @input-height-small;\n  line-height: @input-height-small;\n}\n\n// Feedback states\n.has-success {\n  .form-control-validation(@state-success-text; @state-success-text; @state-success-bg);\n}\n.has-warning {\n  .form-control-validation(@state-warning-text; @state-warning-text; @state-warning-bg);\n}\n.has-error {\n  .form-control-validation(@state-danger-text; @state-danger-text; @state-danger-bg);\n}\n\n\n// Reposition feedback icon if label is hidden with \"screenreader only\" state\n.has-feedback label.sr-only ~ .form-control-feedback {\n  top: 0;\n}\n\n\n// Help text\n//\n// Apply to any element you wish to create light text for placement immediately\n// below a form control. Use for general help, formatting, or instructional text.\n\n.help-block {\n  display: block; // account for any element using help-block\n  margin-top: 5px;\n  margin-bottom: 10px;\n  color: lighten(@text-color, 25%); // lighten the text some for contrast\n}\n\n\n\n// Inline forms\n//\n// Make forms appear inline(-block) by adding the `.form-inline` class. Inline\n// forms begin stacked on extra small (mobile) devices and then go inline when\n// viewports reach <768px.\n//\n// Requires wrapping inputs and labels with `.form-group` for proper display of\n// default HTML form controls and our custom form controls (e.g., input groups).\n//\n// Heads up! This is mixin-ed into `.navbar-form` in navbars.less.\n\n.form-inline {\n\n  // Kick in the inline\n  @media (min-width: @screen-sm-min) {\n    // Inline-block all the things for \"inline\"\n    .form-group {\n      display: inline-block;\n      margin-bottom: 0;\n      vertical-align: middle;\n    }\n\n    // In navbar-form, allow folks to *not* use `.form-group`\n    .form-control {\n      display: inline-block;\n      width: auto; // Prevent labels from stacking above inputs in `.form-group`\n      vertical-align: middle;\n    }\n\n    .input-group {\n      display: inline-table;\n      vertical-align: middle;\n\n      .input-group-addon,\n      .input-group-btn,\n      .form-control {\n        width: auto;\n      }\n    }\n\n    // Input groups need that 100% width though\n    .input-group > .form-control {\n      width: 100%;\n    }\n\n    .control-label {\n      margin-bottom: 0;\n      vertical-align: middle;\n    }\n\n    // Remove default margin on radios/checkboxes that were used for stacking, and\n    // then undo the floating of radios and checkboxes to match (which also avoids\n    // a bug in WebKit: https://github.com/twbs/bootstrap/issues/1969).\n    .radio,\n    .checkbox {\n      display: inline-block;\n      margin-top: 0;\n      margin-bottom: 0;\n      vertical-align: middle;\n\n      label {\n        padding-left: 0;\n      }\n    }\n    .radio input[type=\"radio\"],\n    .checkbox input[type=\"checkbox\"] {\n      position: relative;\n      margin-left: 0;\n    }\n\n    // Validation states\n    //\n    // Reposition the icon because it's now within a grid column and columns have\n    // `position: relative;` on them. Also accounts for the grid gutter padding.\n    .has-feedback .form-control-feedback {\n      top: 0;\n    }\n  }\n}\n\n\n// Horizontal forms\n//\n// Horizontal forms are built on grid classes and allow you to create forms with\n// labels on the left and inputs on the right.\n\n.form-horizontal {\n\n  // Consistent vertical alignment of radios and checkboxes\n  //\n  // Labels also get some reset styles, but that is scoped to a media query below.\n  .radio,\n  .checkbox,\n  .radio-inline,\n  .checkbox-inline {\n    margin-top: 0;\n    margin-bottom: 0;\n    padding-top: (@padding-base-vertical + 1); // Default padding plus a border\n  }\n  // Account for padding we're adding to ensure the alignment and of help text\n  // and other content below items\n  .radio,\n  .checkbox {\n    min-height: (@line-height-computed + (@padding-base-vertical + 1));\n  }\n\n  // Make form groups behave like rows\n  .form-group {\n    .make-row();\n  }\n\n  // Reset spacing and right align labels, but scope to media queries so that\n  // labels on narrow viewports stack the same as a default form example.\n  @media (min-width: @screen-sm-min) {\n    .control-label {\n      text-align: right;\n      margin-bottom: 0;\n      padding-top: (@padding-base-vertical + 1); // Default padding plus a border\n    }\n  }\n\n  // Validation states\n  //\n  // Reposition the icon because it's now within a grid column and columns have\n  // `position: relative;` on them. Also accounts for the grid gutter padding.\n  .has-feedback .form-control-feedback {\n    top: 0;\n    right: (@grid-gutter-width / 2);\n  }\n\n  // Form group sizes\n  //\n  // Quick utility class for applying `.input-lg` and `.input-sm` styles to the\n  // inputs and labels within a `.form-group`.\n  .form-group-lg {\n    @media (min-width: @screen-sm-min) {\n      .control-label {\n        padding-top: ((@padding-large-vertical * @line-height-large) + 1);\n      }\n    }\n    .form-control {\n      &:extend(.input-lg);\n    }\n  }\n  .form-group-sm {\n    @media (min-width: @screen-sm-min) {\n      .control-label {\n        padding-top: (@padding-small-vertical + 1);\n      }\n    }\n    .form-control {\n      &:extend(.input-sm);\n    }\n  }\n}\n","// Form validation states\n//\n// Used in forms.less to generate the form validation CSS for warnings, errors,\n// and successes.\n\n.form-control-validation(@text-color: #555; @border-color: #ccc; @background-color: #f5f5f5) {\n  // Color the label and help text\n  .help-block,\n  .control-label,\n  .radio,\n  .checkbox,\n  .radio-inline,\n  .checkbox-inline  {\n    color: @text-color;\n  }\n  // Set the border and box shadow on specific inputs to match\n  .form-control {\n    border-color: @border-color;\n    .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work\n    &:focus {\n      border-color: darken(@border-color, 10%);\n      @shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten(@border-color, 20%);\n      .box-shadow(@shadow);\n    }\n  }\n  // Set validation states also for addons\n  .input-group-addon {\n    color: @text-color;\n    border-color: @border-color;\n    background-color: @background-color;\n  }\n  // Optional feedback icon\n  .form-control-feedback {\n    color: @text-color;\n  }\n}\n\n\n// Form control focus state\n//\n// Generate a customized focus state and for any input with the specified color,\n// which defaults to the `@input-border-focus` variable.\n//\n// We highly encourage you to not customize the default value, but instead use\n// this to tweak colors on an as-needed basis. This aesthetic change is based on\n// WebKit's default styles, but applicable to a wider range of browsers. Its\n// usability and accessibility should be taken into account with any change.\n//\n// Example usage: change the default blue border and shadow to white for better\n// contrast against a dark gray background.\n.form-control-focus(@color: @input-border-focus) {\n  @color-rgba: rgba(red(@color), green(@color), blue(@color), .6);\n  &:focus {\n    border-color: @color;\n    outline: 0;\n    .box-shadow(~\"inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px @{color-rgba}\");\n  }\n}\n\n// Form control sizing\n//\n// Relative text size, padding, and border-radii changes for form controls. For\n// horizontal sizing, wrap controls in the predefined grid classes. `<select>`\n// element gets special love because it's special, and that's a fact!\n.input-size(@input-height; @padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n  height: @input-height;\n  padding: @padding-vertical @padding-horizontal;\n  font-size: @font-size;\n  line-height: @line-height;\n  border-radius: @border-radius;\n\n  select& {\n    height: @input-height;\n    line-height: @input-height;\n  }\n\n  textarea&,\n  select[multiple]& {\n    height: auto;\n  }\n}\n","//\n// Buttons\n// --------------------------------------------------\n\n\n// Base styles\n// --------------------------------------------------\n\n.btn {\n  display: inline-block;\n  margin-bottom: 0; // For input.btn\n  font-weight: @btn-font-weight;\n  text-align: center;\n  vertical-align: middle;\n  cursor: pointer;\n  background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n  border: 1px solid transparent;\n  white-space: nowrap;\n  .button-size(@padding-base-vertical; @padding-base-horizontal; @font-size-base; @line-height-base; @border-radius-base);\n  .user-select(none);\n\n  &,\n  &:active,\n  &.active {\n    &:focus {\n      .tab-focus();\n    }\n  }\n\n  &:hover,\n  &:focus {\n    color: @btn-default-color;\n    text-decoration: none;\n  }\n\n  &:active,\n  &.active {\n    outline: 0;\n    background-image: none;\n    .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n  }\n\n  &.disabled,\n  &[disabled],\n  fieldset[disabled] & {\n    cursor: not-allowed;\n    pointer-events: none; // Future-proof disabling of clicks\n    .opacity(.65);\n    .box-shadow(none);\n  }\n}\n\n\n// Alternate buttons\n// --------------------------------------------------\n\n.btn-default {\n  .button-variant(@btn-default-color; @btn-default-bg; @btn-default-border);\n}\n.btn-primary {\n  .button-variant(@btn-primary-color; @btn-primary-bg; @btn-primary-border);\n}\n// Success appears as green\n.btn-success {\n  .button-variant(@btn-success-color; @btn-success-bg; @btn-success-border);\n}\n// Info appears as blue-green\n.btn-info {\n  .button-variant(@btn-info-color; @btn-info-bg; @btn-info-border);\n}\n// Warning appears as orange\n.btn-warning {\n  .button-variant(@btn-warning-color; @btn-warning-bg; @btn-warning-border);\n}\n// Danger and error appear as red\n.btn-danger {\n  .button-variant(@btn-danger-color; @btn-danger-bg; @btn-danger-border);\n}\n\n\n// Link buttons\n// -------------------------\n\n// Make a button look and behave like a link\n.btn-link {\n  color: @link-color;\n  font-weight: normal;\n  cursor: pointer;\n  border-radius: 0;\n\n  &,\n  &:active,\n  &[disabled],\n  fieldset[disabled] & {\n    background-color: transparent;\n    .box-shadow(none);\n  }\n  &,\n  &:hover,\n  &:focus,\n  &:active {\n    border-color: transparent;\n  }\n  &:hover,\n  &:focus {\n    color: @link-hover-color;\n    text-decoration: underline;\n    background-color: transparent;\n  }\n  &[disabled],\n  fieldset[disabled] & {\n    &:hover,\n    &:focus {\n      color: @btn-link-disabled-color;\n      text-decoration: none;\n    }\n  }\n}\n\n\n// Button Sizes\n// --------------------------------------------------\n\n.btn-lg {\n  // line-height: ensure even-numbered height of button next to large input\n  .button-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);\n}\n.btn-sm {\n  // line-height: ensure proper height of button next to small input\n  .button-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n.btn-xs {\n  .button-size(@padding-xs-vertical; @padding-xs-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n\n\n// Block button\n// --------------------------------------------------\n\n.btn-block {\n  display: block;\n  width: 100%;\n}\n\n// Vertically space out multiple block buttons\n.btn-block + .btn-block {\n  margin-top: 5px;\n}\n\n// Specificity overrides\ninput[type=\"submit\"],\ninput[type=\"reset\"],\ninput[type=\"button\"] {\n  &.btn-block {\n    width: 100%;\n  }\n}\n","// Button variants\n//\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n\n.button-variant(@color; @background; @border) {\n  color: @color;\n  background-color: @background;\n  border-color: @border;\n\n  &:hover,\n  &:focus,\n  &:active,\n  &.active,\n  .open > .dropdown-toggle& {\n    color: @color;\n    background-color: darken(@background, 10%);\n        border-color: darken(@border, 12%);\n  }\n  &:active,\n  &.active,\n  .open > .dropdown-toggle& {\n    background-image: none;\n  }\n  &.disabled,\n  &[disabled],\n  fieldset[disabled] & {\n    &,\n    &:hover,\n    &:focus,\n    &:active,\n    &.active {\n      background-color: @background;\n          border-color: @border;\n    }\n  }\n\n  .badge {\n    color: @background;\n    background-color: @color;\n  }\n}\n\n// Button sizes\n.button-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n  padding: @padding-vertical @padding-horizontal;\n  font-size: @font-size;\n  line-height: @line-height;\n  border-radius: @border-radius;\n}\n","// Opacity\n\n.opacity(@opacity) {\n  opacity: @opacity;\n  // IE8 filter\n  @opacity-ie: (@opacity * 100);\n  filter: ~\"alpha(opacity=@{opacity-ie})\";\n}\n","//\n// Component animations\n// --------------------------------------------------\n\n// Heads up!\n//\n// We don't use the `.opacity()` mixin here since it causes a bug with text\n// fields in IE7-8. Source: https://github.com/twbs/bootstrap/pull/3552.\n\n.fade {\n  opacity: 0;\n  .transition(opacity .15s linear);\n  &.in {\n    opacity: 1;\n  }\n}\n\n.collapse {\n  display: none;\n\n  &.in      { display: block; }\n  tr&.in    { display: table-row; }\n  tbody&.in { display: table-row-group; }\n}\n\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  .transition(height .35s ease);\n}\n","//\n// Dropdown menus\n// --------------------------------------------------\n\n\n// Dropdown arrow/caret\n.caret {\n  display: inline-block;\n  width: 0;\n  height: 0;\n  margin-left: 2px;\n  vertical-align: middle;\n  border-top:   @caret-width-base solid;\n  border-right: @caret-width-base solid transparent;\n  border-left:  @caret-width-base solid transparent;\n}\n\n// The dropdown wrapper (div)\n.dropdown {\n  position: relative;\n}\n\n// Prevent the focus on the dropdown toggle when closing dropdowns\n.dropdown-toggle:focus {\n  outline: 0;\n}\n\n// The dropdown menu (ul)\n.dropdown-menu {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: @zindex-dropdown;\n  display: none; // none by default, but block on \"open\" of the menu\n  float: left;\n  min-width: 160px;\n  padding: 5px 0;\n  margin: 2px 0 0; // override default ul\n  list-style: none;\n  font-size: @font-size-base;\n  text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)\n  background-color: @dropdown-bg;\n  border: 1px solid @dropdown-fallback-border; // IE8 fallback\n  border: 1px solid @dropdown-border;\n  border-radius: @border-radius-base;\n  .box-shadow(0 6px 12px rgba(0,0,0,.175));\n  background-clip: padding-box;\n\n  // Aligns the dropdown menu to right\n  //\n  // Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]`\n  &.pull-right {\n    right: 0;\n    left: auto;\n  }\n\n  // Dividers (basically an hr) within the dropdown\n  .divider {\n    .nav-divider(@dropdown-divider-bg);\n  }\n\n  // Links within the dropdown menu\n  > li > a {\n    display: block;\n    padding: 3px 20px;\n    clear: both;\n    font-weight: normal;\n    line-height: @line-height-base;\n    color: @dropdown-link-color;\n    white-space: nowrap; // prevent links from randomly breaking onto new lines\n  }\n}\n\n// Hover/Focus state\n.dropdown-menu > li > a {\n  &:hover,\n  &:focus {\n    text-decoration: none;\n    color: @dropdown-link-hover-color;\n    background-color: @dropdown-link-hover-bg;\n  }\n}\n\n// Active state\n.dropdown-menu > .active > a {\n  &,\n  &:hover,\n  &:focus {\n    color: @dropdown-link-active-color;\n    text-decoration: none;\n    outline: 0;\n    background-color: @dropdown-link-active-bg;\n  }\n}\n\n// Disabled state\n//\n// Gray out text and ensure the hover/focus state remains gray\n\n.dropdown-menu > .disabled > a {\n  &,\n  &:hover,\n  &:focus {\n    color: @dropdown-link-disabled-color;\n  }\n}\n// Nuke hover/focus effects\n.dropdown-menu > .disabled > a {\n  &:hover,\n  &:focus {\n    text-decoration: none;\n    background-color: transparent;\n    background-image: none; // Remove CSS gradient\n    .reset-filter();\n    cursor: not-allowed;\n  }\n}\n\n// Open state for the dropdown\n.open {\n  // Show the menu\n  > .dropdown-menu {\n    display: block;\n  }\n\n  // Remove the outline when :focus is triggered\n  > a {\n    outline: 0;\n  }\n}\n\n// Menu positioning\n//\n// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown\n// menu with the parent.\n.dropdown-menu-right {\n  left: auto; // Reset the default from `.dropdown-menu`\n  right: 0;\n}\n// With v3, we enabled auto-flipping if you have a dropdown within a right\n// aligned nav component. To enable the undoing of that, we provide an override\n// to restore the default dropdown menu alignment.\n//\n// This is only for left-aligning a dropdown menu within a `.navbar-right` or\n// `.pull-right` nav component.\n.dropdown-menu-left {\n  left: 0;\n  right: auto;\n}\n\n// Dropdown section headers\n.dropdown-header {\n  display: block;\n  padding: 3px 20px;\n  font-size: @font-size-small;\n  line-height: @line-height-base;\n  color: @dropdown-header-color;\n  white-space: nowrap; // as with > li > a\n}\n\n// Backdrop to catch body clicks on mobile, etc.\n.dropdown-backdrop {\n  position: fixed;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  top: 0;\n  z-index: (@zindex-dropdown - 10);\n}\n\n// Right aligned dropdowns\n.pull-right > .dropdown-menu {\n  right: 0;\n  left: auto;\n}\n\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\n//\n// Just add .dropup after the standard .dropdown class and you're set, bro.\n// TODO: abstract this so that the navbar fixed styles are not placed here?\n\n.dropup,\n.navbar-fixed-bottom .dropdown {\n  // Reverse the caret\n  .caret {\n    border-top: 0;\n    border-bottom: @caret-width-base solid;\n    content: \"\";\n  }\n  // Different positioning for bottom up menu\n  .dropdown-menu {\n    top: auto;\n    bottom: 100%;\n    margin-bottom: 1px;\n  }\n}\n\n\n// Component alignment\n//\n// Reiterate per navbar.less and the modified component alignment there.\n\n@media (min-width: @grid-float-breakpoint) {\n  .navbar-right {\n    .dropdown-menu {\n      .dropdown-menu-right();\n    }\n    // Necessary for overrides of the default right aligned menu.\n    // Will remove come v4 in all likelihood.\n    .dropdown-menu-left {\n      .dropdown-menu-left();\n    }\n  }\n}\n\n","// Horizontal dividers\n//\n// Dividers (basically an hr) within dropdowns and nav lists\n\n.nav-divider(@color: #e5e5e5) {\n  height: 1px;\n  margin: ((@line-height-computed / 2) - 1) 0;\n  overflow: hidden;\n  background-color: @color;\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n  filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n","//\n// Button groups\n// --------------------------------------------------\n\n// Make the div behave like a button\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle; // match .btn alignment given font-size hack above\n  > .btn {\n    position: relative;\n    float: left;\n    // Bring the \"active\" button to the front\n    &:hover,\n    &:focus,\n    &:active,\n    &.active {\n      z-index: 2;\n    }\n    &:focus {\n      // Remove focus outline when dropdown JS adds it after closing the menu\n      outline: 0;\n    }\n  }\n}\n\n// Prevent double borders when buttons are next to each other\n.btn-group {\n  .btn + .btn,\n  .btn + .btn-group,\n  .btn-group + .btn,\n  .btn-group + .btn-group {\n    margin-left: -1px;\n  }\n}\n\n// Optional: Group multiple button groups together for a toolbar\n.btn-toolbar {\n  margin-left: -5px; // Offset the first child's margin\n  &:extend(.clearfix all);\n\n  .btn-group,\n  .input-group {\n    float: left;\n  }\n  > .btn,\n  > .btn-group,\n  > .input-group {\n    margin-left: 5px;\n  }\n}\n\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n  border-radius: 0;\n}\n\n// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match\n.btn-group > .btn:first-child {\n  margin-left: 0;\n  &:not(:last-child):not(.dropdown-toggle) {\n    .border-right-radius(0);\n  }\n}\n// Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu immediately after it\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n  .border-left-radius(0);\n}\n\n// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group)\n.btn-group > .btn-group {\n  float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group > .btn-group:first-child {\n  > .btn:last-child,\n  > .dropdown-toggle {\n    .border-right-radius(0);\n  }\n}\n.btn-group > .btn-group:last-child > .btn:first-child {\n  .border-left-radius(0);\n}\n\n// On active and open, don't show outline\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n  outline: 0;\n}\n\n\n// Sizing\n//\n// Remix the default button sizing classes into new ones for easier manipulation.\n\n.btn-group-xs > .btn { &:extend(.btn-xs); }\n.btn-group-sm > .btn { &:extend(.btn-sm); }\n.btn-group-lg > .btn { &:extend(.btn-lg); }\n\n\n// Split button dropdowns\n// ----------------------\n\n// Give the line between buttons some depth\n.btn-group > .btn + .dropdown-toggle {\n  padding-left: 8px;\n  padding-right: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n  padding-left: 12px;\n  padding-right: 12px;\n}\n\n// The clickable button for toggling the menu\n// Remove the gradient and set the same inset shadow as the :active state\n.btn-group.open .dropdown-toggle {\n  .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n\n  // Show no shadow for `.btn-link` since it has no other button styles.\n  &.btn-link {\n    .box-shadow(none);\n  }\n}\n\n\n// Reposition the caret\n.btn .caret {\n  margin-left: 0;\n}\n// Carets in other button sizes\n.btn-lg .caret {\n  border-width: @caret-width-large @caret-width-large 0;\n  border-bottom-width: 0;\n}\n// Upside down carets for .dropup\n.dropup .btn-lg .caret {\n  border-width: 0 @caret-width-large @caret-width-large;\n}\n\n\n// Vertical button groups\n// ----------------------\n\n.btn-group-vertical {\n  > .btn,\n  > .btn-group,\n  > .btn-group > .btn {\n    display: block;\n    float: none;\n    width: 100%;\n    max-width: 100%;\n  }\n\n  // Clear floats so dropdown menus can be properly placed\n  > .btn-group {\n    &:extend(.clearfix all);\n    > .btn {\n      float: none;\n    }\n  }\n\n  > .btn + .btn,\n  > .btn + .btn-group,\n  > .btn-group + .btn,\n  > .btn-group + .btn-group {\n    margin-top: -1px;\n    margin-left: 0;\n  }\n}\n\n.btn-group-vertical > .btn {\n  &:not(:first-child):not(:last-child) {\n    border-radius: 0;\n  }\n  &:first-child:not(:last-child) {\n    border-top-right-radius: @border-radius-base;\n    .border-bottom-radius(0);\n  }\n  &:last-child:not(:first-child) {\n    border-bottom-left-radius: @border-radius-base;\n    .border-top-radius(0);\n  }\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) {\n  > .btn:last-child,\n  > .dropdown-toggle {\n    .border-bottom-radius(0);\n  }\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  .border-top-radius(0);\n}\n\n\n\n// Justified button groups\n// ----------------------\n\n.btn-group-justified {\n  display: table;\n  width: 100%;\n  table-layout: fixed;\n  border-collapse: separate;\n  > .btn,\n  > .btn-group {\n    float: none;\n    display: table-cell;\n    width: 1%;\n  }\n  > .btn-group .btn {\n    width: 100%;\n  }\n\n  > .btn-group .dropdown-menu {\n    left: auto;\n  }\n}\n\n\n// Checkbox and radio options\n//\n// In order to support the browser's form validation feedback, powered by the\n// `required` attribute, we have to \"hide\" the inputs via `opacity`. We cannot\n// use `display: none;` or `visibility: hidden;` as that also hides the popover.\n// This way, we ensure a DOM element is visible to position the popover from.\n//\n// See https://github.com/twbs/bootstrap/pull/12794 for more.\n\n[data-toggle=\"buttons\"] > .btn > input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn > input[type=\"checkbox\"] {\n  position: absolute;\n  z-index: -1;\n  .opacity(0);\n}\n","// Single side border-radius\n\n.border-top-radius(@radius) {\n  border-top-right-radius: @radius;\n   border-top-left-radius: @radius;\n}\n.border-right-radius(@radius) {\n  border-bottom-right-radius: @radius;\n     border-top-right-radius: @radius;\n}\n.border-bottom-radius(@radius) {\n  border-bottom-right-radius: @radius;\n   border-bottom-left-radius: @radius;\n}\n.border-left-radius(@radius) {\n  border-bottom-left-radius: @radius;\n     border-top-left-radius: @radius;\n}\n","//\n// Input groups\n// --------------------------------------------------\n\n// Base styles\n// -------------------------\n.input-group {\n  position: relative; // For dropdowns\n  display: table;\n  border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table\n\n  // Undo padding and float of grid classes\n  &[class*=\"col-\"] {\n    float: none;\n    padding-left: 0;\n    padding-right: 0;\n  }\n\n  .form-control {\n    // Ensure that the input is always above the *appended* addon button for\n    // proper border colors.\n    position: relative;\n    z-index: 2;\n\n    // IE9 fubars the placeholder attribute in text inputs and the arrows on\n    // select elements in input groups. To fix it, we float the input. Details:\n    // https://github.com/twbs/bootstrap/issues/11561#issuecomment-28936855\n    float: left;\n\n    width: 100%;\n    margin-bottom: 0;\n  }\n}\n\n// Sizing options\n//\n// Remix the default form control sizing classes into new ones for easier\n// manipulation.\n\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n  .input-lg();\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n  .input-sm();\n}\n\n\n// Display as table-cell\n// -------------------------\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n  display: table-cell;\n\n  &:not(:first-child):not(:last-child) {\n    border-radius: 0;\n  }\n}\n// Addon and addon wrapper for buttons\n.input-group-addon,\n.input-group-btn {\n  width: 1%;\n  white-space: nowrap;\n  vertical-align: middle; // Match the inputs\n}\n\n// Text input groups\n// -------------------------\n.input-group-addon {\n  padding: @padding-base-vertical @padding-base-horizontal;\n  font-size: @font-size-base;\n  font-weight: normal;\n  line-height: 1;\n  color: @input-color;\n  text-align: center;\n  background-color: @input-group-addon-bg;\n  border: 1px solid @input-group-addon-border-color;\n  border-radius: @border-radius-base;\n\n  // Sizing\n  &.input-sm {\n    padding: @padding-small-vertical @padding-small-horizontal;\n    font-size: @font-size-small;\n    border-radius: @border-radius-small;\n  }\n  &.input-lg {\n    padding: @padding-large-vertical @padding-large-horizontal;\n    font-size: @font-size-large;\n    border-radius: @border-radius-large;\n  }\n\n  // Nuke default margins from checkboxes and radios to vertically center within.\n  input[type=\"radio\"],\n  input[type=\"checkbox\"] {\n    margin-top: 0;\n  }\n}\n\n// Reset rounded corners\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n  .border-right-radius(0);\n}\n.input-group-addon:first-child {\n  border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n  .border-left-radius(0);\n}\n.input-group-addon:last-child {\n  border-left: 0;\n}\n\n// Button input groups\n// -------------------------\n.input-group-btn {\n  position: relative;\n  // Jankily prevent input button groups from wrapping with `white-space` and\n  // `font-size` in combination with `inline-block` on buttons.\n  font-size: 0;\n  white-space: nowrap;\n\n  // Negative margin for spacing, position for bringing hovered/focused/actived\n  // element above the siblings.\n  > .btn {\n    position: relative;\n    + .btn {\n      margin-left: -1px;\n    }\n    // Bring the \"active\" button to the front\n    &:hover,\n    &:focus,\n    &:active {\n      z-index: 2;\n    }\n  }\n\n  // Negative margin to only have a 1px border between the two\n  &:first-child {\n    > .btn,\n    > .btn-group {\n      margin-right: -1px;\n    }\n  }\n  &:last-child {\n    > .btn,\n    > .btn-group {\n      margin-left: -1px;\n    }\n  }\n}\n","//\n// Navs\n// --------------------------------------------------\n\n\n// Base class\n// --------------------------------------------------\n\n.nav {\n  margin-bottom: 0;\n  padding-left: 0; // Override default ul/ol\n  list-style: none;\n  &:extend(.clearfix all);\n\n  > li {\n    position: relative;\n    display: block;\n\n    > a {\n      position: relative;\n      display: block;\n      padding: @nav-link-padding;\n      &:hover,\n      &:focus {\n        text-decoration: none;\n        background-color: @nav-link-hover-bg;\n      }\n    }\n\n    // Disabled state sets text to gray and nukes hover/tab effects\n    &.disabled > a {\n      color: @nav-disabled-link-color;\n\n      &:hover,\n      &:focus {\n        color: @nav-disabled-link-hover-color;\n        text-decoration: none;\n        background-color: transparent;\n        cursor: not-allowed;\n      }\n    }\n  }\n\n  // Open dropdowns\n  .open > a {\n    &,\n    &:hover,\n    &:focus {\n      background-color: @nav-link-hover-bg;\n      border-color: @link-color;\n    }\n  }\n\n  // Nav dividers (deprecated with v3.0.1)\n  //\n  // This should have been removed in v3 with the dropping of `.nav-list`, but\n  // we missed it. We don't currently support this anywhere, but in the interest\n  // of maintaining backward compatibility in case you use it, it's deprecated.\n  .nav-divider {\n    .nav-divider();\n  }\n\n  // Prevent IE8 from misplacing imgs\n  //\n  // See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989\n  > li > a > img {\n    max-width: none;\n  }\n}\n\n\n// Tabs\n// -------------------------\n\n// Give the tabs something to sit on\n.nav-tabs {\n  border-bottom: 1px solid @nav-tabs-border-color;\n  > li {\n    float: left;\n    // Make the list-items overlay the bottom border\n    margin-bottom: -1px;\n\n    // Actual tabs (as links)\n    > a {\n      margin-right: 2px;\n      line-height: @line-height-base;\n      border: 1px solid transparent;\n      border-radius: @border-radius-base @border-radius-base 0 0;\n      &:hover {\n        border-color: @nav-tabs-link-hover-border-color @nav-tabs-link-hover-border-color @nav-tabs-border-color;\n      }\n    }\n\n    // Active state, and its :hover to override normal :hover\n    &.active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @nav-tabs-active-link-hover-color;\n        background-color: @nav-tabs-active-link-hover-bg;\n        border: 1px solid @nav-tabs-active-link-hover-border-color;\n        border-bottom-color: transparent;\n        cursor: default;\n      }\n    }\n  }\n  // pulling this in mainly for less shorthand\n  &.nav-justified {\n    .nav-justified();\n    .nav-tabs-justified();\n  }\n}\n\n\n// Pills\n// -------------------------\n.nav-pills {\n  > li {\n    float: left;\n\n    // Links rendered as pills\n    > a {\n      border-radius: @nav-pills-border-radius;\n    }\n    + li {\n      margin-left: 2px;\n    }\n\n    // Active state\n    &.active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @nav-pills-active-link-hover-color;\n        background-color: @nav-pills-active-link-hover-bg;\n      }\n    }\n  }\n}\n\n\n// Stacked pills\n.nav-stacked {\n  > li {\n    float: none;\n    + li {\n      margin-top: 2px;\n      margin-left: 0; // no need for this gap between nav items\n    }\n  }\n}\n\n\n// Nav variations\n// --------------------------------------------------\n\n// Justified nav links\n// -------------------------\n\n.nav-justified {\n  width: 100%;\n\n  > li {\n    float: none;\n    > a {\n      text-align: center;\n      margin-bottom: 5px;\n    }\n  }\n\n  > .dropdown .dropdown-menu {\n    top: auto;\n    left: auto;\n  }\n\n  @media (min-width: @screen-sm-min) {\n    > li {\n      display: table-cell;\n      width: 1%;\n      > a {\n        margin-bottom: 0;\n      }\n    }\n  }\n}\n\n// Move borders to anchors instead of bottom of list\n//\n// Mixin for adding on top the shared `.nav-justified` styles for our tabs\n.nav-tabs-justified {\n  border-bottom: 0;\n\n  > li > a {\n    // Override margin from .nav-tabs\n    margin-right: 0;\n    border-radius: @border-radius-base;\n  }\n\n  > .active > a,\n  > .active > a:hover,\n  > .active > a:focus {\n    border: 1px solid @nav-tabs-justified-link-border-color;\n  }\n\n  @media (min-width: @screen-sm-min) {\n    > li > a {\n      border-bottom: 1px solid @nav-tabs-justified-link-border-color;\n      border-radius: @border-radius-base @border-radius-base 0 0;\n    }\n    > .active > a,\n    > .active > a:hover,\n    > .active > a:focus {\n      border-bottom-color: @nav-tabs-justified-active-link-border-color;\n    }\n  }\n}\n\n\n// Tabbable tabs\n// -------------------------\n\n// Hide tabbable panes to start, show them when `.active`\n.tab-content {\n  > .tab-pane {\n    display: none;\n  }\n  > .active {\n    display: block;\n  }\n}\n\n\n// Dropdowns\n// -------------------------\n\n// Specific dropdowns\n.nav-tabs .dropdown-menu {\n  // make dropdown border overlap tab border\n  margin-top: -1px;\n  // Remove the top rounded corners here since there is a hard edge above the menu\n  .border-top-radius(0);\n}\n","//\n// Navbars\n// --------------------------------------------------\n\n\n// Wrapper and base class\n//\n// Provide a static navbar from which we expand to create full-width, fixed, and\n// other navbar variations.\n\n.navbar {\n  position: relative;\n  min-height: @navbar-height; // Ensure a navbar always shows (e.g., without a .navbar-brand in collapsed mode)\n  margin-bottom: @navbar-margin-bottom;\n  border: 1px solid transparent;\n\n  // Prevent floats from breaking the navbar\n  &:extend(.clearfix all);\n\n  @media (min-width: @grid-float-breakpoint) {\n    border-radius: @navbar-border-radius;\n  }\n}\n\n\n// Navbar heading\n//\n// Groups `.navbar-brand` and `.navbar-toggle` into a single component for easy\n// styling of responsive aspects.\n\n.navbar-header {\n  &:extend(.clearfix all);\n\n  @media (min-width: @grid-float-breakpoint) {\n    float: left;\n  }\n}\n\n\n// Navbar collapse (body)\n//\n// Group your navbar content into this for easy collapsing and expanding across\n// various device sizes. By default, this content is collapsed when <768px, but\n// will expand past that for a horizontal display.\n//\n// To start (on mobile devices) the navbar links, forms, and buttons are stacked\n// vertically and include a `max-height` to overflow in case you have too much\n// content for the user's viewport.\n\n.navbar-collapse {\n  overflow-x: visible;\n  padding-right: @navbar-padding-horizontal;\n  padding-left:  @navbar-padding-horizontal;\n  border-top: 1px solid transparent;\n  box-shadow: inset 0 1px 0 rgba(255,255,255,.1);\n  &:extend(.clearfix all);\n  -webkit-overflow-scrolling: touch;\n\n  &.in {\n    overflow-y: auto;\n  }\n\n  @media (min-width: @grid-float-breakpoint) {\n    width: auto;\n    border-top: 0;\n    box-shadow: none;\n\n    &.collapse {\n      display: block !important;\n      height: auto !important;\n      padding-bottom: 0; // Override default setting\n      overflow: visible !important;\n    }\n\n    &.in {\n      overflow-y: visible;\n    }\n\n    // Undo the collapse side padding for navbars with containers to ensure\n    // alignment of right-aligned contents.\n    .navbar-fixed-top &,\n    .navbar-static-top &,\n    .navbar-fixed-bottom & {\n      padding-left: 0;\n      padding-right: 0;\n    }\n  }\n}\n\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  .navbar-collapse {\n    max-height: @navbar-collapse-max-height;\n\n    @media (max-width: @screen-xs-min) and (orientation: landscape) {\n      max-height: 200px;\n    }\n  }\n}\n\n\n// Both navbar header and collapse\n//\n// When a container is present, change the behavior of the header and collapse.\n\n.container,\n.container-fluid {\n  > .navbar-header,\n  > .navbar-collapse {\n    margin-right: -@navbar-padding-horizontal;\n    margin-left:  -@navbar-padding-horizontal;\n\n    @media (min-width: @grid-float-breakpoint) {\n      margin-right: 0;\n      margin-left:  0;\n    }\n  }\n}\n\n\n//\n// Navbar alignment options\n//\n// Display the navbar across the entirety of the page or fixed it to the top or\n// bottom of the page.\n\n// Static top (unfixed, but 100% wide) navbar\n.navbar-static-top {\n  z-index: @zindex-navbar;\n  border-width: 0 0 1px;\n\n  @media (min-width: @grid-float-breakpoint) {\n    border-radius: 0;\n  }\n}\n\n// Fix the top/bottom navbars when screen real estate supports it\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  position: fixed;\n  right: 0;\n  left: 0;\n  z-index: @zindex-navbar-fixed;\n  .translate3d(0, 0, 0);\n\n  // Undo the rounded corners\n  @media (min-width: @grid-float-breakpoint) {\n    border-radius: 0;\n  }\n}\n.navbar-fixed-top {\n  top: 0;\n  border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n  bottom: 0;\n  margin-bottom: 0; // override .navbar defaults\n  border-width: 1px 0 0;\n}\n\n\n// Brand/project name\n\n.navbar-brand {\n  float: left;\n  padding: @navbar-padding-vertical @navbar-padding-horizontal;\n  font-size: @font-size-large;\n  line-height: @line-height-computed;\n  height: @navbar-height;\n\n  &:hover,\n  &:focus {\n    text-decoration: none;\n  }\n\n  @media (min-width: @grid-float-breakpoint) {\n    .navbar > .container &,\n    .navbar > .container-fluid & {\n      margin-left: -@navbar-padding-horizontal;\n    }\n  }\n}\n\n\n// Navbar toggle\n//\n// Custom button for toggling the `.navbar-collapse`, powered by the collapse\n// JavaScript plugin.\n\n.navbar-toggle {\n  position: relative;\n  float: right;\n  margin-right: @navbar-padding-horizontal;\n  padding: 9px 10px;\n  .navbar-vertical-align(34px);\n  background-color: transparent;\n  background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n  border: 1px solid transparent;\n  border-radius: @border-radius-base;\n\n  // We remove the `outline` here, but later compensate by attaching `:hover`\n  // styles to `:focus`.\n  &:focus {\n    outline: 0;\n  }\n\n  // Bars\n  .icon-bar {\n    display: block;\n    width: 22px;\n    height: 2px;\n    border-radius: 1px;\n  }\n  .icon-bar + .icon-bar {\n    margin-top: 4px;\n  }\n\n  @media (min-width: @grid-float-breakpoint) {\n    display: none;\n  }\n}\n\n\n// Navbar nav links\n//\n// Builds on top of the `.nav` components with its own modifier class to make\n// the nav the full height of the horizontal nav (above 768px).\n\n.navbar-nav {\n  margin: (@navbar-padding-vertical / 2) -@navbar-padding-horizontal;\n\n  > li > a {\n    padding-top:    10px;\n    padding-bottom: 10px;\n    line-height: @line-height-computed;\n  }\n\n  @media (max-width: @grid-float-breakpoint-max) {\n    // Dropdowns get custom display when collapsed\n    .open .dropdown-menu {\n      position: static;\n      float: none;\n      width: auto;\n      margin-top: 0;\n      background-color: transparent;\n      border: 0;\n      box-shadow: none;\n      > li > a,\n      .dropdown-header {\n        padding: 5px 15px 5px 25px;\n      }\n      > li > a {\n        line-height: @line-height-computed;\n        &:hover,\n        &:focus {\n          background-image: none;\n        }\n      }\n    }\n  }\n\n  // Uncollapse the nav\n  @media (min-width: @grid-float-breakpoint) {\n    float: left;\n    margin: 0;\n\n    > li {\n      float: left;\n      > a {\n        padding-top:    @navbar-padding-vertical;\n        padding-bottom: @navbar-padding-vertical;\n      }\n    }\n\n    &.navbar-right:last-child {\n      margin-right: -@navbar-padding-horizontal;\n    }\n  }\n}\n\n\n// Component alignment\n//\n// Repurpose the pull utilities as their own navbar utilities to avoid specificity\n// issues with parents and chaining. Only do this when the navbar is uncollapsed\n// though so that navbar contents properly stack and align in mobile.\n\n@media (min-width: @grid-float-breakpoint) {\n  .navbar-left  { .pull-left(); }\n  .navbar-right { .pull-right(); }\n}\n\n\n// Navbar form\n//\n// Extension of the `.form-inline` with some extra flavor for optimum display in\n// our navbars.\n\n.navbar-form {\n  margin-left: -@navbar-padding-horizontal;\n  margin-right: -@navbar-padding-horizontal;\n  padding: 10px @navbar-padding-horizontal;\n  border-top: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  @shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);\n  .box-shadow(@shadow);\n\n  // Mixin behavior for optimum display\n  .form-inline();\n\n  .form-group {\n    @media (max-width: @grid-float-breakpoint-max) {\n      margin-bottom: 5px;\n    }\n  }\n\n  // Vertically center in expanded, horizontal navbar\n  .navbar-vertical-align(@input-height-base);\n\n  // Undo 100% width for pull classes\n  @media (min-width: @grid-float-breakpoint) {\n    width: auto;\n    border: 0;\n    margin-left: 0;\n    margin-right: 0;\n    padding-top: 0;\n    padding-bottom: 0;\n    .box-shadow(none);\n\n    // Outdent the form if last child to line up with content down the page\n    &.navbar-right:last-child {\n      margin-right: -@navbar-padding-horizontal;\n    }\n  }\n}\n\n\n// Dropdown menus\n\n// Menu position and menu carets\n.navbar-nav > li > .dropdown-menu {\n  margin-top: 0;\n  .border-top-radius(0);\n}\n// Menu position and menu caret support for dropups via extra dropup class\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n  .border-bottom-radius(0);\n}\n\n\n// Buttons in navbars\n//\n// Vertically center a button within a navbar (when *not* in a form).\n\n.navbar-btn {\n  .navbar-vertical-align(@input-height-base);\n\n  &.btn-sm {\n    .navbar-vertical-align(@input-height-small);\n  }\n  &.btn-xs {\n    .navbar-vertical-align(22);\n  }\n}\n\n\n// Text in navbars\n//\n// Add a class to make any element properly align itself vertically within the navbars.\n\n.navbar-text {\n  .navbar-vertical-align(@line-height-computed);\n\n  @media (min-width: @grid-float-breakpoint) {\n    float: left;\n    margin-left: @navbar-padding-horizontal;\n    margin-right: @navbar-padding-horizontal;\n\n    // Outdent the form if last child to line up with content down the page\n    &.navbar-right:last-child {\n      margin-right: 0;\n    }\n  }\n}\n\n// Alternate navbars\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n  background-color: @navbar-default-bg;\n  border-color: @navbar-default-border;\n\n  .navbar-brand {\n    color: @navbar-default-brand-color;\n    &:hover,\n    &:focus {\n      color: @navbar-default-brand-hover-color;\n      background-color: @navbar-default-brand-hover-bg;\n    }\n  }\n\n  .navbar-text {\n    color: @navbar-default-color;\n  }\n\n  .navbar-nav {\n    > li > a {\n      color: @navbar-default-link-color;\n\n      &:hover,\n      &:focus {\n        color: @navbar-default-link-hover-color;\n        background-color: @navbar-default-link-hover-bg;\n      }\n    }\n    > .active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @navbar-default-link-active-color;\n        background-color: @navbar-default-link-active-bg;\n      }\n    }\n    > .disabled > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @navbar-default-link-disabled-color;\n        background-color: @navbar-default-link-disabled-bg;\n      }\n    }\n  }\n\n  .navbar-toggle {\n    border-color: @navbar-default-toggle-border-color;\n    &:hover,\n    &:focus {\n      background-color: @navbar-default-toggle-hover-bg;\n    }\n    .icon-bar {\n      background-color: @navbar-default-toggle-icon-bar-bg;\n    }\n  }\n\n  .navbar-collapse,\n  .navbar-form {\n    border-color: @navbar-default-border;\n  }\n\n  // Dropdown menu items\n  .navbar-nav {\n    // Remove background color from open dropdown\n    > .open > a {\n      &,\n      &:hover,\n      &:focus {\n        background-color: @navbar-default-link-active-bg;\n        color: @navbar-default-link-active-color;\n      }\n    }\n\n    @media (max-width: @grid-float-breakpoint-max) {\n      // Dropdowns get custom display when collapsed\n      .open .dropdown-menu {\n        > li > a {\n          color: @navbar-default-link-color;\n          &:hover,\n          &:focus {\n            color: @navbar-default-link-hover-color;\n            background-color: @navbar-default-link-hover-bg;\n          }\n        }\n        > .active > a {\n          &,\n          &:hover,\n          &:focus {\n            color: @navbar-default-link-active-color;\n            background-color: @navbar-default-link-active-bg;\n          }\n        }\n        > .disabled > a {\n          &,\n          &:hover,\n          &:focus {\n            color: @navbar-default-link-disabled-color;\n            background-color: @navbar-default-link-disabled-bg;\n          }\n        }\n      }\n    }\n  }\n\n\n  // Links in navbars\n  //\n  // Add a class to ensure links outside the navbar nav are colored correctly.\n\n  .navbar-link {\n    color: @navbar-default-link-color;\n    &:hover {\n      color: @navbar-default-link-hover-color;\n    }\n  }\n\n  .btn-link {\n    color: @navbar-default-link-color;\n    &:hover,\n    &:focus {\n      color: @navbar-default-link-hover-color;\n    }\n    &[disabled],\n    fieldset[disabled] & {\n      &:hover,\n      &:focus {\n        color: @navbar-default-link-disabled-color;\n      }\n    }\n  }\n}\n\n// Inverse navbar\n\n.navbar-inverse {\n  background-color: @navbar-inverse-bg;\n  border-color: @navbar-inverse-border;\n\n  .navbar-brand {\n    color: @navbar-inverse-brand-color;\n    &:hover,\n    &:focus {\n      color: @navbar-inverse-brand-hover-color;\n      background-color: @navbar-inverse-brand-hover-bg;\n    }\n  }\n\n  .navbar-text {\n    color: @navbar-inverse-color;\n  }\n\n  .navbar-nav {\n    > li > a {\n      color: @navbar-inverse-link-color;\n\n      &:hover,\n      &:focus {\n        color: @navbar-inverse-link-hover-color;\n        background-color: @navbar-inverse-link-hover-bg;\n      }\n    }\n    > .active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @navbar-inverse-link-active-color;\n        background-color: @navbar-inverse-link-active-bg;\n      }\n    }\n    > .disabled > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @navbar-inverse-link-disabled-color;\n        background-color: @navbar-inverse-link-disabled-bg;\n      }\n    }\n  }\n\n  // Darken the responsive nav toggle\n  .navbar-toggle {\n    border-color: @navbar-inverse-toggle-border-color;\n    &:hover,\n    &:focus {\n      background-color: @navbar-inverse-toggle-hover-bg;\n    }\n    .icon-bar {\n      background-color: @navbar-inverse-toggle-icon-bar-bg;\n    }\n  }\n\n  .navbar-collapse,\n  .navbar-form {\n    border-color: darken(@navbar-inverse-bg, 7%);\n  }\n\n  // Dropdowns\n  .navbar-nav {\n    > .open > a {\n      &,\n      &:hover,\n      &:focus {\n        background-color: @navbar-inverse-link-active-bg;\n        color: @navbar-inverse-link-active-color;\n      }\n    }\n\n    @media (max-width: @grid-float-breakpoint-max) {\n      // Dropdowns get custom display\n      .open .dropdown-menu {\n        > .dropdown-header {\n          border-color: @navbar-inverse-border;\n        }\n        .divider {\n          background-color: @navbar-inverse-border;\n        }\n        > li > a {\n          color: @navbar-inverse-link-color;\n          &:hover,\n          &:focus {\n            color: @navbar-inverse-link-hover-color;\n            background-color: @navbar-inverse-link-hover-bg;\n          }\n        }\n        > .active > a {\n          &,\n          &:hover,\n          &:focus {\n            color: @navbar-inverse-link-active-color;\n            background-color: @navbar-inverse-link-active-bg;\n          }\n        }\n        > .disabled > a {\n          &,\n          &:hover,\n          &:focus {\n            color: @navbar-inverse-link-disabled-color;\n            background-color: @navbar-inverse-link-disabled-bg;\n          }\n        }\n      }\n    }\n  }\n\n  .navbar-link {\n    color: @navbar-inverse-link-color;\n    &:hover {\n      color: @navbar-inverse-link-hover-color;\n    }\n  }\n\n  .btn-link {\n    color: @navbar-inverse-link-color;\n    &:hover,\n    &:focus {\n      color: @navbar-inverse-link-hover-color;\n    }\n    &[disabled],\n    fieldset[disabled] & {\n      &:hover,\n      &:focus {\n        color: @navbar-inverse-link-disabled-color;\n      }\n    }\n  }\n}\n","// Navbar vertical align\n//\n// Vertically center elements in the navbar.\n// Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin.\n\n.navbar-vertical-align(@element-height) {\n  margin-top: ((@navbar-height - @element-height) / 2);\n  margin-bottom: ((@navbar-height - @element-height) / 2);\n}\n","//\n// Utility classes\n// --------------------------------------------------\n\n\n// Floats\n// -------------------------\n\n.clearfix {\n  .clearfix();\n}\n.center-block {\n  .center-block();\n}\n.pull-right {\n  float: right !important;\n}\n.pull-left {\n  float: left !important;\n}\n\n\n// Toggling content\n// -------------------------\n\n// Note: Deprecated .hide in favor of .hidden or .sr-only (as appropriate) in v3.0.1\n.hide {\n  display: none !important;\n}\n.show {\n  display: block !important;\n}\n.invisible {\n  visibility: hidden;\n}\n.text-hide {\n  .text-hide();\n}\n\n\n// Hide from screenreaders and browsers\n//\n// Credit: HTML5 Boilerplate\n\n.hidden {\n  display: none !important;\n  visibility: hidden !important;\n}\n\n\n// For Affix plugin\n// -------------------------\n\n.affix {\n  position: fixed;\n  .translate3d(0, 0, 0);\n}\n","//\n// Breadcrumbs\n// --------------------------------------------------\n\n\n.breadcrumb {\n  padding: @breadcrumb-padding-vertical @breadcrumb-padding-horizontal;\n  margin-bottom: @line-height-computed;\n  list-style: none;\n  background-color: @breadcrumb-bg;\n  border-radius: @border-radius-base;\n\n  > li {\n    display: inline-block;\n\n    + li:before {\n      content: \"@{breadcrumb-separator}\\00a0\"; // Unicode space added since inline-block means non-collapsing white-space\n      padding: 0 5px;\n      color: @breadcrumb-color;\n    }\n  }\n\n  > .active {\n    color: @breadcrumb-active-color;\n  }\n}\n","//\n// Pagination (multiple pages)\n// --------------------------------------------------\n.pagination {\n  display: inline-block;\n  padding-left: 0;\n  margin: @line-height-computed 0;\n  border-radius: @border-radius-base;\n\n  > li {\n    display: inline; // Remove list-style and block-level defaults\n    > a,\n    > span {\n      position: relative;\n      float: left; // Collapse white-space\n      padding: @padding-base-vertical @padding-base-horizontal;\n      line-height: @line-height-base;\n      text-decoration: none;\n      color: @pagination-color;\n      background-color: @pagination-bg;\n      border: 1px solid @pagination-border;\n      margin-left: -1px;\n    }\n    &:first-child {\n      > a,\n      > span {\n        margin-left: 0;\n        .border-left-radius(@border-radius-base);\n      }\n    }\n    &:last-child {\n      > a,\n      > span {\n        .border-right-radius(@border-radius-base);\n      }\n    }\n  }\n\n  > li > a,\n  > li > span {\n    &:hover,\n    &:focus {\n      color: @pagination-hover-color;\n      background-color: @pagination-hover-bg;\n      border-color: @pagination-hover-border;\n    }\n  }\n\n  > .active > a,\n  > .active > span {\n    &,\n    &:hover,\n    &:focus {\n      z-index: 2;\n      color: @pagination-active-color;\n      background-color: @pagination-active-bg;\n      border-color: @pagination-active-border;\n      cursor: default;\n    }\n  }\n\n  > .disabled {\n    > span,\n    > span:hover,\n    > span:focus,\n    > a,\n    > a:hover,\n    > a:focus {\n      color: @pagination-disabled-color;\n      background-color: @pagination-disabled-bg;\n      border-color: @pagination-disabled-border;\n      cursor: not-allowed;\n    }\n  }\n}\n\n// Sizing\n// --------------------------------------------------\n\n// Large\n.pagination-lg {\n  .pagination-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @border-radius-large);\n}\n\n// Small\n.pagination-sm {\n  .pagination-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @border-radius-small);\n}\n","// Pagination\n\n.pagination-size(@padding-vertical; @padding-horizontal; @font-size; @border-radius) {\n  > li {\n    > a,\n    > span {\n      padding: @padding-vertical @padding-horizontal;\n      font-size: @font-size;\n    }\n    &:first-child {\n      > a,\n      > span {\n        .border-left-radius(@border-radius);\n      }\n    }\n    &:last-child {\n      > a,\n      > span {\n        .border-right-radius(@border-radius);\n      }\n    }\n  }\n}\n","//\n// Pager pagination\n// --------------------------------------------------\n\n\n.pager {\n  padding-left: 0;\n  margin: @line-height-computed 0;\n  list-style: none;\n  text-align: center;\n  &:extend(.clearfix all);\n  li {\n    display: inline;\n    > a,\n    > span {\n      display: inline-block;\n      padding: 5px 14px;\n      background-color: @pager-bg;\n      border: 1px solid @pager-border;\n      border-radius: @pager-border-radius;\n    }\n\n    > a:hover,\n    > a:focus {\n      text-decoration: none;\n      background-color: @pager-hover-bg;\n    }\n  }\n\n  .next {\n    > a,\n    > span {\n      float: right;\n    }\n  }\n\n  .previous {\n    > a,\n    > span {\n      float: left;\n    }\n  }\n\n  .disabled {\n    > a,\n    > a:hover,\n    > a:focus,\n    > span {\n      color: @pager-disabled-color;\n      background-color: @pager-bg;\n      cursor: not-allowed;\n    }\n  }\n\n}\n","//\n// Labels\n// --------------------------------------------------\n\n.label {\n  display: inline;\n  padding: .2em .6em .3em;\n  font-size: 75%;\n  font-weight: bold;\n  line-height: 1;\n  color: @label-color;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: .25em;\n\n  // Add hover effects, but only for links\n  a& {\n    &:hover,\n    &:focus {\n      color: @label-link-hover-color;\n      text-decoration: none;\n      cursor: pointer;\n    }\n  }\n\n  // Empty labels collapse automatically (not available in IE8)\n  &:empty {\n    display: none;\n  }\n\n  // Quick fix for labels in buttons\n  .btn & {\n    position: relative;\n    top: -1px;\n  }\n}\n\n// Colors\n// Contextual variations (linked labels get darker on :hover)\n\n.label-default {\n  .label-variant(@label-default-bg);\n}\n\n.label-primary {\n  .label-variant(@label-primary-bg);\n}\n\n.label-success {\n  .label-variant(@label-success-bg);\n}\n\n.label-info {\n  .label-variant(@label-info-bg);\n}\n\n.label-warning {\n  .label-variant(@label-warning-bg);\n}\n\n.label-danger {\n  .label-variant(@label-danger-bg);\n}\n","// Labels\n\n.label-variant(@color) {\n  background-color: @color;\n  \n  &[href] {\n    &:hover,\n    &:focus {\n      background-color: darken(@color, 10%);\n    }\n  }\n}\n","//\n// Badges\n// --------------------------------------------------\n\n\n// Base class\n.badge {\n  display: inline-block;\n  min-width: 10px;\n  padding: 3px 7px;\n  font-size: @font-size-small;\n  font-weight: @badge-font-weight;\n  color: @badge-color;\n  line-height: @badge-line-height;\n  vertical-align: baseline;\n  white-space: nowrap;\n  text-align: center;\n  background-color: @badge-bg;\n  border-radius: @badge-border-radius;\n\n  // Empty badges collapse automatically (not available in IE8)\n  &:empty {\n    display: none;\n  }\n\n  // Quick fix for badges in buttons\n  .btn & {\n    position: relative;\n    top: -1px;\n  }\n  .btn-xs & {\n    top: 0;\n    padding: 1px 5px;\n  }\n\n  // Hover state, but only for links\n  a& {\n    &:hover,\n    &:focus {\n      color: @badge-link-hover-color;\n      text-decoration: none;\n      cursor: pointer;\n    }\n  }\n\n  // Account for badges in navs\n  a.list-group-item.active > &,\n  .nav-pills > .active > a > & {\n    color: @badge-active-color;\n    background-color: @badge-active-bg;\n  }\n  .nav-pills > li > a > & {\n    margin-left: 3px;\n  }\n}\n","//\n// Jumbotron\n// --------------------------------------------------\n\n\n.jumbotron {\n  padding: @jumbotron-padding;\n  margin-bottom: @jumbotron-padding;\n  color: @jumbotron-color;\n  background-color: @jumbotron-bg;\n\n  h1,\n  .h1 {\n    color: @jumbotron-heading-color;\n  }\n  p {\n    margin-bottom: (@jumbotron-padding / 2);\n    font-size: @jumbotron-font-size;\n    font-weight: 200;\n  }\n\n  > hr {\n    border-top-color: darken(@jumbotron-bg, 10%);\n  }\n\n  .container & {\n    border-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container\n  }\n\n  .container {\n    max-width: 100%;\n  }\n\n  @media screen and (min-width: @screen-sm-min) {\n    padding-top:    (@jumbotron-padding * 1.6);\n    padding-bottom: (@jumbotron-padding * 1.6);\n\n    .container & {\n      padding-left:  (@jumbotron-padding * 2);\n      padding-right: (@jumbotron-padding * 2);\n    }\n\n    h1,\n    .h1 {\n      font-size: (@font-size-base * 4.5);\n    }\n  }\n}\n","//\n// Thumbnails\n// --------------------------------------------------\n\n\n// Mixin and adjust the regular image class\n.thumbnail {\n  display: block;\n  padding: @thumbnail-padding;\n  margin-bottom: @line-height-computed;\n  line-height: @line-height-base;\n  background-color: @thumbnail-bg;\n  border: 1px solid @thumbnail-border;\n  border-radius: @thumbnail-border-radius;\n  .transition(all .2s ease-in-out);\n\n  > img,\n  a > img {\n    &:extend(.img-responsive);\n    margin-left: auto;\n    margin-right: auto;\n  }\n\n  // Add a hover state for linked versions only\n  a&:hover,\n  a&:focus,\n  a&.active {\n    border-color: @link-color;\n  }\n\n  // Image captions\n  .caption {\n    padding: @thumbnail-caption-padding;\n    color: @thumbnail-caption-color;\n  }\n}\n","//\n// Alerts\n// --------------------------------------------------\n\n\n// Base styles\n// -------------------------\n\n.alert {\n  padding: @alert-padding;\n  margin-bottom: @line-height-computed;\n  border: 1px solid transparent;\n  border-radius: @alert-border-radius;\n\n  // Headings for larger alerts\n  h4 {\n    margin-top: 0;\n    // Specified for the h4 to prevent conflicts of changing @headings-color\n    color: inherit;\n  }\n  // Provide class for links that match alerts\n  .alert-link {\n    font-weight: @alert-link-font-weight;\n  }\n\n  // Improve alignment and spacing of inner content\n  > p,\n  > ul {\n    margin-bottom: 0;\n  }\n  > p + p {\n    margin-top: 5px;\n  }\n}\n\n// Dismissible alerts\n//\n// Expand the right padding and account for the close button's positioning.\n\n.alert-dismissable, // The misspelled .alert-dismissable was deprecated in 3.2.0.\n.alert-dismissible {\n  padding-right: (@alert-padding + 20);\n\n  // Adjust close link position\n  .close {\n    position: relative;\n    top: -2px;\n    right: -21px;\n    color: inherit;\n  }\n}\n\n// Alternate styles\n//\n// Generate contextual modifier classes for colorizing the alert.\n\n.alert-success {\n  .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text);\n}\n.alert-info {\n  .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text);\n}\n.alert-warning {\n  .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text);\n}\n.alert-danger {\n  .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text);\n}\n","// Alerts\n\n.alert-variant(@background; @border; @text-color) {\n  background-color: @background;\n  border-color: @border;\n  color: @text-color;\n\n  hr {\n    border-top-color: darken(@border, 5%);\n  }\n  .alert-link {\n    color: darken(@text-color, 10%);\n  }\n}\n","//\n// Progress bars\n// --------------------------------------------------\n\n\n// Bar animations\n// -------------------------\n\n// WebKit\n@-webkit-keyframes progress-bar-stripes {\n  from  { background-position: 40px 0; }\n  to    { background-position: 0 0; }\n}\n\n// Spec and IE10+\n@keyframes progress-bar-stripes {\n  from  { background-position: 40px 0; }\n  to    { background-position: 0 0; }\n}\n\n\n\n// Bar itself\n// -------------------------\n\n// Outer container\n.progress {\n  overflow: hidden;\n  height: @line-height-computed;\n  margin-bottom: @line-height-computed;\n  background-color: @progress-bg;\n  border-radius: @border-radius-base;\n  .box-shadow(inset 0 1px 2px rgba(0,0,0,.1));\n}\n\n// Bar of progress\n.progress-bar {\n  float: left;\n  width: 0%;\n  height: 100%;\n  font-size: @font-size-small;\n  line-height: @line-height-computed;\n  color: @progress-bar-color;\n  text-align: center;\n  background-color: @progress-bar-bg;\n  .box-shadow(inset 0 -1px 0 rgba(0,0,0,.15));\n  .transition(width .6s ease);\n}\n\n// Striped bars\n//\n// `.progress-striped .progress-bar` is deprecated as of v3.2.0 in favor of the\n// `.progress-bar-striped` class, which you just add to an existing\n// `.progress-bar`.\n.progress-striped .progress-bar,\n.progress-bar-striped {\n  #gradient > .striped();\n  background-size: 40px 40px;\n}\n\n// Call animation for the active one\n//\n// `.progress.active .progress-bar` is deprecated as of v3.2.0 in favor of the\n// `.progress-bar.active` approach.\n.progress.active .progress-bar,\n.progress-bar.active {\n  .animation(progress-bar-stripes 2s linear infinite);\n}\n\n// Account for lower percentages\n.progress-bar {\n  &[aria-valuenow=\"1\"],\n  &[aria-valuenow=\"2\"] {\n    min-width: 30px;\n  }\n\n  &[aria-valuenow=\"0\"] {\n    color: @gray-light;\n    min-width: 30px;\n    background-color: transparent;\n    background-image: none;\n    box-shadow: none;\n  }\n}\n\n\n\n// Variations\n// -------------------------\n\n.progress-bar-success {\n  .progress-bar-variant(@progress-bar-success-bg);\n}\n\n.progress-bar-info {\n  .progress-bar-variant(@progress-bar-info-bg);\n}\n\n.progress-bar-warning {\n  .progress-bar-variant(@progress-bar-warning-bg);\n}\n\n.progress-bar-danger {\n  .progress-bar-variant(@progress-bar-danger-bg);\n}\n","// Gradients\n\n#gradient {\n\n  // Horizontal gradient, from left to right\n  //\n  // Creates two color stops, start and end, by specifying a color and position for each color stop.\n  // Color stops are not available in IE9 and below.\n  .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n    background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n    background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n    background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n    background-repeat: repeat-x;\n    filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n  }\n\n  // Vertical gradient, from top to bottom\n  //\n  // Creates two color stops, start and end, by specifying a color and position for each color stop.\n  // Color stops are not available in IE9 and below.\n  .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n    background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent);  // Safari 5.1-6, Chrome 10+\n    background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent);  // Opera 12\n    background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n    background-repeat: repeat-x;\n    filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n  }\n\n  .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n    background-repeat: repeat-x;\n    background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n    background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n    background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n  }\n  .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n    background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n    background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n    background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n    background-repeat: no-repeat;\n    filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n  }\n  .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n    background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n    background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n    background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n    background-repeat: no-repeat;\n    filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n  }\n  .radial(@inner-color: #555; @outer-color: #333) {\n    background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n    background-image: radial-gradient(circle, @inner-color, @outer-color);\n    background-repeat: no-repeat;\n  }\n  .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n    background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n    background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n    background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n  }\n}\n","// Progress bars\n\n.progress-bar-variant(@color) {\n  background-color: @color;\n\n  // Deprecated parent class requirement as of v3.2.0\n  .progress-striped & {\n    #gradient > .striped();\n  }\n}\n","// Media objects\n// Source: http://stubbornella.org/content/?p=497\n// --------------------------------------------------\n\n\n// Common styles\n// -------------------------\n\n// Clear the floats\n.media,\n.media-body {\n  overflow: hidden;\n  zoom: 1;\n}\n\n// Proper spacing between instances of .media\n.media,\n.media .media {\n  margin-top: 15px;\n}\n.media:first-child {\n  margin-top: 0;\n}\n\n// For images and videos, set to block\n.media-object {\n  display: block;\n}\n\n// Reset margins on headings for tighter default spacing\n.media-heading {\n  margin: 0 0 5px;\n}\n\n\n// Media image alignment\n// -------------------------\n\n.media {\n  > .pull-left {\n    margin-right: 10px;\n  }\n  > .pull-right {\n    margin-left: 10px;\n  }\n}\n\n\n// Media list variation\n// -------------------------\n\n// Undo default ul/ol styles\n.media-list {\n  padding-left: 0;\n  list-style: none;\n}\n","//\n// List groups\n// --------------------------------------------------\n\n\n// Base class\n//\n// Easily usable on <ul>, <ol>, or <div>.\n\n.list-group {\n  // No need to set list-style: none; since .list-group-item is block level\n  margin-bottom: 20px;\n  padding-left: 0; // reset padding because ul and ol\n}\n\n\n// Individual list items\n//\n// Use on `li`s or `div`s within the `.list-group` parent.\n\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n  // Place the border on the list items and negative margin up for better styling\n  margin-bottom: -1px;\n  background-color: @list-group-bg;\n  border: 1px solid @list-group-border;\n\n  // Round the first and last items\n  &:first-child {\n    .border-top-radius(@list-group-border-radius);\n  }\n  &:last-child {\n    margin-bottom: 0;\n    .border-bottom-radius(@list-group-border-radius);\n  }\n\n  // Align badges within list items\n  > .badge {\n    float: right;\n  }\n  > .badge + .badge {\n    margin-right: 5px;\n  }\n}\n\n\n// Linked list items\n//\n// Use anchor elements instead of `li`s or `div`s to create linked list items.\n// Includes an extra `.active` modifier class for showing selected items.\n\na.list-group-item {\n  color: @list-group-link-color;\n\n  .list-group-item-heading {\n    color: @list-group-link-heading-color;\n  }\n\n  // Hover state\n  &:hover,\n  &:focus {\n    text-decoration: none;\n    color: @list-group-link-hover-color;\n    background-color: @list-group-hover-bg;\n  }\n}\n\n.list-group-item {\n  // Disabled state\n  &.disabled,\n  &.disabled:hover,\n  &.disabled:focus {\n    background-color: @list-group-disabled-bg;\n    color: @list-group-disabled-color;\n\n    // Force color to inherit for custom content\n    .list-group-item-heading {\n      color: inherit;\n    }\n    .list-group-item-text {\n      color: @list-group-disabled-text-color;\n    }\n  }\n\n  // Active class on item itself, not parent\n  &.active,\n  &.active:hover,\n  &.active:focus {\n    z-index: 2; // Place active items above their siblings for proper border styling\n    color: @list-group-active-color;\n    background-color: @list-group-active-bg;\n    border-color: @list-group-active-border;\n\n    // Force color to inherit for custom content\n    .list-group-item-heading,\n    .list-group-item-heading > small,\n    .list-group-item-heading > .small {\n      color: inherit;\n    }\n    .list-group-item-text {\n      color: @list-group-active-text-color;\n    }\n  }\n}\n\n\n// Contextual variants\n//\n// Add modifier classes to change text and background color on individual items.\n// Organizationally, this must come after the `:hover` states.\n\n.list-group-item-variant(success; @state-success-bg; @state-success-text);\n.list-group-item-variant(info; @state-info-bg; @state-info-text);\n.list-group-item-variant(warning; @state-warning-bg; @state-warning-text);\n.list-group-item-variant(danger; @state-danger-bg; @state-danger-text);\n\n\n// Custom content options\n//\n// Extra classes for creating well-formatted content within `.list-group-item`s.\n\n.list-group-item-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n.list-group-item-text {\n  margin-bottom: 0;\n  line-height: 1.3;\n}\n","// List Groups\n\n.list-group-item-variant(@state; @background; @color) {\n  .list-group-item-@{state} {\n    color: @color;\n    background-color: @background;\n\n    a& {\n      color: @color;\n\n      .list-group-item-heading {\n        color: inherit;\n      }\n\n      &:hover,\n      &:focus {\n        color: @color;\n        background-color: darken(@background, 5%);\n      }\n      &.active,\n      &.active:hover,\n      &.active:focus {\n        color: #fff;\n        background-color: @color;\n        border-color: @color;\n      }\n    }\n  }\n}\n","//\n// Panels\n// --------------------------------------------------\n\n\n// Base class\n.panel {\n  margin-bottom: @line-height-computed;\n  background-color: @panel-bg;\n  border: 1px solid transparent;\n  border-radius: @panel-border-radius;\n  .box-shadow(0 1px 1px rgba(0,0,0,.05));\n}\n\n// Panel contents\n.panel-body {\n  padding: @panel-body-padding;\n  &:extend(.clearfix all);\n}\n\n// Optional heading\n.panel-heading {\n  padding: @panel-heading-padding;\n  border-bottom: 1px solid transparent;\n  .border-top-radius((@panel-border-radius - 1));\n\n  > .dropdown .dropdown-toggle {\n    color: inherit;\n  }\n}\n\n// Within heading, strip any `h*` tag of its default margins for spacing.\n.panel-title {\n  margin-top: 0;\n  margin-bottom: 0;\n  font-size: ceil((@font-size-base * 1.125));\n  color: inherit;\n\n  > a {\n    color: inherit;\n  }\n}\n\n// Optional footer (stays gray in every modifier class)\n.panel-footer {\n  padding: @panel-footer-padding;\n  background-color: @panel-footer-bg;\n  border-top: 1px solid @panel-inner-border;\n  .border-bottom-radius((@panel-border-radius - 1));\n}\n\n\n// List groups in panels\n//\n// By default, space out list group content from panel headings to account for\n// any kind of custom content between the two.\n\n.panel {\n  > .list-group {\n    margin-bottom: 0;\n\n    .list-group-item {\n      border-width: 1px 0;\n      border-radius: 0;\n    }\n\n    // Add border top radius for first one\n    &:first-child {\n      .list-group-item:first-child {\n        border-top: 0;\n        .border-top-radius((@panel-border-radius - 1));\n      }\n    }\n    // Add border bottom radius for last one\n    &:last-child {\n      .list-group-item:last-child {\n        border-bottom: 0;\n        .border-bottom-radius((@panel-border-radius - 1));\n      }\n    }\n  }\n}\n// Collapse space between when there's no additional content.\n.panel-heading + .list-group {\n  .list-group-item:first-child {\n    border-top-width: 0;\n  }\n}\n.list-group + .panel-footer {\n  border-top-width: 0;\n}\n\n// Tables in panels\n//\n// Place a non-bordered `.table` within a panel (not within a `.panel-body`) and\n// watch it go full width.\n\n.panel {\n  > .table,\n  > .table-responsive > .table,\n  > .panel-collapse > .table {\n    margin-bottom: 0;\n  }\n  // Add border top radius for first one\n  > .table:first-child,\n  > .table-responsive:first-child > .table:first-child {\n    .border-top-radius((@panel-border-radius - 1));\n\n    > thead:first-child,\n    > tbody:first-child {\n      > tr:first-child {\n        td:first-child,\n        th:first-child {\n          border-top-left-radius: (@panel-border-radius - 1);\n        }\n        td:last-child,\n        th:last-child {\n          border-top-right-radius: (@panel-border-radius - 1);\n        }\n      }\n    }\n  }\n  // Add border bottom radius for last one\n  > .table:last-child,\n  > .table-responsive:last-child > .table:last-child {\n    .border-bottom-radius((@panel-border-radius - 1));\n\n    > tbody:last-child,\n    > tfoot:last-child {\n      > tr:last-child {\n        td:first-child,\n        th:first-child {\n          border-bottom-left-radius: (@panel-border-radius - 1);\n        }\n        td:last-child,\n        th:last-child {\n          border-bottom-right-radius: (@panel-border-radius - 1);\n        }\n      }\n    }\n  }\n  > .panel-body + .table,\n  > .panel-body + .table-responsive {\n    border-top: 1px solid @table-border-color;\n  }\n  > .table > tbody:first-child > tr:first-child th,\n  > .table > tbody:first-child > tr:first-child td {\n    border-top: 0;\n  }\n  > .table-bordered,\n  > .table-responsive > .table-bordered {\n    border: 0;\n    > thead,\n    > tbody,\n    > tfoot {\n      > tr {\n        > th:first-child,\n        > td:first-child {\n          border-left: 0;\n        }\n        > th:last-child,\n        > td:last-child {\n          border-right: 0;\n        }\n      }\n    }\n    > thead,\n    > tbody {\n      > tr:first-child {\n        > td,\n        > th {\n          border-bottom: 0;\n        }\n      }\n    }\n    > tbody,\n    > tfoot {\n      > tr:last-child {\n        > td,\n        > th {\n          border-bottom: 0;\n        }\n      }\n    }\n  }\n  > .table-responsive {\n    border: 0;\n    margin-bottom: 0;\n  }\n}\n\n\n// Collapsable panels (aka, accordion)\n//\n// Wrap a series of panels in `.panel-group` to turn them into an accordion with\n// the help of our collapse JavaScript plugin.\n\n.panel-group {\n  margin-bottom: @line-height-computed;\n\n  // Tighten up margin so it's only between panels\n  .panel {\n    margin-bottom: 0;\n    border-radius: @panel-border-radius;\n    + .panel {\n      margin-top: 5px;\n    }\n  }\n\n  .panel-heading {\n    border-bottom: 0;\n    + .panel-collapse > .panel-body {\n      border-top: 1px solid @panel-inner-border;\n    }\n  }\n  .panel-footer {\n    border-top: 0;\n    + .panel-collapse .panel-body {\n      border-bottom: 1px solid @panel-inner-border;\n    }\n  }\n}\n\n\n// Contextual variations\n.panel-default {\n  .panel-variant(@panel-default-border; @panel-default-text; @panel-default-heading-bg; @panel-default-border);\n}\n.panel-primary {\n  .panel-variant(@panel-primary-border; @panel-primary-text; @panel-primary-heading-bg; @panel-primary-border);\n}\n.panel-success {\n  .panel-variant(@panel-success-border; @panel-success-text; @panel-success-heading-bg; @panel-success-border);\n}\n.panel-info {\n  .panel-variant(@panel-info-border; @panel-info-text; @panel-info-heading-bg; @panel-info-border);\n}\n.panel-warning {\n  .panel-variant(@panel-warning-border; @panel-warning-text; @panel-warning-heading-bg; @panel-warning-border);\n}\n.panel-danger {\n  .panel-variant(@panel-danger-border; @panel-danger-text; @panel-danger-heading-bg; @panel-danger-border);\n}\n","// Panels\n\n.panel-variant(@border; @heading-text-color; @heading-bg-color; @heading-border) {\n  border-color: @border;\n\n  & > .panel-heading {\n    color: @heading-text-color;\n    background-color: @heading-bg-color;\n    border-color: @heading-border;\n\n    + .panel-collapse > .panel-body {\n      border-top-color: @border;\n    }\n    .badge {\n      color: @heading-bg-color;\n      background-color: @heading-text-color;\n    }\n  }\n  & > .panel-footer {\n    + .panel-collapse > .panel-body {\n      border-bottom-color: @border;\n    }\n  }\n}\n","// Embeds responsive\n//\n// Credit: Nicolas Gallagher and SUIT CSS.\n\n.embed-responsive {\n  position: relative;\n  display: block;\n  height: 0;\n  padding: 0;\n  overflow: hidden;\n\n  .embed-responsive-item,\n  iframe,\n  embed,\n  object {\n    position: absolute;\n    top: 0;\n    left: 0;\n    bottom: 0;\n    height: 100%;\n    width: 100%;\n    border: 0;\n  }\n\n  // Modifier class for 16:9 aspect ratio\n  &.embed-responsive-16by9 {\n    padding-bottom: 56.25%;\n  }\n\n  // Modifier class for 4:3 aspect ratio\n  &.embed-responsive-4by3 {\n    padding-bottom: 75%;\n  }\n}\n","//\n// Wells\n// --------------------------------------------------\n\n\n// Base class\n.well {\n  min-height: 20px;\n  padding: 19px;\n  margin-bottom: 20px;\n  background-color: @well-bg;\n  border: 1px solid @well-border;\n  border-radius: @border-radius-base;\n  .box-shadow(inset 0 1px 1px rgba(0,0,0,.05));\n  blockquote {\n    border-color: #ddd;\n    border-color: rgba(0,0,0,.15);\n  }\n}\n\n// Sizes\n.well-lg {\n  padding: 24px;\n  border-radius: @border-radius-large;\n}\n.well-sm {\n  padding: 9px;\n  border-radius: @border-radius-small;\n}\n","//\n// Close icons\n// --------------------------------------------------\n\n\n.close {\n  float: right;\n  font-size: (@font-size-base * 1.5);\n  font-weight: @close-font-weight;\n  line-height: 1;\n  color: @close-color;\n  text-shadow: @close-text-shadow;\n  .opacity(.2);\n\n  &:hover,\n  &:focus {\n    color: @close-color;\n    text-decoration: none;\n    cursor: pointer;\n    .opacity(.5);\n  }\n\n  // Additional properties for button version\n  // iOS requires the button element instead of an anchor tag.\n  // If you want the anchor version, it requires `href=\"#\"`.\n  button& {\n    padding: 0;\n    cursor: pointer;\n    background: transparent;\n    border: 0;\n    -webkit-appearance: none;\n  }\n}\n","//\n// Modals\n// --------------------------------------------------\n\n// .modal-open      - body class for killing the scroll\n// .modal           - container to scroll within\n// .modal-dialog    - positioning shell for the actual modal\n// .modal-content   - actual modal w/ bg and corners and shit\n\n// Kill the scroll on the body\n.modal-open {\n  overflow: hidden;\n}\n\n// Container that the modal scrolls within\n.modal {\n  display: none;\n  overflow: hidden;\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: @zindex-modal;\n  -webkit-overflow-scrolling: touch;\n\n  // Prevent Chrome on Windows from adding a focus outline. For details, see\n  // https://github.com/twbs/bootstrap/pull/10951.\n  outline: 0;\n\n  // When fading in the modal, animate it to slide down\n  &.fade .modal-dialog {\n    .translate3d(0, -25%, 0);\n    .transition-transform(~\"0.3s ease-out\");\n  }\n  &.in .modal-dialog { .translate3d(0, 0, 0) }\n}\n.modal-open .modal {\n  overflow-x: hidden;\n  overflow-y: auto;\n}\n\n// Shell div to position the modal with bottom padding\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 10px;\n}\n\n// Actual modal\n.modal-content {\n  position: relative;\n  background-color: @modal-content-bg;\n  border: 1px solid @modal-content-fallback-border-color; //old browsers fallback (ie8 etc)\n  border: 1px solid @modal-content-border-color;\n  border-radius: @border-radius-large;\n  .box-shadow(0 3px 9px rgba(0,0,0,.5));\n  background-clip: padding-box;\n  // Remove focus outline from opened modal\n  outline: 0;\n}\n\n// Modal background\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: @zindex-modal-background;\n  background-color: @modal-backdrop-bg;\n  // Fade for backdrop\n  &.fade { .opacity(0); }\n  &.in { .opacity(@modal-backdrop-opacity); }\n}\n\n// Modal header\n// Top section of the modal w/ title and dismiss\n.modal-header {\n  padding: @modal-title-padding;\n  border-bottom: 1px solid @modal-header-border-color;\n  min-height: (@modal-title-padding + @modal-title-line-height);\n}\n// Close icon\n.modal-header .close {\n  margin-top: -2px;\n}\n\n// Title text within header\n.modal-title {\n  margin: 0;\n  line-height: @modal-title-line-height;\n}\n\n// Modal body\n// Where all modal content resides (sibling of .modal-header and .modal-footer)\n.modal-body {\n  position: relative;\n  padding: @modal-inner-padding;\n}\n\n// Footer (for actions)\n.modal-footer {\n  padding: @modal-inner-padding;\n  text-align: right; // right align buttons\n  border-top: 1px solid @modal-footer-border-color;\n  &:extend(.clearfix all); // clear it in case folks use .pull-* classes on buttons\n\n  // Properly space out buttons\n  .btn + .btn {\n    margin-left: 5px;\n    margin-bottom: 0; // account for input[type=\"submit\"] which gets the bottom margin like all other inputs\n  }\n  // but override that for button groups\n  .btn-group .btn + .btn {\n    margin-left: -1px;\n  }\n  // and override it for block buttons as well\n  .btn-block + .btn-block {\n    margin-left: 0;\n  }\n}\n\n// Measure scrollbar width for padding body during modal show/hide\n.modal-scrollbar-measure {\n  position: absolute;\n  top: -9999px;\n  width: 50px;\n  height: 50px;\n  overflow: scroll;\n}\n\n// Scale up the modal\n@media (min-width: @screen-sm-min) {\n  // Automatically set modal's width for larger viewports\n  .modal-dialog {\n    width: @modal-md;\n    margin: 30px auto;\n  }\n  .modal-content {\n    .box-shadow(0 5px 15px rgba(0,0,0,.5));\n  }\n\n  // Modal sizes\n  .modal-sm { width: @modal-sm; }\n}\n\n@media (min-width: @screen-md-min) {\n  .modal-lg { width: @modal-lg; }\n}\n","//\n// Tooltips\n// --------------------------------------------------\n\n\n// Base class\n.tooltip {\n  position: absolute;\n  z-index: @zindex-tooltip;\n  display: block;\n  visibility: visible;\n  font-size: @font-size-small;\n  line-height: 1.4;\n  .opacity(0);\n\n  &.in     { .opacity(@tooltip-opacity); }\n  &.top    { margin-top:  -3px; padding: @tooltip-arrow-width 0; }\n  &.right  { margin-left:  3px; padding: 0 @tooltip-arrow-width; }\n  &.bottom { margin-top:   3px; padding: @tooltip-arrow-width 0; }\n  &.left   { margin-left: -3px; padding: 0 @tooltip-arrow-width; }\n}\n\n// Wrapper for the tooltip content\n.tooltip-inner {\n  max-width: @tooltip-max-width;\n  padding: 3px 8px;\n  color: @tooltip-color;\n  text-align: center;\n  text-decoration: none;\n  background-color: @tooltip-bg;\n  border-radius: @border-radius-base;\n}\n\n// Arrows\n.tooltip-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n.tooltip {\n  &.top .tooltip-arrow {\n    bottom: 0;\n    left: 50%;\n    margin-left: -@tooltip-arrow-width;\n    border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n    border-top-color: @tooltip-arrow-color;\n  }\n  &.top-left .tooltip-arrow {\n    bottom: 0;\n    left: @tooltip-arrow-width;\n    border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n    border-top-color: @tooltip-arrow-color;\n  }\n  &.top-right .tooltip-arrow {\n    bottom: 0;\n    right: @tooltip-arrow-width;\n    border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n    border-top-color: @tooltip-arrow-color;\n  }\n  &.right .tooltip-arrow {\n    top: 50%;\n    left: 0;\n    margin-top: -@tooltip-arrow-width;\n    border-width: @tooltip-arrow-width @tooltip-arrow-width @tooltip-arrow-width 0;\n    border-right-color: @tooltip-arrow-color;\n  }\n  &.left .tooltip-arrow {\n    top: 50%;\n    right: 0;\n    margin-top: -@tooltip-arrow-width;\n    border-width: @tooltip-arrow-width 0 @tooltip-arrow-width @tooltip-arrow-width;\n    border-left-color: @tooltip-arrow-color;\n  }\n  &.bottom .tooltip-arrow {\n    top: 0;\n    left: 50%;\n    margin-left: -@tooltip-arrow-width;\n    border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n    border-bottom-color: @tooltip-arrow-color;\n  }\n  &.bottom-left .tooltip-arrow {\n    top: 0;\n    left: @tooltip-arrow-width;\n    border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n    border-bottom-color: @tooltip-arrow-color;\n  }\n  &.bottom-right .tooltip-arrow {\n    top: 0;\n    right: @tooltip-arrow-width;\n    border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n    border-bottom-color: @tooltip-arrow-color;\n  }\n}\n","//\n// Popovers\n// --------------------------------------------------\n\n\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: @zindex-popover;\n  display: none;\n  max-width: @popover-max-width;\n  padding: 1px;\n  text-align: left; // Reset given new insertion method\n  background-color: @popover-bg;\n  background-clip: padding-box;\n  border: 1px solid @popover-fallback-border-color;\n  border: 1px solid @popover-border-color;\n  border-radius: @border-radius-large;\n  .box-shadow(0 5px 10px rgba(0,0,0,.2));\n\n  // Overrides for proper insertion\n  white-space: normal;\n\n  // Offset the popover to account for the popover arrow\n  &.top     { margin-top: -@popover-arrow-width; }\n  &.right   { margin-left: @popover-arrow-width; }\n  &.bottom  { margin-top: @popover-arrow-width; }\n  &.left    { margin-left: -@popover-arrow-width; }\n}\n\n.popover-title {\n  margin: 0; // reset heading margin\n  padding: 8px 14px;\n  font-size: @font-size-base;\n  font-weight: normal;\n  line-height: 18px;\n  background-color: @popover-title-bg;\n  border-bottom: 1px solid darken(@popover-title-bg, 5%);\n  border-radius: (@border-radius-large - 1) (@border-radius-large - 1) 0 0;\n}\n\n.popover-content {\n  padding: 9px 14px;\n}\n\n// Arrows\n//\n// .arrow is outer, .arrow:after is inner\n\n.popover > .arrow {\n  &,\n  &:after {\n    position: absolute;\n    display: block;\n    width: 0;\n    height: 0;\n    border-color: transparent;\n    border-style: solid;\n  }\n}\n.popover > .arrow {\n  border-width: @popover-arrow-outer-width;\n}\n.popover > .arrow:after {\n  border-width: @popover-arrow-width;\n  content: \"\";\n}\n\n.popover {\n  &.top > .arrow {\n    left: 50%;\n    margin-left: -@popover-arrow-outer-width;\n    border-bottom-width: 0;\n    border-top-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n    border-top-color: @popover-arrow-outer-color;\n    bottom: -@popover-arrow-outer-width;\n    &:after {\n      content: \" \";\n      bottom: 1px;\n      margin-left: -@popover-arrow-width;\n      border-bottom-width: 0;\n      border-top-color: @popover-arrow-color;\n    }\n  }\n  &.right > .arrow {\n    top: 50%;\n    left: -@popover-arrow-outer-width;\n    margin-top: -@popover-arrow-outer-width;\n    border-left-width: 0;\n    border-right-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n    border-right-color: @popover-arrow-outer-color;\n    &:after {\n      content: \" \";\n      left: 1px;\n      bottom: -@popover-arrow-width;\n      border-left-width: 0;\n      border-right-color: @popover-arrow-color;\n    }\n  }\n  &.bottom > .arrow {\n    left: 50%;\n    margin-left: -@popover-arrow-outer-width;\n    border-top-width: 0;\n    border-bottom-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n    border-bottom-color: @popover-arrow-outer-color;\n    top: -@popover-arrow-outer-width;\n    &:after {\n      content: \" \";\n      top: 1px;\n      margin-left: -@popover-arrow-width;\n      border-top-width: 0;\n      border-bottom-color: @popover-arrow-color;\n    }\n  }\n\n  &.left > .arrow {\n    top: 50%;\n    right: -@popover-arrow-outer-width;\n    margin-top: -@popover-arrow-outer-width;\n    border-right-width: 0;\n    border-left-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n    border-left-color: @popover-arrow-outer-color;\n    &:after {\n      content: \" \";\n      right: 1px;\n      border-right-width: 0;\n      border-left-color: @popover-arrow-color;\n      bottom: -@popover-arrow-width;\n    }\n  }\n\n}\n","//\n// Carousel\n// --------------------------------------------------\n\n\n// Wrapper for the slide container and indicators\n.carousel {\n  position: relative;\n}\n\n.carousel-inner {\n  position: relative;\n  overflow: hidden;\n  width: 100%;\n\n  > .item {\n    display: none;\n    position: relative;\n    .transition(.6s ease-in-out left);\n\n    // Account for jankitude on images\n    > img,\n    > a > img {\n      &:extend(.img-responsive);\n      line-height: 1;\n    }\n  }\n\n  > .active,\n  > .next,\n  > .prev {\n    display: block;\n  }\n\n  > .active {\n    left: 0;\n  }\n\n  > .next,\n  > .prev {\n    position: absolute;\n    top: 0;\n    width: 100%;\n  }\n\n  > .next {\n    left: 100%;\n  }\n  > .prev {\n    left: -100%;\n  }\n  > .next.left,\n  > .prev.right {\n    left: 0;\n  }\n\n  > .active.left {\n    left: -100%;\n  }\n  > .active.right {\n    left: 100%;\n  }\n\n}\n\n// Left/right controls for nav\n// ---------------------------\n\n.carousel-control {\n  position: absolute;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  width: @carousel-control-width;\n  .opacity(@carousel-control-opacity);\n  font-size: @carousel-control-font-size;\n  color: @carousel-control-color;\n  text-align: center;\n  text-shadow: @carousel-text-shadow;\n  // We can't have this transition here because WebKit cancels the carousel\n  // animation if you trip this while in the middle of another animation.\n\n  // Set gradients for backgrounds\n  &.left {\n    #gradient > .horizontal(@start-color: rgba(0,0,0,.5); @end-color: rgba(0,0,0,.0001));\n  }\n  &.right {\n    left: auto;\n    right: 0;\n    #gradient > .horizontal(@start-color: rgba(0,0,0,.0001); @end-color: rgba(0,0,0,.5));\n  }\n\n  // Hover/focus state\n  &:hover,\n  &:focus {\n    outline: 0;\n    color: @carousel-control-color;\n    text-decoration: none;\n    .opacity(.9);\n  }\n\n  // Toggles\n  .icon-prev,\n  .icon-next,\n  .glyphicon-chevron-left,\n  .glyphicon-chevron-right {\n    position: absolute;\n    top: 50%;\n    z-index: 5;\n    display: inline-block;\n  }\n  .icon-prev,\n  .glyphicon-chevron-left {\n    left: 50%;\n    margin-left: -10px;\n  }\n  .icon-next,\n  .glyphicon-chevron-right {\n    right: 50%;\n    margin-right: -10px;\n  }\n  .icon-prev,\n  .icon-next {\n    width:  20px;\n    height: 20px;\n    margin-top: -10px;\n    font-family: serif;\n  }\n\n\n  .icon-prev {\n    &:before {\n      content: '\\2039';// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039)\n    }\n  }\n  .icon-next {\n    &:before {\n      content: '\\203a';// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A)\n    }\n  }\n}\n\n// Optional indicator pips\n//\n// Add an unordered list with the following class and add a list item for each\n// slide your carousel holds.\n\n.carousel-indicators {\n  position: absolute;\n  bottom: 10px;\n  left: 50%;\n  z-index: 15;\n  width: 60%;\n  margin-left: -30%;\n  padding-left: 0;\n  list-style: none;\n  text-align: center;\n\n  li {\n    display: inline-block;\n    width:  10px;\n    height: 10px;\n    margin: 1px;\n    text-indent: -999px;\n    border: 1px solid @carousel-indicator-border-color;\n    border-radius: 10px;\n    cursor: pointer;\n\n    // IE8-9 hack for event handling\n    //\n    // Internet Explorer 8-9 does not support clicks on elements without a set\n    // `background-color`. We cannot use `filter` since that's not viewed as a\n    // background color by the browser. Thus, a hack is needed.\n    //\n    // For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we\n    // set alpha transparency for the best results possible.\n    background-color: #000 \\9; // IE8\n    background-color: rgba(0,0,0,0); // IE9\n  }\n  .active {\n    margin: 0;\n    width:  12px;\n    height: 12px;\n    background-color: @carousel-indicator-active-bg;\n  }\n}\n\n// Optional captions\n// -----------------------------\n// Hidden by default for smaller viewports\n.carousel-caption {\n  position: absolute;\n  left: 15%;\n  right: 15%;\n  bottom: 20px;\n  z-index: 10;\n  padding-top: 20px;\n  padding-bottom: 20px;\n  color: @carousel-caption-color;\n  text-align: center;\n  text-shadow: @carousel-text-shadow;\n  & .btn {\n    text-shadow: none; // No shadow for button elements in carousel-caption\n  }\n}\n\n\n// Scale up controls for tablets and up\n@media screen and (min-width: @screen-sm-min) {\n\n  // Scale up the controls a smidge\n  .carousel-control {\n    .glyphicon-chevron-left,\n    .glyphicon-chevron-right,\n    .icon-prev,\n    .icon-next {\n      width: 30px;\n      height: 30px;\n      margin-top: -15px;\n      font-size: 30px;\n    }\n    .glyphicon-chevron-left,\n    .icon-prev {\n      margin-left: -15px;\n    }\n    .glyphicon-chevron-right,\n    .icon-next {\n      margin-right: -15px;\n    }\n  }\n\n  // Show and left align the captions\n  .carousel-caption {\n    left: 20%;\n    right: 20%;\n    padding-bottom: 30px;\n  }\n\n  // Move up the indicators\n  .carousel-indicators {\n    bottom: 20px;\n  }\n}\n","// Clearfix\n//\n// For modern browsers\n// 1. The space content is one way to avoid an Opera bug when the\n//    contenteditable attribute is included anywhere else in the document.\n//    Otherwise it causes space to appear at the top and bottom of elements\n//    that are clearfixed.\n// 2. The use of `table` rather than `block` is only necessary if using\n//    `:before` to contain the top-margins of child elements.\n//\n// Source: http://nicolasgallagher.com/micro-clearfix-hack/\n\n.clearfix() {\n  &:before,\n  &:after {\n    content: \" \"; // 1\n    display: table; // 2\n  }\n  &:after {\n    clear: both;\n  }\n}\n","// Center-align a block level element\n\n.center-block() {\n  display: block;\n  margin-left: auto;\n  margin-right: auto;\n}\n","// CSS image replacement\n//\n// Heads up! v3 launched with with only `.hide-text()`, but per our pattern for\n// mixins being reused as classes with the same name, this doesn't hold up. As\n// of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`.\n//\n// Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757\n\n// Deprecated as of v3.0.1 (will be removed in v4)\n.hide-text() {\n  font: ~\"0/0\" a;\n  color: transparent;\n  text-shadow: none;\n  background-color: transparent;\n  border: 0;\n}\n\n// New mixin to use as of v3.0.1\n.text-hide() {\n  .hide-text();\n}\n","//\n// Responsive: Utility classes\n// --------------------------------------------------\n\n\n// IE10 in Windows (Phone) 8\n//\n// Support for responsive views via media queries is kind of borked in IE10, for\n// Surface/desktop in split view and for Windows Phone 8. This particular fix\n// must be accompanied by a snippet of JavaScript to sniff the user agent and\n// apply some conditional CSS to *only* the Surface/desktop Windows 8. Look at\n// our Getting Started page for more information on this bug.\n//\n// For more information, see the following:\n//\n// Issue: https://github.com/twbs/bootstrap/issues/10497\n// Docs: http://getbootstrap.com/getting-started/#support-ie10-width\n// Source: http://timkadlec.com/2013/01/windows-phone-8-and-device-width/\n// Source: http://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/\n\n@-ms-viewport {\n  width: device-width;\n}\n\n\n// Visibility utilities\n// Note: Deprecated .visible-xs, .visible-sm, .visible-md, and .visible-lg as of v3.2.0\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n  .responsive-invisibility();\n}\n\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n  display: none !important;\n}\n\n.visible-xs {\n  @media (max-width: @screen-xs-max) {\n    .responsive-visibility();\n  }\n}\n.visible-xs-block {\n  @media (max-width: @screen-xs-max) {\n    display: block !important;\n  }\n}\n.visible-xs-inline {\n  @media (max-width: @screen-xs-max) {\n    display: inline !important;\n  }\n}\n.visible-xs-inline-block {\n  @media (max-width: @screen-xs-max) {\n    display: inline-block !important;\n  }\n}\n\n.visible-sm {\n  @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n    .responsive-visibility();\n  }\n}\n.visible-sm-block {\n  @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n    display: block !important;\n  }\n}\n.visible-sm-inline {\n  @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n    display: inline !important;\n  }\n}\n.visible-sm-inline-block {\n  @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n    display: inline-block !important;\n  }\n}\n\n.visible-md {\n  @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n    .responsive-visibility();\n  }\n}\n.visible-md-block {\n  @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n    display: block !important;\n  }\n}\n.visible-md-inline {\n  @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n    display: inline !important;\n  }\n}\n.visible-md-inline-block {\n  @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n    display: inline-block !important;\n  }\n}\n\n.visible-lg {\n  @media (min-width: @screen-lg-min) {\n    .responsive-visibility();\n  }\n}\n.visible-lg-block {\n  @media (min-width: @screen-lg-min) {\n    display: block !important;\n  }\n}\n.visible-lg-inline {\n  @media (min-width: @screen-lg-min) {\n    display: inline !important;\n  }\n}\n.visible-lg-inline-block {\n  @media (min-width: @screen-lg-min) {\n    display: inline-block !important;\n  }\n}\n\n.hidden-xs {\n  @media (max-width: @screen-xs-max) {\n    .responsive-invisibility();\n  }\n}\n.hidden-sm {\n  @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n    .responsive-invisibility();\n  }\n}\n.hidden-md {\n  @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n    .responsive-invisibility();\n  }\n}\n.hidden-lg {\n  @media (min-width: @screen-lg-min) {\n    .responsive-invisibility();\n  }\n}\n\n\n// Print utilities\n//\n// Media queries are placed on the inside to be mixin-friendly.\n\n// Note: Deprecated .visible-print as of v3.2.0\n.visible-print {\n  .responsive-invisibility();\n\n  @media print {\n    .responsive-visibility();\n  }\n}\n.visible-print-block {\n  display: none !important;\n\n  @media print {\n    display: block !important;\n  }\n}\n.visible-print-inline {\n  display: none !important;\n\n  @media print {\n    display: inline !important;\n  }\n}\n.visible-print-inline-block {\n  display: none !important;\n\n  @media print {\n    display: inline-block !important;\n  }\n}\n\n.hidden-print {\n  @media print {\n    .responsive-invisibility();\n  }\n}\n","// Responsive utilities\n\n//\n// More easily include all the states for responsive-utilities.less.\n.responsive-visibility() {\n  display: block !important;\n  table&  { display: table; }\n  tr&     { display: table-row !important; }\n  th&,\n  td&     { display: table-cell !important; }\n}\n\n.responsive-invisibility() {\n  display: none !important;\n}\n"]}
+ static/css/bootstrap.min.css view
@@ -0,0 +1,5 @@+/*!+ * Bootstrap v3.2.0 (http://getbootstrap.com)+ * Copyright 2011-2014 Twitter, Inc.+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)+ *//*! normalize.css v3.0.1 | MIT License | git.io/normalize */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background:0 0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.table td,.table th{background-color:#fff!important}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table-bordered th,.table-bordered td{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:before,:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#428bca;text-decoration:none}a:hover,a:focus{color:#2a6496;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.thumbnail>img,.thumbnail a>img,.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;width:100% \9;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;width:100% \9;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:400;line-height:1;color:#777}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}cite{font-style:normal}mark,.mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#428bca}a.text-primary:hover{color:#3071a9}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#428bca}a.bg-primary:hover{background-color:#3071a9}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}blockquote:before,blockquote:after{content:""}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=radio],input[type=checkbox]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=radio]:focus,input[type=checkbox]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#777;opacity:1}.form-control:-ms-input-placeholder{color:#777}.form-control::-webkit-input-placeholder{color:#777}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee;opacity:1}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}input[type=date],input[type=time],input[type=datetime-local],input[type=month]{line-height:34px;line-height:1.42857143 \0}input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;min-height:20px;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.radio input[type=radio],.radio-inline input[type=radio],.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox]{position:absolute;margin-top:4px \9;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type=radio][disabled],input[type=checkbox][disabled],input[type=radio].disabled,input[type=checkbox].disabled,fieldset[disabled] input[type=radio],fieldset[disabled] input[type=checkbox]{cursor:not-allowed}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm,.form-horizontal .form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}textarea.input-sm,select[multiple].input-sm{height:auto}.input-lg,.form-horizontal .form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg{height:46px;line-height:46px}textarea.input-lg,select[multiple].input-lg{height:auto}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:25px;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center}.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type=radio],.form-inline .checkbox input[type=checkbox]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{top:0;right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.3px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn:focus,.btn:active:focus,.btn.active:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus{color:#333;text-decoration:none}.btn:active,.btn.active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#428bca;border-color:#357ebd}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#3071a9;border-color:#285e8e}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#428bca;border-color:#357ebd}.btn-primary .badge{color:#428bca;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#428bca;cursor:pointer;border-radius:0}.btn-link,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#2a6496;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#777;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#428bca;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#777}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px solid}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group>.btn:focus,.btn-group-vertical>.btn:focus{outline:0}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn>input[type=radio],[data-toggle=buttons]>.btn>input[type=checkbox]{position:absolute;z-index:-1;filter:alpha(opacity=0);opacity:0}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=radio],.input-group-addon input[type=checkbox]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#428bca}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#428bca}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px}@media (max-width:480px) and (orientation:landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:200px}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;-webkit-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}.navbar-nav.navbar-right:last-child{margin-right:-15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:0}.navbar-form .radio input[type=radio],.navbar-form .checkbox input[type=checkbox]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-form.navbar-right:last-child{margin-right:-15px}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}.navbar-text.navbar-right:last-child{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#333}.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:focus{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#777}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#777}.navbar-inverse .navbar-nav>li>a{color:#777}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#777}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#777}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#fff}.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#428bca;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{color:#2a6496;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;cursor:default;background-color:#428bca;border-color:#428bca}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:hover,a.label:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:hover,.label-default[href]:focus{background-color:#5e5e5e}.label-primary{background-color:#428bca}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#3071a9}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}a.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#428bca;background-color:#fff}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-right:60px;padding-left:60px}.jumbotron h1,.jumbotron .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-right:auto;margin-left:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#428bca}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#428bca;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar[aria-valuenow="1"],.progress-bar[aria-valuenow="2"]{min-width:30px}.progress-bar[aria-valuenow="0"]{min-width:30px;color:#777;background-color:transparent;background-image:none;-webkit-box-shadow:none;box-shadow:none}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media,.media-body{overflow:hidden;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{color:#555;text-decoration:none;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{color:#777;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#e1edf7}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group{margin-bottom:0}.panel>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.table,.panel>.table-responsive>.table,.panel>.panel-collapse>.table{margin-bottom:0}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#428bca}.panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#428bca}.panel-primary>.panel-heading .badge{color:#428bca;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#428bca}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate3d(0,-25%,0);-o-transform:translate3d(0,-25%,0);transform:translate3d(0,-25%,0)}.modal.in .modal-dialog{-webkit-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{min-height:16.43px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-size:12px;line-height:1.4;visibility:visible;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{right:5px;bottom:0;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:400;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%;margin-left:-10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%;margin-right:-10px}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;margin-top:-10px;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-footer:before,.modal-footer:after{display:table;content:" "}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-footer:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important;visibility:hidden!important}.affix{position:fixed;-webkit-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none!important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}th.visible-xs,td.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}th.visible-sm,td.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}th.visible-md,td.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}th.visible-lg,td.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table}tr.visible-print{display:table-row!important}th.visible-print,td.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}}
− static/excanvas.js
@@ -1,1427 +0,0 @@-// Copyright 2006 Google Inc.-//-// Licensed under the Apache License, Version 2.0 (the "License");-// you may not use this file except in compliance with the License.-// You may obtain a copy of the License at-//-//   http://www.apache.org/licenses/LICENSE-2.0-//-// Unless required by applicable law or agreed to in writing, software-// distributed under the License is distributed on an "AS IS" BASIS,-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.-// See the License for the specific language governing permissions and-// limitations under the License.---// Known Issues:-//-// * Patterns only support repeat.-// * Radial gradient are not implemented. The VML version of these look very-//   different from the canvas one.-// * Clipping paths are not implemented.-// * Coordsize. The width and height attribute have higher priority than the-//   width and height style values which isn't correct.-// * Painting mode isn't implemented.-// * Canvas width/height should is using content-box by default. IE in-//   Quirks mode will draw the canvas using border-box. Either change your-//   doctype to HTML5-//   (http://www.whatwg.org/specs/web-apps/current-work/#the-doctype)-//   or use Box Sizing Behavior from WebFX-//   (http://webfx.eae.net/dhtml/boxsizing/boxsizing.html)-// * Non uniform scaling does not correctly scale strokes.-// * Filling very large shapes (above 5000 points) is buggy.-// * Optimize. There is always room for speed improvements.--// Only add this code if we do not already have a canvas implementation-if (!document.createElement('canvas').getContext) {--(function() {--  // alias some functions to make (compiled) code shorter-  var m = Math;-  var mr = m.round;-  var ms = m.sin;-  var mc = m.cos;-  var abs = m.abs;-  var sqrt = m.sqrt;--  // this is used for sub pixel precision-  var Z = 10;-  var Z2 = Z / 2;--  /**-   * This funtion is assigned to the <canvas> elements as element.getContext().-   * @this {HTMLElement}-   * @return {CanvasRenderingContext2D_}-   */-  function getContext() {-    return this.context_ ||-        (this.context_ = new CanvasRenderingContext2D_(this));-  }--  var slice = Array.prototype.slice;--  /**-   * Binds a function to an object. The returned function will always use the-   * passed in {@code obj} as {@code this}.-   *-   * Example:-   *-   *   g = bind(f, obj, a, b)-   *   g(c, d) // will do f.call(obj, a, b, c, d)-   *-   * @param {Function} f The function to bind the object to-   * @param {Object} obj The object that should act as this when the function-   *     is called-   * @param {*} var_args Rest arguments that will be used as the initial-   *     arguments when the function is called-   * @return {Function} A new function that has bound this-   */-  function bind(f, obj, var_args) {-    var a = slice.call(arguments, 2);-    return function() {-      return f.apply(obj, a.concat(slice.call(arguments)));-    };-  }--  function encodeHtmlAttribute(s) {-    return String(s).replace(/&/g, '&amp;').replace(/"/g, '&quot;');-  }--  function addNamespacesAndStylesheet(doc) {-    // create xmlns-    if (!doc.namespaces['g_vml_']) {-      doc.namespaces.add('g_vml_', 'urn:schemas-microsoft-com:vml',-                         '#default#VML');--    }-    if (!doc.namespaces['g_o_']) {-      doc.namespaces.add('g_o_', 'urn:schemas-microsoft-com:office:office',-                         '#default#VML');-    }--    // Setup default CSS.  Only add one style sheet per document-    if (!doc.styleSheets['ex_canvas_']) {-      var ss = doc.createStyleSheet();-      ss.owningElement.id = 'ex_canvas_';-      ss.cssText = 'canvas{display:inline-block;overflow:hidden;' +-          // default size is 300x150 in Gecko and Opera-          'text-align:left;width:300px;height:150px}';-    }-  }--  // Add namespaces and stylesheet at startup.-  addNamespacesAndStylesheet(document);--  var G_vmlCanvasManager_ = {-    init: function(opt_doc) {-      if (/MSIE/.test(navigator.userAgent) && !window.opera) {-        var doc = opt_doc || document;-        // Create a dummy element so that IE will allow canvas elements to be-        // recognized.-        doc.createElement('canvas');-        doc.attachEvent('onreadystatechange', bind(this.init_, this, doc));-      }-    },--    init_: function(doc) {-      // find all canvas elements-      var els = doc.getElementsByTagName('canvas');-      for (var i = 0; i < els.length; i++) {-        this.initElement(els[i]);-      }-    },--    /**-     * Public initializes a canvas element so that it can be used as canvas-     * element from now on. This is called automatically before the page is-     * loaded but if you are creating elements using createElement you need to-     * make sure this is called on the element.-     * @param {HTMLElement} el The canvas element to initialize.-     * @return {HTMLElement} the element that was created.-     */-    initElement: function(el) {-      if (!el.getContext) {-        el.getContext = getContext;--        // Add namespaces and stylesheet to document of the element.-        addNamespacesAndStylesheet(el.ownerDocument);--        // Remove fallback content. There is no way to hide text nodes so we-        // just remove all childNodes. We could hide all elements and remove-        // text nodes but who really cares about the fallback content.-        el.innerHTML = '';--        // do not use inline function because that will leak memory-        el.attachEvent('onpropertychange', onPropertyChange);-        el.attachEvent('onresize', onResize);--        var attrs = el.attributes;-        if (attrs.width && attrs.width.specified) {-          // TODO: use runtimeStyle and coordsize-          // el.getContext().setWidth_(attrs.width.nodeValue);-          el.style.width = attrs.width.nodeValue + 'px';-        } else {-          el.width = el.clientWidth;-        }-        if (attrs.height && attrs.height.specified) {-          // TODO: use runtimeStyle and coordsize-          // el.getContext().setHeight_(attrs.height.nodeValue);-          el.style.height = attrs.height.nodeValue + 'px';-        } else {-          el.height = el.clientHeight;-        }-        //el.getContext().setCoordsize_()-      }-      return el;-    }-  };--  function onPropertyChange(e) {-    var el = e.srcElement;--    switch (e.propertyName) {-      case 'width':-        el.getContext().clearRect();-        el.style.width = el.attributes.width.nodeValue + 'px';-        // In IE8 this does not trigger onresize.-        el.firstChild.style.width =  el.clientWidth + 'px';-        break;-      case 'height':-        el.getContext().clearRect();-        el.style.height = el.attributes.height.nodeValue + 'px';-        el.firstChild.style.height = el.clientHeight + 'px';-        break;-    }-  }--  function onResize(e) {-    var el = e.srcElement;-    if (el.firstChild) {-      el.firstChild.style.width =  el.clientWidth + 'px';-      el.firstChild.style.height = el.clientHeight + 'px';-    }-  }--  G_vmlCanvasManager_.init();--  // precompute "00" to "FF"-  var decToHex = [];-  for (var i = 0; i < 16; i++) {-    for (var j = 0; j < 16; j++) {-      decToHex[i * 16 + j] = i.toString(16) + j.toString(16);-    }-  }--  function createMatrixIdentity() {-    return [-      [1, 0, 0],-      [0, 1, 0],-      [0, 0, 1]-    ];-  }--  function matrixMultiply(m1, m2) {-    var result = createMatrixIdentity();--    for (var x = 0; x < 3; x++) {-      for (var y = 0; y < 3; y++) {-        var sum = 0;--        for (var z = 0; z < 3; z++) {-          sum += m1[x][z] * m2[z][y];-        }--        result[x][y] = sum;-      }-    }-    return result;-  }--  function copyState(o1, o2) {-    o2.fillStyle     = o1.fillStyle;-    o2.lineCap       = o1.lineCap;-    o2.lineJoin      = o1.lineJoin;-    o2.lineWidth     = o1.lineWidth;-    o2.miterLimit    = o1.miterLimit;-    o2.shadowBlur    = o1.shadowBlur;-    o2.shadowColor   = o1.shadowColor;-    o2.shadowOffsetX = o1.shadowOffsetX;-    o2.shadowOffsetY = o1.shadowOffsetY;-    o2.strokeStyle   = o1.strokeStyle;-    o2.globalAlpha   = o1.globalAlpha;-    o2.font          = o1.font;-    o2.textAlign     = o1.textAlign;-    o2.textBaseline  = o1.textBaseline;-    o2.arcScaleX_    = o1.arcScaleX_;-    o2.arcScaleY_    = o1.arcScaleY_;-    o2.lineScale_    = o1.lineScale_;-  }--  var colorData = {-    aliceblue: '#F0F8FF',-    antiquewhite: '#FAEBD7',-    aquamarine: '#7FFFD4',-    azure: '#F0FFFF',-    beige: '#F5F5DC',-    bisque: '#FFE4C4',-    black: '#000000',-    blanchedalmond: '#FFEBCD',-    blueviolet: '#8A2BE2',-    brown: '#A52A2A',-    burlywood: '#DEB887',-    cadetblue: '#5F9EA0',-    chartreuse: '#7FFF00',-    chocolate: '#D2691E',-    coral: '#FF7F50',-    cornflowerblue: '#6495ED',-    cornsilk: '#FFF8DC',-    crimson: '#DC143C',-    cyan: '#00FFFF',-    darkblue: '#00008B',-    darkcyan: '#008B8B',-    darkgoldenrod: '#B8860B',-    darkgray: '#A9A9A9',-    darkgreen: '#006400',-    darkgrey: '#A9A9A9',-    darkkhaki: '#BDB76B',-    darkmagenta: '#8B008B',-    darkolivegreen: '#556B2F',-    darkorange: '#FF8C00',-    darkorchid: '#9932CC',-    darkred: '#8B0000',-    darksalmon: '#E9967A',-    darkseagreen: '#8FBC8F',-    darkslateblue: '#483D8B',-    darkslategray: '#2F4F4F',-    darkslategrey: '#2F4F4F',-    darkturquoise: '#00CED1',-    darkviolet: '#9400D3',-    deeppink: '#FF1493',-    deepskyblue: '#00BFFF',-    dimgray: '#696969',-    dimgrey: '#696969',-    dodgerblue: '#1E90FF',-    firebrick: '#B22222',-    floralwhite: '#FFFAF0',-    forestgreen: '#228B22',-    gainsboro: '#DCDCDC',-    ghostwhite: '#F8F8FF',-    gold: '#FFD700',-    goldenrod: '#DAA520',-    grey: '#808080',-    greenyellow: '#ADFF2F',-    honeydew: '#F0FFF0',-    hotpink: '#FF69B4',-    indianred: '#CD5C5C',-    indigo: '#4B0082',-    ivory: '#FFFFF0',-    khaki: '#F0E68C',-    lavender: '#E6E6FA',-    lavenderblush: '#FFF0F5',-    lawngreen: '#7CFC00',-    lemonchiffon: '#FFFACD',-    lightblue: '#ADD8E6',-    lightcoral: '#F08080',-    lightcyan: '#E0FFFF',-    lightgoldenrodyellow: '#FAFAD2',-    lightgreen: '#90EE90',-    lightgrey: '#D3D3D3',-    lightpink: '#FFB6C1',-    lightsalmon: '#FFA07A',-    lightseagreen: '#20B2AA',-    lightskyblue: '#87CEFA',-    lightslategray: '#778899',-    lightslategrey: '#778899',-    lightsteelblue: '#B0C4DE',-    lightyellow: '#FFFFE0',-    limegreen: '#32CD32',-    linen: '#FAF0E6',-    magenta: '#FF00FF',-    mediumaquamarine: '#66CDAA',-    mediumblue: '#0000CD',-    mediumorchid: '#BA55D3',-    mediumpurple: '#9370DB',-    mediumseagreen: '#3CB371',-    mediumslateblue: '#7B68EE',-    mediumspringgreen: '#00FA9A',-    mediumturquoise: '#48D1CC',-    mediumvioletred: '#C71585',-    midnightblue: '#191970',-    mintcream: '#F5FFFA',-    mistyrose: '#FFE4E1',-    moccasin: '#FFE4B5',-    navajowhite: '#FFDEAD',-    oldlace: '#FDF5E6',-    olivedrab: '#6B8E23',-    orange: '#FFA500',-    orangered: '#FF4500',-    orchid: '#DA70D6',-    palegoldenrod: '#EEE8AA',-    palegreen: '#98FB98',-    paleturquoise: '#AFEEEE',-    palevioletred: '#DB7093',-    papayawhip: '#FFEFD5',-    peachpuff: '#FFDAB9',-    peru: '#CD853F',-    pink: '#FFC0CB',-    plum: '#DDA0DD',-    powderblue: '#B0E0E6',-    rosybrown: '#BC8F8F',-    royalblue: '#4169E1',-    saddlebrown: '#8B4513',-    salmon: '#FA8072',-    sandybrown: '#F4A460',-    seagreen: '#2E8B57',-    seashell: '#FFF5EE',-    sienna: '#A0522D',-    skyblue: '#87CEEB',-    slateblue: '#6A5ACD',-    slategray: '#708090',-    slategrey: '#708090',-    snow: '#FFFAFA',-    springgreen: '#00FF7F',-    steelblue: '#4682B4',-    tan: '#D2B48C',-    thistle: '#D8BFD8',-    tomato: '#FF6347',-    turquoise: '#40E0D0',-    violet: '#EE82EE',-    wheat: '#F5DEB3',-    whitesmoke: '#F5F5F5',-    yellowgreen: '#9ACD32'-  };---  function getRgbHslContent(styleString) {-    var start = styleString.indexOf('(', 3);-    var end = styleString.indexOf(')', start + 1);-    var parts = styleString.substring(start + 1, end).split(',');-    // add alpha if needed-    if (parts.length == 4 && styleString.substr(3, 1) == 'a') {-      alpha = Number(parts[3]);-    } else {-      parts[3] = 1;-    }-    return parts;-  }--  function percent(s) {-    return parseFloat(s) / 100;-  }--  function clamp(v, min, max) {-    return Math.min(max, Math.max(min, v));-  }--  function hslToRgb(parts){-    var r, g, b;-    h = parseFloat(parts[0]) / 360 % 360;-    if (h < 0)-      h++;-    s = clamp(percent(parts[1]), 0, 1);-    l = clamp(percent(parts[2]), 0, 1);-    if (s == 0) {-      r = g = b = l; // achromatic-    } else {-      var q = l < 0.5 ? l * (1 + s) : l + s - l * s;-      var p = 2 * l - q;-      r = hueToRgb(p, q, h + 1 / 3);-      g = hueToRgb(p, q, h);-      b = hueToRgb(p, q, h - 1 / 3);-    }--    return '#' + decToHex[Math.floor(r * 255)] +-        decToHex[Math.floor(g * 255)] +-        decToHex[Math.floor(b * 255)];-  }--  function hueToRgb(m1, m2, h) {-    if (h < 0)-      h++;-    if (h > 1)-      h--;--    if (6 * h < 1)-      return m1 + (m2 - m1) * 6 * h;-    else if (2 * h < 1)-      return m2;-    else if (3 * h < 2)-      return m1 + (m2 - m1) * (2 / 3 - h) * 6;-    else-      return m1;-  }--  function processStyle(styleString) {-    var str, alpha = 1;--    styleString = String(styleString);-    if (styleString.charAt(0) == '#') {-      str = styleString;-    } else if (/^rgb/.test(styleString)) {-      var parts = getRgbHslContent(styleString);-      var str = '#', n;-      for (var i = 0; i < 3; i++) {-        if (parts[i].indexOf('%') != -1) {-          n = Math.floor(percent(parts[i]) * 255);-        } else {-          n = Number(parts[i]);-        }-        str += decToHex[clamp(n, 0, 255)];-      }-      alpha = parts[3];-    } else if (/^hsl/.test(styleString)) {-      var parts = getRgbHslContent(styleString);-      str = hslToRgb(parts);-      alpha = parts[3];-    } else {-      str = colorData[styleString] || styleString;-    }-    return {color: str, alpha: alpha};-  }--  var DEFAULT_STYLE = {-    style: 'normal',-    variant: 'normal',-    weight: 'normal',-    size: 10,-    family: 'sans-serif'-  };--  // Internal text style cache-  var fontStyleCache = {};--  function processFontStyle(styleString) {-    if (fontStyleCache[styleString]) {-      return fontStyleCache[styleString];-    }--    var el = document.createElement('div');-    var style = el.style;-    try {-      style.font = styleString;-    } catch (ex) {-      // Ignore failures to set to invalid font.-    }--    return fontStyleCache[styleString] = {-      style: style.fontStyle || DEFAULT_STYLE.style,-      variant: style.fontVariant || DEFAULT_STYLE.variant,-      weight: style.fontWeight || DEFAULT_STYLE.weight,-      size: style.fontSize || DEFAULT_STYLE.size,-      family: style.fontFamily || DEFAULT_STYLE.family-    };-  }--  function getComputedStyle(style, element) {-    var computedStyle = {};--    for (var p in style) {-      computedStyle[p] = style[p];-    }--    // Compute the size-    var canvasFontSize = parseFloat(element.currentStyle.fontSize),-        fontSize = parseFloat(style.size);--    if (typeof style.size == 'number') {-      computedStyle.size = style.size;-    } else if (style.size.indexOf('px') != -1) {-      computedStyle.size = fontSize;-    } else if (style.size.indexOf('em') != -1) {-      computedStyle.size = canvasFontSize * fontSize;-    } else if(style.size.indexOf('%') != -1) {-      computedStyle.size = (canvasFontSize / 100) * fontSize;-    } else if (style.size.indexOf('pt') != -1) {-      computedStyle.size = fontSize / .75;-    } else {-      computedStyle.size = canvasFontSize;-    }--    // Different scaling between normal text and VML text. This was found using-    // trial and error to get the same size as non VML text.-    computedStyle.size *= 0.981;--    return computedStyle;-  }--  function buildStyle(style) {-    return style.style + ' ' + style.variant + ' ' + style.weight + ' ' +-        style.size + 'px ' + style.family;-  }--  function processLineCap(lineCap) {-    switch (lineCap) {-      case 'butt':-        return 'flat';-      case 'round':-        return 'round';-      case 'square':-      default:-        return 'square';-    }-  }--  /**-   * This class implements CanvasRenderingContext2D interface as described by-   * the WHATWG.-   * @param {HTMLElement} surfaceElement The element that the 2D context should-   * be associated with-   */-  function CanvasRenderingContext2D_(surfaceElement) {-    this.m_ = createMatrixIdentity();--    this.mStack_ = [];-    this.aStack_ = [];-    this.currentPath_ = [];--    // Canvas context properties-    this.strokeStyle = '#000';-    this.fillStyle = '#000';--    this.lineWidth = 1;-    this.lineJoin = 'miter';-    this.lineCap = 'butt';-    this.miterLimit = Z * 1;-    this.globalAlpha = 1;-    this.font = '10px sans-serif';-    this.textAlign = 'left';-    this.textBaseline = 'alphabetic';-    this.canvas = surfaceElement;--    var el = surfaceElement.ownerDocument.createElement('div');-    el.style.width =  surfaceElement.clientWidth + 'px';-    el.style.height = surfaceElement.clientHeight + 'px';-    el.style.overflow = 'hidden';-    el.style.position = 'absolute';-    surfaceElement.appendChild(el);--    this.element_ = el;-    this.arcScaleX_ = 1;-    this.arcScaleY_ = 1;-    this.lineScale_ = 1;-  }--  var contextPrototype = CanvasRenderingContext2D_.prototype;-  contextPrototype.clearRect = function() {-    if (this.textMeasureEl_) {-      this.textMeasureEl_.removeNode(true);-      this.textMeasureEl_ = null;-    }-    this.element_.innerHTML = '';-  };--  contextPrototype.beginPath = function() {-    // TODO: Branch current matrix so that save/restore has no effect-    //       as per safari docs.-    this.currentPath_ = [];-  };--  contextPrototype.moveTo = function(aX, aY) {-    var p = this.getCoords_(aX, aY);-    this.currentPath_.push({type: 'moveTo', x: p.x, y: p.y});-    this.currentX_ = p.x;-    this.currentY_ = p.y;-  };--  contextPrototype.lineTo = function(aX, aY) {-    var p = this.getCoords_(aX, aY);-    this.currentPath_.push({type: 'lineTo', x: p.x, y: p.y});--    this.currentX_ = p.x;-    this.currentY_ = p.y;-  };--  contextPrototype.bezierCurveTo = function(aCP1x, aCP1y,-                                            aCP2x, aCP2y,-                                            aX, aY) {-    var p = this.getCoords_(aX, aY);-    var cp1 = this.getCoords_(aCP1x, aCP1y);-    var cp2 = this.getCoords_(aCP2x, aCP2y);-    bezierCurveTo(this, cp1, cp2, p);-  };--  // Helper function that takes the already fixed cordinates.-  function bezierCurveTo(self, cp1, cp2, p) {-    self.currentPath_.push({-      type: 'bezierCurveTo',-      cp1x: cp1.x,-      cp1y: cp1.y,-      cp2x: cp2.x,-      cp2y: cp2.y,-      x: p.x,-      y: p.y-    });-    self.currentX_ = p.x;-    self.currentY_ = p.y;-  }--  contextPrototype.quadraticCurveTo = function(aCPx, aCPy, aX, aY) {-    // the following is lifted almost directly from-    // http://developer.mozilla.org/en/docs/Canvas_tutorial:Drawing_shapes--    var cp = this.getCoords_(aCPx, aCPy);-    var p = this.getCoords_(aX, aY);--    var cp1 = {-      x: this.currentX_ + 2.0 / 3.0 * (cp.x - this.currentX_),-      y: this.currentY_ + 2.0 / 3.0 * (cp.y - this.currentY_)-    };-    var cp2 = {-      x: cp1.x + (p.x - this.currentX_) / 3.0,-      y: cp1.y + (p.y - this.currentY_) / 3.0-    };--    bezierCurveTo(this, cp1, cp2, p);-  };--  contextPrototype.arc = function(aX, aY, aRadius,-                                  aStartAngle, aEndAngle, aClockwise) {-    aRadius *= Z;-    var arcType = aClockwise ? 'at' : 'wa';--    var xStart = aX + mc(aStartAngle) * aRadius - Z2;-    var yStart = aY + ms(aStartAngle) * aRadius - Z2;--    var xEnd = aX + mc(aEndAngle) * aRadius - Z2;-    var yEnd = aY + ms(aEndAngle) * aRadius - Z2;--    // IE won't render arches drawn counter clockwise if xStart == xEnd.-    if (xStart == xEnd && !aClockwise) {-      xStart += 0.125; // Offset xStart by 1/80 of a pixel. Use something-                       // that can be represented in binary-    }--    var p = this.getCoords_(aX, aY);-    var pStart = this.getCoords_(xStart, yStart);-    var pEnd = this.getCoords_(xEnd, yEnd);--    this.currentPath_.push({type: arcType,-                           x: p.x,-                           y: p.y,-                           radius: aRadius,-                           xStart: pStart.x,-                           yStart: pStart.y,-                           xEnd: pEnd.x,-                           yEnd: pEnd.y});--  };--  contextPrototype.rect = function(aX, aY, aWidth, aHeight) {-    this.moveTo(aX, aY);-    this.lineTo(aX + aWidth, aY);-    this.lineTo(aX + aWidth, aY + aHeight);-    this.lineTo(aX, aY + aHeight);-    this.closePath();-  };--  contextPrototype.strokeRect = function(aX, aY, aWidth, aHeight) {-    var oldPath = this.currentPath_;-    this.beginPath();--    this.moveTo(aX, aY);-    this.lineTo(aX + aWidth, aY);-    this.lineTo(aX + aWidth, aY + aHeight);-    this.lineTo(aX, aY + aHeight);-    this.closePath();-    this.stroke();--    this.currentPath_ = oldPath;-  };--  contextPrototype.fillRect = function(aX, aY, aWidth, aHeight) {-    var oldPath = this.currentPath_;-    this.beginPath();--    this.moveTo(aX, aY);-    this.lineTo(aX + aWidth, aY);-    this.lineTo(aX + aWidth, aY + aHeight);-    this.lineTo(aX, aY + aHeight);-    this.closePath();-    this.fill();--    this.currentPath_ = oldPath;-  };--  contextPrototype.createLinearGradient = function(aX0, aY0, aX1, aY1) {-    var gradient = new CanvasGradient_('gradient');-    gradient.x0_ = aX0;-    gradient.y0_ = aY0;-    gradient.x1_ = aX1;-    gradient.y1_ = aY1;-    return gradient;-  };--  contextPrototype.createRadialGradient = function(aX0, aY0, aR0,-                                                   aX1, aY1, aR1) {-    var gradient = new CanvasGradient_('gradientradial');-    gradient.x0_ = aX0;-    gradient.y0_ = aY0;-    gradient.r0_ = aR0;-    gradient.x1_ = aX1;-    gradient.y1_ = aY1;-    gradient.r1_ = aR1;-    return gradient;-  };--  contextPrototype.drawImage = function(image, var_args) {-    var dx, dy, dw, dh, sx, sy, sw, sh;--    // to find the original width we overide the width and height-    var oldRuntimeWidth = image.runtimeStyle.width;-    var oldRuntimeHeight = image.runtimeStyle.height;-    image.runtimeStyle.width = 'auto';-    image.runtimeStyle.height = 'auto';--    // get the original size-    var w = image.width;-    var h = image.height;--    // and remove overides-    image.runtimeStyle.width = oldRuntimeWidth;-    image.runtimeStyle.height = oldRuntimeHeight;--    if (arguments.length == 3) {-      dx = arguments[1];-      dy = arguments[2];-      sx = sy = 0;-      sw = dw = w;-      sh = dh = h;-    } else if (arguments.length == 5) {-      dx = arguments[1];-      dy = arguments[2];-      dw = arguments[3];-      dh = arguments[4];-      sx = sy = 0;-      sw = w;-      sh = h;-    } else if (arguments.length == 9) {-      sx = arguments[1];-      sy = arguments[2];-      sw = arguments[3];-      sh = arguments[4];-      dx = arguments[5];-      dy = arguments[6];-      dw = arguments[7];-      dh = arguments[8];-    } else {-      throw Error('Invalid number of arguments');-    }--    var d = this.getCoords_(dx, dy);--    var w2 = sw / 2;-    var h2 = sh / 2;--    var vmlStr = [];--    var W = 10;-    var H = 10;--    // For some reason that I've now forgotten, using divs didn't work-    vmlStr.push(' <g_vml_:group',-                ' coordsize="', Z * W, ',', Z * H, '"',-                ' coordorigin="0,0"' ,-                ' style="width:', W, 'px;height:', H, 'px;position:absolute;');--    // If filters are necessary (rotation exists), create them-    // filters are bog-slow, so only create them if abbsolutely necessary-    // The following check doesn't account for skews (which don't exist-    // in the canvas spec (yet) anyway.--    if (this.m_[0][0] != 1 || this.m_[0][1] ||-        this.m_[1][1] != 1 || this.m_[1][0]) {-      var filter = [];--      // Note the 12/21 reversal-      filter.push('M11=', this.m_[0][0], ',',-                  'M12=', this.m_[1][0], ',',-                  'M21=', this.m_[0][1], ',',-                  'M22=', this.m_[1][1], ',',-                  'Dx=', mr(d.x / Z), ',',-                  'Dy=', mr(d.y / Z), '');--      // Bounding box calculation (need to minimize displayed area so that-      // filters don't waste time on unused pixels.-      var max = d;-      var c2 = this.getCoords_(dx + dw, dy);-      var c3 = this.getCoords_(dx, dy + dh);-      var c4 = this.getCoords_(dx + dw, dy + dh);--      max.x = m.max(max.x, c2.x, c3.x, c4.x);-      max.y = m.max(max.y, c2.y, c3.y, c4.y);--      vmlStr.push('padding:0 ', mr(max.x / Z), 'px ', mr(max.y / Z),-                  'px 0;filter:progid:DXImageTransform.Microsoft.Matrix(',-                  filter.join(''), ", sizingmethod='clip');");--    } else {-      vmlStr.push('top:', mr(d.y / Z), 'px;left:', mr(d.x / Z), 'px;');-    }--    vmlStr.push(' ">' ,-                '<g_vml_:image src="', image.src, '"',-                ' style="width:', Z * dw, 'px;',-                ' height:', Z * dh, 'px"',-                ' cropleft="', sx / w, '"',-                ' croptop="', sy / h, '"',-                ' cropright="', (w - sx - sw) / w, '"',-                ' cropbottom="', (h - sy - sh) / h, '"',-                ' />',-                '</g_vml_:group>');--    this.element_.insertAdjacentHTML('BeforeEnd', vmlStr.join(''));-  };--  contextPrototype.stroke = function(aFill) {-    var W = 10;-    var H = 10;-    // Divide the shape into chunks if it's too long because IE has a limit-    // somewhere for how long a VML shape can be. This simple division does-    // not work with fills, only strokes, unfortunately.-    var chunkSize = 5000;--    var min = {x: null, y: null};-    var max = {x: null, y: null};--    for (var j = 0; j < this.currentPath_.length; j += chunkSize) {-      var lineStr = [];-      var lineOpen = false;--      lineStr.push('<g_vml_:shape',-                   ' filled="', !!aFill, '"',-                   ' style="position:absolute;width:', W, 'px;height:', H, 'px;"',-                   ' coordorigin="0,0"',-                   ' coordsize="', Z * W, ',', Z * H, '"',-                   ' stroked="', !aFill, '"',-                   ' path="');--      var newSeq = false;--      for (var i = j; i < Math.min(j + chunkSize, this.currentPath_.length); i++) {-        if (i % chunkSize == 0 && i > 0) { // move into position for next chunk-          lineStr.push(' m ', mr(this.currentPath_[i-1].x), ',', mr(this.currentPath_[i-1].y));-        }--        var p = this.currentPath_[i];-        var c;--        switch (p.type) {-          case 'moveTo':-            c = p;-            lineStr.push(' m ', mr(p.x), ',', mr(p.y));-            break;-          case 'lineTo':-            lineStr.push(' l ', mr(p.x), ',', mr(p.y));-            break;-          case 'close':-            lineStr.push(' x ');-            p = null;-            break;-          case 'bezierCurveTo':-            lineStr.push(' c ',-                         mr(p.cp1x), ',', mr(p.cp1y), ',',-                         mr(p.cp2x), ',', mr(p.cp2y), ',',-                         mr(p.x), ',', mr(p.y));-            break;-          case 'at':-          case 'wa':-            lineStr.push(' ', p.type, ' ',-                         mr(p.x - this.arcScaleX_ * p.radius), ',',-                         mr(p.y - this.arcScaleY_ * p.radius), ' ',-                         mr(p.x + this.arcScaleX_ * p.radius), ',',-                         mr(p.y + this.arcScaleY_ * p.radius), ' ',-                         mr(p.xStart), ',', mr(p.yStart), ' ',-                         mr(p.xEnd), ',', mr(p.yEnd));-            break;-        }-  -  -        // TODO: Following is broken for curves due to-        //       move to proper paths.-  -        // Figure out dimensions so we can do gradient fills-        // properly-        if (p) {-          if (min.x == null || p.x < min.x) {-            min.x = p.x;-          }-          if (max.x == null || p.x > max.x) {-            max.x = p.x;-          }-          if (min.y == null || p.y < min.y) {-            min.y = p.y;-          }-          if (max.y == null || p.y > max.y) {-            max.y = p.y;-          }-        }-      }-      lineStr.push(' ">');-  -      if (!aFill) {-        appendStroke(this, lineStr);-      } else {-        appendFill(this, lineStr, min, max);-      }-  -      lineStr.push('</g_vml_:shape>');-  -      this.element_.insertAdjacentHTML('beforeEnd', lineStr.join(''));-    }-  };--  function appendStroke(ctx, lineStr) {-    var a = processStyle(ctx.strokeStyle);-    var color = a.color;-    var opacity = a.alpha * ctx.globalAlpha;-    var lineWidth = ctx.lineScale_ * ctx.lineWidth;--    // VML cannot correctly render a line if the width is less than 1px.-    // In that case, we dilute the color to make the line look thinner.-    if (lineWidth < 1) {-      opacity *= lineWidth;-    }--    lineStr.push(-      '<g_vml_:stroke',-      ' opacity="', opacity, '"',-      ' joinstyle="', ctx.lineJoin, '"',-      ' miterlimit="', ctx.miterLimit, '"',-      ' endcap="', processLineCap(ctx.lineCap), '"',-      ' weight="', lineWidth, 'px"',-      ' color="', color, '" />'-    );-  }--  function appendFill(ctx, lineStr, min, max) {-    var fillStyle = ctx.fillStyle;-    var arcScaleX = ctx.arcScaleX_;-    var arcScaleY = ctx.arcScaleY_;-    var width = max.x - min.x;-    var height = max.y - min.y;-    if (fillStyle instanceof CanvasGradient_) {-      // TODO: Gradients transformed with the transformation matrix.-      var angle = 0;-      var focus = {x: 0, y: 0};--      // additional offset-      var shift = 0;-      // scale factor for offset-      var expansion = 1;--      if (fillStyle.type_ == 'gradient') {-        var x0 = fillStyle.x0_ / arcScaleX;-        var y0 = fillStyle.y0_ / arcScaleY;-        var x1 = fillStyle.x1_ / arcScaleX;-        var y1 = fillStyle.y1_ / arcScaleY;-        var p0 = ctx.getCoords_(x0, y0);-        var p1 = ctx.getCoords_(x1, y1);-        var dx = p1.x - p0.x;-        var dy = p1.y - p0.y;-        angle = Math.atan2(dx, dy) * 180 / Math.PI;--        // The angle should be a non-negative number.-        if (angle < 0) {-          angle += 360;-        }--        // Very small angles produce an unexpected result because they are-        // converted to a scientific notation string.-        if (angle < 1e-6) {-          angle = 0;-        }-      } else {-        var p0 = ctx.getCoords_(fillStyle.x0_, fillStyle.y0_);-        focus = {-          x: (p0.x - min.x) / width,-          y: (p0.y - min.y) / height-        };--        width  /= arcScaleX * Z;-        height /= arcScaleY * Z;-        var dimension = m.max(width, height);-        shift = 2 * fillStyle.r0_ / dimension;-        expansion = 2 * fillStyle.r1_ / dimension - shift;-      }--      // We need to sort the color stops in ascending order by offset,-      // otherwise IE won't interpret it correctly.-      var stops = fillStyle.colors_;-      stops.sort(function(cs1, cs2) {-        return cs1.offset - cs2.offset;-      });--      var length = stops.length;-      var color1 = stops[0].color;-      var color2 = stops[length - 1].color;-      var opacity1 = stops[0].alpha * ctx.globalAlpha;-      var opacity2 = stops[length - 1].alpha * ctx.globalAlpha;--      var colors = [];-      for (var i = 0; i < length; i++) {-        var stop = stops[i];-        colors.push(stop.offset * expansion + shift + ' ' + stop.color);-      }--      // When colors attribute is used, the meanings of opacity and o:opacity2-      // are reversed.-      lineStr.push('<g_vml_:fill type="', fillStyle.type_, '"',-                   ' method="none" focus="100%"',-                   ' color="', color1, '"',-                   ' color2="', color2, '"',-                   ' colors="', colors.join(','), '"',-                   ' opacity="', opacity2, '"',-                   ' g_o_:opacity2="', opacity1, '"',-                   ' angle="', angle, '"',-                   ' focusposition="', focus.x, ',', focus.y, '" />');-    } else if (fillStyle instanceof CanvasPattern_) {-      if (width && height) {-        var deltaLeft = -min.x;-        var deltaTop = -min.y;-        lineStr.push('<g_vml_:fill',-                     ' position="',-                     deltaLeft / width * arcScaleX * arcScaleX, ',',-                     deltaTop / height * arcScaleY * arcScaleY, '"',-                     ' type="tile"',-                     // TODO: Figure out the correct size to fit the scale.-                     //' size="', w, 'px ', h, 'px"',-                     ' src="', fillStyle.src_, '" />');-       }-    } else {-      var a = processStyle(ctx.fillStyle);-      var color = a.color;-      var opacity = a.alpha * ctx.globalAlpha;-      lineStr.push('<g_vml_:fill color="', color, '" opacity="', opacity,-                   '" />');-    }-  }--  contextPrototype.fill = function() {-    this.stroke(true);-  };--  contextPrototype.closePath = function() {-    this.currentPath_.push({type: 'close'});-  };--  /**-   * @private-   */-  contextPrototype.getCoords_ = function(aX, aY) {-    var m = this.m_;-    return {-      x: Z * (aX * m[0][0] + aY * m[1][0] + m[2][0]) - Z2,-      y: Z * (aX * m[0][1] + aY * m[1][1] + m[2][1]) - Z2-    };-  };--  contextPrototype.save = function() {-    var o = {};-    copyState(this, o);-    this.aStack_.push(o);-    this.mStack_.push(this.m_);-    this.m_ = matrixMultiply(createMatrixIdentity(), this.m_);-  };--  contextPrototype.restore = function() {-    if (this.aStack_.length) {-      copyState(this.aStack_.pop(), this);-      this.m_ = this.mStack_.pop();-    }-  };--  function matrixIsFinite(m) {-    return isFinite(m[0][0]) && isFinite(m[0][1]) &&-        isFinite(m[1][0]) && isFinite(m[1][1]) &&-        isFinite(m[2][0]) && isFinite(m[2][1]);-  }--  function setM(ctx, m, updateLineScale) {-    if (!matrixIsFinite(m)) {-      return;-    }-    ctx.m_ = m;--    if (updateLineScale) {-      // Get the line scale.-      // Determinant of this.m_ means how much the area is enlarged by the-      // transformation. So its square root can be used as a scale factor-      // for width.-      var det = m[0][0] * m[1][1] - m[0][1] * m[1][0];-      ctx.lineScale_ = sqrt(abs(det));-    }-  }--  contextPrototype.translate = function(aX, aY) {-    var m1 = [-      [1,  0,  0],-      [0,  1,  0],-      [aX, aY, 1]-    ];--    setM(this, matrixMultiply(m1, this.m_), false);-  };--  contextPrototype.rotate = function(aRot) {-    var c = mc(aRot);-    var s = ms(aRot);--    var m1 = [-      [c,  s, 0],-      [-s, c, 0],-      [0,  0, 1]-    ];--    setM(this, matrixMultiply(m1, this.m_), false);-  };--  contextPrototype.scale = function(aX, aY) {-    this.arcScaleX_ *= aX;-    this.arcScaleY_ *= aY;-    var m1 = [-      [aX, 0,  0],-      [0,  aY, 0],-      [0,  0,  1]-    ];--    setM(this, matrixMultiply(m1, this.m_), true);-  };--  contextPrototype.transform = function(m11, m12, m21, m22, dx, dy) {-    var m1 = [-      [m11, m12, 0],-      [m21, m22, 0],-      [dx,  dy,  1]-    ];--    setM(this, matrixMultiply(m1, this.m_), true);-  };--  contextPrototype.setTransform = function(m11, m12, m21, m22, dx, dy) {-    var m = [-      [m11, m12, 0],-      [m21, m22, 0],-      [dx,  dy,  1]-    ];--    setM(this, m, true);-  };--  /**-   * The text drawing function.-   * The maxWidth argument isn't taken in account, since no browser supports-   * it yet.-   */-  contextPrototype.drawText_ = function(text, x, y, maxWidth, stroke) {-    var m = this.m_,-        delta = 1000,-        left = 0,-        right = delta,-        offset = {x: 0, y: 0},-        lineStr = [];--    var fontStyle = getComputedStyle(processFontStyle(this.font),-                                     this.element_);--    var fontStyleString = buildStyle(fontStyle);--    var elementStyle = this.element_.currentStyle;-    var textAlign = this.textAlign.toLowerCase();-    switch (textAlign) {-      case 'left':-      case 'center':-      case 'right':-        break;-      case 'end':-        textAlign = elementStyle.direction == 'ltr' ? 'right' : 'left';-        break;-      case 'start':-        textAlign = elementStyle.direction == 'rtl' ? 'right' : 'left';-        break;-      default:-        textAlign = 'left';-    }--    // 1.75 is an arbitrary number, as there is no info about the text baseline-    switch (this.textBaseline) {-      case 'hanging':-      case 'top':-        offset.y = fontStyle.size / 1.75;-        break;-      case 'middle':-        break;-      default:-      case null:-      case 'alphabetic':-      case 'ideographic':-      case 'bottom':-        offset.y = -fontStyle.size / 2.25;-        break;-    }--    switch(textAlign) {-      case 'right':-        left = delta;-        right = 0.05;-        break;-      case 'center':-        left = right = delta / 2;-        break;-    }--    var d = this.getCoords_(x + offset.x, y + offset.y);--    lineStr.push('<g_vml_:line from="', -left ,' 0" to="', right ,' 0.05" ',-                 ' coordsize="100 100" coordorigin="0 0"',-                 ' filled="', !stroke, '" stroked="', !!stroke,-                 '" style="position:absolute;width:1px;height:1px;">');--    if (stroke) {-      appendStroke(this, lineStr);-    } else {-      // TODO: Fix the min and max params.-      appendFill(this, lineStr, {x: -left, y: 0},-                 {x: right, y: fontStyle.size});-    }--    var skewM = m[0][0].toFixed(3) + ',' + m[1][0].toFixed(3) + ',' +-                m[0][1].toFixed(3) + ',' + m[1][1].toFixed(3) + ',0,0';--    var skewOffset = mr(d.x / Z) + ',' + mr(d.y / Z);--    lineStr.push('<g_vml_:skew on="t" matrix="', skewM ,'" ',-                 ' offset="', skewOffset, '" origin="', left ,' 0" />',-                 '<g_vml_:path textpathok="true" />',-                 '<g_vml_:textpath on="true" string="',-                 encodeHtmlAttribute(text),-                 '" style="v-text-align:', textAlign,-                 ';font:', encodeHtmlAttribute(fontStyleString),-                 '" /></g_vml_:line>');--    this.element_.insertAdjacentHTML('beforeEnd', lineStr.join(''));-  };--  contextPrototype.fillText = function(text, x, y, maxWidth) {-    this.drawText_(text, x, y, maxWidth, false);-  };--  contextPrototype.strokeText = function(text, x, y, maxWidth) {-    this.drawText_(text, x, y, maxWidth, true);-  };--  contextPrototype.measureText = function(text) {-    if (!this.textMeasureEl_) {-      var s = '<span style="position:absolute;' +-          'top:-20000px;left:0;padding:0;margin:0;border:none;' +-          'white-space:pre;"></span>';-      this.element_.insertAdjacentHTML('beforeEnd', s);-      this.textMeasureEl_ = this.element_.lastChild;-    }-    var doc = this.element_.ownerDocument;-    this.textMeasureEl_.innerHTML = '';-    this.textMeasureEl_.style.font = this.font;-    // Don't use innerHTML or innerText because they allow markup/whitespace.-    this.textMeasureEl_.appendChild(doc.createTextNode(text));-    return {width: this.textMeasureEl_.offsetWidth};-  };--  /******** STUBS ********/-  contextPrototype.clip = function() {-    // TODO: Implement-  };--  contextPrototype.arcTo = function() {-    // TODO: Implement-  };--  contextPrototype.createPattern = function(image, repetition) {-    return new CanvasPattern_(image, repetition);-  };--  // Gradient / Pattern Stubs-  function CanvasGradient_(aType) {-    this.type_ = aType;-    this.x0_ = 0;-    this.y0_ = 0;-    this.r0_ = 0;-    this.x1_ = 0;-    this.y1_ = 0;-    this.r1_ = 0;-    this.colors_ = [];-  }--  CanvasGradient_.prototype.addColorStop = function(aOffset, aColor) {-    aColor = processStyle(aColor);-    this.colors_.push({offset: aOffset,-                       color: aColor.color,-                       alpha: aColor.alpha});-  };--  function CanvasPattern_(image, repetition) {-    assertImageIsValid(image);-    switch (repetition) {-      case 'repeat':-      case null:-      case '':-        this.repetition_ = 'repeat';-        break-      case 'repeat-x':-      case 'repeat-y':-      case 'no-repeat':-        this.repetition_ = repetition;-        break;-      default:-        throwException('SYNTAX_ERR');-    }--    this.src_ = image.src;-    this.width_ = image.width;-    this.height_ = image.height;-  }--  function throwException(s) {-    throw new DOMException_(s);-  }--  function assertImageIsValid(img) {-    if (!img || img.nodeType != 1 || img.tagName != 'IMG') {-      throwException('TYPE_MISMATCH_ERR');-    }-    if (img.readyState != 'complete') {-      throwException('INVALID_STATE_ERR');-    }-  }--  function DOMException_(s) {-    this.code = this[s];-    this.message = s +': DOM Exception ' + this.code;-  }-  var p = DOMException_.prototype = new Error;-  p.INDEX_SIZE_ERR = 1;-  p.DOMSTRING_SIZE_ERR = 2;-  p.HIERARCHY_REQUEST_ERR = 3;-  p.WRONG_DOCUMENT_ERR = 4;-  p.INVALID_CHARACTER_ERR = 5;-  p.NO_DATA_ALLOWED_ERR = 6;-  p.NO_MODIFICATION_ALLOWED_ERR = 7;-  p.NOT_FOUND_ERR = 8;-  p.NOT_SUPPORTED_ERR = 9;-  p.INUSE_ATTRIBUTE_ERR = 10;-  p.INVALID_STATE_ERR = 11;-  p.SYNTAX_ERR = 12;-  p.INVALID_MODIFICATION_ERR = 13;-  p.NAMESPACE_ERR = 14;-  p.INVALID_ACCESS_ERR = 15;-  p.VALIDATION_ERR = 16;-  p.TYPE_MISMATCH_ERR = 17;--  // set up externs-  G_vmlCanvasManager = G_vmlCanvasManager_;-  CanvasRenderingContext2D = CanvasRenderingContext2D_;-  CanvasGradient = CanvasGradient_;-  CanvasPattern = CanvasPattern_;-  DOMException = DOMException_;-})();--} // if
− static/excanvas.min.js
@@ -1,1 +0,0 @@-if(!document.createElement("canvas").getContext){(function(){var z=Math;var K=z.round;var J=z.sin;var U=z.cos;var b=z.abs;var k=z.sqrt;var D=10;var F=D/2;function T(){return this.context_||(this.context_=new W(this))}var O=Array.prototype.slice;function G(i,j,m){var Z=O.call(arguments,2);return function(){return i.apply(j,Z.concat(O.call(arguments)))}}function AD(Z){return String(Z).replace(/&/g,"&amp;").replace(/"/g,"&quot;")}function r(i){if(!i.namespaces.g_vml_){i.namespaces.add("g_vml_","urn:schemas-microsoft-com:vml","#default#VML")}if(!i.namespaces.g_o_){i.namespaces.add("g_o_","urn:schemas-microsoft-com:office:office","#default#VML")}if(!i.styleSheets.ex_canvas_){var Z=i.createStyleSheet();Z.owningElement.id="ex_canvas_";Z.cssText="canvas{display:inline-block;overflow:hidden;text-align:left;width:300px;height:150px}"}}r(document);var E={init:function(Z){if(/MSIE/.test(navigator.userAgent)&&!window.opera){var i=Z||document;i.createElement("canvas");i.attachEvent("onreadystatechange",G(this.init_,this,i))}},init_:function(m){var j=m.getElementsByTagName("canvas");for(var Z=0;Z<j.length;Z++){this.initElement(j[Z])}},initElement:function(i){if(!i.getContext){i.getContext=T;r(i.ownerDocument);i.innerHTML="";i.attachEvent("onpropertychange",S);i.attachEvent("onresize",w);var Z=i.attributes;if(Z.width&&Z.width.specified){i.style.width=Z.width.nodeValue+"px"}else{i.width=i.clientWidth}if(Z.height&&Z.height.specified){i.style.height=Z.height.nodeValue+"px"}else{i.height=i.clientHeight}}return i}};function S(i){var Z=i.srcElement;switch(i.propertyName){case"width":Z.getContext().clearRect();Z.style.width=Z.attributes.width.nodeValue+"px";Z.firstChild.style.width=Z.clientWidth+"px";break;case"height":Z.getContext().clearRect();Z.style.height=Z.attributes.height.nodeValue+"px";Z.firstChild.style.height=Z.clientHeight+"px";break}}function w(i){var Z=i.srcElement;if(Z.firstChild){Z.firstChild.style.width=Z.clientWidth+"px";Z.firstChild.style.height=Z.clientHeight+"px"}}E.init();var I=[];for(var AC=0;AC<16;AC++){for(var AB=0;AB<16;AB++){I[AC*16+AB]=AC.toString(16)+AB.toString(16)}}function V(){return[[1,0,0],[0,1,0],[0,0,1]]}function d(m,j){var i=V();for(var Z=0;Z<3;Z++){for(var AF=0;AF<3;AF++){var p=0;for(var AE=0;AE<3;AE++){p+=m[Z][AE]*j[AE][AF]}i[Z][AF]=p}}return i}function Q(i,Z){Z.fillStyle=i.fillStyle;Z.lineCap=i.lineCap;Z.lineJoin=i.lineJoin;Z.lineWidth=i.lineWidth;Z.miterLimit=i.miterLimit;Z.shadowBlur=i.shadowBlur;Z.shadowColor=i.shadowColor;Z.shadowOffsetX=i.shadowOffsetX;Z.shadowOffsetY=i.shadowOffsetY;Z.strokeStyle=i.strokeStyle;Z.globalAlpha=i.globalAlpha;Z.font=i.font;Z.textAlign=i.textAlign;Z.textBaseline=i.textBaseline;Z.arcScaleX_=i.arcScaleX_;Z.arcScaleY_=i.arcScaleY_;Z.lineScale_=i.lineScale_}var B={aliceblue:"#F0F8FF",antiquewhite:"#FAEBD7",aquamarine:"#7FFFD4",azure:"#F0FFFF",beige:"#F5F5DC",bisque:"#FFE4C4",black:"#000000",blanchedalmond:"#FFEBCD",blueviolet:"#8A2BE2",brown:"#A52A2A",burlywood:"#DEB887",cadetblue:"#5F9EA0",chartreuse:"#7FFF00",chocolate:"#D2691E",coral:"#FF7F50",cornflowerblue:"#6495ED",cornsilk:"#FFF8DC",crimson:"#DC143C",cyan:"#00FFFF",darkblue:"#00008B",darkcyan:"#008B8B",darkgoldenrod:"#B8860B",darkgray:"#A9A9A9",darkgreen:"#006400",darkgrey:"#A9A9A9",darkkhaki:"#BDB76B",darkmagenta:"#8B008B",darkolivegreen:"#556B2F",darkorange:"#FF8C00",darkorchid:"#9932CC",darkred:"#8B0000",darksalmon:"#E9967A",darkseagreen:"#8FBC8F",darkslateblue:"#483D8B",darkslategray:"#2F4F4F",darkslategrey:"#2F4F4F",darkturquoise:"#00CED1",darkviolet:"#9400D3",deeppink:"#FF1493",deepskyblue:"#00BFFF",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1E90FF",firebrick:"#B22222",floralwhite:"#FFFAF0",forestgreen:"#228B22",gainsboro:"#DCDCDC",ghostwhite:"#F8F8FF",gold:"#FFD700",goldenrod:"#DAA520",grey:"#808080",greenyellow:"#ADFF2F",honeydew:"#F0FFF0",hotpink:"#FF69B4",indianred:"#CD5C5C",indigo:"#4B0082",ivory:"#FFFFF0",khaki:"#F0E68C",lavender:"#E6E6FA",lavenderblush:"#FFF0F5",lawngreen:"#7CFC00",lemonchiffon:"#FFFACD",lightblue:"#ADD8E6",lightcoral:"#F08080",lightcyan:"#E0FFFF",lightgoldenrodyellow:"#FAFAD2",lightgreen:"#90EE90",lightgrey:"#D3D3D3",lightpink:"#FFB6C1",lightsalmon:"#FFA07A",lightseagreen:"#20B2AA",lightskyblue:"#87CEFA",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#B0C4DE",lightyellow:"#FFFFE0",limegreen:"#32CD32",linen:"#FAF0E6",magenta:"#FF00FF",mediumaquamarine:"#66CDAA",mediumblue:"#0000CD",mediumorchid:"#BA55D3",mediumpurple:"#9370DB",mediumseagreen:"#3CB371",mediumslateblue:"#7B68EE",mediumspringgreen:"#00FA9A",mediumturquoise:"#48D1CC",mediumvioletred:"#C71585",midnightblue:"#191970",mintcream:"#F5FFFA",mistyrose:"#FFE4E1",moccasin:"#FFE4B5",navajowhite:"#FFDEAD",oldlace:"#FDF5E6",olivedrab:"#6B8E23",orange:"#FFA500",orangered:"#FF4500",orchid:"#DA70D6",palegoldenrod:"#EEE8AA",palegreen:"#98FB98",paleturquoise:"#AFEEEE",palevioletred:"#DB7093",papayawhip:"#FFEFD5",peachpuff:"#FFDAB9",peru:"#CD853F",pink:"#FFC0CB",plum:"#DDA0DD",powderblue:"#B0E0E6",rosybrown:"#BC8F8F",royalblue:"#4169E1",saddlebrown:"#8B4513",salmon:"#FA8072",sandybrown:"#F4A460",seagreen:"#2E8B57",seashell:"#FFF5EE",sienna:"#A0522D",skyblue:"#87CEEB",slateblue:"#6A5ACD",slategray:"#708090",slategrey:"#708090",snow:"#FFFAFA",springgreen:"#00FF7F",steelblue:"#4682B4",tan:"#D2B48C",thistle:"#D8BFD8",tomato:"#FF6347",turquoise:"#40E0D0",violet:"#EE82EE",wheat:"#F5DEB3",whitesmoke:"#F5F5F5",yellowgreen:"#9ACD32"};function g(i){var m=i.indexOf("(",3);var Z=i.indexOf(")",m+1);var j=i.substring(m+1,Z).split(",");if(j.length==4&&i.substr(3,1)=="a"){alpha=Number(j[3])}else{j[3]=1}return j}function C(Z){return parseFloat(Z)/100}function N(i,j,Z){return Math.min(Z,Math.max(j,i))}function c(AF){var j,i,Z;h=parseFloat(AF[0])/360%360;if(h<0){h++}s=N(C(AF[1]),0,1);l=N(C(AF[2]),0,1);if(s==0){j=i=Z=l}else{var m=l<0.5?l*(1+s):l+s-l*s;var AE=2*l-m;j=A(AE,m,h+1/3);i=A(AE,m,h);Z=A(AE,m,h-1/3)}return"#"+I[Math.floor(j*255)]+I[Math.floor(i*255)]+I[Math.floor(Z*255)]}function A(i,Z,j){if(j<0){j++}if(j>1){j--}if(6*j<1){return i+(Z-i)*6*j}else{if(2*j<1){return Z}else{if(3*j<2){return i+(Z-i)*(2/3-j)*6}else{return i}}}}function Y(Z){var AE,p=1;Z=String(Z);if(Z.charAt(0)=="#"){AE=Z}else{if(/^rgb/.test(Z)){var m=g(Z);var AE="#",AF;for(var j=0;j<3;j++){if(m[j].indexOf("%")!=-1){AF=Math.floor(C(m[j])*255)}else{AF=Number(m[j])}AE+=I[N(AF,0,255)]}p=m[3]}else{if(/^hsl/.test(Z)){var m=g(Z);AE=c(m);p=m[3]}else{AE=B[Z]||Z}}}return{color:AE,alpha:p}}var L={style:"normal",variant:"normal",weight:"normal",size:10,family:"sans-serif"};var f={};function X(Z){if(f[Z]){return f[Z]}var m=document.createElement("div");var j=m.style;try{j.font=Z}catch(i){}return f[Z]={style:j.fontStyle||L.style,variant:j.fontVariant||L.variant,weight:j.fontWeight||L.weight,size:j.fontSize||L.size,family:j.fontFamily||L.family}}function P(j,i){var Z={};for(var AF in j){Z[AF]=j[AF]}var AE=parseFloat(i.currentStyle.fontSize),m=parseFloat(j.size);if(typeof j.size=="number"){Z.size=j.size}else{if(j.size.indexOf("px")!=-1){Z.size=m}else{if(j.size.indexOf("em")!=-1){Z.size=AE*m}else{if(j.size.indexOf("%")!=-1){Z.size=(AE/100)*m}else{if(j.size.indexOf("pt")!=-1){Z.size=m/0.75}else{Z.size=AE}}}}}Z.size*=0.981;return Z}function AA(Z){return Z.style+" "+Z.variant+" "+Z.weight+" "+Z.size+"px "+Z.family}function t(Z){switch(Z){case"butt":return"flat";case"round":return"round";case"square":default:return"square"}}function W(i){this.m_=V();this.mStack_=[];this.aStack_=[];this.currentPath_=[];this.strokeStyle="#000";this.fillStyle="#000";this.lineWidth=1;this.lineJoin="miter";this.lineCap="butt";this.miterLimit=D*1;this.globalAlpha=1;this.font="10px sans-serif";this.textAlign="left";this.textBaseline="alphabetic";this.canvas=i;var Z=i.ownerDocument.createElement("div");Z.style.width=i.clientWidth+"px";Z.style.height=i.clientHeight+"px";Z.style.overflow="hidden";Z.style.position="absolute";i.appendChild(Z);this.element_=Z;this.arcScaleX_=1;this.arcScaleY_=1;this.lineScale_=1}var M=W.prototype;M.clearRect=function(){if(this.textMeasureEl_){this.textMeasureEl_.removeNode(true);this.textMeasureEl_=null}this.element_.innerHTML=""};M.beginPath=function(){this.currentPath_=[]};M.moveTo=function(i,Z){var j=this.getCoords_(i,Z);this.currentPath_.push({type:"moveTo",x:j.x,y:j.y});this.currentX_=j.x;this.currentY_=j.y};M.lineTo=function(i,Z){var j=this.getCoords_(i,Z);this.currentPath_.push({type:"lineTo",x:j.x,y:j.y});this.currentX_=j.x;this.currentY_=j.y};M.bezierCurveTo=function(j,i,AI,AH,AG,AE){var Z=this.getCoords_(AG,AE);var AF=this.getCoords_(j,i);var m=this.getCoords_(AI,AH);e(this,AF,m,Z)};function e(Z,m,j,i){Z.currentPath_.push({type:"bezierCurveTo",cp1x:m.x,cp1y:m.y,cp2x:j.x,cp2y:j.y,x:i.x,y:i.y});Z.currentX_=i.x;Z.currentY_=i.y}M.quadraticCurveTo=function(AG,j,i,Z){var AF=this.getCoords_(AG,j);var AE=this.getCoords_(i,Z);var AH={x:this.currentX_+2/3*(AF.x-this.currentX_),y:this.currentY_+2/3*(AF.y-this.currentY_)};var m={x:AH.x+(AE.x-this.currentX_)/3,y:AH.y+(AE.y-this.currentY_)/3};e(this,AH,m,AE)};M.arc=function(AJ,AH,AI,AE,i,j){AI*=D;var AN=j?"at":"wa";var AK=AJ+U(AE)*AI-F;var AM=AH+J(AE)*AI-F;var Z=AJ+U(i)*AI-F;var AL=AH+J(i)*AI-F;if(AK==Z&&!j){AK+=0.125}var m=this.getCoords_(AJ,AH);var AG=this.getCoords_(AK,AM);var AF=this.getCoords_(Z,AL);this.currentPath_.push({type:AN,x:m.x,y:m.y,radius:AI,xStart:AG.x,yStart:AG.y,xEnd:AF.x,yEnd:AF.y})};M.rect=function(j,i,Z,m){this.moveTo(j,i);this.lineTo(j+Z,i);this.lineTo(j+Z,i+m);this.lineTo(j,i+m);this.closePath()};M.strokeRect=function(j,i,Z,m){var p=this.currentPath_;this.beginPath();this.moveTo(j,i);this.lineTo(j+Z,i);this.lineTo(j+Z,i+m);this.lineTo(j,i+m);this.closePath();this.stroke();this.currentPath_=p};M.fillRect=function(j,i,Z,m){var p=this.currentPath_;this.beginPath();this.moveTo(j,i);this.lineTo(j+Z,i);this.lineTo(j+Z,i+m);this.lineTo(j,i+m);this.closePath();this.fill();this.currentPath_=p};M.createLinearGradient=function(i,m,Z,j){var p=new v("gradient");p.x0_=i;p.y0_=m;p.x1_=Z;p.y1_=j;return p};M.createRadialGradient=function(m,AE,j,i,p,Z){var AF=new v("gradientradial");AF.x0_=m;AF.y0_=AE;AF.r0_=j;AF.x1_=i;AF.y1_=p;AF.r1_=Z;return AF};M.drawImage=function(AO,j){var AH,AF,AJ,AV,AM,AK,AQ,AX;var AI=AO.runtimeStyle.width;var AN=AO.runtimeStyle.height;AO.runtimeStyle.width="auto";AO.runtimeStyle.height="auto";var AG=AO.width;var AT=AO.height;AO.runtimeStyle.width=AI;AO.runtimeStyle.height=AN;if(arguments.length==3){AH=arguments[1];AF=arguments[2];AM=AK=0;AQ=AJ=AG;AX=AV=AT}else{if(arguments.length==5){AH=arguments[1];AF=arguments[2];AJ=arguments[3];AV=arguments[4];AM=AK=0;AQ=AG;AX=AT}else{if(arguments.length==9){AM=arguments[1];AK=arguments[2];AQ=arguments[3];AX=arguments[4];AH=arguments[5];AF=arguments[6];AJ=arguments[7];AV=arguments[8]}else{throw Error("Invalid number of arguments")}}}var AW=this.getCoords_(AH,AF);var m=AQ/2;var i=AX/2;var AU=[];var Z=10;var AE=10;AU.push(" <g_vml_:group",' coordsize="',D*Z,",",D*AE,'"',' coordorigin="0,0"',' style="width:',Z,"px;height:",AE,"px;position:absolute;");if(this.m_[0][0]!=1||this.m_[0][1]||this.m_[1][1]!=1||this.m_[1][0]){var p=[];p.push("M11=",this.m_[0][0],",","M12=",this.m_[1][0],",","M21=",this.m_[0][1],",","M22=",this.m_[1][1],",","Dx=",K(AW.x/D),",","Dy=",K(AW.y/D),"");var AS=AW;var AR=this.getCoords_(AH+AJ,AF);var AP=this.getCoords_(AH,AF+AV);var AL=this.getCoords_(AH+AJ,AF+AV);AS.x=z.max(AS.x,AR.x,AP.x,AL.x);AS.y=z.max(AS.y,AR.y,AP.y,AL.y);AU.push("padding:0 ",K(AS.x/D),"px ",K(AS.y/D),"px 0;filter:progid:DXImageTransform.Microsoft.Matrix(",p.join(""),", sizingmethod='clip');")}else{AU.push("top:",K(AW.y/D),"px;left:",K(AW.x/D),"px;")}AU.push(' ">','<g_vml_:image src="',AO.src,'"',' style="width:',D*AJ,"px;"," height:",D*AV,'px"',' cropleft="',AM/AG,'"',' croptop="',AK/AT,'"',' cropright="',(AG-AM-AQ)/AG,'"',' cropbottom="',(AT-AK-AX)/AT,'"'," />","</g_vml_:group>");this.element_.insertAdjacentHTML("BeforeEnd",AU.join(""))};M.stroke=function(AM){var m=10;var AN=10;var AE=5000;var AG={x:null,y:null};var AL={x:null,y:null};for(var AH=0;AH<this.currentPath_.length;AH+=AE){var AK=[];var AF=false;AK.push("<g_vml_:shape",' filled="',!!AM,'"',' style="position:absolute;width:',m,"px;height:",AN,'px;"',' coordorigin="0,0"',' coordsize="',D*m,",",D*AN,'"',' stroked="',!AM,'"',' path="');var AO=false;for(var AI=AH;AI<Math.min(AH+AE,this.currentPath_.length);AI++){if(AI%AE==0&&AI>0){AK.push(" m ",K(this.currentPath_[AI-1].x),",",K(this.currentPath_[AI-1].y))}var Z=this.currentPath_[AI];var AJ;switch(Z.type){case"moveTo":AJ=Z;AK.push(" m ",K(Z.x),",",K(Z.y));break;case"lineTo":AK.push(" l ",K(Z.x),",",K(Z.y));break;case"close":AK.push(" x ");Z=null;break;case"bezierCurveTo":AK.push(" c ",K(Z.cp1x),",",K(Z.cp1y),",",K(Z.cp2x),",",K(Z.cp2y),",",K(Z.x),",",K(Z.y));break;case"at":case"wa":AK.push(" ",Z.type," ",K(Z.x-this.arcScaleX_*Z.radius),",",K(Z.y-this.arcScaleY_*Z.radius)," ",K(Z.x+this.arcScaleX_*Z.radius),",",K(Z.y+this.arcScaleY_*Z.radius)," ",K(Z.xStart),",",K(Z.yStart)," ",K(Z.xEnd),",",K(Z.yEnd));break}if(Z){if(AG.x==null||Z.x<AG.x){AG.x=Z.x}if(AL.x==null||Z.x>AL.x){AL.x=Z.x}if(AG.y==null||Z.y<AG.y){AG.y=Z.y}if(AL.y==null||Z.y>AL.y){AL.y=Z.y}}}AK.push(' ">');if(!AM){R(this,AK)}else{a(this,AK,AG,AL)}AK.push("</g_vml_:shape>");this.element_.insertAdjacentHTML("beforeEnd",AK.join(""))}};function R(j,AE){var i=Y(j.strokeStyle);var m=i.color;var p=i.alpha*j.globalAlpha;var Z=j.lineScale_*j.lineWidth;if(Z<1){p*=Z}AE.push("<g_vml_:stroke",' opacity="',p,'"',' joinstyle="',j.lineJoin,'"',' miterlimit="',j.miterLimit,'"',' endcap="',t(j.lineCap),'"',' weight="',Z,'px"',' color="',m,'" />')}function a(AO,AG,Ah,AP){var AH=AO.fillStyle;var AY=AO.arcScaleX_;var AX=AO.arcScaleY_;var Z=AP.x-Ah.x;var m=AP.y-Ah.y;if(AH instanceof v){var AL=0;var Ac={x:0,y:0};var AU=0;var AK=1;if(AH.type_=="gradient"){var AJ=AH.x0_/AY;var j=AH.y0_/AX;var AI=AH.x1_/AY;var Aj=AH.y1_/AX;var Ag=AO.getCoords_(AJ,j);var Af=AO.getCoords_(AI,Aj);var AE=Af.x-Ag.x;var p=Af.y-Ag.y;AL=Math.atan2(AE,p)*180/Math.PI;if(AL<0){AL+=360}if(AL<0.000001){AL=0}}else{var Ag=AO.getCoords_(AH.x0_,AH.y0_);Ac={x:(Ag.x-Ah.x)/Z,y:(Ag.y-Ah.y)/m};Z/=AY*D;m/=AX*D;var Aa=z.max(Z,m);AU=2*AH.r0_/Aa;AK=2*AH.r1_/Aa-AU}var AS=AH.colors_;AS.sort(function(Ak,i){return Ak.offset-i.offset});var AN=AS.length;var AR=AS[0].color;var AQ=AS[AN-1].color;var AW=AS[0].alpha*AO.globalAlpha;var AV=AS[AN-1].alpha*AO.globalAlpha;var Ab=[];for(var Ae=0;Ae<AN;Ae++){var AM=AS[Ae];Ab.push(AM.offset*AK+AU+" "+AM.color)}AG.push('<g_vml_:fill type="',AH.type_,'"',' method="none" focus="100%"',' color="',AR,'"',' color2="',AQ,'"',' colors="',Ab.join(","),'"',' opacity="',AV,'"',' g_o_:opacity2="',AW,'"',' angle="',AL,'"',' focusposition="',Ac.x,",",Ac.y,'" />')}else{if(AH instanceof u){if(Z&&m){var AF=-Ah.x;var AZ=-Ah.y;AG.push("<g_vml_:fill",' position="',AF/Z*AY*AY,",",AZ/m*AX*AX,'"',' type="tile"',' src="',AH.src_,'" />')}}else{var Ai=Y(AO.fillStyle);var AT=Ai.color;var Ad=Ai.alpha*AO.globalAlpha;AG.push('<g_vml_:fill color="',AT,'" opacity="',Ad,'" />')}}}M.fill=function(){this.stroke(true)};M.closePath=function(){this.currentPath_.push({type:"close"})};M.getCoords_=function(j,i){var Z=this.m_;return{x:D*(j*Z[0][0]+i*Z[1][0]+Z[2][0])-F,y:D*(j*Z[0][1]+i*Z[1][1]+Z[2][1])-F}};M.save=function(){var Z={};Q(this,Z);this.aStack_.push(Z);this.mStack_.push(this.m_);this.m_=d(V(),this.m_)};M.restore=function(){if(this.aStack_.length){Q(this.aStack_.pop(),this);this.m_=this.mStack_.pop()}};function H(Z){return isFinite(Z[0][0])&&isFinite(Z[0][1])&&isFinite(Z[1][0])&&isFinite(Z[1][1])&&isFinite(Z[2][0])&&isFinite(Z[2][1])}function y(i,Z,j){if(!H(Z)){return }i.m_=Z;if(j){var p=Z[0][0]*Z[1][1]-Z[0][1]*Z[1][0];i.lineScale_=k(b(p))}}M.translate=function(j,i){var Z=[[1,0,0],[0,1,0],[j,i,1]];y(this,d(Z,this.m_),false)};M.rotate=function(i){var m=U(i);var j=J(i);var Z=[[m,j,0],[-j,m,0],[0,0,1]];y(this,d(Z,this.m_),false)};M.scale=function(j,i){this.arcScaleX_*=j;this.arcScaleY_*=i;var Z=[[j,0,0],[0,i,0],[0,0,1]];y(this,d(Z,this.m_),true)};M.transform=function(p,m,AF,AE,i,Z){var j=[[p,m,0],[AF,AE,0],[i,Z,1]];y(this,d(j,this.m_),true)};M.setTransform=function(AE,p,AG,AF,j,i){var Z=[[AE,p,0],[AG,AF,0],[j,i,1]];y(this,Z,true)};M.drawText_=function(AK,AI,AH,AN,AG){var AM=this.m_,AQ=1000,i=0,AP=AQ,AF={x:0,y:0},AE=[];var Z=P(X(this.font),this.element_);var j=AA(Z);var AR=this.element_.currentStyle;var p=this.textAlign.toLowerCase();switch(p){case"left":case"center":case"right":break;case"end":p=AR.direction=="ltr"?"right":"left";break;case"start":p=AR.direction=="rtl"?"right":"left";break;default:p="left"}switch(this.textBaseline){case"hanging":case"top":AF.y=Z.size/1.75;break;case"middle":break;default:case null:case"alphabetic":case"ideographic":case"bottom":AF.y=-Z.size/2.25;break}switch(p){case"right":i=AQ;AP=0.05;break;case"center":i=AP=AQ/2;break}var AO=this.getCoords_(AI+AF.x,AH+AF.y);AE.push('<g_vml_:line from="',-i,' 0" to="',AP,' 0.05" ',' coordsize="100 100" coordorigin="0 0"',' filled="',!AG,'" stroked="',!!AG,'" style="position:absolute;width:1px;height:1px;">');if(AG){R(this,AE)}else{a(this,AE,{x:-i,y:0},{x:AP,y:Z.size})}var AL=AM[0][0].toFixed(3)+","+AM[1][0].toFixed(3)+","+AM[0][1].toFixed(3)+","+AM[1][1].toFixed(3)+",0,0";var AJ=K(AO.x/D)+","+K(AO.y/D);AE.push('<g_vml_:skew on="t" matrix="',AL,'" ',' offset="',AJ,'" origin="',i,' 0" />','<g_vml_:path textpathok="true" />','<g_vml_:textpath on="true" string="',AD(AK),'" style="v-text-align:',p,";font:",AD(j),'" /></g_vml_:line>');this.element_.insertAdjacentHTML("beforeEnd",AE.join(""))};M.fillText=function(j,Z,m,i){this.drawText_(j,Z,m,i,false)};M.strokeText=function(j,Z,m,i){this.drawText_(j,Z,m,i,true)};M.measureText=function(j){if(!this.textMeasureEl_){var Z='<span style="position:absolute;top:-20000px;left:0;padding:0;margin:0;border:none;white-space:pre;"></span>';this.element_.insertAdjacentHTML("beforeEnd",Z);this.textMeasureEl_=this.element_.lastChild}var i=this.element_.ownerDocument;this.textMeasureEl_.innerHTML="";this.textMeasureEl_.style.font=this.font;this.textMeasureEl_.appendChild(i.createTextNode(j));return{width:this.textMeasureEl_.offsetWidth}};M.clip=function(){};M.arcTo=function(){};M.createPattern=function(i,Z){return new u(i,Z)};function v(Z){this.type_=Z;this.x0_=0;this.y0_=0;this.r0_=0;this.x1_=0;this.y1_=0;this.r1_=0;this.colors_=[]}v.prototype.addColorStop=function(i,Z){Z=Y(Z);this.colors_.push({offset:i,color:Z.color,alpha:Z.alpha})};function u(i,Z){q(i);switch(Z){case"repeat":case null:case"":this.repetition_="repeat";break;case"repeat-x":case"repeat-y":case"no-repeat":this.repetition_=Z;break;default:n("SYNTAX_ERR")}this.src_=i.src;this.width_=i.width;this.height_=i.height}function n(Z){throw new o(Z)}function q(Z){if(!Z||Z.nodeType!=1||Z.tagName!="IMG"){n("TYPE_MISMATCH_ERR")}if(Z.readyState!="complete"){n("INVALID_STATE_ERR")}}function o(Z){this.code=this[Z];this.message=Z+": DOM Exception "+this.code}var x=o.prototype=new Error;x.INDEX_SIZE_ERR=1;x.DOMSTRING_SIZE_ERR=2;x.HIERARCHY_REQUEST_ERR=3;x.WRONG_DOCUMENT_ERR=4;x.INVALID_CHARACTER_ERR=5;x.NO_DATA_ALLOWED_ERR=6;x.NO_MODIFICATION_ALLOWED_ERR=7;x.NOT_FOUND_ERR=8;x.NOT_SUPPORTED_ERR=9;x.INUSE_ATTRIBUTE_ERR=10;x.INVALID_STATE_ERR=11;x.SYNTAX_ERR=12;x.INVALID_MODIFICATION_ERR=13;x.NAMESPACE_ERR=14;x.INVALID_ACCESS_ERR=15;x.VALIDATION_ERR=16;x.TYPE_MISMATCH_ERR=17;G_vmlCanvasManager=E;CanvasRenderingContext2D=W;CanvasGradient=v;CanvasPattern=u;DOMException=o})()};
− static/favicon.ico

binary file changed (1150 → absent bytes)

+ static/fonts/glyphicons-halflings-regular.eot view

binary file changed (absent → 20335 bytes)

+ static/fonts/glyphicons-halflings-regular.svg view
@@ -0,0 +1,229 @@+<?xml version="1.0" standalone="no"?>+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >+<svg xmlns="http://www.w3.org/2000/svg">+<metadata></metadata>+<defs>+<font id="glyphicons_halflingsregular" horiz-adv-x="1200" >+<font-face units-per-em="1200" ascent="960" descent="-240" />+<missing-glyph horiz-adv-x="500" />+<glyph />+<glyph />+<glyph unicode="&#xd;" />+<glyph unicode=" " />+<glyph unicode="*" d="M100 500v200h259l-183 183l141 141l183 -183v259h200v-259l183 183l141 -141l-183 -183h259v-200h-259l183 -183l-141 -141l-183 183v-259h-200v259l-183 -183l-141 141l183 183h-259z" />+<glyph unicode="+" d="M0 400v300h400v400h300v-400h400v-300h-400v-400h-300v400h-400z" />+<glyph unicode="&#xa0;" />+<glyph unicode="&#x2000;" horiz-adv-x="652" />+<glyph unicode="&#x2001;" horiz-adv-x="1304" />+<glyph unicode="&#x2002;" horiz-adv-x="652" />+<glyph unicode="&#x2003;" horiz-adv-x="1304" />+<glyph unicode="&#x2004;" horiz-adv-x="434" />+<glyph unicode="&#x2005;" horiz-adv-x="326" />+<glyph unicode="&#x2006;" horiz-adv-x="217" />+<glyph unicode="&#x2007;" horiz-adv-x="217" />+<glyph unicode="&#x2008;" horiz-adv-x="163" />+<glyph unicode="&#x2009;" horiz-adv-x="260" />+<glyph unicode="&#x200a;" horiz-adv-x="72" />+<glyph unicode="&#x202f;" horiz-adv-x="260" />+<glyph unicode="&#x205f;" horiz-adv-x="326" />+<glyph unicode="&#x20ac;" d="M100 500l100 100h113q0 47 5 100h-218l100 100h135q37 167 112 257q117 141 297 141q242 0 354 -189q60 -103 66 -209h-181q0 55 -25.5 99t-63.5 68t-75 36.5t-67 12.5q-24 0 -52.5 -10t-62.5 -32t-65.5 -67t-50.5 -107h379l-100 -100h-300q-6 -46 -6 -100h406l-100 -100 h-300q9 -74 33 -132t52.5 -91t62 -54.5t59 -29t46.5 -7.5q29 0 66 13t75 37t63.5 67.5t25.5 96.5h174q-31 -172 -128 -278q-107 -117 -274 -117q-205 0 -324 158q-36 46 -69 131.5t-45 205.5h-217z" />+<glyph unicode="&#x2212;" d="M200 400h900v300h-900v-300z" />+<glyph unicode="&#x25fc;" horiz-adv-x="500" d="M0 0z" />+<glyph unicode="&#x2601;" d="M-14 494q0 -80 56.5 -137t135.5 -57h750q120 0 205 86.5t85 207.5t-85 207t-205 86q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5z" />+<glyph unicode="&#x2709;" d="M0 100l400 400l200 -200l200 200l400 -400h-1200zM0 300v600l300 -300zM0 1100l600 -603l600 603h-1200zM900 600l300 300v-600z" />+<glyph unicode="&#x270f;" d="M-13 -13l333 112l-223 223zM187 403l214 -214l614 614l-214 214zM887 1103l214 -214l99 92q13 13 13 32.5t-13 33.5l-153 153q-15 13 -33 13t-33 -13z" />+<glyph unicode="&#xe001;" d="M0 1200h1200l-500 -550v-550h300v-100h-800v100h300v550z" />+<glyph unicode="&#xe002;" d="M14 84q18 -55 86 -75.5t147 5.5q65 21 109 69t44 90v606l600 155v-521q-64 16 -138 -7q-79 -26 -122.5 -83t-25.5 -111q18 -55 86 -75.5t147 4.5q70 23 111.5 63.5t41.5 95.5v881q0 10 -7 15.5t-17 2.5l-752 -193q-10 -3 -17 -12.5t-7 -19.5v-689q-64 17 -138 -7 q-79 -25 -122.5 -82t-25.5 -112z" />+<glyph unicode="&#xe003;" d="M23 693q0 200 142 342t342 142t342 -142t142 -342q0 -142 -78 -261l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 693q0 -136 97 -233t234 -97t233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5 t-234 -97t-97 -233z" />+<glyph unicode="&#xe005;" d="M100 784q0 64 28 123t73 100.5t104.5 64t119 20.5t120 -38.5t104.5 -104.5q48 69 109.5 105t121.5 38t118.5 -20.5t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-149.5 152.5t-126.5 127.5 t-94 124.5t-33.5 117.5z" />+<glyph unicode="&#xe006;" d="M-72 800h479l146 400h2l146 -400h472l-382 -278l145 -449l-384 275l-382 -275l146 447zM168 71l2 1z" />+<glyph unicode="&#xe007;" d="M-72 800h479l146 400h2l146 -400h472l-382 -278l145 -449l-384 275l-382 -275l146 447zM168 71l2 1zM237 700l196 -142l-73 -226l192 140l195 -141l-74 229l193 140h-235l-77 211l-78 -211h-239z" />+<glyph unicode="&#xe008;" d="M0 0v143l400 257v100q-37 0 -68.5 74.5t-31.5 125.5v200q0 124 88 212t212 88t212 -88t88 -212v-200q0 -51 -31.5 -125.5t-68.5 -74.5v-100l400 -257v-143h-1200z" />+<glyph unicode="&#xe009;" d="M0 0v1100h1200v-1100h-1200zM100 100h100v100h-100v-100zM100 300h100v100h-100v-100zM100 500h100v100h-100v-100zM100 700h100v100h-100v-100zM100 900h100v100h-100v-100zM300 100h600v400h-600v-400zM300 600h600v400h-600v-400zM1000 100h100v100h-100v-100z M1000 300h100v100h-100v-100zM1000 500h100v100h-100v-100zM1000 700h100v100h-100v-100zM1000 900h100v100h-100v-100z" />+<glyph unicode="&#xe010;" d="M0 50v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5zM0 650v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5zM600 50v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5zM600 650v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5z" />+<glyph unicode="&#xe011;" d="M0 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM0 450v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200 q-21 0 -35.5 14.5t-14.5 35.5zM0 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5 t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 450v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5 v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 450v200q0 21 14.5 35.5t35.5 14.5h200 q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5z" />+<glyph unicode="&#xe012;" d="M0 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM0 450q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v200q0 21 -14.5 35.5t-35.5 14.5h-200q-21 0 -35.5 -14.5 t-14.5 -35.5v-200zM0 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 50v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5 t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5zM400 450v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5zM400 850v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5 v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5z" />+<glyph unicode="&#xe013;" d="M29 454l419 -420l818 820l-212 212l-607 -607l-206 207z" />+<glyph unicode="&#xe014;" d="M106 318l282 282l-282 282l212 212l282 -282l282 282l212 -212l-282 -282l282 -282l-212 -212l-282 282l-282 -282z" />+<glyph unicode="&#xe015;" d="M23 693q0 200 142 342t342 142t342 -142t142 -342q0 -142 -78 -261l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 693q0 -136 97 -233t234 -97t233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5 t-234 -97t-97 -233zM300 600v200h100v100h200v-100h100v-200h-100v-100h-200v100h-100z" />+<glyph unicode="&#xe016;" d="M23 694q0 200 142 342t342 142t342 -142t142 -342q0 -141 -78 -262l300 -299q7 -7 7 -18t-7 -18l-109 -109q-8 -8 -18 -8t-18 8l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 694q0 -136 97 -233t234 -97t233.5 97t96.5 233t-96.5 233t-233.5 97t-234 -97 t-97 -233zM300 601h400v200h-400v-200z" />+<glyph unicode="&#xe017;" d="M23 600q0 183 105 331t272 210v-166q-103 -55 -165 -155t-62 -220q0 -177 125 -302t302 -125t302 125t125 302q0 120 -62 220t-165 155v166q167 -62 272 -210t105 -331q0 -118 -45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5 zM500 750q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5v400q0 21 -14.5 35.5t-35.5 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-400z" />+<glyph unicode="&#xe018;" d="M100 1h200v300h-200v-300zM400 1v500h200v-500h-200zM700 1v800h200v-800h-200zM1000 1v1200h200v-1200h-200z" />+<glyph unicode="&#xe019;" d="M26 601q0 -33 6 -74l151 -38l2 -6q14 -49 38 -93l3 -5l-80 -134q45 -59 105 -105l133 81l5 -3q45 -26 94 -39l5 -2l38 -151q40 -5 74 -5q27 0 74 5l38 151l6 2q46 13 93 39l5 3l134 -81q56 44 104 105l-80 134l3 5q24 44 39 93l1 6l152 38q5 40 5 74q0 28 -5 73l-152 38 l-1 6q-16 51 -39 93l-3 5l80 134q-44 58 -104 105l-134 -81l-5 3q-45 25 -93 39l-6 1l-38 152q-40 5 -74 5q-27 0 -74 -5l-38 -152l-5 -1q-50 -14 -94 -39l-5 -3l-133 81q-59 -47 -105 -105l80 -134l-3 -5q-25 -47 -38 -93l-2 -6l-151 -38q-6 -48 -6 -73zM385 601 q0 88 63 151t152 63t152 -63t63 -151q0 -89 -63 -152t-152 -63t-152 63t-63 152z" />+<glyph unicode="&#xe020;" d="M100 1025v50q0 10 7.5 17.5t17.5 7.5h275v100q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5v-100h275q10 0 17.5 -7.5t7.5 -17.5v-50q0 -11 -7 -18t-18 -7h-1050q-11 0 -18 7t-7 18zM200 100v800h900v-800q0 -41 -29.5 -71t-70.5 -30h-700q-41 0 -70.5 30 t-29.5 71zM300 100h100v700h-100v-700zM500 100h100v700h-100v-700zM500 1100h300v100h-300v-100zM700 100h100v700h-100v-700zM900 100h100v700h-100v-700z" />+<glyph unicode="&#xe021;" d="M1 601l656 644l644 -644h-200v-600h-300v400h-300v-400h-300v600h-200z" />+<glyph unicode="&#xe022;" d="M100 25v1150q0 11 7 18t18 7h475v-500h400v-675q0 -11 -7 -18t-18 -7h-850q-11 0 -18 7t-7 18zM700 800v300l300 -300h-300z" />+<glyph unicode="&#xe023;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM500 500v400h100 v-300h200v-100h-300z" />+<glyph unicode="&#xe024;" d="M-100 0l431 1200h209l-21 -300h162l-20 300h208l431 -1200h-538l-41 400h-242l-40 -400h-539zM488 500h224l-27 300h-170z" />+<glyph unicode="&#xe025;" d="M0 0v400h490l-290 300h200v500h300v-500h200l-290 -300h490v-400h-1100zM813 200h175v100h-175v-100z" />+<glyph unicode="&#xe026;" d="M1 600q0 122 47.5 233t127.5 191t191 127.5t233 47.5t233 -47.5t191 -127.5t127.5 -191t47.5 -233t-47.5 -233t-127.5 -191t-191 -127.5t-233 -47.5t-233 47.5t-191 127.5t-127.5 191t-47.5 233zM188 600q0 -170 121 -291t291 -121t291 121t121 291t-121 291t-291 121 t-291 -121t-121 -291zM350 600h150v300h200v-300h150l-250 -300z" />+<glyph unicode="&#xe027;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM350 600l250 300 l250 -300h-150v-300h-200v300h-150z" />+<glyph unicode="&#xe028;" d="M0 25v475l200 700h800l199 -700l1 -475q0 -11 -7 -18t-18 -7h-1150q-11 0 -18 7t-7 18zM200 500h200l50 -200h300l50 200h200l-97 500h-606z" />+<glyph unicode="&#xe029;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM500 397v401 l297 -200z" />+<glyph unicode="&#xe030;" d="M23 600q0 -118 45.5 -224.5t123 -184t184 -123t224.5 -45.5t224.5 45.5t184 123t123 184t45.5 224.5h-150q0 -177 -125 -302t-302 -125t-302 125t-125 302t125 302t302 125q136 0 246 -81l-146 -146h400v400l-145 -145q-157 122 -355 122q-118 0 -224.5 -45.5t-184 -123 t-123 -184t-45.5 -224.5z" />+<glyph unicode="&#xe031;" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5q198 0 355 -122l145 145v-400h-400l147 147q-112 80 -247 80q-177 0 -302 -125t-125 -302h-150zM100 0v400h400l-147 -147q112 -80 247 -80q177 0 302 125t125 302h150q0 -118 -45.5 -224.5t-123 -184t-184 -123 t-224.5 -45.5q-198 0 -355 122z" />+<glyph unicode="&#xe032;" d="M100 0h1100v1200h-1100v-1200zM200 100v900h900v-900h-900zM300 200v100h100v-100h-100zM300 400v100h100v-100h-100zM300 600v100h100v-100h-100zM300 800v100h100v-100h-100zM500 200h500v100h-500v-100zM500 400v100h500v-100h-500zM500 600v100h500v-100h-500z M500 800v100h500v-100h-500z" />+<glyph unicode="&#xe033;" d="M0 100v600q0 41 29.5 70.5t70.5 29.5h100v200q0 82 59 141t141 59h300q82 0 141 -59t59 -141v-200h100q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-900q-41 0 -70.5 29.5t-29.5 70.5zM400 800h300v150q0 21 -14.5 35.5t-35.5 14.5h-200 q-21 0 -35.5 -14.5t-14.5 -35.5v-150z" />+<glyph unicode="&#xe034;" d="M100 0v1100h100v-1100h-100zM300 400q60 60 127.5 84t127.5 17.5t122 -23t119 -30t110 -11t103 42t91 120.5v500q-40 -81 -101.5 -115.5t-127.5 -29.5t-138 25t-139.5 40t-125.5 25t-103 -29.5t-65 -115.5v-500z" />+<glyph unicode="&#xe035;" d="M0 275q0 -11 7 -18t18 -7h50q11 0 18 7t7 18v300q0 127 70.5 231.5t184.5 161.5t245 57t245 -57t184.5 -161.5t70.5 -231.5v-300q0 -11 7 -18t18 -7h50q11 0 18 7t7 18v300q0 116 -49.5 227t-131 192.5t-192.5 131t-227 49.5t-227 -49.5t-192.5 -131t-131 -192.5 t-49.5 -227v-300zM200 20v460q0 8 6 14t14 6h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14zM800 20v460q0 8 6 14t14 6h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14z" />+<glyph unicode="&#xe036;" d="M0 400h300l300 -200v800l-300 -200h-300v-400zM688 459l141 141l-141 141l71 71l141 -141l141 141l71 -71l-141 -141l141 -141l-71 -71l-141 141l-141 -141z" />+<glyph unicode="&#xe037;" d="M0 400h300l300 -200v800l-300 -200h-300v-400zM700 857l69 53q111 -135 111 -310q0 -169 -106 -302l-67 54q86 110 86 248q0 146 -93 257z" />+<glyph unicode="&#xe038;" d="M0 401v400h300l300 200v-800l-300 200h-300zM702 858l69 53q111 -135 111 -310q0 -170 -106 -303l-67 55q86 110 86 248q0 145 -93 257zM889 951l7 -8q123 -151 123 -344q0 -189 -119 -339l-7 -8l81 -66l6 8q142 178 142 405q0 230 -144 408l-6 8z" />+<glyph unicode="&#xe039;" d="M0 0h500v500h-200v100h-100v-100h-200v-500zM0 600h100v100h400v100h100v100h-100v300h-500v-600zM100 100v300h300v-300h-300zM100 800v300h300v-300h-300zM200 200v100h100v-100h-100zM200 900h100v100h-100v-100zM500 500v100h300v-300h200v-100h-100v-100h-200v100 h-100v100h100v200h-200zM600 0v100h100v-100h-100zM600 1000h100v-300h200v-300h300v200h-200v100h200v500h-600v-200zM800 800v300h300v-300h-300zM900 0v100h300v-100h-300zM900 900v100h100v-100h-100zM1100 200v100h100v-100h-100z" />+<glyph unicode="&#xe040;" d="M0 200h100v1000h-100v-1000zM100 0v100h300v-100h-300zM200 200v1000h100v-1000h-100zM500 0v91h100v-91h-100zM500 200v1000h200v-1000h-200zM700 0v91h100v-91h-100zM800 200v1000h100v-1000h-100zM900 0v91h200v-91h-200zM1000 200v1000h200v-1000h-200z" />+<glyph unicode="&#xe041;" d="M0 700l1 475q0 10 7.5 17.5t17.5 7.5h474l700 -700l-500 -500zM148 953q0 -42 29 -71q30 -30 71.5 -30t71.5 30q29 29 29 71t-29 71q-30 30 -71.5 30t-71.5 -30q-29 -29 -29 -71z" />+<glyph unicode="&#xe042;" d="M1 700l1 475q0 11 7 18t18 7h474l700 -700l-500 -500zM148 953q0 -42 30 -71q29 -30 71 -30t71 30q30 29 30 71t-30 71q-29 30 -71 30t-71 -30q-30 -29 -30 -71zM701 1200h100l700 -700l-500 -500l-50 50l450 450z" />+<glyph unicode="&#xe043;" d="M100 0v1025l175 175h925v-1000l-100 -100v1000h-750l-100 -100h750v-1000h-900z" />+<glyph unicode="&#xe044;" d="M200 0l450 444l450 -443v1150q0 20 -14.5 35t-35.5 15h-800q-21 0 -35.5 -15t-14.5 -35v-1151z" />+<glyph unicode="&#xe045;" d="M0 100v700h200l100 -200h600l100 200h200v-700h-200v200h-800v-200h-200zM253 829l40 -124h592l62 124l-94 346q-2 11 -10 18t-18 7h-450q-10 0 -18 -7t-10 -18zM281 24l38 152q2 10 11.5 17t19.5 7h500q10 0 19.5 -7t11.5 -17l38 -152q2 -10 -3.5 -17t-15.5 -7h-600 q-10 0 -15.5 7t-3.5 17z" />+<glyph unicode="&#xe046;" d="M0 200q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5h-150q-4 8 -11.5 21.5t-33 48t-53 61t-69 48t-83.5 21.5h-200q-41 0 -82 -20.5t-70 -50t-52 -59t-34 -50.5l-12 -20h-150q-41 0 -70.5 -29.5t-29.5 -70.5v-600z M356 500q0 100 72 172t172 72t172 -72t72 -172t-72 -172t-172 -72t-172 72t-72 172zM494 500q0 -44 31 -75t75 -31t75 31t31 75t-31 75t-75 31t-75 -31t-31 -75zM900 700v100h100v-100h-100z" />+<glyph unicode="&#xe047;" d="M53 0h365v66q-41 0 -72 11t-49 38t1 71l92 234h391l82 -222q16 -45 -5.5 -88.5t-74.5 -43.5v-66h417v66q-34 1 -74 43q-18 19 -33 42t-21 37l-6 13l-385 998h-93l-399 -1006q-24 -48 -52 -75q-12 -12 -33 -25t-36 -20l-15 -7v-66zM416 521l178 457l46 -140l116 -317h-340 z" />+<glyph unicode="&#xe048;" d="M100 0v89q41 7 70.5 32.5t29.5 65.5v827q0 28 -1 39.5t-5.5 26t-15.5 21t-29 14t-49 14.5v71l471 -1q120 0 213 -88t93 -228q0 -55 -11.5 -101.5t-28 -74t-33.5 -47.5t-28 -28l-12 -7q8 -3 21.5 -9t48 -31.5t60.5 -58t47.5 -91.5t21.5 -129q0 -84 -59 -156.5t-142 -111 t-162 -38.5h-500zM400 200h161q89 0 153 48.5t64 132.5q0 90 -62.5 154.5t-156.5 64.5h-159v-400zM400 700h139q76 0 130 61.5t54 138.5q0 82 -84 130.5t-239 48.5v-379z" />+<glyph unicode="&#xe049;" d="M200 0v57q77 7 134.5 40.5t65.5 80.5l173 849q10 56 -10 74t-91 37q-6 1 -10.5 2.5t-9.5 2.5v57h425l2 -57q-33 -8 -62 -25.5t-46 -37t-29.5 -38t-17.5 -30.5l-5 -12l-128 -825q-10 -52 14 -82t95 -36v-57h-500z" />+<glyph unicode="&#xe050;" d="M-75 200h75v800h-75l125 167l125 -167h-75v-800h75l-125 -167zM300 900v300h150h700h150v-300h-50q0 29 -8 48.5t-18.5 30t-33.5 15t-39.5 5.5t-50.5 1h-200v-850l100 -50v-100h-400v100l100 50v850h-200q-34 0 -50.5 -1t-40 -5.5t-33.5 -15t-18.5 -30t-8.5 -48.5h-49z " />+<glyph unicode="&#xe051;" d="M33 51l167 125v-75h800v75l167 -125l-167 -125v75h-800v-75zM100 901v300h150h700h150v-300h-50q0 29 -8 48.5t-18 30t-33.5 15t-40 5.5t-50.5 1h-200v-650l100 -50v-100h-400v100l100 50v650h-200q-34 0 -50.5 -1t-39.5 -5.5t-33.5 -15t-18.5 -30t-8 -48.5h-50z" />+<glyph unicode="&#xe052;" d="M0 50q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 350q0 -20 14.5 -35t35.5 -15h800q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-800q-21 0 -35.5 -14.5t-14.5 -35.5 v-100zM0 650q0 -20 14.5 -35t35.5 -15h1000q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1000q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 950q0 -20 14.5 -35t35.5 -15h600q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-600q-21 0 -35.5 -14.5 t-14.5 -35.5v-100z" />+<glyph unicode="&#xe053;" d="M0 50q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 650q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5 v-100zM200 350q0 -20 14.5 -35t35.5 -15h700q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-700q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM200 950q0 -20 14.5 -35t35.5 -15h700q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-700q-21 0 -35.5 -14.5 t-14.5 -35.5v-100z" />+<glyph unicode="&#xe054;" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM100 650v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1000q-21 0 -35.5 15 t-14.5 35zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM500 950v100q0 21 14.5 35.5t35.5 14.5h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-600 q-21 0 -35.5 15t-14.5 35z" />+<glyph unicode="&#xe055;" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM0 350v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15 t-14.5 35zM0 650v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM0 950v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100 q-21 0 -35.5 15t-14.5 35z" />+<glyph unicode="&#xe056;" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM0 350v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15 t-14.5 35zM0 650v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM0 950v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15 t-14.5 35zM300 50v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800 q-21 0 -35.5 15t-14.5 35zM300 650v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM300 950v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15 h-800q-21 0 -35.5 15t-14.5 35z" />+<glyph unicode="&#xe057;" d="M-101 500v100h201v75l166 -125l-166 -125v75h-201zM300 0h100v1100h-100v-1100zM500 50q0 -20 14.5 -35t35.5 -15h600q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-600q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 350q0 -20 14.5 -35t35.5 -15h300q20 0 35 15t15 35 v100q0 21 -15 35.5t-35 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 650q0 -20 14.5 -35t35.5 -15h500q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 950q0 -20 14.5 -35t35.5 -15h100q20 0 35 15t15 35v100 q0 21 -15 35.5t-35 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-100z" />+<glyph unicode="&#xe058;" d="M1 50q0 -20 14.5 -35t35.5 -15h600q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-600q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 350q0 -20 14.5 -35t35.5 -15h300q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 650 q0 -20 14.5 -35t35.5 -15h500q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 950q0 -20 14.5 -35t35.5 -15h100q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM801 0v1100h100v-1100 h-100zM934 550l167 -125v75h200v100h-200v75z" />+<glyph unicode="&#xe059;" d="M0 275v650q0 31 22 53t53 22h750q31 0 53 -22t22 -53v-650q0 -31 -22 -53t-53 -22h-750q-31 0 -53 22t-22 53zM900 600l300 300v-600z" />+<glyph unicode="&#xe060;" d="M0 44v1012q0 18 13 31t31 13h1112q19 0 31.5 -13t12.5 -31v-1012q0 -18 -12.5 -31t-31.5 -13h-1112q-18 0 -31 13t-13 31zM100 263l247 182l298 -131l-74 156l293 318l236 -288v500h-1000v-737zM208 750q0 56 39 95t95 39t95 -39t39 -95t-39 -95t-95 -39t-95 39t-39 95z " />+<glyph unicode="&#xe062;" d="M148 745q0 124 60.5 231.5t165 172t226.5 64.5q123 0 227 -63t164.5 -169.5t60.5 -229.5t-73 -272q-73 -114 -166.5 -237t-150.5 -189l-57 -66q-10 9 -27 26t-66.5 70.5t-96 109t-104 135.5t-100.5 155q-63 139 -63 262zM342 772q0 -107 75.5 -182.5t181.5 -75.5 q107 0 182.5 75.5t75.5 182.5t-75.5 182t-182.5 75t-182 -75.5t-75 -181.5z" />+<glyph unicode="&#xe063;" d="M1 600q0 122 47.5 233t127.5 191t191 127.5t233 47.5t233 -47.5t191 -127.5t127.5 -191t47.5 -233t-47.5 -233t-127.5 -191t-191 -127.5t-233 -47.5t-233 47.5t-191 127.5t-127.5 191t-47.5 233zM173 600q0 -177 125.5 -302t301.5 -125v854q-176 0 -301.5 -125 t-125.5 -302z" />+<glyph unicode="&#xe064;" d="M117 406q0 94 34 186t88.5 172.5t112 159t115 177t87.5 194.5q21 -71 57.5 -142.5t76 -130.5t83 -118.5t82 -117t70 -116t50 -125.5t18.5 -136q0 -89 -39 -165.5t-102 -126.5t-140 -79.5t-156 -33.5q-114 6 -211.5 53t-161.5 139t-64 210zM243 414q14 -82 59.5 -136 t136.5 -80l16 98q-7 6 -18 17t-34 48t-33 77q-15 73 -14 143.5t10 122.5l9 51q-92 -110 -119.5 -185t-12.5 -156z" />+<glyph unicode="&#xe065;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5q366 -6 397 -14l-186 -186h-311q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v125l200 200v-225q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5 t-117.5 282.5zM436 341l161 50l412 412l-114 113l-405 -405zM995 1015l113 -113l113 113l-21 85l-92 28z" />+<glyph unicode="&#xe066;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h261l2 -80q-133 -32 -218 -120h-145q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5l200 153v-53q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5 zM423 524q30 38 81.5 64t103 35.5t99 14t77.5 3.5l29 -1v-209l360 324l-359 318v-216q-7 0 -19 -1t-48 -8t-69.5 -18.5t-76.5 -37t-76.5 -59t-62 -88t-39.5 -121.5z" />+<glyph unicode="&#xe067;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q61 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-169q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5 t-117.5 282.5zM342 632l283 -284l567 567l-137 137l-430 -431l-146 147z" />+<glyph unicode="&#xe068;" d="M0 603l300 296v-198h200v200h-200l300 300l295 -300h-195v-200h200v198l300 -296l-300 -300v198h-200v-200h195l-295 -300l-300 300h200v200h-200v-198z" />+<glyph unicode="&#xe069;" d="M200 50v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-1100l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5z" />+<glyph unicode="&#xe070;" d="M0 50v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-487l500 487v-1100l-500 488v-488l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5z" />+<glyph unicode="&#xe071;" d="M136 550l564 550v-487l500 487v-1100l-500 488v-488z" />+<glyph unicode="&#xe072;" d="M200 0l900 550l-900 550v-1100z" />+<glyph unicode="&#xe073;" d="M200 150q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v800q0 21 -14.5 35.5t-35.5 14.5h-200q-21 0 -35.5 -14.5t-14.5 -35.5v-800zM600 150q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v800q0 21 -14.5 35.5t-35.5 14.5h-200 q-21 0 -35.5 -14.5t-14.5 -35.5v-800z" />+<glyph unicode="&#xe074;" d="M200 150q0 -20 14.5 -35t35.5 -15h800q21 0 35.5 15t14.5 35v800q0 21 -14.5 35.5t-35.5 14.5h-800q-21 0 -35.5 -14.5t-14.5 -35.5v-800z" />+<glyph unicode="&#xe075;" d="M0 0v1100l500 -487v487l564 -550l-564 -550v488z" />+<glyph unicode="&#xe076;" d="M0 0v1100l500 -487v487l500 -487v437q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-500 -488v488z" />+<glyph unicode="&#xe077;" d="M300 0v1100l500 -487v437q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438z" />+<glyph unicode="&#xe078;" d="M100 250v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5zM100 500h1100l-550 564z" />+<glyph unicode="&#xe079;" d="M185 599l592 -592l240 240l-353 353l353 353l-240 240z" />+<glyph unicode="&#xe080;" d="M272 194l353 353l-353 353l241 240l572 -571l21 -22l-1 -1v-1l-592 -591z" />+<glyph unicode="&#xe081;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM300 500h200v-200h200v200h200v200h-200v200h-200v-200h-200v-200z" />+<glyph unicode="&#xe082;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM300 500h600v200h-600v-200z" />+<glyph unicode="&#xe083;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM246 459l213 -213l141 142l141 -142l213 213l-142 141l142 141l-213 212l-141 -141l-141 142l-212 -213l141 -141 z" />+<glyph unicode="&#xe084;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM270 551l276 -277l411 411l-175 174l-236 -236l-102 102z" />+<glyph unicode="&#xe085;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM364 700h143q4 0 11.5 -1t11 -1t6.5 3t3 9t1 11t3.5 8.5t3.5 6t5.5 4t6.5 2.5t9 1.5t9 0.5h11.5h12.5 q19 0 30 -10t11 -26q0 -22 -4 -28t-27 -22q-5 -1 -12.5 -3t-27 -13.5t-34 -27t-26.5 -46t-11 -68.5h200q5 3 14 8t31.5 25.5t39.5 45.5t31 69t14 94q0 51 -17.5 89t-42 58t-58.5 32t-58.5 15t-51.5 3q-50 0 -90.5 -12t-75 -38.5t-53.5 -74.5t-19 -114zM500 300h200v100h-200 v-100z" />+<glyph unicode="&#xe086;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM400 300h400v100h-100v300h-300v-100h100v-200h-100v-100zM500 800h200v100h-200v-100z" />+<glyph unicode="&#xe087;" d="M0 500v200h195q31 125 98.5 199.5t206.5 100.5v200h200v-200q54 -20 113 -60t112.5 -105.5t71.5 -134.5h203v-200h-203q-25 -102 -116.5 -186t-180.5 -117v-197h-200v197q-140 27 -208 102.5t-98 200.5h-194zM290 500q24 -73 79.5 -127.5t130.5 -78.5v206h200v-206 q149 48 201 206h-201v200h200q-25 74 -75.5 127t-124.5 77v-204h-200v203q-75 -23 -130 -77t-79 -126h209v-200h-210z" />+<glyph unicode="&#xe088;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM356 465l135 135 l-135 135l109 109l135 -135l135 135l109 -109l-135 -135l135 -135l-109 -109l-135 135l-135 -135z" />+<glyph unicode="&#xe089;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM322 537l141 141 l87 -87l204 205l142 -142l-346 -345z" />+<glyph unicode="&#xe090;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -115 62 -215l568 567q-100 62 -216 62q-171 0 -292.5 -121.5t-121.5 -292.5zM391 245q97 -59 209 -59q171 0 292.5 121.5t121.5 292.5 q0 112 -59 209z" />+<glyph unicode="&#xe091;" d="M0 547l600 453v-300h600v-300h-600v-301z" />+<glyph unicode="&#xe092;" d="M0 400v300h600v300l600 -453l-600 -448v301h-600z" />+<glyph unicode="&#xe093;" d="M204 600l450 600l444 -600h-298v-600h-300v600h-296z" />+<glyph unicode="&#xe094;" d="M104 600h296v600h300v-600h298l-449 -600z" />+<glyph unicode="&#xe095;" d="M0 200q6 132 41 238.5t103.5 193t184 138t271.5 59.5v271l600 -453l-600 -448v301q-95 -2 -183 -20t-170 -52t-147 -92.5t-100 -135.5z" />+<glyph unicode="&#xe096;" d="M0 0v400l129 -129l294 294l142 -142l-294 -294l129 -129h-400zM635 777l142 -142l294 294l129 -129v400h-400l129 -129z" />+<glyph unicode="&#xe097;" d="M34 176l295 295l-129 129h400v-400l-129 130l-295 -295zM600 600v400l129 -129l295 295l142 -141l-295 -295l129 -130h-400z" />+<glyph unicode="&#xe101;" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5t224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5zM456 851l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5 t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5h-207q-21 0 -33 -14.5t-8 -34.5zM500 300h200v100h-200v-100z" />+<glyph unicode="&#xe102;" d="M0 800h100v-200h400v300h200v-300h400v200h100v100h-111q1 1 1 6.5t-1.5 15t-3.5 17.5l-34 172q-11 39 -41.5 63t-69.5 24q-32 0 -61 -17l-239 -144q-22 -13 -40 -35q-19 24 -40 36l-238 144q-33 18 -62 18q-39 0 -69.5 -23t-40.5 -61l-35 -177q-2 -8 -3 -18t-1 -15v-6 h-111v-100zM100 0h400v400h-400v-400zM200 900q-3 0 14 48t36 96l18 47l213 -191h-281zM700 0v400h400v-400h-400zM731 900l202 197q5 -12 12 -32.5t23 -64t25 -72t7 -28.5h-269z" />+<glyph unicode="&#xe103;" d="M0 -22v143l216 193q-9 53 -13 83t-5.5 94t9 113t38.5 114t74 124q47 60 99.5 102.5t103 68t127.5 48t145.5 37.5t184.5 43.5t220 58.5q0 -189 -22 -343t-59 -258t-89 -181.5t-108.5 -120t-122 -68t-125.5 -30t-121.5 -1.5t-107.5 12.5t-87.5 17t-56.5 7.5l-99 -55z M238.5 300.5q19.5 -6.5 86.5 76.5q55 66 367 234q70 38 118.5 69.5t102 79t99 111.5t86.5 148q22 50 24 60t-6 19q-7 5 -17 5t-26.5 -14.5t-33.5 -39.5q-35 -51 -113.5 -108.5t-139.5 -89.5l-61 -32q-369 -197 -458 -401q-48 -111 -28.5 -117.5z" />+<glyph unicode="&#xe104;" d="M111 408q0 -33 5 -63q9 -56 44 -119.5t105 -108.5q31 -21 64 -16t62 23.5t57 49.5t48 61.5t35 60.5q32 66 39 184.5t-13 157.5q79 -80 122 -164t26 -184q-5 -33 -20.5 -69.5t-37.5 -80.5q-10 -19 -14.5 -29t-12 -26t-9 -23.5t-3 -19t2.5 -15.5t11 -9.5t19.5 -5t30.5 2.5 t42 8q57 20 91 34t87.5 44.5t87 64t65.5 88.5t47 122q38 172 -44.5 341.5t-246.5 278.5q22 -44 43 -129q39 -159 -32 -154q-15 2 -33 9q-79 33 -120.5 100t-44 175.5t48.5 257.5q-13 -8 -34 -23.5t-72.5 -66.5t-88.5 -105.5t-60 -138t-8 -166.5q2 -12 8 -41.5t8 -43t6 -39.5 t3.5 -39.5t-1 -33.5t-6 -31.5t-13.5 -24t-21 -20.5t-31 -12q-38 -10 -67 13t-40.5 61.5t-15 81.5t10.5 75q-52 -46 -83.5 -101t-39 -107t-7.5 -85z" />+<glyph unicode="&#xe105;" d="M-61 600l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5t145.5 -23.5t132.5 -59t116.5 -83.5t97 -90t74.5 -85.5t49 -63.5t20 -30l26 -40l-26 -40q-6 -10 -20 -30t-49 -63.5t-74.5 -85.5t-97 -90t-116.5 -83.5t-132.5 -59t-145.5 -23.5 t-145.5 23.5t-132.5 59t-116.5 83.5t-97 90t-74.5 85.5t-49 63.5t-20 30zM120 600q7 -10 40.5 -58t56 -78.5t68 -77.5t87.5 -75t103 -49.5t125 -21.5t123.5 20t100.5 45.5t85.5 71.5t66.5 75.5t58 81.5t47 66q-1 1 -28.5 37.5t-42 55t-43.5 53t-57.5 63.5t-58.5 54 q49 -74 49 -163q0 -124 -88 -212t-212 -88t-212 88t-88 212q0 85 46 158q-102 -87 -226 -258zM377 656q49 -124 154 -191l105 105q-37 24 -75 72t-57 84l-20 36z" />+<glyph unicode="&#xe106;" d="M-61 600l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5q61 0 121 -17l37 142h148l-314 -1200h-148l37 143q-82 21 -165 71.5t-140 102t-109.5 112t-72 88.5t-29.5 43zM120 600q210 -282 393 -336l37 141q-107 18 -178.5 101.5t-71.5 193.5 q0 85 46 158q-102 -87 -226 -258zM377 656q49 -124 154 -191l47 47l23 87q-30 28 -59 69t-44 68l-14 26zM780 161l38 145q22 15 44.5 34t46 44t40.5 44t41 50.5t33.5 43.5t33 44t24.5 34q-97 127 -140 175l39 146q67 -54 131.5 -125.5t87.5 -103.5t36 -52l26 -40l-26 -40 q-7 -12 -25.5 -38t-63.5 -79.5t-95.5 -102.5t-124 -100t-146.5 -79z" />+<glyph unicode="&#xe107;" d="M-97.5 34q13.5 -34 50.5 -34h1294q37 0 50.5 35.5t-7.5 67.5l-642 1056q-20 34 -48 36.5t-48 -29.5l-642 -1066q-21 -32 -7.5 -66zM155 200l445 723l445 -723h-345v100h-200v-100h-345zM500 600l100 -300l100 300v100h-200v-100z" />+<glyph unicode="&#xe108;" d="M100 262v41q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44t106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -91 100 -113v-64q0 -20 -13 -28.5t-32 0.5l-94 78h-222l-94 -78q-19 -9 -32 -0.5t-13 28.5 v64q0 22 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5z" />+<glyph unicode="&#xe109;" d="M0 50q0 -20 14.5 -35t35.5 -15h1000q21 0 35.5 15t14.5 35v750h-1100v-750zM0 900h1100v150q0 21 -14.5 35.5t-35.5 14.5h-150v100h-100v-100h-500v100h-100v-100h-150q-21 0 -35.5 -14.5t-14.5 -35.5v-150zM100 100v100h100v-100h-100zM100 300v100h100v-100h-100z M100 500v100h100v-100h-100zM300 100v100h100v-100h-100zM300 300v100h100v-100h-100zM300 500v100h100v-100h-100zM500 100v100h100v-100h-100zM500 300v100h100v-100h-100zM500 500v100h100v-100h-100zM700 100v100h100v-100h-100zM700 300v100h100v-100h-100zM700 500 v100h100v-100h-100zM900 100v100h100v-100h-100zM900 300v100h100v-100h-100zM900 500v100h100v-100h-100z" />+<glyph unicode="&#xe110;" d="M0 200v200h259l600 600h241v198l300 -295l-300 -300v197h-159l-600 -600h-341zM0 800h259l122 -122l141 142l-181 180h-341v-200zM678 381l141 142l122 -123h159v198l300 -295l-300 -300v197h-241z" />+<glyph unicode="&#xe111;" d="M0 400v600q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5z" />+<glyph unicode="&#xe112;" d="M100 600v200h300v-250q0 -113 6 -145q17 -92 102 -117q39 -11 92 -11q37 0 66.5 5.5t50 15.5t36 24t24 31.5t14 37.5t7 42t2.5 45t0 47v25v250h300v-200q0 -42 -3 -83t-15 -104t-31.5 -116t-58 -109.5t-89 -96.5t-129 -65.5t-174.5 -25.5t-174.5 25.5t-129 65.5t-89 96.5 t-58 109.5t-31.5 116t-15 104t-3 83zM100 900v300h300v-300h-300zM800 900v300h300v-300h-300z" />+<glyph unicode="&#xe113;" d="M-30 411l227 -227l352 353l353 -353l226 227l-578 579z" />+<glyph unicode="&#xe114;" d="M70 797l580 -579l578 579l-226 227l-353 -353l-352 353z" />+<glyph unicode="&#xe115;" d="M-198 700l299 283l300 -283h-203v-400h385l215 -200h-800v600h-196zM402 1000l215 -200h381v-400h-198l299 -283l299 283h-200v600h-796z" />+<glyph unicode="&#xe116;" d="M18 939q-5 24 10 42q14 19 39 19h896l38 162q5 17 18.5 27.5t30.5 10.5h94q20 0 35 -14.5t15 -35.5t-15 -35.5t-35 -14.5h-54l-201 -961q-2 -4 -6 -10.5t-19 -17.5t-33 -11h-31v-50q0 -20 -14.5 -35t-35.5 -15t-35.5 15t-14.5 35v50h-300v-50q0 -20 -14.5 -35t-35.5 -15 t-35.5 15t-14.5 35v50h-50q-21 0 -35.5 15t-14.5 35q0 21 14.5 35.5t35.5 14.5h535l48 200h-633q-32 0 -54.5 21t-27.5 43z" />+<glyph unicode="&#xe117;" d="M0 0v800h1200v-800h-1200zM0 900v100h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500v-100h-1200z" />+<glyph unicode="&#xe118;" d="M1 0l300 700h1200l-300 -700h-1200zM1 400v600h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500v-200h-1000z" />+<glyph unicode="&#xe119;" d="M302 300h198v600h-198l298 300l298 -300h-198v-600h198l-298 -300z" />+<glyph unicode="&#xe120;" d="M0 600l300 298v-198h600v198l300 -298l-300 -297v197h-600v-197z" />+<glyph unicode="&#xe121;" d="M0 100v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM31 400l172 739q5 22 23 41.5t38 19.5h672q19 0 37.5 -22.5t23.5 -45.5l172 -732h-1138zM800 100h100v100h-100v-100z M1000 100h100v100h-100v-100z" />+<glyph unicode="&#xe122;" d="M-101 600v50q0 24 25 49t50 38l25 13v-250l-11 5.5t-24 14t-30 21.5t-24 27.5t-11 31.5zM100 500v250v8v8v7t0.5 7t1.5 5.5t2 5t3 4t4.5 3.5t6 1.5t7.5 0.5h200l675 250v-850l-675 200h-38l47 -276q2 -12 -3 -17.5t-11 -6t-21 -0.5h-8h-83q-20 0 -34.5 14t-18.5 35 q-55 337 -55 351zM1100 200v850q0 21 14.5 35.5t35.5 14.5q20 0 35 -14.5t15 -35.5v-850q0 -20 -15 -35t-35 -15q-21 0 -35.5 15t-14.5 35z" />+<glyph unicode="&#xe123;" d="M74 350q0 21 13.5 35.5t33.5 14.5h18l117 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3 32t29 13h94q20 0 29 -10.5t3 -29.5q-18 -36 -18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q20 0 33.5 -14.5t13.5 -35.5q0 -20 -13 -40t-31 -27q-8 -3 -23 -8.5 t-65 -20t-103 -25t-132.5 -19.5t-158.5 -9q-125 0 -245.5 20.5t-178.5 40.5l-58 20q-18 7 -31 27.5t-13 40.5zM497 110q12 -49 40 -79.5t63 -30.5t63 30.5t39 79.5q-48 -6 -102 -6t-103 6z" />+<glyph unicode="&#xe124;" d="M21 445l233 -45l-78 -224l224 78l45 -233l155 179l155 -179l45 233l224 -78l-78 224l234 45l-180 155l180 156l-234 44l78 225l-224 -78l-45 233l-155 -180l-155 180l-45 -233l-224 78l78 -225l-233 -44l179 -156z" />+<glyph unicode="&#xe125;" d="M0 200h200v600h-200v-600zM300 275q0 -75 100 -75h61q124 -100 139 -100h250q46 0 83 57l238 344q29 31 29 74v100q0 44 -30.5 84.5t-69.5 40.5h-328q28 118 28 125v150q0 44 -30.5 84.5t-69.5 40.5h-50q-27 0 -51 -20t-38 -48l-96 -198l-145 -196q-20 -26 -20 -63v-400z M400 300v375l150 213l100 212h50v-175l-50 -225h450v-125l-250 -375h-214l-136 100h-100z" />+<glyph unicode="&#xe126;" d="M0 400v600h200v-600h-200zM300 525v400q0 75 100 75h61q124 100 139 100h250q46 0 83 -57l238 -344q29 -31 29 -74v-100q0 -44 -30.5 -84.5t-69.5 -40.5h-328q28 -118 28 -125v-150q0 -44 -30.5 -84.5t-69.5 -40.5h-50q-27 0 -51 20t-38 48l-96 198l-145 196 q-20 26 -20 63zM400 525l150 -212l100 -213h50v175l-50 225h450v125l-250 375h-214l-136 -100h-100v-375z" />+<glyph unicode="&#xe127;" d="M8 200v600h200v-600h-200zM308 275v525q0 17 14 35.5t28 28.5l14 9l362 230q14 6 25 6q17 0 29 -12l109 -112q14 -14 14 -34q0 -18 -11 -32l-85 -121h302q85 0 138.5 -38t53.5 -110t-54.5 -111t-138.5 -39h-107l-130 -339q-7 -22 -20.5 -41.5t-28.5 -19.5h-341 q-7 0 -90 81t-83 94zM408 289l100 -89h293l131 339q6 21 19.5 41t28.5 20h203q16 0 25 15t9 36q0 20 -9 34.5t-25 14.5h-457h-6.5h-7.5t-6.5 0.5t-6 1t-5 1.5t-5.5 2.5t-4 4t-4 5.5q-5 12 -5 20q0 14 10 27l147 183l-86 83l-339 -236v-503z" />+<glyph unicode="&#xe128;" d="M-101 651q0 72 54 110t139 38l302 -1l-85 121q-11 16 -11 32q0 21 14 34l109 113q13 12 29 12q11 0 25 -6l365 -230q7 -4 17 -10.5t26.5 -26t16.5 -36.5v-526q0 -13 -86 -93.5t-94 -80.5h-341q-16 0 -29.5 20t-19.5 41l-130 339h-107q-84 0 -139 39t-55 111zM-1 601h222 q15 0 28.5 -20.5t19.5 -40.5l131 -339h293l107 89v502l-343 237l-87 -83l145 -184q10 -11 10 -26q0 -11 -5 -20q-1 -3 -3.5 -5.5l-4 -4t-5 -2.5t-5.5 -1.5t-6.5 -1t-6.5 -0.5h-7.5h-6.5h-476v-100zM1000 201v600h200v-600h-200z" />+<glyph unicode="&#xe129;" d="M97 719l230 -363q4 -6 10.5 -15.5t26 -25t36.5 -15.5h525q13 0 94 83t81 90v342q0 15 -20 28.5t-41 19.5l-339 131v106q0 84 -39 139t-111 55t-110 -53.5t-38 -138.5v-302l-121 84q-15 12 -33.5 11.5t-32.5 -13.5l-112 -110q-22 -22 -6 -53zM172 739l83 86l183 -146 q22 -18 47 -5q3 1 5.5 3.5l4 4t2.5 5t1.5 5.5t1 6.5t0.5 6.5v7.5v6.5v456q0 22 25 31t50 -0.5t25 -30.5v-202q0 -16 20 -29.5t41 -19.5l339 -130v-294l-89 -100h-503zM400 0v200h600v-200h-600z" />+<glyph unicode="&#xe130;" d="M2 585q-16 -31 6 -53l112 -110q13 -13 32 -13.5t34 10.5l121 85q0 -51 -0.5 -153.5t-0.5 -148.5q0 -84 38.5 -138t110.5 -54t111 55t39 139v106l339 131q20 6 40.5 19.5t20.5 28.5v342q0 7 -81 90t-94 83h-525q-17 0 -35.5 -14t-28.5 -28l-10 -15zM77 565l236 339h503 l89 -100v-294l-340 -130q-20 -6 -40 -20t-20 -29v-202q0 -22 -25 -31t-50 0t-25 31v456v14.5t-1.5 11.5t-5 12t-9.5 7q-24 13 -46 -5l-184 -146zM305 1104v200h600v-200h-600z" />+<glyph unicode="&#xe131;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM298 701l2 -201h300l-2 -194l402 294l-402 298v-197h-300z" />+<glyph unicode="&#xe132;" d="M0 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t231.5 47.5q122 0 232.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-218 -217.5t-300 -80t-299.5 80t-217.5 217.5t-80 299.5zM200 600l402 -294l-2 194h300l2 201h-300v197z" />+<glyph unicode="&#xe133;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 600h200v-300h200v300h200l-300 400z" />+<glyph unicode="&#xe134;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 600l300 -400l300 400h-200v300h-200v-300h-200z" />+<glyph unicode="&#xe135;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q121 0 231.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM254 780q-8 -33 5.5 -92.5t7.5 -87.5q0 -9 17 -44t16 -60 q12 0 23 -5.5t23 -15t20 -13.5q24 -12 108 -42q22 -8 53 -31.5t59.5 -38.5t57.5 -11q8 -18 -15 -55t-20 -57q42 -71 87 -80q0 -6 -3 -15.5t-3.5 -14.5t4.5 -17q104 -3 221 112q30 29 47 47t34.5 49t20.5 62q-14 9 -37 9.5t-36 7.5q-14 7 -49 15t-52 19q-9 0 -39.5 -0.5 t-46.5 -1.5t-39 -6.5t-39 -16.5q-50 -35 -66 -12q-4 2 -3.5 25.5t0.5 25.5q-6 13 -26.5 17t-24.5 7q2 22 -2 41t-16.5 28t-38.5 -20q-23 -25 -42 4q-19 28 -8 58q6 16 22 22q6 -1 26 -1.5t33.5 -4t19.5 -13.5q12 -19 32 -37.5t34 -27.5l14 -8q0 3 9.5 39.5t5.5 57.5 q-4 23 14.5 44.5t22.5 31.5q5 14 10 35t8.5 31t15.5 22.5t34 21.5q-6 18 10 37q8 0 23.5 -1.5t24.5 -1.5t20.5 4.5t20.5 15.5q-10 23 -30.5 42.5t-38 30t-49 26.5t-43.5 23q11 39 2 44q31 -13 58 -14.5t39 3.5l11 4q7 36 -16.5 53.5t-64.5 28.5t-56 23q-19 -3 -37 0 q-15 -12 -36.5 -21t-34.5 -12t-44 -8t-39 -6q-15 -3 -45.5 0.5t-45.5 -2.5q-21 -7 -52 -26.5t-34 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -90.5t-29.5 -79.5zM518 916q3 12 16 30t16 25q10 -10 18.5 -10t14 6t14.5 14.5t16 12.5q0 -24 17 -66.5t17 -43.5 q-9 2 -31 5t-36 5t-32 8t-30 14zM692 1003h1h-1z" />+<glyph unicode="&#xe136;" d="M0 164.5q0 21.5 15 37.5l600 599q-33 101 6 201.5t135 154.5q164 92 306 -9l-259 -138l145 -232l251 126q13 -175 -151 -267q-123 -70 -253 -23l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5z" />+<glyph unicode="&#xe137;" horiz-adv-x="1220" d="M0 196v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM0 596v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5zM0 996v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM600 596h500v100h-500v-100zM800 196h300v100h-300v-100zM900 996h200v100h-200v-100z" />+<glyph unicode="&#xe138;" d="M100 1100v100h1000v-100h-1000zM150 1000h900l-350 -500v-300l-200 -200v500z" />+<glyph unicode="&#xe139;" d="M0 200v200h1200v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM0 500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5h200q41 0 70.5 -29.5t29.5 -70.5v-100h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500z M500 1000h200v100h-200v-100z" />+<glyph unicode="&#xe140;" d="M0 0v400l129 -129l200 200l142 -142l-200 -200l129 -129h-400zM0 800l129 129l200 -200l142 142l-200 200l129 129h-400v-400zM729 329l142 142l200 -200l129 129v-400h-400l129 129zM729 871l200 200l-129 129h400v-400l-129 129l-200 -200z" />+<glyph unicode="&#xe141;" d="M0 596q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM182 596q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM291 655 q0 23 15.5 38.5t38.5 15.5t39 -16t16 -38q0 -23 -16 -39t-39 -16q-22 0 -38 16t-16 39zM400 850q0 22 16 38.5t39 16.5q22 0 38 -16t16 -39t-16 -39t-38 -16q-23 0 -39 16.5t-16 38.5zM514 609q0 32 20.5 56.5t51.5 29.5l122 126l1 1q-9 14 -9 28q0 22 16 38.5t39 16.5 q22 0 38 -16t16 -39t-16 -39t-38 -16q-14 0 -29 10l-55 -145q17 -22 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5t-61.5 25.5t-25.5 61.5zM800 655q0 22 16 38t39 16t38.5 -15.5t15.5 -38.5t-16 -39t-38 -16q-23 0 -39 16t-16 39z" />+<glyph unicode="&#xe142;" d="M-40 375q-13 -95 35 -173q35 -57 94 -89t129 -32q63 0 119 28q33 16 65 40.5t52.5 45.5t59.5 64q40 44 57 61l394 394q35 35 47 84t-3 96q-27 87 -117 104q-20 2 -29 2q-46 0 -78.5 -16.5t-67.5 -51.5l-389 -396l-7 -7l69 -67l377 373q20 22 39 38q23 23 50 23 q38 0 53 -36q16 -39 -20 -75l-547 -547q-52 -52 -125 -52q-55 0 -100 33t-54 96q-5 35 2.5 66t31.5 63t42 50t56 54q24 21 44 41l348 348q52 52 82.5 79.5t84 54t107.5 26.5q25 0 48 -4q95 -17 154 -94.5t51 -175.5q-7 -101 -98 -192l-252 -249l-253 -256l7 -7l69 -60 l517 511q67 67 95 157t11 183q-16 87 -67 154t-130 103q-69 33 -152 33q-107 0 -197 -55q-40 -24 -111 -95l-512 -512q-68 -68 -81 -163z" />+<glyph unicode="&#xe143;" d="M80 784q0 131 98.5 229.5t230.5 98.5q143 0 241 -129q103 129 246 129q129 0 226 -98.5t97 -229.5q0 -46 -17.5 -91t-61 -99t-77 -89.5t-104.5 -105.5q-197 -191 -293 -322l-17 -23l-16 23q-43 58 -100 122.5t-92 99.5t-101 100q-71 70 -104.5 105.5t-77 89.5t-61 99 t-17.5 91zM250 784q0 -27 30.5 -70t61.5 -75.5t95 -94.5l22 -22q93 -90 190 -201q82 92 195 203l12 12q64 62 97.5 97t64.5 79t31 72q0 71 -48 119.5t-105 48.5q-74 0 -132 -83l-118 -171l-114 174q-51 80 -123 80q-60 0 -109.5 -49.5t-49.5 -118.5z" />+<glyph unicode="&#xe144;" d="M57 353q0 -95 66 -159l141 -142q68 -66 159 -66q93 0 159 66l283 283q66 66 66 159t-66 159l-141 141q-8 9 -19 17l-105 -105l212 -212l-389 -389l-247 248l95 95l-18 18q-46 45 -75 101l-55 -55q-66 -66 -66 -159zM269 706q0 -93 66 -159l141 -141q7 -7 19 -17l105 105 l-212 212l389 389l247 -247l-95 -96l18 -17q47 -49 77 -100l29 29q35 35 62.5 88t27.5 96q0 93 -66 159l-141 141q-66 66 -159 66q-95 0 -159 -66l-283 -283q-66 -64 -66 -159z" />+<glyph unicode="&#xe145;" d="M200 100v953q0 21 30 46t81 48t129 38t163 15t162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5zM300 300h600v700h-600v-700zM496 150q0 -43 30.5 -73.5t73.5 -30.5t73.5 30.5t30.5 73.5t-30.5 73.5t-73.5 30.5 t-73.5 -30.5t-30.5 -73.5z" />+<glyph unicode="&#xe146;" d="M0 0l303 380l207 208l-210 212h300l267 279l-35 36q-15 14 -15 35t15 35q14 15 35 15t35 -15l283 -282q15 -15 15 -36t-15 -35q-14 -15 -35 -15t-35 15l-36 35l-279 -267v-300l-212 210l-208 -207z" />+<glyph unicode="&#xe148;" d="M295 433h139q5 -77 48.5 -126.5t117.5 -64.5v335q-6 1 -15.5 4t-11.5 3q-46 14 -79 26.5t-72 36t-62.5 52t-40 72.5t-16.5 99q0 92 44 159.5t109 101t144 40.5v78h100v-79q38 -4 72.5 -13.5t75.5 -31.5t71 -53.5t51.5 -84t24.5 -118.5h-159q-8 72 -35 109.5t-101 50.5 v-307l64 -14q34 -7 64 -16.5t70 -31.5t67.5 -52t47.5 -80.5t20 -112.5q0 -139 -89 -224t-244 -96v-77h-100v78q-152 17 -237 104q-40 40 -52.5 93.5t-15.5 139.5zM466 889q0 -29 8 -51t16.5 -34t29.5 -22.5t31 -13.5t38 -10q7 -2 11 -3v274q-61 -8 -97.5 -37.5t-36.5 -102.5 zM700 237q170 18 170 151q0 64 -44 99.5t-126 60.5v-311z" />+<glyph unicode="&#xe149;" d="M100 600v100h166q-24 49 -44 104q-10 26 -14.5 55.5t-3 72.5t25 90t68.5 87q97 88 263 88q129 0 230 -89t101 -208h-153q0 52 -34 89.5t-74 51.5t-76 14q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -28 16.5 -69.5t28 -62.5t41.5 -72h241v-100h-197q8 -50 -2.5 -115 t-31.5 -94q-41 -59 -99 -113q35 11 84 18t70 7q33 1 103 -16t103 -17q76 0 136 30l50 -147q-41 -25 -80.5 -36.5t-59 -13t-61.5 -1.5q-23 0 -128 33t-155 29q-39 -4 -82 -17t-66 -25l-24 -11l-55 145l16.5 11t15.5 10t13.5 9.5t14.5 12t14.5 14t17.5 18.5q48 55 54 126.5 t-30 142.5h-221z" />+<glyph unicode="&#xe150;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM602 900l298 300l298 -300h-198v-900h-200v900h-198z" />+<glyph unicode="&#xe151;" d="M2 300h198v900h200v-900h198l-298 -300zM700 0v200h100v-100h200v-100h-300zM700 400v100h300v-200h-99v-100h-100v100h99v100h-200zM700 700v500h300v-500h-100v100h-100v-100h-100zM801 900h100v200h-100v-200z" />+<glyph unicode="&#xe152;" d="M2 300h198v900h200v-900h198l-298 -300zM700 0v500h300v-500h-100v100h-100v-100h-100zM700 700v200h100v-100h200v-100h-300zM700 1100v100h300v-200h-99v-100h-100v100h99v100h-200zM801 200h100v200h-100v-200z" />+<glyph unicode="&#xe153;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM800 100v400h300v-500h-100v100h-200zM800 1100v100h200v-500h-100v400h-100zM901 200h100v200h-100v-200z" />+<glyph unicode="&#xe154;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM800 400v100h200v-500h-100v400h-100zM800 800v400h300v-500h-100v100h-200zM901 900h100v200h-100v-200z" />+<glyph unicode="&#xe155;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM700 100v200h500v-200h-500zM700 400v200h400v-200h-400zM700 700v200h300v-200h-300zM700 1000v200h200v-200h-200z" />+<glyph unicode="&#xe156;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM700 100v200h200v-200h-200zM700 400v200h300v-200h-300zM700 700v200h400v-200h-400zM700 1000v200h500v-200h-500z" />+<glyph unicode="&#xe157;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q162 0 281 -118.5t119 -281.5v-300q0 -165 -118.5 -282.5t-281.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500z" />+<glyph unicode="&#xe158;" d="M0 400v300q0 163 119 281.5t281 118.5h300q165 0 282.5 -117.5t117.5 -282.5v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-163 0 -281.5 117.5t-118.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM400 300l333 250l-333 250v-500z" />+<glyph unicode="&#xe159;" d="M0 400v300q0 163 117.5 281.5t282.5 118.5h300q163 0 281.5 -119t118.5 -281v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM300 700l250 -333l250 333h-500z" />+<glyph unicode="&#xe160;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q165 0 282.5 -117.5t117.5 -282.5v-300q0 -162 -118.5 -281t-281.5 -119h-300q-165 0 -282.5 118.5t-117.5 281.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM300 400h500l-250 333z" />+<glyph unicode="&#xe161;" d="M0 400v300h300v200l400 -350l-400 -350v200h-300zM500 0v200h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-500v200h400q165 0 282.5 -117.5t117.5 -282.5v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-400z" />+<glyph unicode="&#xe162;" d="M217 519q8 -19 31 -19h302q-155 -438 -160 -458q-5 -21 4 -32l9 -8h9q14 0 26 15q11 13 274.5 321.5t264.5 308.5q14 19 5 36q-8 17 -31 17l-301 -1q1 4 78 219.5t79 227.5q2 15 -5 27l-9 9h-9q-15 0 -25 -16q-4 -6 -98 -111.5t-228.5 -257t-209.5 -237.5q-16 -19 -6 -41 z" />+<glyph unicode="&#xe163;" d="M0 400q0 -165 117.5 -282.5t282.5 -117.5h300q47 0 100 15v185h-500q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5h500v185q-14 4 -114 7.5t-193 5.5l-93 2q-165 0 -282.5 -117.5t-117.5 -282.5v-300zM600 400v300h300v200l400 -350l-400 -350v200h-300z " />+<glyph unicode="&#xe164;" d="M0 400q0 -165 117.5 -282.5t282.5 -117.5h300q163 0 281.5 117.5t118.5 282.5v98l-78 73l-122 -123v-148q0 -41 -29.5 -70.5t-70.5 -29.5h-500q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5h156l118 122l-74 78h-100q-165 0 -282.5 -117.5t-117.5 -282.5 v-300zM496 709l353 342l-149 149h500v-500l-149 149l-342 -353z" />+<glyph unicode="&#xe165;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM406 600 q0 80 57 137t137 57t137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137z" />+<glyph unicode="&#xe166;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 800l445 -500l450 500h-295v400h-300v-400h-300zM900 150h100v50h-100v-50z" />+<glyph unicode="&#xe167;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 700h300v-300h300v300h295l-445 500zM900 150h100v50h-100v-50z" />+<glyph unicode="&#xe168;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 705l305 -305l596 596l-154 155l-442 -442l-150 151zM900 150h100v50h-100v-50z" />+<glyph unicode="&#xe169;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 988l97 -98l212 213l-97 97zM200 400l697 1l3 699l-250 -239l-149 149l-212 -212l149 -149zM900 150h100v50h-100v-50z" />+<glyph unicode="&#xe170;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM200 612l212 -212l98 97l-213 212zM300 1200l239 -250l-149 -149l212 -212l149 148l249 -237l-1 697zM900 150h100v50h-100v-50z" />+<glyph unicode="&#xe171;" d="M23 415l1177 784v-1079l-475 272l-310 -393v416h-392zM494 210l672 938l-672 -712v-226z" />+<glyph unicode="&#xe172;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-850q0 -21 -15 -35.5t-35 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 1000h100v200h-100v-200z" />+<glyph unicode="&#xe173;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-218l-276 -275l-120 120l-126 -127h-378v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM581 306l123 123l120 -120l353 352l123 -123l-475 -476zM600 1000h100v200h-100v-200z" />+<glyph unicode="&#xe174;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-269l-103 -103l-170 170l-298 -298h-329v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 1000h100v200h-100v-200zM700 133l170 170l-170 170l127 127l170 -170l170 170l127 -128l-170 -169l170 -170 l-127 -127l-170 170l-170 -170z" />+<glyph unicode="&#xe175;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-300h-400v-200h-500v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 300l300 -300l300 300h-200v300h-200v-300h-200zM600 1000v200h100v-200h-100z" />+<glyph unicode="&#xe176;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-402l-200 200l-298 -298h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 300h200v-300h200v300h200l-300 300zM600 1000v200h100v-200h-100z" />+<glyph unicode="&#xe177;" d="M0 250q0 -21 14.5 -35.5t35.5 -14.5h1100q21 0 35.5 14.5t14.5 35.5v550h-1200v-550zM0 900h1200v150q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-150zM100 300v200h400v-200h-400z" />+<glyph unicode="&#xe178;" d="M0 400l300 298v-198h400v-200h-400v-198zM100 800v200h100v-200h-100zM300 800v200h100v-200h-100zM500 800v200h400v198l300 -298l-300 -298v198h-400zM800 300v200h100v-200h-100zM1000 300h100v200h-100v-200z" />+<glyph unicode="&#xe179;" d="M100 700v400l50 100l50 -100v-300h100v300l50 100l50 -100v-300h100v300l50 100l50 -100v-400l-100 -203v-447q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447zM800 597q0 -29 10.5 -55.5t25 -43t29 -28.5t25.5 -18l10 -5v-397q0 -21 14.5 -35.5 t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v1106q0 31 -18 40.5t-44 -7.5l-276 -116q-25 -17 -43.5 -51.5t-18.5 -65.5v-359z" />+<glyph unicode="&#xe180;" d="M100 0h400v56q-75 0 -87.5 6t-12.5 44v394h500v-394q0 -38 -12.5 -44t-87.5 -6v-56h400v56q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5v888q0 22 25 34.5t50 13.5l25 2v56h-400v-56q75 0 87.5 -6t12.5 -44v-394h-500v394q0 38 12.5 44t87.5 6v56h-400v-56q4 0 11 -0.5 t24 -3t30 -7t24 -15t11 -24.5v-888q0 -22 -25 -34.5t-50 -13.5l-25 -2v-56z" />+<glyph unicode="&#xe181;" d="M0 300q0 -41 29.5 -70.5t70.5 -29.5h300q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-300q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM100 100h400l200 200h105l295 98v-298h-425l-100 -100h-375zM100 300v200h300v-200h-300zM100 600v200h300v-200h-300z M100 1000h400l200 -200v-98l295 98h105v200h-425l-100 100h-375zM700 402v163l400 133v-163z" />+<glyph unicode="&#xe182;" d="M16.5 974.5q0.5 -21.5 16 -90t46.5 -140t104 -177.5t175 -208q103 -103 207.5 -176t180 -103.5t137 -47t92.5 -16.5l31 1l163 162q17 18 13.5 41t-22.5 37l-192 136q-19 14 -45 12t-42 -19l-118 -118q-142 101 -268 227t-227 268l118 118q17 17 20 41.5t-11 44.5 l-139 194q-14 19 -36.5 22t-40.5 -14l-162 -162q-1 -11 -0.5 -32.5z" />+<glyph unicode="&#xe183;" d="M0 50v212q0 20 10.5 45.5t24.5 39.5l365 303v50q0 4 1 10.5t12 22.5t30 28.5t60 23t97 10.5t97 -10t60 -23.5t30 -27.5t12 -24l1 -10v-50l365 -303q14 -14 24.5 -39.5t10.5 -45.5v-212q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-20 0 -35 14.5t-15 35.5zM0 712 q0 -21 14.5 -33.5t34.5 -8.5l202 33q20 4 34.5 21t14.5 38v146q141 24 300 24t300 -24v-146q0 -21 14.5 -38t34.5 -21l202 -33q20 -4 34.5 8.5t14.5 33.5v200q-6 8 -19 20.5t-63 45t-112 57t-171 45t-235 20.5q-92 0 -175 -10.5t-141.5 -27t-108.5 -36.5t-81.5 -40 t-53.5 -36.5t-31 -27.5l-9 -10v-200z" />+<glyph unicode="&#xe184;" d="M100 0v100h1100v-100h-1100zM175 200h950l-125 150v250l100 100v400h-100v-200h-100v200h-200v-200h-100v200h-200v-200h-100v200h-100v-400l100 -100v-250z" />+<glyph unicode="&#xe185;" d="M100 0h300v400q0 41 -29.5 70.5t-70.5 29.5h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-400zM500 0v1000q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-1000h-300zM900 0v700q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-700h-300z" />+<glyph unicode="&#xe186;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v300h-200v100h200v100h-300v-300h200v-100h-200v-100zM600 300h200v100h100v300h-100v100h-200v-500 zM700 400v300h100v-300h-100z" />+<glyph unicode="&#xe187;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h100v200h100v-200h100v500h-100v-200h-100v200h-100v-500zM600 300h200v100h100v300h-100v100h-200v-500 zM700 400v300h100v-300h-100z" />+<glyph unicode="&#xe188;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v100h-200v300h200v100h-300v-500zM600 300h300v100h-200v300h200v100h-300v-500z" />+<glyph unicode="&#xe189;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 550l300 -150v300zM600 400l300 150l-300 150v-300z" />+<glyph unicode="&#xe190;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300v500h700v-500h-700zM300 400h130q41 0 68 42t27 107t-28.5 108t-66.5 43h-130v-300zM575 549 q0 -65 27 -107t68 -42h130v300h-130q-38 0 -66.5 -43t-28.5 -108z" />+<glyph unicode="&#xe191;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v300h-200v100h200v100h-300v-300h200v-100h-200v-100zM601 300h100v100h-100v-100zM700 700h100 v-400h100v500h-200v-100z" />+<glyph unicode="&#xe192;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v400h-200v100h-100v-500zM301 400v200h100v-200h-100zM601 300h100v100h-100v-100zM700 700h100 v-400h100v500h-200v-100z" />+<glyph unicode="&#xe193;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 700v100h300v-300h-99v-100h-100v100h99v200h-200zM201 300v100h100v-100h-100zM601 300v100h100v-100h-100z M700 700v100h200v-500h-100v400h-100z" />+<glyph unicode="&#xe194;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM400 500v200 l100 100h300v-100h-300v-200h300v-100h-300z" />+<glyph unicode="&#xe195;" d="M0 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM182 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM400 400v400h300 l100 -100v-100h-100v100h-200v-100h200v-100h-200v-100h-100zM700 400v100h100v-100h-100z" />+<glyph unicode="&#xe197;" d="M-14 494q0 -80 56.5 -137t135.5 -57h222v300h400v-300h128q120 0 205 86.5t85 207.5t-85 207t-205 86q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5zM300 200h200v300h200v-300h200 l-300 -300z" />+<glyph unicode="&#xe198;" d="M-14 494q0 -80 56.5 -137t135.5 -57h8l414 414l403 -403q94 26 154.5 104.5t60.5 178.5q0 120 -85 206.5t-205 86.5q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5zM300 200l300 300 l300 -300h-200v-300h-200v300h-200z" />+<glyph unicode="&#xe199;" d="M100 200h400v-155l-75 -45h350l-75 45v155h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170z" />+<glyph unicode="&#xe200;" d="M121 700q0 -53 28.5 -97t75.5 -65q-4 -16 -4 -38q0 -74 52.5 -126.5t126.5 -52.5q56 0 100 30v-306l-75 -45h350l-75 45v306q46 -30 100 -30q74 0 126.5 52.5t52.5 126.5q0 24 -9 55q50 32 79.5 83t29.5 112q0 90 -61.5 155.5t-150.5 71.5q-26 89 -99.5 145.5 t-167.5 56.5q-116 0 -197.5 -81.5t-81.5 -197.5q0 -4 1 -11.5t1 -11.5q-14 2 -23 2q-74 0 -126.5 -52.5t-52.5 -126.5z" />+</font>+</defs></svg> 
+ static/fonts/glyphicons-halflings-regular.ttf view

binary file changed (absent → 41280 bytes)

+ static/fonts/glyphicons-halflings-regular.woff view

binary file changed (absent → 23320 bytes)

+ static/hledger.css view
@@ -0,0 +1,262 @@+/* hledger web ui styles */++/*------------------------------------------------------------------------------------------*/+/* 1. colours */++/* green */+body                                                                 { background-color:white; color:black; }+.registerreport .odd                                                 { background-color:#ded; }+/* .transactionsreport .odd                                             { background-color:#eee; } */+.filtering                                                           { background-color:#e0e0e0; }+a:link, a:visited { color:#00e; }+/* a:link:hover, a:visited:hover { color:red; } */+/* #main                                                                { border-color:#e0e0e0; } see below */+/* .journalreport td                                                    { border-color:thin solid #e0e0e0; } see below */++/* white */+/* body                                                                 { background-color:#fff; } */+/* .registerreport .odd                                                 { background-color:#eee; } */+/* .filtering                                                           { background-color:#ddd; } */+/* #main                                                                { border-color:#eee; } see below */+/* .journalreport td                                                    { border-color:thin solid #eee; } see below */++#message                                                             { color:red; background-color:#fee; }+/* #addform input.textinput, #addform .dhx_combo_input, .dhx_combo_list { /\*background-color:#eee;*\/ } */+#editform textarea                                                   { background-color:#eee; }+.negative                                                            { color:#800; }+.help                                                                {  }++#sidebar .hoverlinks { visibility:hidden; }+/* #sidebar .mouseover { background-color:rgba(208,208,208,0.5); } */+#sidebar .mouseover .hoverlinks { visibility:visible; }++#sidebar .balancereport .hoverlinks { margin-left:0em; font-weight:normal; /*font-size:smaller;*/ display:inline-block; text-align:right; }+#sidebar .balancereport .hoverlinks a { margin-left:0.5em; }+/* #sidebar .notinacct, .notinacct :link, .notinacct :visited { color:#888; } */+#sidebar .notinacct .negative { color:#b77; }+#sidebar .balancereport .inacct { font-weight:bold; }+/* #sidebar .balancereport .inacct { background-color:#e0e0e0; } */+#sidebar .balancereport .numpostings                                          { padding-left:1em; color:#aaa; }+#sidebar .current { font-weight:bold; }++/*------------------------------------------------------------------------------------------*/+/* 2. font families & sizes */+/* overspecified for cross-browser robustness */+body { font-size:16px; }+/*+body                                               { font-family:helvetica,arial,sans-serif; }+pre                                                { font-family:courier,"courier new",monospace; }+.dhx_combo_input, .dhx_combo_list { font-size:small; }+#editform textarea                                 { font-family:courier,"courier new",monospace; font-size:small; }+.nav2                                              { font-size:small; }+#searchform                                        { font-size:small; }+.topleftlink                                       { font-size:small; }+.toprightlink                                      { font-size:small; }+#journaldesc                                       { font-size:small; }+.togglelink                                        { font-size:smaller; white-space:nowrap }+.help                                              { font-size:smaller; }+.form                                              { font-size:small; }+.transactionsreport                                { font-size:small; }+.entriesreport                                     { font-size:small; }+.balancereport                                     { font-size:small; }+.registerreport                                    { font-size:small; }+.showall                                           { font-size:small; }+*/+/* #addformlink                                    { font-size:small; } */+/* #editformlink                                   { font-size:small; } */+/*+#contenttitle                                    { font-size:1.2em; }+*/++/*------------------------------------------------------------------------------------------*/+/* 3. layout */++body                        { margin:0; }+++#topbar                     { padding:2px; }+.topleftlink                { float:left; margin-right:1em; padding:2px; }+.toprightlink               { float:right; margin-left:1em; padding:2px; }+#topbar h1                  { display:inline-block; vertical-align:top; margin:0; }+#journalinfo                { vertical-align:middle; margin:0; }+/* #topbar                  { padding:4px; border-bottom:2px solid #ddd; } */++#message                    { margin:0.5em;}+.help                       { font-style: italic; }+.helprow td                 { padding-bottom:8px; }++#outermain { overflow:auto; }+#main { overflow:auto; padding-left:1em; }++#sidebar {+  float:left;+  padding-right:1em; +  border-right:thin solid #e0e0e0;+  margin-bottom:5em;+}+/* #sidebar.affix { */+/*     position: fixed; */+/*     top: 20px; */+/* } */++.balancereport .item { border-top:thin solid #e0e0e0; }++#navlinks                   { margin-bottom:1em; }+.navlink                    { }+.navlinkcurrent             { font-weight:bold; }+.form                       { margin:0em; }++#searchformdiv              { margin:0 0 1em 0; }+#searchform                 { margin:0; }+#searchform span            { padding:4px; }+#stopfilterlink             { font-weight:bold; }+.filtering                  { font-weight:bold; }++#main .journal { }+#main .register { }+.current                    { font-weight:bold; }+.date                       { padding-left:0em; }+.description                { padding-left:1em; white-space:normal; }+.account                    { padding-left:1em; white-space:normal; }+.amount                     { padding-left:1em; white-space:nowrap; }+.balance                    { padding-left:1em; padding-right:0.3em; white-space:nowrap; }+.amount, .balance { width:2em; }  /* minimise width */+.positive                   { }++/* table.transactionsreport         { border-spacing: 0; } */+/* .transactionsreport td           {  } */+/* .transactionsreport pre          { margin-top:0; } */++/* table.entriesreport         { border-spacing: 0; } */+/* .entriesreport td           {  } */+/* .entriesreport pre          { margin-top:0; } */++.balancereport              { border-spacing:0; }+.balancereport tr           { vertical-align:bottom; border-spacing:0; }+.balancereport .title       { white-space:nowrap; }+.balancereport .item        { }+/* .balancereport .depth0      { padding-top:1em; } */+.balancereport td           { padding:0; }+.totalrule td               { border-top:thin solid black; }+.balancereport .account     { white-space:nowrap; }++.hidden { display:none; }+table.registerreport        { border-spacing:0; }+table.registerreport tr     { vertical-align:top; }+table.registerreport td     { padding-bottom:0.2em; }+table.registerreport .date  { white-space:nowrap; }+table.registerreport tr.posting { font-size:smaller; }+table.registerreport tr.posting .account  { padding-left:1.5em; }+table.registerreport tr.posting .amount  { padding-right:0.5em; }+tr.firstposting td          { }+/* tr.newday td                { border-top: 1px solid #797; } */+/* tr.newday .date             { font-weight:bold; } */+/* tr.newmonth td              { border-top: 2px solid #464; } */+/* tr.newyear td               { border-top: 3px solid black; } */+#accountsheading            { white-space:nowrap; }+++#addform {+  /* margin:0 0 2em; */+  /* padding:.5em 0; */+  /* border-top:thin solid #e0e0e0; */+  /* border-bottom:thin solid #e0e0e0; */+}+#addform tr {+  vertical-align:top;+}+/* #addform input.textinput, #addform .dhx_combo_input, .dhx_combo_list   { padding:4px; } */+/* #addform table              { } */+/* #addform #addbuttonrow      { text-align:right; } */+/* #editform                   { width:95%; } */+#editform textarea          { width:100%; padding:4px; }+/* #searchform table           { border-spacing:0; padding-left:0em; } */++::-moz-placeholder {+  font-style:italic;+}+:-moz-placeholder {+  font-style:italic;+}+::-webkit-input-placeholder {+  font-style:italic;+}+ :-ms-input-placeholder {+  font-style:italic;+}++/*------------------------------------------------------------------------------------------*/+/* 4. typeahead styles */++/*+.typeahead,+.tt-query,+.tt-hint {+  width: 396px;+  height: 30px;+  padding: 8px 12px;+  font-size: 24px;+  line-height: 30px;+  border: 2px solid #ccc;+  -webkit-border-radius: 8px;+     -moz-border-radius: 8px;+          border-radius: 8px;+  outline: none;+}++.typeahead {+  background-color: #fff;+}++.typeahead:focus {+  border: 2px solid #0097cf;+}++.tt-query {+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);+     -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);+          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);+}++*/+.tt-hint {+  color: #bbb;+}++.tt-dropdown-menu {+  padding: 8px 0;+  background-color: #fff;+  border: 1px solid #ccc;+  border: 1px solid rgba(0, 0, 0, 0.2);+  -webkit-border-radius: 8px;+     -moz-border-radius: 8px;+          border-radius: 8px;+  -webkit-box-shadow: 0 5px 10px rgba(0,0,0,.2);+     -moz-box-shadow: 0 5px 10px rgba(0,0,0,.2);+          box-shadow: 0 5px 10px rgba(0,0,0,.2);+  overflow:auto;+  max-height:300px;+}++.tt-suggestions {+}++.tt-suggestion {+  padding: 3px 20px;+  font-size: 18px;+  line-height: 24px;+}++.tt-suggestion.tt-cursor {+  color: #fff;+  background-color: #0097cf;++}++.tt-suggestion p {+  margin: 0;+}++.twitter-typeahead {+  width:100%;+}
static/hledger.js view
@@ -1,177 +1,326 @@-/* hledger web ui javascripts */-/* depends on jquery, other support libs, and additional js inserted inline */+/* hledger web ui javascript */ +//----------------------------------------------------------------------+// STARTUP+ $(document).ready(function() { -    /* show/hide things based on request parameters */-    if ($.url.param('add')) addformToggle();-    else if ($.url.param('edit')) editformToggle();-    if ($.url.param('accounts')=='0') $('#accounts').hide();+  // show add form if ?add=1+  if ($.url.param('add')) { addformShow(); } -    /* set up sidebar account mouse-over handlers */-    $('.balancereport td a').mouseenter(function(){ $(this).parent().addClass('mouseover'); });-    $('.balancereport td').mouseleave(function(){ $(this).removeClass('mouseover'); });+  // sidebar account hover handlers+  $('#sidebar td a').mouseenter(function(){ $(this).parent().addClass('mouseover'); });+  $('#sidebar td').mouseleave(function(){ $(this).removeClass('mouseover'); }); -    /* set up various show/hide toggles */-    $('#search-help-link').click(function() { $('#search-help').slideToggle('fast'); event.preventDefault(); });-    $('#accounts-toggle-link').click(function() { $('#accounts').slideToggle('fast'); event.preventDefault(); });-    $('#all-postings-toggle-link').click(function() { $('.posting').toggle(); event.preventDefault(); });-    $('.postings-toggle-link').click(function() { $(this).parent().parent().nextUntil(':not(.posting)').toggle(); event.preventDefault(); });+  // keyboard shortcuts+  // 'body' seems to hold focus better than document in FF+  $('body').bind('keydown', 'h',       function(){ $('#helpmodal').modal('toggle'); return false; });+  $('body').bind('keydown', 'shift+/', function(){ $('#helpmodal').modal('toggle'); return false; });+  $('body').bind('keydown', 'j',       function(){ location.href = '/journal'; return false; });+  $('body').bind('keydown', 's',       function(){ sidebarToggle(); return false; });+  $('body').bind('keydown', 'a',       function(){ addformShow(); return false; });+  $('body').bind('keydown', 'n',       function(){ addformShow(); return false; });+  $('body').bind('keydown', 'f',       function(){ $('#searchform input').focus(); return false; });+  $('body, #addform input, #addform select').bind('keydown', 'ctrl+shift+=', addformAddPosting);+  $('body, #addform input, #addform select').bind('keydown', 'ctrl+=',       addformAddPosting);+  $('body, #addform input, #addform select').bind('keydown', 'ctrl+-',       addformDeletePosting);+  $('#addform tr.posting:last > td:first input').bind('keydown', 'tab', addformAddPostingWithTab);  }); -function searchformToggle() {- var a = document.getElementById('addform');- var e = document.getElementById('editform');- var f = document.getElementById('searchform');- var i = document.getElementById('importform');- var c = document.getElementById('maincontent');- var alink = document.getElementById('addformlink');- var elink = document.getElementById('editformlink');- var flink = document.getElementById('searchformlink');- var ilink = document.getElementById('importformlink');- var tlink = document.getElementById('transactionslink');+//----------------------------------------------------------------------+// REGISTER CHART - if (f.style.display == 'none') {-  flink.style['font-weight'] = 'bold';-  f.style.display = 'block';- } else {-  flink.style['font-weight'] = 'normal';-  f.style.display = 'none';- }- return false;+function registerChart($container, series) {+  // https://github.com/flot/flot/blob/master/API.md+  return $container.plot(+    series,+    { /* general chart options */+      // series: {+      // },+      // yaxis: {+      //   /* ticks: 6, */+      // },+      xaxis: {+        mode: "time",+        timeformat: "%Y/%m/%d"+        /* ticks: 6, */+      },+      grid: {+        markings:+         function (axes) {+          var now = Date.now();+          var markings = [+            // {+            //   xaxis: { to: now },        // past+            //   yaxis: { from: 0, to: 0 }, // =0+            //  color: '#d88',+            //  lineWidth:1+            // },+            {+              xaxis: { to: now }, // past+              yaxis: { to: 0 },   // <0+              color: '#ffdddd',+            },++            // {+            //   xaxis: { from: now, to: now }, // now+            //  color: '#bbb',+            // },++            {+              xaxis: { from: now }, // future+              yaxis: { from: 0 },   // >0+              // color: '#dddddd',+              color: '#e0e0e0',+            },+            {+              xaxis: { from: now }, // future+              yaxis: { to: 0 },     // <0+              // color: '#ddbbbb',+              color: '#e8c8c8',+            },+            {+              // xaxis: { from: now },      // future+              yaxis: { from: 0, to: 0 }, // =0+              color: '#bb0000',+              lineWidth:1+            },+          ];+          // console.log(markings);+          return markings;+        },+        hoverable: true,+        autoHighlight: true,+        clickable: true,+      },+      /* https://github.com/krzysu/flot.tooltip */+      tooltip: true,+      tooltipOpts: {+        xDateFormat: "%Y/%m/%d",+        content:+          function(label, x, y, flotitem) {+            var data = flotitem.series.data[flotitem.dataIndex];+            return data[3]+" balance on %x after "+data[2]+" posted by transaction:<pre>"+data[4]+"</pre>";+          },+        onHover: function(flotitem, $tooltipel) {+          $tooltipel.css('border-color',flotitem.series.color);+        },+      },+    }+  ).data("plot"); } -function addformToggle(ev) {- var a = document.getElementById('addform');- var e = document.getElementById('editform');- var f = document.getElementById('searchform');- var i = document.getElementById('importform');- var c = document.getElementById('maincontent');- var alink = document.getElementById('addformlink');- var elink = document.getElementById('editformlink');- var flink = document.getElementById('searchformlink');- var ilink = document.getElementById('importformlink');- var tlink = document.getElementById('transactionslink');+function registerChartClick(ev, pos, item) {+  if (item) {+    var date = $.plot.dateGenerator(item.datapoint[0], {});+    var dateid = $.plot.formatDate(date, '%Y-%m-%d');+    $target = $('#'+dateid);+    if ($target.length)+      $('html, body').animate({+        scrollTop: $target.offset().top+      }, 1000);+  }+} - if (a.style.display == 'none') {-   if (alink) alink.style['font-weight'] = 'bold';-   if (elink) elink.style['font-weight'] = 'normal';-   if (ilink) ilink.style['font-weight'] = 'normal';-   if (tlink) tlink.style['font-weight'] = 'normal';-   if (a) a.style.display = 'block';-   if (e) e.style.display = 'none';-   if (i) i.style.display = 'none';-   if (c) c.style.display = 'none';- } else {-   if (alink) alink.style['font-weight'] = 'normal';-   if (elink) elink.style['font-weight'] = 'normal';-   if (ilink) ilink.style['font-weight'] = 'normal';-   if (tlink) tlink.style['font-weight'] = 'bold';-   if (a) a.style.display = 'none';-   if (e) e.style.display = 'none';-   if (i) i.style.display = 'none';-   if (c) c.style.display = 'block';- }- return false;+//----------------------------------------------------------------------+// ADD FORM++function addformShow() {+  addformReset();+  $('#addmodal')+    .on('shown.bs.modal', function (e) {+      addformFocus();+    })+    .modal('show'); } -function editformToggle(ev) {- var a = document.getElementById('addform');- var e = document.getElementById('editform');- var ej = document.getElementById('journalselect');- var f = document.getElementById('searchform');- var i = document.getElementById('importform');- var c = document.getElementById('maincontent');- var alink = document.getElementById('addformlink');- var elink = document.getElementById('editformlink');- var flink = document.getElementById('searchformlink');- var ilink = document.getElementById('importformlink');- var tlink = document.getElementById('transactionslink');+// Make sure the add form is empty and clean for display.+function addformReset() {+  if ($('form#addform').length > 0) {+    $('form#addform')[0].reset();+    $('input#date').val('today');+    // reset typehead state (though not fetched completions)+    $('.typeahead').typeahead('val', '');+    $('.tt-dropdown-menu').hide();+  }+} - if (e.style.display == 'none') {-  if (alink) alink.style['font-weight'] = 'normal';-  if (elink) elink.style['font-weight'] = 'bold';-  if (ilink) ilink.style['font-weight'] = 'normal';-  if (tlink) tlink.style['font-weight'] = 'normal';-  if (a) a.style.display = 'none';-  if (i) i.style.display = 'none';-  if (c) c.style.display = 'none';-  if (e) e.style.display = 'block';-  editformJournalSelect(ev);- } else {-  if (alink) alink.style['font-weight'] = 'normal';-  if (elink) elink.style['font-weight'] = 'normal';-  if (ilink) ilink.style['font-weight'] = 'normal';-   if (tlink) tlink.style['font-weight'] = 'bold';-  if (a) a.style.display = 'none';-  if (e) e.style.display = 'none';-  if (i) i.style.display = 'none';-  if (c) c.style.display = 'block';- }- return false;+// Focus the first add form field.+function addformFocus() {+  focus($('#addform input#date')); } -// Get the current event's target in a robust way.-// http://www.quirksmode.org/js/events_properties.html-function getTarget(ev) {-  var targ;-  if (!ev) var ev = window.event;-  if (ev.target) targ = ev.target;-  else if (ev.srcElement) targ = ev.srcElement;-  if (targ.nodeType == 3) targ = targ.parentNode;-  return targ;+// Focus a jquery-wrapped element, working around http://stackoverflow.com/a/7046837.+function focus($el) {+  setTimeout(function (){+    $el.focus();+  }, 0); } -function editformJournalSelect(ev) {- var textareas = $('textarea', $('form#editform'));- for (i=0; i<textareas.length; i++) {-   textareas[i].style.display = 'none';-   textareas[i].disabled = true;- }- var targ = getTarget(ev);- if (targ.value) {-   var journalid = targ.value+'_textarea';-   var textarea = document.getElementById(journalid);- }- else {-   var textarea = textareas[0];- }- textarea.style.display = 'block';- textarea.disabled = false;- return true;+// Insert another posting row in the add form.+function addformAddPosting() {+  // do nothing if it's not currently visible+  if (!$('#addform').is(':visible')) return;+  // save a copy of last row+  var lastrow = $('#addform tr.posting:last').clone();++  // replace the submit button with an amount field, clear and renumber it, add the keybindings+  $('#addform tr.posting:last > td:last')+    .html( $('#addform tr.posting:first > td:last').html() );+  var num = $('#addform tr.posting').length;+  $('#addform tr.posting:last > td:last input:last') // input:last here and elsewhere is to avoid autocomplete's extra input+    .val('')+    .prop('id','amount'+num)+    .prop('name','amount'+num)+    .prop('placeholder','Amount '+num)+    .bind('keydown', 'ctrl+shift+=', addformAddPosting)+    .bind('keydown', 'ctrl+=', addformAddPosting)+    .bind('keydown', 'ctrl+-', addformDeletePosting);++  // set up the new last row's account field.+  // First typehead, it's hard to enable on new DOM elements+  var $acctinput = lastrow.find('.account-input:last');+  // XXX nothing works+  // $acctinput.typeahead('destroy'); //,'NoCached');+  // lastrow.on("DOMNodeInserted", function () {+  //   //$(this).find(".typeahead").typeahead();+  //   console.log('DOMNodeInserted');+  //  // infinite loop+  //  console.log($(this).find('.typeahead'));+  //   //enableTypeahead($(this).find('.typeahead'), accountsSuggester);+  // });+  // setTimeout(function (){+  //   $('#addform tr.posting:last input.account-input').typeahead('destroy');+  //   enableTypeahead($('#addform tr.posting:last input.account-input:last'), accountsSuggester);+  // }, 1000);++  // insert the new last row+  $('#addform > table > tbody').append(lastrow);++  // clear and renumber the field, add keybindings+  $acctinput+    .val('')+    .prop('id','account'+(num+1))+    .prop('name','account'+(num+1))+    .prop('placeholder','Account '+(num+1));+  //lastrow.find('input') // not :last this time+  $acctinput+    .bind('keydown', 'ctrl+shift+=', addformAddPosting)+    .bind('keydown', 'ctrl+=', addformAddPosting)+    .bind('keydown', 'ctrl+-', addformDeletePosting)+    .bind('keydown', 'tab', addformAddPostingWithTab); } -function importformToggle(ev) {- var a = document.getElementById('addform');- var e = document.getElementById('editform');- var f = document.getElementById('searchform');- var i = document.getElementById('importform');- var c = document.getElementById('maincontent');- var alink = document.getElementById('addformlink');- var elink = document.getElementById('editformlink');- var flink = document.getElementById('searchformlink');- var ilink = document.getElementById('importformlink');- var tlink = document.getElementById('transactionslink');+// Insert another posting row by tabbing within the last field, also advancing the focus.+function addformAddPostingWithTab(ev) {+  // do nothing if called from a non-last row (don't know how to remove keybindings)+  if ($(ev.target).is('#addform input.account-input:last')) {+    addformAddPosting();+    focus($('#addform input.amount-input:last')); // help FF+    return false;+  }+  else+    return true;+} - if (i.style.display == 'none') {-   if (alink) alink.style['font-weight'] = 'normal';-   if (elink) elink.style['font-weight'] = 'normal';-   if (ilink) ilink.style['font-weight'] = 'bold';-   if (tlink) tlink.style['font-weight'] = 'normal';-   if (a) a.style.display = 'none';-   if (e) e.style.display = 'none';-   if (i) i.style.display = 'block';-   if (c) c.style.display = 'none';- } else {-   if (alink) alink.style['font-weight'] = 'normal';-   if (elink) elink.style['font-weight'] = 'normal';-   if (ilink) ilink.style['font-weight'] = 'normal';-   if (tlink) tlink.style['font-weight'] = 'bold';-   if (a) a.style.display = 'none';-   if (e) e.style.display = 'none';-   if (i) i.style.display = 'none';-   if (c) c.style.display = 'block';- }- return false;+// Remove the add form's last posting row, if empty, keeping at least two.+function addformDeletePosting() {+  var num = $('#addform tr.posting').length;+  if (num <= 2+      || $('#addform tr.posting:last > td:first input:last').val() != ''+     ) return;+  // copy submit button+  var btn = $('#addform tr.posting:last > td:last').html();+  // remember if the last row's field or button had focus+  var focuslost =+    $('#addform tr.posting:last > td:first input:last').is(':focus')+    || $('#addform tr.posting:last button').is(':focus');+  // delete last row+  $('#addform tr.posting:last').remove();+  // remember if the last amount field had focus+  focuslost = focuslost || +    $('#addform tr.posting:last > td:last input:last').is(':focus');+  // replace new last row's amount field with the button+  $('#addform tr.posting:last > td:last').html(btn);+  // if deleted row had focus, focus the new last row+  if (focuslost) $('#addform tr.posting:last > td:first input:last').focus(); }++//----------------------------------------------------------------------+// SIDEBAR++function sidebarToggle() {+  //console.log('sidebarToggle');+  var visible = $('#sidebar').is(':visible');+  //console.log('sidebar visibility was',visible);+  // if opening sidebar, start an ajax fetch of its content+  if (!visible) {+    //console.log('getting sidebar content');+    $.get("sidebar"+         ,null+         ,function(data) {+            //console.log( "success" );+            $("#sidebar-body" ).html(data);+          })+          .done(function() {+            //console.log( "success 2" );+          })+          .fail(function() {+            //console.log( "error" );+          });+  }+  // localStorage.setItem('sidebarVisible', !visible);+  // set a cookie to communicate the new sidebar state to the server+  $.cookie('showsidebar', visible ? '0' : '1');+  // horizontally slide the sidebar in or out+  // how to make it smooth, without delayed content pop-in ?+  //$('#sidebar').animate({'width': 'toggle'});+  //$('#sidebar').animate({'width': visible ? 'hide' : '+=20m'});+  //$('#sidebar-spacer').width(200);+  $('#sidebar').animate({'width': visible ? 'hide' : 'show'});+}++//----------------------------------------------------------------------+// MISC++function enableTypeahead($el, suggester) {+  return $el.typeahead(+    {+      highlight: true+    },+    {+      source: suggester.ttAdapter()+    }+  );+}++// function journalSelect(ev) {+//   var textareas = $('textarea', $('form#editform'));+//   for (i=0; i<textareas.length; i++) {+//     textareas[i].style.display = 'none';+//     textareas[i].disabled = true;+//   }+//   var targ = getTarget(ev);+//   if (targ.value) {+//     var journalid = targ.value+'_textarea';+//     var textarea = document.getElementById(journalid);+//   }+//   else {+//     var textarea = textareas[0];+//   }+//   textarea.style.display = 'block';+//   textarea.disabled = false;+//   return true;+// }++// // Get the current event's target in a robust way.+// // http://www.quirksmode.org/js/events_properties.html+// function getTarget(ev) {+//   var targ;+//   if (!ev) var ev = window.event;+//   if (ev.target) targ = ev.target;+//   else if (ev.srcElement) targ = ev.srcElement;+//   if (targ.nodeType == 3) targ = targ.parentNode;+//   return targ;+// }
− static/img/glyphicons-halflings-white.png

binary file changed (8777 → absent bytes)

− static/img/glyphicons-halflings.png

binary file changed (13826 → absent bytes)

− static/jquery.flot.js
@@ -1,2599 +0,0 @@-/*! Javascript plotting library for jQuery, v. 0.7.- *- * Released under the MIT license by IOLA, December 2007.- *- */--// first an inline dependency, jquery.colorhelpers.js, we inline it here-// for convenience--/* Plugin for jQuery for working with colors.- * - * Version 1.1.- * - * Inspiration from jQuery color animation plugin by John Resig.- *- * Released under the MIT license by Ole Laursen, October 2009.- *- * Examples:- *- *   $.color.parse("#fff").scale('rgb', 0.25).add('a', -0.5).toString()- *   var c = $.color.extract($("#mydiv"), 'background-color');- *   console.log(c.r, c.g, c.b, c.a);- *   $.color.make(100, 50, 25, 0.4).toString() // returns "rgba(100,50,25,0.4)"- *- * Note that .scale() and .add() return the same modified object- * instead of making a new one.- *- * V. 1.1: Fix error handling so e.g. parsing an empty string does- * produce a color rather than just crashing.- */ -(function(B){B.color={};B.color.make=function(F,E,C,D){var G={};G.r=F||0;G.g=E||0;G.b=C||0;G.a=D!=null?D:1;G.add=function(J,I){for(var H=0;H<J.length;++H){G[J.charAt(H)]+=I}return G.normalize()};G.scale=function(J,I){for(var H=0;H<J.length;++H){G[J.charAt(H)]*=I}return G.normalize()};G.toString=function(){if(G.a>=1){return"rgb("+[G.r,G.g,G.b].join(",")+")"}else{return"rgba("+[G.r,G.g,G.b,G.a].join(",")+")"}};G.normalize=function(){function H(J,K,I){return K<J?J:(K>I?I:K)}G.r=H(0,parseInt(G.r),255);G.g=H(0,parseInt(G.g),255);G.b=H(0,parseInt(G.b),255);G.a=H(0,G.a,1);return G};G.clone=function(){return B.color.make(G.r,G.b,G.g,G.a)};return G.normalize()};B.color.extract=function(D,C){var E;do{E=D.css(C).toLowerCase();if(E!=""&&E!="transparent"){break}D=D.parent()}while(!B.nodeName(D.get(0),"body"));if(E=="rgba(0, 0, 0, 0)"){E="transparent"}return B.color.parse(E)};B.color.parse=function(F){var E,C=B.color.make;if(E=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(F)){return C(parseInt(E[1],10),parseInt(E[2],10),parseInt(E[3],10))}if(E=/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(F)){return C(parseInt(E[1],10),parseInt(E[2],10),parseInt(E[3],10),parseFloat(E[4]))}if(E=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(F)){return C(parseFloat(E[1])*2.55,parseFloat(E[2])*2.55,parseFloat(E[3])*2.55)}if(E=/rgba\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(F)){return C(parseFloat(E[1])*2.55,parseFloat(E[2])*2.55,parseFloat(E[3])*2.55,parseFloat(E[4]))}if(E=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(F)){return C(parseInt(E[1],16),parseInt(E[2],16),parseInt(E[3],16))}if(E=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(F)){return C(parseInt(E[1]+E[1],16),parseInt(E[2]+E[2],16),parseInt(E[3]+E[3],16))}var D=B.trim(F).toLowerCase();if(D=="transparent"){return C(255,255,255,0)}else{E=A[D]||[0,0,0];return C(E[0],E[1],E[2])}};var A={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0]}})(jQuery);--// the actual Flot code-(function($) {-    function Plot(placeholder, data_, options_, plugins) {-        // data is on the form:-        //   [ series1, series2 ... ]-        // where series is either just the data as [ [x1, y1], [x2, y2], ... ]-        // or { data: [ [x1, y1], [x2, y2], ... ], label: "some label", ... }-        -        var series = [],-            options = {-                // the color theme used for graphs-                colors: ["#edc240", "#afd8f8", "#cb4b4b", "#4da74d", "#9440ed"],-                legend: {-                    show: true,-                    noColumns: 1, // number of colums in legend table-                    labelFormatter: null, // fn: string -> string-                    labelBoxBorderColor: "#ccc", // border color for the little label boxes-                    container: null, // container (as jQuery object) to put legend in, null means default on top of graph-                    position: "ne", // position of default legend container within plot-                    margin: 5, // distance from grid edge to default legend container within plot-                    backgroundColor: null, // null means auto-detect-                    backgroundOpacity: 0.85 // set to 0 to avoid background-                },-                xaxis: {-                    show: null, // null = auto-detect, true = always, false = never-                    position: "bottom", // or "top"-                    mode: null, // null or "time"-                    color: null, // base color, labels, ticks-                    tickColor: null, // possibly different color of ticks, e.g. "rgba(0,0,0,0.15)"-                    transform: null, // null or f: number -> number to transform axis-                    inverseTransform: null, // if transform is set, this should be the inverse function-                    min: null, // min. value to show, null means set automatically-                    max: null, // max. value to show, null means set automatically-                    autoscaleMargin: null, // margin in % to add if auto-setting min/max-                    ticks: null, // either [1, 3] or [[1, "a"], 3] or (fn: axis info -> ticks) or app. number of ticks for auto-ticks-                    tickFormatter: null, // fn: number -> string-                    labelWidth: null, // size of tick labels in pixels-                    labelHeight: null,-                    reserveSpace: null, // whether to reserve space even if axis isn't shown-                    tickLength: null, // size in pixels of ticks, or "full" for whole line-                    alignTicksWithAxis: null, // axis number or null for no sync-                    -                    // mode specific options-                    tickDecimals: null, // no. of decimals, null means auto-                    tickSize: null, // number or [number, "unit"]-                    minTickSize: null, // number or [number, "unit"]-                    monthNames: null, // list of names of months-                    timeformat: null, // format string to use-                    twelveHourClock: false // 12 or 24 time in time mode-                },-                yaxis: {-                    autoscaleMargin: 0.02,-                    position: "left" // or "right"-                },-                xaxes: [],-                yaxes: [],-                series: {-                    points: {-                        show: false,-                        radius: 3,-                        lineWidth: 2, // in pixels-                        fill: true,-                        fillColor: "#ffffff",-                        symbol: "circle" // or callback-                    },-                    lines: {-                        // we don't put in show: false so we can see-                        // whether lines were actively disabled -                        lineWidth: 2, // in pixels-                        fill: false,-                        fillColor: null,-                        steps: false-                    },-                    bars: {-                        show: false,-                        lineWidth: 2, // in pixels-                        barWidth: 1, // in units of the x axis-                        fill: true,-                        fillColor: null,-                        align: "left", // or "center" -                        horizontal: false-                    },-                    shadowSize: 3-                },-                grid: {-                    show: true,-                    aboveData: false,-                    color: "#545454", // primary color used for outline and labels-                    backgroundColor: null, // null for transparent, else color-                    borderColor: null, // set if different from the grid color-                    tickColor: null, // color for the ticks, e.g. "rgba(0,0,0,0.15)"-                    labelMargin: 5, // in pixels-                    axisMargin: 8, // in pixels-                    borderWidth: 2, // in pixels-                    minBorderMargin: null, // in pixels, null means taken from points radius-                    markings: null, // array of ranges or fn: axes -> array of ranges-                    markingsColor: "#f4f4f4",-                    markingsLineWidth: 2,-                    // interactive stuff-                    clickable: false,-                    hoverable: false,-                    autoHighlight: true, // highlight in case mouse is near-                    mouseActiveRadius: 10 // how far the mouse can be away to activate an item-                },-                hooks: {}-            },-        canvas = null,      // the canvas for the plot itself-        overlay = null,     // canvas for interactive stuff on top of plot-        eventHolder = null, // jQuery object that events should be bound to-        ctx = null, octx = null,-        xaxes = [], yaxes = [],-        plotOffset = { left: 0, right: 0, top: 0, bottom: 0},-        canvasWidth = 0, canvasHeight = 0,-        plotWidth = 0, plotHeight = 0,-        hooks = {-            processOptions: [],-            processRawData: [],-            processDatapoints: [],-            drawSeries: [],-            draw: [],-            bindEvents: [],-            drawOverlay: [],-            shutdown: []-        },-        plot = this;--        // public functions-        plot.setData = setData;-        plot.setupGrid = setupGrid;-        plot.draw = draw;-        plot.getPlaceholder = function() { return placeholder; };-        plot.getCanvas = function() { return canvas; };-        plot.getPlotOffset = function() { return plotOffset; };-        plot.width = function () { return plotWidth; };-        plot.height = function () { return plotHeight; };-        plot.offset = function () {-            var o = eventHolder.offset();-            o.left += plotOffset.left;-            o.top += plotOffset.top;-            return o;-        };-        plot.getData = function () { return series; };-        plot.getAxes = function () {-            var res = {}, i;-            $.each(xaxes.concat(yaxes), function (_, axis) {-                if (axis)-                    res[axis.direction + (axis.n != 1 ? axis.n : "") + "axis"] = axis;-            });-            return res;-        };-        plot.getXAxes = function () { return xaxes; };-        plot.getYAxes = function () { return yaxes; };-        plot.c2p = canvasToAxisCoords;-        plot.p2c = axisToCanvasCoords;-        plot.getOptions = function () { return options; };-        plot.highlight = highlight;-        plot.unhighlight = unhighlight;-        plot.triggerRedrawOverlay = triggerRedrawOverlay;-        plot.pointOffset = function(point) {-            return {-                left: parseInt(xaxes[axisNumber(point, "x") - 1].p2c(+point.x) + plotOffset.left),-                top: parseInt(yaxes[axisNumber(point, "y") - 1].p2c(+point.y) + plotOffset.top)-            };-        };-        plot.shutdown = shutdown;-        plot.resize = function () {-            getCanvasDimensions();-            resizeCanvas(canvas);-            resizeCanvas(overlay);-        };--        // public attributes-        plot.hooks = hooks;-        -        // initialize-        initPlugins(plot);-        parseOptions(options_);-        setupCanvases();-        setData(data_);-        setupGrid();-        draw();-        bindEvents();---        function executeHooks(hook, args) {-            args = [plot].concat(args);-            for (var i = 0; i < hook.length; ++i)-                hook[i].apply(this, args);-        }--        function initPlugins() {-            for (var i = 0; i < plugins.length; ++i) {-                var p = plugins[i];-                p.init(plot);-                if (p.options)-                    $.extend(true, options, p.options);-            }-        }-        -        function parseOptions(opts) {-            var i;-            -            $.extend(true, options, opts);-            -            if (options.xaxis.color == null)-                options.xaxis.color = options.grid.color;-            if (options.yaxis.color == null)-                options.yaxis.color = options.grid.color;-            -            if (options.xaxis.tickColor == null) // backwards-compatibility-                options.xaxis.tickColor = options.grid.tickColor;-            if (options.yaxis.tickColor == null) // backwards-compatibility-                options.yaxis.tickColor = options.grid.tickColor;--            if (options.grid.borderColor == null)-                options.grid.borderColor = options.grid.color;-            if (options.grid.tickColor == null)-                options.grid.tickColor = $.color.parse(options.grid.color).scale('a', 0.22).toString();-            -            // fill in defaults in axes, copy at least always the-            // first as the rest of the code assumes it'll be there-            for (i = 0; i < Math.max(1, options.xaxes.length); ++i)-                options.xaxes[i] = $.extend(true, {}, options.xaxis, options.xaxes[i]);-            for (i = 0; i < Math.max(1, options.yaxes.length); ++i)-                options.yaxes[i] = $.extend(true, {}, options.yaxis, options.yaxes[i]);--            // backwards compatibility, to be removed in future-            if (options.xaxis.noTicks && options.xaxis.ticks == null)-                options.xaxis.ticks = options.xaxis.noTicks;-            if (options.yaxis.noTicks && options.yaxis.ticks == null)-                options.yaxis.ticks = options.yaxis.noTicks;-            if (options.x2axis) {-                options.xaxes[1] = $.extend(true, {}, options.xaxis, options.x2axis);-                options.xaxes[1].position = "top";-            }-            if (options.y2axis) {-                options.yaxes[1] = $.extend(true, {}, options.yaxis, options.y2axis);-                options.yaxes[1].position = "right";-            }-            if (options.grid.coloredAreas)-                options.grid.markings = options.grid.coloredAreas;-            if (options.grid.coloredAreasColor)-                options.grid.markingsColor = options.grid.coloredAreasColor;-            if (options.lines)-                $.extend(true, options.series.lines, options.lines);-            if (options.points)-                $.extend(true, options.series.points, options.points);-            if (options.bars)-                $.extend(true, options.series.bars, options.bars);-            if (options.shadowSize != null)-                options.series.shadowSize = options.shadowSize;--            // save options on axes for future reference-            for (i = 0; i < options.xaxes.length; ++i)-                getOrCreateAxis(xaxes, i + 1).options = options.xaxes[i];-            for (i = 0; i < options.yaxes.length; ++i)-                getOrCreateAxis(yaxes, i + 1).options = options.yaxes[i];--            // add hooks from options-            for (var n in hooks)-                if (options.hooks[n] && options.hooks[n].length)-                    hooks[n] = hooks[n].concat(options.hooks[n]);--            executeHooks(hooks.processOptions, [options]);-        }--        function setData(d) {-            series = parseData(d);-            fillInSeriesOptions();-            processData();-        }-        -        function parseData(d) {-            var res = [];-            for (var i = 0; i < d.length; ++i) {-                var s = $.extend(true, {}, options.series);--                if (d[i].data != null) {-                    s.data = d[i].data; // move the data instead of deep-copy-                    delete d[i].data;--                    $.extend(true, s, d[i]);--                    d[i].data = s.data;-                }-                else-                    s.data = d[i];-                res.push(s);-            }--            return res;-        }-        -        function axisNumber(obj, coord) {-            var a = obj[coord + "axis"];-            if (typeof a == "object") // if we got a real axis, extract number-                a = a.n;-            if (typeof a != "number")-                a = 1; // default to first axis-            return a;-        }--        function allAxes() {-            // return flat array without annoying null entries-            return $.grep(xaxes.concat(yaxes), function (a) { return a; });-        }-        -        function canvasToAxisCoords(pos) {-            // return an object with x/y corresponding to all used axes -            var res = {}, i, axis;-            for (i = 0; i < xaxes.length; ++i) {-                axis = xaxes[i];-                if (axis && axis.used)-                    res["x" + axis.n] = axis.c2p(pos.left);-            }--            for (i = 0; i < yaxes.length; ++i) {-                axis = yaxes[i];-                if (axis && axis.used)-                    res["y" + axis.n] = axis.c2p(pos.top);-            }-            -            if (res.x1 !== undefined)-                res.x = res.x1;-            if (res.y1 !== undefined)-                res.y = res.y1;--            return res;-        }-        -        function axisToCanvasCoords(pos) {-            // get canvas coords from the first pair of x/y found in pos-            var res = {}, i, axis, key;--            for (i = 0; i < xaxes.length; ++i) {-                axis = xaxes[i];-                if (axis && axis.used) {-                    key = "x" + axis.n;-                    if (pos[key] == null && axis.n == 1)-                        key = "x";--                    if (pos[key] != null) {-                        res.left = axis.p2c(pos[key]);-                        break;-                    }-                }-            }-            -            for (i = 0; i < yaxes.length; ++i) {-                axis = yaxes[i];-                if (axis && axis.used) {-                    key = "y" + axis.n;-                    if (pos[key] == null && axis.n == 1)-                        key = "y";--                    if (pos[key] != null) {-                        res.top = axis.p2c(pos[key]);-                        break;-                    }-                }-            }-            -            return res;-        }-        -        function getOrCreateAxis(axes, number) {-            if (!axes[number - 1])-                axes[number - 1] = {-                    n: number, // save the number for future reference-                    direction: axes == xaxes ? "x" : "y",-                    options: $.extend(true, {}, axes == xaxes ? options.xaxis : options.yaxis)-                };-                -            return axes[number - 1];-        }--        function fillInSeriesOptions() {-            var i;-            -            // collect what we already got of colors-            var neededColors = series.length,-                usedColors = [],-                assignedColors = [];-            for (i = 0; i < series.length; ++i) {-                var sc = series[i].color;-                if (sc != null) {-                    --neededColors;-                    if (typeof sc == "number")-                        assignedColors.push(sc);-                    else-                        usedColors.push($.color.parse(series[i].color));-                }-            }-            -            // we might need to generate more colors if higher indices-            // are assigned-            for (i = 0; i < assignedColors.length; ++i) {-                neededColors = Math.max(neededColors, assignedColors[i] + 1);-            }--            // produce colors as needed-            var colors = [], variation = 0;-            i = 0;-            while (colors.length < neededColors) {-                var c;-                if (options.colors.length == i) // check degenerate case-                    c = $.color.make(100, 100, 100);-                else-                    c = $.color.parse(options.colors[i]);--                // vary color if needed-                var sign = variation % 2 == 1 ? -1 : 1;-                c.scale('rgb', 1 + sign * Math.ceil(variation / 2) * 0.2)--                // FIXME: if we're getting to close to something else,-                // we should probably skip this one-                colors.push(c);-                -                ++i;-                if (i >= options.colors.length) {-                    i = 0;-                    ++variation;-                }-            }--            // fill in the options-            var colori = 0, s;-            for (i = 0; i < series.length; ++i) {-                s = series[i];-                -                // assign colors-                if (s.color == null) {-                    s.color = colors[colori].toString();-                    ++colori;-                }-                else if (typeof s.color == "number")-                    s.color = colors[s.color].toString();--                // turn on lines automatically in case nothing is set-                if (s.lines.show == null) {-                    var v, show = true;-                    for (v in s)-                        if (s[v] && s[v].show) {-                            show = false;-                            break;-                        }-                    if (show)-                        s.lines.show = true;-                }--                // setup axes-                s.xaxis = getOrCreateAxis(xaxes, axisNumber(s, "x"));-                s.yaxis = getOrCreateAxis(yaxes, axisNumber(s, "y"));-            }-        }-        -        function processData() {-            var topSentry = Number.POSITIVE_INFINITY,-                bottomSentry = Number.NEGATIVE_INFINITY,-                fakeInfinity = Number.MAX_VALUE,-                i, j, k, m, length,-                s, points, ps, x, y, axis, val, f, p;--            function updateAxis(axis, min, max) {-                if (min < axis.datamin && min != -fakeInfinity)-                    axis.datamin = min;-                if (max > axis.datamax && max != fakeInfinity)-                    axis.datamax = max;-            }--            $.each(allAxes(), function (_, axis) {-                // init axis-                axis.datamin = topSentry;-                axis.datamax = bottomSentry;-                axis.used = false;-            });-            -            for (i = 0; i < series.length; ++i) {-                s = series[i];-                s.datapoints = { points: [] };-                -                executeHooks(hooks.processRawData, [ s, s.data, s.datapoints ]);-            }-            -            // first pass: clean and copy data-            for (i = 0; i < series.length; ++i) {-                s = series[i];--                var data = s.data, format = s.datapoints.format;--                if (!format) {-                    format = [];-                    // find out how to copy-                    format.push({ x: true, number: true, required: true });-                    format.push({ y: true, number: true, required: true });--                    if (s.bars.show || (s.lines.show && s.lines.fill)) {-                        format.push({ y: true, number: true, required: false, defaultValue: 0 });-                        if (s.bars.horizontal) {-                            delete format[format.length - 1].y;-                            format[format.length - 1].x = true;-                        }-                    }-                    -                    s.datapoints.format = format;-                }--                if (s.datapoints.pointsize != null)-                    continue; // already filled in--                s.datapoints.pointsize = format.length;-                -                ps = s.datapoints.pointsize;-                points = s.datapoints.points;--                insertSteps = s.lines.show && s.lines.steps;-                s.xaxis.used = s.yaxis.used = true;-                -                for (j = k = 0; j < data.length; ++j, k += ps) {-                    p = data[j];--                    var nullify = p == null;-                    if (!nullify) {-                        for (m = 0; m < ps; ++m) {-                            val = p[m];-                            f = format[m];--                            if (f) {-                                if (f.number && val != null) {-                                    val = +val; // convert to number-                                    if (isNaN(val))-                                        val = null;-                                    else if (val == Infinity)-                                        val = fakeInfinity;-                                    else if (val == -Infinity)-                                        val = -fakeInfinity;-                                }--                                if (val == null) {-                                    if (f.required)-                                        nullify = true;-                                    -                                    if (f.defaultValue != null)-                                        val = f.defaultValue;-                                }-                            }-                            -                            points[k + m] = val;-                        }-                    }-                    -                    if (nullify) {-                        for (m = 0; m < ps; ++m) {-                            val = points[k + m];-                            if (val != null) {-                                f = format[m];-                                // extract min/max info-                                if (f.x)-                                    updateAxis(s.xaxis, val, val);-                                if (f.y)-                                    updateAxis(s.yaxis, val, val);-                            }-                            points[k + m] = null;-                        }-                    }-                    else {-                        // a little bit of line specific stuff that-                        // perhaps shouldn't be here, but lacking-                        // better means...-                        if (insertSteps && k > 0-                            && points[k - ps] != null-                            && points[k - ps] != points[k]-                            && points[k - ps + 1] != points[k + 1]) {-                            // copy the point to make room for a middle point-                            for (m = 0; m < ps; ++m)-                                points[k + ps + m] = points[k + m];--                            // middle point has same y-                            points[k + 1] = points[k - ps + 1];--                            // we've added a point, better reflect that-                            k += ps;-                        }-                    }-                }-            }--            // give the hooks a chance to run-            for (i = 0; i < series.length; ++i) {-                s = series[i];-                -                executeHooks(hooks.processDatapoints, [ s, s.datapoints]);-            }--            // second pass: find datamax/datamin for auto-scaling-            for (i = 0; i < series.length; ++i) {-                s = series[i];-                points = s.datapoints.points,-                ps = s.datapoints.pointsize;--                var xmin = topSentry, ymin = topSentry,-                    xmax = bottomSentry, ymax = bottomSentry;-                -                for (j = 0; j < points.length; j += ps) {-                    if (points[j] == null)-                        continue;--                    for (m = 0; m < ps; ++m) {-                        val = points[j + m];-                        f = format[m];-                        if (!f || val == fakeInfinity || val == -fakeInfinity)-                            continue;-                        -                        if (f.x) {-                            if (val < xmin)-                                xmin = val;-                            if (val > xmax)-                                xmax = val;-                        }-                        if (f.y) {-                            if (val < ymin)-                                ymin = val;-                            if (val > ymax)-                                ymax = val;-                        }-                    }-                }-                -                if (s.bars.show) {-                    // make sure we got room for the bar on the dancing floor-                    var delta = s.bars.align == "left" ? 0 : -s.bars.barWidth/2;-                    if (s.bars.horizontal) {-                        ymin += delta;-                        ymax += delta + s.bars.barWidth;-                    }-                    else {-                        xmin += delta;-                        xmax += delta + s.bars.barWidth;-                    }-                }-                -                updateAxis(s.xaxis, xmin, xmax);-                updateAxis(s.yaxis, ymin, ymax);-            }--            $.each(allAxes(), function (_, axis) {-                if (axis.datamin == topSentry)-                    axis.datamin = null;-                if (axis.datamax == bottomSentry)-                    axis.datamax = null;-            });-        }--        function makeCanvas(skipPositioning, cls) {-            var c = document.createElement('canvas');-            c.className = cls;-            c.width = canvasWidth;-            c.height = canvasHeight;-                    -            if (!skipPositioning)-                $(c).css({ position: 'absolute', left: 0, top: 0 });-                -            $(c).appendTo(placeholder);-                -            if (!c.getContext) // excanvas hack-                c = window.G_vmlCanvasManager.initElement(c);--            // used for resetting in case we get replotted-            c.getContext("2d").save();-            -            return c;-        }--        function getCanvasDimensions() {-            canvasWidth = placeholder.width();-            canvasHeight = placeholder.height();-            -            if (canvasWidth <= 0 || canvasHeight <= 0)-                throw "Invalid dimensions for plot, width = " + canvasWidth + ", height = " + canvasHeight;-        }--        function resizeCanvas(c) {-            // resizing should reset the state (excanvas seems to be-            // buggy though)-            if (c.width != canvasWidth)-                c.width = canvasWidth;--            if (c.height != canvasHeight)-                c.height = canvasHeight;--            // so try to get back to the initial state (even if it's-            // gone now, this should be safe according to the spec)-            var cctx = c.getContext("2d");-            cctx.restore();--            // and save again-            cctx.save();-        }-        -        function setupCanvases() {-            var reused,-                existingCanvas = placeholder.children("canvas.base"),-                existingOverlay = placeholder.children("canvas.overlay");--            if (existingCanvas.length == 0 || existingOverlay == 0) {-                // init everything-                -                placeholder.html(""); // make sure placeholder is clear-            -                placeholder.css({ padding: 0 }); // padding messes up the positioning-                -                if (placeholder.css("position") == 'static')-                    placeholder.css("position", "relative"); // for positioning labels and overlay--                getCanvasDimensions();-                -                canvas = makeCanvas(true, "base");-                overlay = makeCanvas(false, "overlay"); // overlay canvas for interactive features--                reused = false;-            }-            else {-                // reuse existing elements--                canvas = existingCanvas.get(0);-                overlay = existingOverlay.get(0);--                reused = true;-            }--            ctx = canvas.getContext("2d");-            octx = overlay.getContext("2d");--            // we include the canvas in the event holder too, because IE 7-            // sometimes has trouble with the stacking order-            eventHolder = $([overlay, canvas]);--            if (reused) {-                // run shutdown in the old plot object-                placeholder.data("plot").shutdown();--                // reset reused canvases-                plot.resize();-                -                // make sure overlay pixels are cleared (canvas is cleared when we redraw)-                octx.clearRect(0, 0, canvasWidth, canvasHeight);-                -                // then whack any remaining obvious garbage left-                eventHolder.unbind();-                placeholder.children().not([canvas, overlay]).remove();-            }--            // save in case we get replotted-            placeholder.data("plot", plot);-        }--        function bindEvents() {-            // bind events-            if (options.grid.hoverable) {-                eventHolder.mousemove(onMouseMove);-                eventHolder.mouseleave(onMouseLeave);-            }--            if (options.grid.clickable)-                eventHolder.click(onClick);--            executeHooks(hooks.bindEvents, [eventHolder]);-        }--        function shutdown() {-            if (redrawTimeout)-                clearTimeout(redrawTimeout);-            -            eventHolder.unbind("mousemove", onMouseMove);-            eventHolder.unbind("mouseleave", onMouseLeave);-            eventHolder.unbind("click", onClick);-            -            executeHooks(hooks.shutdown, [eventHolder]);-        }--        function setTransformationHelpers(axis) {-            // set helper functions on the axis, assumes plot area-            // has been computed already-            -            function identity(x) { return x; }-            -            var s, m, t = axis.options.transform || identity,-                it = axis.options.inverseTransform;-            -            // precompute how much the axis is scaling a point-            // in canvas space-            if (axis.direction == "x") {-                s = axis.scale = plotWidth / Math.abs(t(axis.max) - t(axis.min));-                m = Math.min(t(axis.max), t(axis.min));-            }-            else {-                s = axis.scale = plotHeight / Math.abs(t(axis.max) - t(axis.min));-                s = -s;-                m = Math.max(t(axis.max), t(axis.min));-            }--            // data point to canvas coordinate-            if (t == identity) // slight optimization-                axis.p2c = function (p) { return (p - m) * s; };-            else-                axis.p2c = function (p) { return (t(p) - m) * s; };-            // canvas coordinate to data point-            if (!it)-                axis.c2p = function (c) { return m + c / s; };-            else-                axis.c2p = function (c) { return it(m + c / s); };-        }--        function measureTickLabels(axis) {-            var opts = axis.options, i, ticks = axis.ticks || [], labels = [],-                l, w = opts.labelWidth, h = opts.labelHeight, dummyDiv;--            function makeDummyDiv(labels, width) {-                return $('<div style="position:absolute;top:-10000px;' + width + 'font-size:smaller">' +-                         '<div class="' + axis.direction + 'Axis ' + axis.direction + axis.n + 'Axis">'-                         + labels.join("") + '</div></div>')-                    .appendTo(placeholder);-            }-            -            if (axis.direction == "x") {-                // to avoid measuring the widths of the labels (it's slow), we-                // construct fixed-size boxes and put the labels inside-                // them, we don't need the exact figures and the-                // fixed-size box content is easy to center-                if (w == null)-                    w = Math.floor(canvasWidth / (ticks.length > 0 ? ticks.length : 1));--                // measure x label heights-                if (h == null) {-                    labels = [];-                    for (i = 0; i < ticks.length; ++i) {-                        l = ticks[i].label;-                        if (l)-                            labels.push('<div class="tickLabel" style="float:left;width:' + w + 'px">' + l + '</div>');-                    }--                    if (labels.length > 0) {-                        // stick them all in the same div and measure-                        // collective height-                        labels.push('<div style="clear:left"></div>');-                        dummyDiv = makeDummyDiv(labels, "width:10000px;");-                        h = dummyDiv.height();-                        dummyDiv.remove();-                    }-                }-            }-            else if (w == null || h == null) {-                // calculate y label dimensions-                for (i = 0; i < ticks.length; ++i) {-                    l = ticks[i].label;-                    if (l)-                        labels.push('<div class="tickLabel">' + l + '</div>');-                }-                -                if (labels.length > 0) {-                    dummyDiv = makeDummyDiv(labels, "");-                    if (w == null)-                        w = dummyDiv.children().width();-                    if (h == null)-                        h = dummyDiv.find("div.tickLabel").height();-                    dummyDiv.remove();-                }-            }--            if (w == null)-                w = 0;-            if (h == null)-                h = 0;--            axis.labelWidth = w;-            axis.labelHeight = h;-        }--        function allocateAxisBoxFirstPhase(axis) {-            // find the bounding box of the axis by looking at label-            // widths/heights and ticks, make room by diminishing the-            // plotOffset--            var lw = axis.labelWidth,-                lh = axis.labelHeight,-                pos = axis.options.position,-                tickLength = axis.options.tickLength,-                axismargin = options.grid.axisMargin,-                padding = options.grid.labelMargin,-                all = axis.direction == "x" ? xaxes : yaxes,-                index;--            // determine axis margin-            var samePosition = $.grep(all, function (a) {-                return a && a.options.position == pos && a.reserveSpace;-            });-            if ($.inArray(axis, samePosition) == samePosition.length - 1)-                axismargin = 0; // outermost--            // determine tick length - if we're innermost, we can use "full"-            if (tickLength == null)-                tickLength = "full";--            var sameDirection = $.grep(all, function (a) {-                return a && a.reserveSpace;-            });--            var innermost = $.inArray(axis, sameDirection) == 0;-            if (!innermost && tickLength == "full")-                tickLength = 5;-                -            if (!isNaN(+tickLength))-                padding += +tickLength;--            // compute box-            if (axis.direction == "x") {-                lh += padding;-                -                if (pos == "bottom") {-                    plotOffset.bottom += lh + axismargin;-                    axis.box = { top: canvasHeight - plotOffset.bottom, height: lh };-                }-                else {-                    axis.box = { top: plotOffset.top + axismargin, height: lh };-                    plotOffset.top += lh + axismargin;-                }-            }-            else {-                lw += padding;-                -                if (pos == "left") {-                    axis.box = { left: plotOffset.left + axismargin, width: lw };-                    plotOffset.left += lw + axismargin;-                }-                else {-                    plotOffset.right += lw + axismargin;-                    axis.box = { left: canvasWidth - plotOffset.right, width: lw };-                }-            }--             // save for future reference-            axis.position = pos;-            axis.tickLength = tickLength;-            axis.box.padding = padding;-            axis.innermost = innermost;-        }--        function allocateAxisBoxSecondPhase(axis) {-            // set remaining bounding box coordinates-            if (axis.direction == "x") {-                axis.box.left = plotOffset.left;-                axis.box.width = plotWidth;-            }-            else {-                axis.box.top = plotOffset.top;-                axis.box.height = plotHeight;-            }-        }-        -        function setupGrid() {-            var i, axes = allAxes();--            // first calculate the plot and axis box dimensions--            $.each(axes, function (_, axis) {-                axis.show = axis.options.show;-                if (axis.show == null)-                    axis.show = axis.used; // by default an axis is visible if it's got data-                -                axis.reserveSpace = axis.show || axis.options.reserveSpace;--                setRange(axis);-            });--            allocatedAxes = $.grep(axes, function (axis) { return axis.reserveSpace; });--            plotOffset.left = plotOffset.right = plotOffset.top = plotOffset.bottom = 0;-            if (options.grid.show) {-                $.each(allocatedAxes, function (_, axis) {-                    // make the ticks-                    setupTickGeneration(axis);-                    setTicks(axis);-                    snapRangeToTicks(axis, axis.ticks);--                    // find labelWidth/Height for axis-                    measureTickLabels(axis);-                });--                // with all dimensions in house, we can compute the-                // axis boxes, start from the outside (reverse order)-                for (i = allocatedAxes.length - 1; i >= 0; --i)-                    allocateAxisBoxFirstPhase(allocatedAxes[i]);--                // make sure we've got enough space for things that-                // might stick out-                var minMargin = options.grid.minBorderMargin;-                if (minMargin == null) {-                    minMargin = 0;-                    for (i = 0; i < series.length; ++i)-                        minMargin = Math.max(minMargin, series[i].points.radius + series[i].points.lineWidth/2);-                }-                    -                for (var a in plotOffset) {-                    plotOffset[a] += options.grid.borderWidth;-                    plotOffset[a] = Math.max(minMargin, plotOffset[a]);-                }-            }-            -            plotWidth = canvasWidth - plotOffset.left - plotOffset.right;-            plotHeight = canvasHeight - plotOffset.bottom - plotOffset.top;--            // now we got the proper plotWidth/Height, we can compute the scaling-            $.each(axes, function (_, axis) {-                setTransformationHelpers(axis);-            });--            if (options.grid.show) {-                $.each(allocatedAxes, function (_, axis) {-                    allocateAxisBoxSecondPhase(axis);-                });--                insertAxisLabels();-            }-            -            insertLegend();-        }-        -        function setRange(axis) {-            var opts = axis.options,-                min = +(opts.min != null ? opts.min : axis.datamin),-                max = +(opts.max != null ? opts.max : axis.datamax),-                delta = max - min;--            if (delta == 0.0) {-                // degenerate case-                var widen = max == 0 ? 1 : 0.01;--                if (opts.min == null)-                    min -= widen;-                // always widen max if we couldn't widen min to ensure we-                // don't fall into min == max which doesn't work-                if (opts.max == null || opts.min != null)-                    max += widen;-            }-            else {-                // consider autoscaling-                var margin = opts.autoscaleMargin;-                if (margin != null) {-                    if (opts.min == null) {-                        min -= delta * margin;-                        // make sure we don't go below zero if all values-                        // are positive-                        if (min < 0 && axis.datamin != null && axis.datamin >= 0)-                            min = 0;-                    }-                    if (opts.max == null) {-                        max += delta * margin;-                        if (max > 0 && axis.datamax != null && axis.datamax <= 0)-                            max = 0;-                    }-                }-            }-            axis.min = min;-            axis.max = max;-        }--        function setupTickGeneration(axis) {-            var opts = axis.options;-                -            // estimate number of ticks-            var noTicks;-            if (typeof opts.ticks == "number" && opts.ticks > 0)-                noTicks = opts.ticks;-            else-                // heuristic based on the model a*sqrt(x) fitted to-                // some data points that seemed reasonable-                noTicks = 0.3 * Math.sqrt(axis.direction == "x" ? canvasWidth : canvasHeight);--            var delta = (axis.max - axis.min) / noTicks,-                size, generator, unit, formatter, i, magn, norm;--            if (opts.mode == "time") {-                // pretty handling of time-                -                // map of app. size of time units in milliseconds-                var timeUnitSize = {-                    "second": 1000,-                    "minute": 60 * 1000,-                    "hour": 60 * 60 * 1000,-                    "day": 24 * 60 * 60 * 1000,-                    "month": 30 * 24 * 60 * 60 * 1000,-                    "year": 365.2425 * 24 * 60 * 60 * 1000-                };---                // the allowed tick sizes, after 1 year we use-                // an integer algorithm-                var spec = [-                    [1, "second"], [2, "second"], [5, "second"], [10, "second"],-                    [30, "second"], -                    [1, "minute"], [2, "minute"], [5, "minute"], [10, "minute"],-                    [30, "minute"], -                    [1, "hour"], [2, "hour"], [4, "hour"],-                    [8, "hour"], [12, "hour"],-                    [1, "day"], [2, "day"], [3, "day"],-                    [0.25, "month"], [0.5, "month"], [1, "month"],-                    [2, "month"], [3, "month"], [6, "month"],-                    [1, "year"]-                ];--                var minSize = 0;-                if (opts.minTickSize != null) {-                    if (typeof opts.tickSize == "number")-                        minSize = opts.tickSize;-                    else-                        minSize = opts.minTickSize[0] * timeUnitSize[opts.minTickSize[1]];-                }--                for (var i = 0; i < spec.length - 1; ++i)-                    if (delta < (spec[i][0] * timeUnitSize[spec[i][1]]-                                 + spec[i + 1][0] * timeUnitSize[spec[i + 1][1]]) / 2-                       && spec[i][0] * timeUnitSize[spec[i][1]] >= minSize)-                        break;-                size = spec[i][0];-                unit = spec[i][1];-                -                // special-case the possibility of several years-                if (unit == "year") {-                    magn = Math.pow(10, Math.floor(Math.log(delta / timeUnitSize.year) / Math.LN10));-                    norm = (delta / timeUnitSize.year) / magn;-                    if (norm < 1.5)-                        size = 1;-                    else if (norm < 3)-                        size = 2;-                    else if (norm < 7.5)-                        size = 5;-                    else-                        size = 10;--                    size *= magn;-                }--                axis.tickSize = opts.tickSize || [size, unit];-                -                generator = function(axis) {-                    var ticks = [],-                        tickSize = axis.tickSize[0], unit = axis.tickSize[1],-                        d = new Date(axis.min);-                    -                    var step = tickSize * timeUnitSize[unit];--                    if (unit == "second")-                        d.setUTCSeconds(floorInBase(d.getUTCSeconds(), tickSize));-                    if (unit == "minute")-                        d.setUTCMinutes(floorInBase(d.getUTCMinutes(), tickSize));-                    if (unit == "hour")-                        d.setUTCHours(floorInBase(d.getUTCHours(), tickSize));-                    if (unit == "month")-                        d.setUTCMonth(floorInBase(d.getUTCMonth(), tickSize));-                    if (unit == "year")-                        d.setUTCFullYear(floorInBase(d.getUTCFullYear(), tickSize));-                    -                    // reset smaller components-                    d.setUTCMilliseconds(0);-                    if (step >= timeUnitSize.minute)-                        d.setUTCSeconds(0);-                    if (step >= timeUnitSize.hour)-                        d.setUTCMinutes(0);-                    if (step >= timeUnitSize.day)-                        d.setUTCHours(0);-                    if (step >= timeUnitSize.day * 4)-                        d.setUTCDate(1);-                    if (step >= timeUnitSize.year)-                        d.setUTCMonth(0);---                    var carry = 0, v = Number.NaN, prev;-                    do {-                        prev = v;-                        v = d.getTime();-                        ticks.push(v);-                        if (unit == "month") {-                            if (tickSize < 1) {-                                // a bit complicated - we'll divide the month-                                // up but we need to take care of fractions-                                // so we don't end up in the middle of a day-                                d.setUTCDate(1);-                                var start = d.getTime();-                                d.setUTCMonth(d.getUTCMonth() + 1);-                                var end = d.getTime();-                                d.setTime(v + carry * timeUnitSize.hour + (end - start) * tickSize);-                                carry = d.getUTCHours();-                                d.setUTCHours(0);-                            }-                            else-                                d.setUTCMonth(d.getUTCMonth() + tickSize);-                        }-                        else if (unit == "year") {-                            d.setUTCFullYear(d.getUTCFullYear() + tickSize);-                        }-                        else-                            d.setTime(v + step);-                    } while (v < axis.max && v != prev);--                    return ticks;-                };--                formatter = function (v, axis) {-                    var d = new Date(v);--                    // first check global format-                    if (opts.timeformat != null)-                        return $.plot.formatDate(d, opts.timeformat, opts.monthNames);-                    -                    var t = axis.tickSize[0] * timeUnitSize[axis.tickSize[1]];-                    var span = axis.max - axis.min;-                    var suffix = (opts.twelveHourClock) ? " %p" : "";-                    -                    if (t < timeUnitSize.minute)-                        fmt = "%h:%M:%S" + suffix;-                    else if (t < timeUnitSize.day) {-                        if (span < 2 * timeUnitSize.day)-                            fmt = "%h:%M" + suffix;-                        else-                            fmt = "%b %d %h:%M" + suffix;-                    }-                    else if (t < timeUnitSize.month)-                        fmt = "%b %d";-                    else if (t < timeUnitSize.year) {-                        if (span < timeUnitSize.year)-                            fmt = "%b";-                        else-                            fmt = "%b %y";-                    }-                    else-                        fmt = "%y";-                    -                    return $.plot.formatDate(d, fmt, opts.monthNames);-                };-            }-            else {-                // pretty rounding of base-10 numbers-                var maxDec = opts.tickDecimals;-                var dec = -Math.floor(Math.log(delta) / Math.LN10);-                if (maxDec != null && dec > maxDec)-                    dec = maxDec;--                magn = Math.pow(10, -dec);-                norm = delta / magn; // norm is between 1.0 and 10.0-                -                if (norm < 1.5)-                    size = 1;-                else if (norm < 3) {-                    size = 2;-                    // special case for 2.5, requires an extra decimal-                    if (norm > 2.25 && (maxDec == null || dec + 1 <= maxDec)) {-                        size = 2.5;-                        ++dec;-                    }-                }-                else if (norm < 7.5)-                    size = 5;-                else-                    size = 10;--                size *= magn;-                -                if (opts.minTickSize != null && size < opts.minTickSize)-                    size = opts.minTickSize;--                axis.tickDecimals = Math.max(0, maxDec != null ? maxDec : dec);-                axis.tickSize = opts.tickSize || size;--                generator = function (axis) {-                    var ticks = [];--                    // spew out all possible ticks-                    var start = floorInBase(axis.min, axis.tickSize),-                        i = 0, v = Number.NaN, prev;-                    do {-                        prev = v;-                        v = start + i * axis.tickSize;-                        ticks.push(v);-                        ++i;-                    } while (v < axis.max && v != prev);-                    return ticks;-                };--                formatter = function (v, axis) {-                    return v.toFixed(axis.tickDecimals);-                };-            }--            if (opts.alignTicksWithAxis != null) {-                var otherAxis = (axis.direction == "x" ? xaxes : yaxes)[opts.alignTicksWithAxis - 1];-                if (otherAxis && otherAxis.used && otherAxis != axis) {-                    // consider snapping min/max to outermost nice ticks-                    var niceTicks = generator(axis);-                    if (niceTicks.length > 0) {-                        if (opts.min == null)-                            axis.min = Math.min(axis.min, niceTicks[0]);-                        if (opts.max == null && niceTicks.length > 1)-                            axis.max = Math.max(axis.max, niceTicks[niceTicks.length - 1]);-                    }-                    -                    generator = function (axis) {-                        // copy ticks, scaled to this axis-                        var ticks = [], v, i;-                        for (i = 0; i < otherAxis.ticks.length; ++i) {-                            v = (otherAxis.ticks[i].v - otherAxis.min) / (otherAxis.max - otherAxis.min);-                            v = axis.min + v * (axis.max - axis.min);-                            ticks.push(v);-                        }-                        return ticks;-                    };-                    -                    // we might need an extra decimal since forced-                    // ticks don't necessarily fit naturally-                    if (axis.mode != "time" && opts.tickDecimals == null) {-                        var extraDec = Math.max(0, -Math.floor(Math.log(delta) / Math.LN10) + 1),-                            ts = generator(axis);--                        // only proceed if the tick interval rounded-                        // with an extra decimal doesn't give us a-                        // zero at end-                        if (!(ts.length > 1 && /\..*0$/.test((ts[1] - ts[0]).toFixed(extraDec))))-                            axis.tickDecimals = extraDec;-                    }-                }-            }--            axis.tickGenerator = generator;-            if ($.isFunction(opts.tickFormatter))-                axis.tickFormatter = function (v, axis) { return "" + opts.tickFormatter(v, axis); };-            else-                axis.tickFormatter = formatter;-        }-        -        function setTicks(axis) {-            var oticks = axis.options.ticks, ticks = [];-            if (oticks == null || (typeof oticks == "number" && oticks > 0))-                ticks = axis.tickGenerator(axis);-            else if (oticks) {-                if ($.isFunction(oticks))-                    // generate the ticks-                    ticks = oticks({ min: axis.min, max: axis.max });-                else-                    ticks = oticks;-            }--            // clean up/labelify the supplied ticks, copy them over-            var i, v;-            axis.ticks = [];-            for (i = 0; i < ticks.length; ++i) {-                var label = null;-                var t = ticks[i];-                if (typeof t == "object") {-                    v = +t[0];-                    if (t.length > 1)-                        label = t[1];-                }-                else-                    v = +t;-                if (label == null)-                    label = axis.tickFormatter(v, axis);-                if (!isNaN(v))-                    axis.ticks.push({ v: v, label: label });-            }-        }--        function snapRangeToTicks(axis, ticks) {-            if (axis.options.autoscaleMargin && ticks.length > 0) {-                // snap to ticks-                if (axis.options.min == null)-                    axis.min = Math.min(axis.min, ticks[0].v);-                if (axis.options.max == null && ticks.length > 1)-                    axis.max = Math.max(axis.max, ticks[ticks.length - 1].v);-            }-        }-      -        function draw() {-            ctx.clearRect(0, 0, canvasWidth, canvasHeight);--            var grid = options.grid;--            // draw background, if any-            if (grid.show && grid.backgroundColor)-                drawBackground();-            -            if (grid.show && !grid.aboveData)-                drawGrid();--            for (var i = 0; i < series.length; ++i) {-                executeHooks(hooks.drawSeries, [ctx, series[i]]);-                drawSeries(series[i]);-            }--            executeHooks(hooks.draw, [ctx]);-            -            if (grid.show && grid.aboveData)-                drawGrid();-        }--        function extractRange(ranges, coord) {-            var axis, from, to, key, axes = allAxes();--            for (i = 0; i < axes.length; ++i) {-                axis = axes[i];-                if (axis.direction == coord) {-                    key = coord + axis.n + "axis";-                    if (!ranges[key] && axis.n == 1)-                        key = coord + "axis"; // support x1axis as xaxis-                    if (ranges[key]) {-                        from = ranges[key].from;-                        to = ranges[key].to;-                        break;-                    }-                }-            }--            // backwards-compat stuff - to be removed in future-            if (!ranges[key]) {-                axis = coord == "x" ? xaxes[0] : yaxes[0];-                from = ranges[coord + "1"];-                to = ranges[coord + "2"];-            }--            // auto-reverse as an added bonus-            if (from != null && to != null && from > to) {-                var tmp = from;-                from = to;-                to = tmp;-            }-            -            return { from: from, to: to, axis: axis };-        }-        -        function drawBackground() {-            ctx.save();-            ctx.translate(plotOffset.left, plotOffset.top);--            ctx.fillStyle = getColorOrGradient(options.grid.backgroundColor, plotHeight, 0, "rgba(255, 255, 255, 0)");-            ctx.fillRect(0, 0, plotWidth, plotHeight);-            ctx.restore();-        }--        function drawGrid() {-            var i;-            -            ctx.save();-            ctx.translate(plotOffset.left, plotOffset.top);--            // draw markings-            var markings = options.grid.markings;-            if (markings) {-                if ($.isFunction(markings)) {-                    var axes = plot.getAxes();-                    // xmin etc. is backwards compatibility, to be-                    // removed in the future-                    axes.xmin = axes.xaxis.min;-                    axes.xmax = axes.xaxis.max;-                    axes.ymin = axes.yaxis.min;-                    axes.ymax = axes.yaxis.max;-                    -                    markings = markings(axes);-                }--                for (i = 0; i < markings.length; ++i) {-                    var m = markings[i],-                        xrange = extractRange(m, "x"),-                        yrange = extractRange(m, "y");--                    // fill in missing-                    if (xrange.from == null)-                        xrange.from = xrange.axis.min;-                    if (xrange.to == null)-                        xrange.to = xrange.axis.max;-                    if (yrange.from == null)-                        yrange.from = yrange.axis.min;-                    if (yrange.to == null)-                        yrange.to = yrange.axis.max;--                    // clip-                    if (xrange.to < xrange.axis.min || xrange.from > xrange.axis.max ||-                        yrange.to < yrange.axis.min || yrange.from > yrange.axis.max)-                        continue;--                    xrange.from = Math.max(xrange.from, xrange.axis.min);-                    xrange.to = Math.min(xrange.to, xrange.axis.max);-                    yrange.from = Math.max(yrange.from, yrange.axis.min);-                    yrange.to = Math.min(yrange.to, yrange.axis.max);--                    if (xrange.from == xrange.to && yrange.from == yrange.to)-                        continue;--                    // then draw-                    xrange.from = xrange.axis.p2c(xrange.from);-                    xrange.to = xrange.axis.p2c(xrange.to);-                    yrange.from = yrange.axis.p2c(yrange.from);-                    yrange.to = yrange.axis.p2c(yrange.to);-                    -                    if (xrange.from == xrange.to || yrange.from == yrange.to) {-                        // draw line-                        ctx.beginPath();-                        ctx.strokeStyle = m.color || options.grid.markingsColor;-                        ctx.lineWidth = m.lineWidth || options.grid.markingsLineWidth;-                        ctx.moveTo(xrange.from, yrange.from);-                        ctx.lineTo(xrange.to, yrange.to);-                        ctx.stroke();-                    }-                    else {-                        // fill area-                        ctx.fillStyle = m.color || options.grid.markingsColor;-                        ctx.fillRect(xrange.from, yrange.to,-                                     xrange.to - xrange.from,-                                     yrange.from - yrange.to);-                    }-                }-            }-            -            // draw the ticks-            var axes = allAxes(), bw = options.grid.borderWidth;--            for (var j = 0; j < axes.length; ++j) {-                var axis = axes[j], box = axis.box,-                    t = axis.tickLength, x, y, xoff, yoff;-                if (!axis.show || axis.ticks.length == 0)-                    continue-                -                ctx.strokeStyle = axis.options.tickColor || $.color.parse(axis.options.color).scale('a', 0.22).toString();-                ctx.lineWidth = 1;--                // find the edges-                if (axis.direction == "x") {-                    x = 0;-                    if (t == "full")-                        y = (axis.position == "top" ? 0 : plotHeight);-                    else-                        y = box.top - plotOffset.top + (axis.position == "top" ? box.height : 0);-                }-                else {-                    y = 0;-                    if (t == "full")-                        x = (axis.position == "left" ? 0 : plotWidth);-                    else-                        x = box.left - plotOffset.left + (axis.position == "left" ? box.width : 0);-                }-                -                // draw tick bar-                if (!axis.innermost) {-                    ctx.beginPath();-                    xoff = yoff = 0;-                    if (axis.direction == "x")-                        xoff = plotWidth;-                    else-                        yoff = plotHeight;-                    -                    if (ctx.lineWidth == 1) {-                        x = Math.floor(x) + 0.5;-                        y = Math.floor(y) + 0.5;-                    }--                    ctx.moveTo(x, y);-                    ctx.lineTo(x + xoff, y + yoff);-                    ctx.stroke();-                }--                // draw ticks-                ctx.beginPath();-                for (i = 0; i < axis.ticks.length; ++i) {-                    var v = axis.ticks[i].v;-                    -                    xoff = yoff = 0;--                    if (v < axis.min || v > axis.max-                        // skip those lying on the axes if we got a border-                        || (t == "full" && bw > 0-                            && (v == axis.min || v == axis.max)))-                        continue;--                    if (axis.direction == "x") {-                        x = axis.p2c(v);-                        yoff = t == "full" ? -plotHeight : t;-                        -                        if (axis.position == "top")-                            yoff = -yoff;-                    }-                    else {-                        y = axis.p2c(v);-                        xoff = t == "full" ? -plotWidth : t;-                        -                        if (axis.position == "left")-                            xoff = -xoff;-                    }--                    if (ctx.lineWidth == 1) {-                        if (axis.direction == "x")-                            x = Math.floor(x) + 0.5;-                        else-                            y = Math.floor(y) + 0.5;-                    }--                    ctx.moveTo(x, y);-                    ctx.lineTo(x + xoff, y + yoff);-                }-                -                ctx.stroke();-            }-            -            -            // draw border-            if (bw) {-                ctx.lineWidth = bw;-                ctx.strokeStyle = options.grid.borderColor;-                ctx.strokeRect(-bw/2, -bw/2, plotWidth + bw, plotHeight + bw);-            }--            ctx.restore();-        }--        function insertAxisLabels() {-            placeholder.find(".tickLabels").remove();-            -            var html = ['<div class="tickLabels" style="font-size:smaller">'];--            var axes = allAxes();-            for (var j = 0; j < axes.length; ++j) {-                var axis = axes[j], box = axis.box;-                if (!axis.show)-                    continue;-                //debug: html.push('<div style="position:absolute;opacity:0.10;background-color:red;left:' + box.left + 'px;top:' + box.top + 'px;width:' + box.width +  'px;height:' + box.height + 'px"></div>')-                html.push('<div class="' + axis.direction + 'Axis ' + axis.direction + axis.n + 'Axis" style="color:' + axis.options.color + '">');-                for (var i = 0; i < axis.ticks.length; ++i) {-                    var tick = axis.ticks[i];-                    if (!tick.label || tick.v < axis.min || tick.v > axis.max)-                        continue;--                    var pos = {}, align;-                    -                    if (axis.direction == "x") {-                        align = "center";-                        pos.left = Math.round(plotOffset.left + axis.p2c(tick.v) - axis.labelWidth/2);-                        if (axis.position == "bottom")-                            pos.top = box.top + box.padding;-                        else-                            pos.bottom = canvasHeight - (box.top + box.height - box.padding);-                    }-                    else {-                        pos.top = Math.round(plotOffset.top + axis.p2c(tick.v) - axis.labelHeight/2);-                        if (axis.position == "left") {-                            pos.right = canvasWidth - (box.left + box.width - box.padding)-                            align = "right";-                        }-                        else {-                            pos.left = box.left + box.padding;-                            align = "left";-                        }-                    }--                    pos.width = axis.labelWidth;--                    var style = ["position:absolute", "text-align:" + align ];-                    for (var a in pos)-                        style.push(a + ":" + pos[a] + "px")-                    -                    html.push('<div class="tickLabel" style="' + style.join(';') + '">' + tick.label + '</div>');-                }-                html.push('</div>');-            }--            html.push('</div>');--            placeholder.append(html.join(""));-        }--        function drawSeries(series) {-            if (series.lines.show)-                drawSeriesLines(series);-            if (series.bars.show)-                drawSeriesBars(series);-            if (series.points.show)-                drawSeriesPoints(series);-        }-        -        function drawSeriesLines(series) {-            function plotLine(datapoints, xoffset, yoffset, axisx, axisy) {-                var points = datapoints.points,-                    ps = datapoints.pointsize,-                    prevx = null, prevy = null;-                -                ctx.beginPath();-                for (var i = ps; i < points.length; i += ps) {-                    var x1 = points[i - ps], y1 = points[i - ps + 1],-                        x2 = points[i], y2 = points[i + 1];-                    -                    if (x1 == null || x2 == null)-                        continue;--                    // clip with ymin-                    if (y1 <= y2 && y1 < axisy.min) {-                        if (y2 < axisy.min)-                            continue;   // line segment is outside-                        // compute new intersection point-                        x1 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;-                        y1 = axisy.min;-                    }-                    else if (y2 <= y1 && y2 < axisy.min) {-                        if (y1 < axisy.min)-                            continue;-                        x2 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;-                        y2 = axisy.min;-                    }--                    // clip with ymax-                    if (y1 >= y2 && y1 > axisy.max) {-                        if (y2 > axisy.max)-                            continue;-                        x1 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;-                        y1 = axisy.max;-                    }-                    else if (y2 >= y1 && y2 > axisy.max) {-                        if (y1 > axisy.max)-                            continue;-                        x2 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;-                        y2 = axisy.max;-                    }--                    // clip with xmin-                    if (x1 <= x2 && x1 < axisx.min) {-                        if (x2 < axisx.min)-                            continue;-                        y1 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;-                        x1 = axisx.min;-                    }-                    else if (x2 <= x1 && x2 < axisx.min) {-                        if (x1 < axisx.min)-                            continue;-                        y2 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;-                        x2 = axisx.min;-                    }--                    // clip with xmax-                    if (x1 >= x2 && x1 > axisx.max) {-                        if (x2 > axisx.max)-                            continue;-                        y1 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;-                        x1 = axisx.max;-                    }-                    else if (x2 >= x1 && x2 > axisx.max) {-                        if (x1 > axisx.max)-                            continue;-                        y2 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;-                        x2 = axisx.max;-                    }--                    if (x1 != prevx || y1 != prevy)-                        ctx.moveTo(axisx.p2c(x1) + xoffset, axisy.p2c(y1) + yoffset);-                    -                    prevx = x2;-                    prevy = y2;-                    ctx.lineTo(axisx.p2c(x2) + xoffset, axisy.p2c(y2) + yoffset);-                }-                ctx.stroke();-            }--            function plotLineArea(datapoints, axisx, axisy) {-                var points = datapoints.points,-                    ps = datapoints.pointsize,-                    bottom = Math.min(Math.max(0, axisy.min), axisy.max),-                    i = 0, top, areaOpen = false,-                    ypos = 1, segmentStart = 0, segmentEnd = 0;--                // we process each segment in two turns, first forward-                // direction to sketch out top, then once we hit the-                // end we go backwards to sketch the bottom-                while (true) {-                    if (ps > 0 && i > points.length + ps)-                        break;--                    i += ps; // ps is negative if going backwards--                    var x1 = points[i - ps],-                        y1 = points[i - ps + ypos],-                        x2 = points[i], y2 = points[i + ypos];--                    if (areaOpen) {-                        if (ps > 0 && x1 != null && x2 == null) {-                            // at turning point-                            segmentEnd = i;-                            ps = -ps;-                            ypos = 2;-                            continue;-                        }--                        if (ps < 0 && i == segmentStart + ps) {-                            // done with the reverse sweep-                            ctx.fill();-                            areaOpen = false;-                            ps = -ps;-                            ypos = 1;-                            i = segmentStart = segmentEnd + ps;-                            continue;-                        }-                    }--                    if (x1 == null || x2 == null)-                        continue;--                    // clip x values-                    -                    // clip with xmin-                    if (x1 <= x2 && x1 < axisx.min) {-                        if (x2 < axisx.min)-                            continue;-                        y1 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;-                        x1 = axisx.min;-                    }-                    else if (x2 <= x1 && x2 < axisx.min) {-                        if (x1 < axisx.min)-                            continue;-                        y2 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;-                        x2 = axisx.min;-                    }--                    // clip with xmax-                    if (x1 >= x2 && x1 > axisx.max) {-                        if (x2 > axisx.max)-                            continue;-                        y1 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;-                        x1 = axisx.max;-                    }-                    else if (x2 >= x1 && x2 > axisx.max) {-                        if (x1 > axisx.max)-                            continue;-                        y2 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;-                        x2 = axisx.max;-                    }--                    if (!areaOpen) {-                        // open area-                        ctx.beginPath();-                        ctx.moveTo(axisx.p2c(x1), axisy.p2c(bottom));-                        areaOpen = true;-                    }-                    -                    // now first check the case where both is outside-                    if (y1 >= axisy.max && y2 >= axisy.max) {-                        ctx.lineTo(axisx.p2c(x1), axisy.p2c(axisy.max));-                        ctx.lineTo(axisx.p2c(x2), axisy.p2c(axisy.max));-                        continue;-                    }-                    else if (y1 <= axisy.min && y2 <= axisy.min) {-                        ctx.lineTo(axisx.p2c(x1), axisy.p2c(axisy.min));-                        ctx.lineTo(axisx.p2c(x2), axisy.p2c(axisy.min));-                        continue;-                    }-                    -                    // else it's a bit more complicated, there might-                    // be a flat maxed out rectangle first, then a-                    // triangular cutout or reverse; to find these-                    // keep track of the current x values-                    var x1old = x1, x2old = x2;--                    // clip the y values, without shortcutting, we-                    // go through all cases in turn-                    -                    // clip with ymin-                    if (y1 <= y2 && y1 < axisy.min && y2 >= axisy.min) {-                        x1 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;-                        y1 = axisy.min;-                    }-                    else if (y2 <= y1 && y2 < axisy.min && y1 >= axisy.min) {-                        x2 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;-                        y2 = axisy.min;-                    }--                    // clip with ymax-                    if (y1 >= y2 && y1 > axisy.max && y2 <= axisy.max) {-                        x1 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;-                        y1 = axisy.max;-                    }-                    else if (y2 >= y1 && y2 > axisy.max && y1 <= axisy.max) {-                        x2 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;-                        y2 = axisy.max;-                    }--                    // if the x value was changed we got a rectangle-                    // to fill-                    if (x1 != x1old) {-                        ctx.lineTo(axisx.p2c(x1old), axisy.p2c(y1));-                        // it goes to (x1, y1), but we fill that below-                    }-                    -                    // fill triangular section, this sometimes result-                    // in redundant points if (x1, y1) hasn't changed-                    // from previous line to, but we just ignore that-                    ctx.lineTo(axisx.p2c(x1), axisy.p2c(y1));-                    ctx.lineTo(axisx.p2c(x2), axisy.p2c(y2));--                    // fill the other rectangle if it's there-                    if (x2 != x2old) {-                        ctx.lineTo(axisx.p2c(x2), axisy.p2c(y2));-                        ctx.lineTo(axisx.p2c(x2old), axisy.p2c(y2));-                    }-                }-            }--            ctx.save();-            ctx.translate(plotOffset.left, plotOffset.top);-            ctx.lineJoin = "round";--            var lw = series.lines.lineWidth,-                sw = series.shadowSize;-            // FIXME: consider another form of shadow when filling is turned on-            if (lw > 0 && sw > 0) {-                // draw shadow as a thick and thin line with transparency-                ctx.lineWidth = sw;-                ctx.strokeStyle = "rgba(0,0,0,0.1)";-                // position shadow at angle from the mid of line-                var angle = Math.PI/18;-                plotLine(series.datapoints, Math.sin(angle) * (lw/2 + sw/2), Math.cos(angle) * (lw/2 + sw/2), series.xaxis, series.yaxis);-                ctx.lineWidth = sw/2;-                plotLine(series.datapoints, Math.sin(angle) * (lw/2 + sw/4), Math.cos(angle) * (lw/2 + sw/4), series.xaxis, series.yaxis);-            }--            ctx.lineWidth = lw;-            ctx.strokeStyle = series.color;-            var fillStyle = getFillStyle(series.lines, series.color, 0, plotHeight);-            if (fillStyle) {-                ctx.fillStyle = fillStyle;-                plotLineArea(series.datapoints, series.xaxis, series.yaxis);-            }--            if (lw > 0)-                plotLine(series.datapoints, 0, 0, series.xaxis, series.yaxis);-            ctx.restore();-        }--        function drawSeriesPoints(series) {-            function plotPoints(datapoints, radius, fillStyle, offset, shadow, axisx, axisy, symbol) {-                var points = datapoints.points, ps = datapoints.pointsize;--                for (var i = 0; i < points.length; i += ps) {-                    var x = points[i], y = points[i + 1];-                    if (x == null || x < axisx.min || x > axisx.max || y < axisy.min || y > axisy.max)-                        continue;-                    -                    ctx.beginPath();-                    x = axisx.p2c(x);-                    y = axisy.p2c(y) + offset;-                    if (symbol == "circle")-                        ctx.arc(x, y, radius, 0, shadow ? Math.PI : Math.PI * 2, false);-                    else-                        symbol(ctx, x, y, radius, shadow);-                    ctx.closePath();-                    -                    if (fillStyle) {-                        ctx.fillStyle = fillStyle;-                        ctx.fill();-                    }-                    ctx.stroke();-                }-            }-            -            ctx.save();-            ctx.translate(plotOffset.left, plotOffset.top);--            var lw = series.points.lineWidth,-                sw = series.shadowSize,-                radius = series.points.radius,-                symbol = series.points.symbol;-            if (lw > 0 && sw > 0) {-                // draw shadow in two steps-                var w = sw / 2;-                ctx.lineWidth = w;-                ctx.strokeStyle = "rgba(0,0,0,0.1)";-                plotPoints(series.datapoints, radius, null, w + w/2, true,-                           series.xaxis, series.yaxis, symbol);--                ctx.strokeStyle = "rgba(0,0,0,0.2)";-                plotPoints(series.datapoints, radius, null, w/2, true,-                           series.xaxis, series.yaxis, symbol);-            }--            ctx.lineWidth = lw;-            ctx.strokeStyle = series.color;-            plotPoints(series.datapoints, radius,-                       getFillStyle(series.points, series.color), 0, false,-                       series.xaxis, series.yaxis, symbol);-            ctx.restore();-        }--        function drawBar(x, y, b, barLeft, barRight, offset, fillStyleCallback, axisx, axisy, c, horizontal, lineWidth) {-            var left, right, bottom, top,-                drawLeft, drawRight, drawTop, drawBottom,-                tmp;--            // in horizontal mode, we start the bar from the left-            // instead of from the bottom so it appears to be-            // horizontal rather than vertical-            if (horizontal) {-                drawBottom = drawRight = drawTop = true;-                drawLeft = false;-                left = b;-                right = x;-                top = y + barLeft;-                bottom = y + barRight;--                // account for negative bars-                if (right < left) {-                    tmp = right;-                    right = left;-                    left = tmp;-                    drawLeft = true;-                    drawRight = false;-                }-            }-            else {-                drawLeft = drawRight = drawTop = true;-                drawBottom = false;-                left = x + barLeft;-                right = x + barRight;-                bottom = b;-                top = y;--                // account for negative bars-                if (top < bottom) {-                    tmp = top;-                    top = bottom;-                    bottom = tmp;-                    drawBottom = true;-                    drawTop = false;-                }-            }-           -            // clip-            if (right < axisx.min || left > axisx.max ||-                top < axisy.min || bottom > axisy.max)-                return;-            -            if (left < axisx.min) {-                left = axisx.min;-                drawLeft = false;-            }--            if (right > axisx.max) {-                right = axisx.max;-                drawRight = false;-            }--            if (bottom < axisy.min) {-                bottom = axisy.min;-                drawBottom = false;-            }-            -            if (top > axisy.max) {-                top = axisy.max;-                drawTop = false;-            }--            left = axisx.p2c(left);-            bottom = axisy.p2c(bottom);-            right = axisx.p2c(right);-            top = axisy.p2c(top);-            -            // fill the bar-            if (fillStyleCallback) {-                c.beginPath();-                c.moveTo(left, bottom);-                c.lineTo(left, top);-                c.lineTo(right, top);-                c.lineTo(right, bottom);-                c.fillStyle = fillStyleCallback(bottom, top);-                c.fill();-            }--            // draw outline-            if (lineWidth > 0 && (drawLeft || drawRight || drawTop || drawBottom)) {-                c.beginPath();--                // FIXME: inline moveTo is buggy with excanvas-                c.moveTo(left, bottom + offset);-                if (drawLeft)-                    c.lineTo(left, top + offset);-                else-                    c.moveTo(left, top + offset);-                if (drawTop)-                    c.lineTo(right, top + offset);-                else-                    c.moveTo(right, top + offset);-                if (drawRight)-                    c.lineTo(right, bottom + offset);-                else-                    c.moveTo(right, bottom + offset);-                if (drawBottom)-                    c.lineTo(left, bottom + offset);-                else-                    c.moveTo(left, bottom + offset);-                c.stroke();-            }-        }-        -        function drawSeriesBars(series) {-            function plotBars(datapoints, barLeft, barRight, offset, fillStyleCallback, axisx, axisy) {-                var points = datapoints.points, ps = datapoints.pointsize;-                -                for (var i = 0; i < points.length; i += ps) {-                    if (points[i] == null)-                        continue;-                    drawBar(points[i], points[i + 1], points[i + 2], barLeft, barRight, offset, fillStyleCallback, axisx, axisy, ctx, series.bars.horizontal, series.bars.lineWidth);-                }-            }--            ctx.save();-            ctx.translate(plotOffset.left, plotOffset.top);--            // FIXME: figure out a way to add shadows (for instance along the right edge)-            ctx.lineWidth = series.bars.lineWidth;-            ctx.strokeStyle = series.color;-            var barLeft = series.bars.align == "left" ? 0 : -series.bars.barWidth/2;-            var fillStyleCallback = series.bars.fill ? function (bottom, top) { return getFillStyle(series.bars, series.color, bottom, top); } : null;-            plotBars(series.datapoints, barLeft, barLeft + series.bars.barWidth, 0, fillStyleCallback, series.xaxis, series.yaxis);-            ctx.restore();-        }--        function getFillStyle(filloptions, seriesColor, bottom, top) {-            var fill = filloptions.fill;-            if (!fill)-                return null;--            if (filloptions.fillColor)-                return getColorOrGradient(filloptions.fillColor, bottom, top, seriesColor);-            -            var c = $.color.parse(seriesColor);-            c.a = typeof fill == "number" ? fill : 0.4;-            c.normalize();-            return c.toString();-        }-        -        function insertLegend() {-            placeholder.find(".legend").remove();--            if (!options.legend.show)-                return;-            -            var fragments = [], rowStarted = false,-                lf = options.legend.labelFormatter, s, label;-            for (var i = 0; i < series.length; ++i) {-                s = series[i];-                label = s.label;-                if (!label)-                    continue;-                -                if (i % options.legend.noColumns == 0) {-                    if (rowStarted)-                        fragments.push('</tr>');-                    fragments.push('<tr>');-                    rowStarted = true;-                }--                if (lf)-                    label = lf(label, s);-                -                fragments.push(-                    '<td class="legendColorBox"><div style="border:1px solid ' + options.legend.labelBoxBorderColor + ';padding:1px"><div style="width:4px;height:0;border:5px solid ' + s.color + ';overflow:hidden"></div></div></td>' +-                    '<td class="legendLabel">' + label + '</td>');-            }-            if (rowStarted)-                fragments.push('</tr>');-            -            if (fragments.length == 0)-                return;--            var table = '<table style="font-size:smaller;color:' + options.grid.color + '">' + fragments.join("") + '</table>';-            if (options.legend.container != null)-                $(options.legend.container).html(table);-            else {-                var pos = "",-                    p = options.legend.position,-                    m = options.legend.margin;-                if (m[0] == null)-                    m = [m, m];-                if (p.charAt(0) == "n")-                    pos += 'top:' + (m[1] + plotOffset.top) + 'px;';-                else if (p.charAt(0) == "s")-                    pos += 'bottom:' + (m[1] + plotOffset.bottom) + 'px;';-                if (p.charAt(1) == "e")-                    pos += 'right:' + (m[0] + plotOffset.right) + 'px;';-                else if (p.charAt(1) == "w")-                    pos += 'left:' + (m[0] + plotOffset.left) + 'px;';-                var legend = $('<div class="legend">' + table.replace('style="', 'style="position:absolute;' + pos +';') + '</div>').appendTo(placeholder);-                if (options.legend.backgroundOpacity != 0.0) {-                    // put in the transparent background-                    // separately to avoid blended labels and-                    // label boxes-                    var c = options.legend.backgroundColor;-                    if (c == null) {-                        c = options.grid.backgroundColor;-                        if (c && typeof c == "string")-                            c = $.color.parse(c);-                        else-                            c = $.color.extract(legend, 'background-color');-                        c.a = 1;-                        c = c.toString();-                    }-                    var div = legend.children();-                    $('<div style="position:absolute;width:' + div.width() + 'px;height:' + div.height() + 'px;' + pos +'background-color:' + c + ';"> </div>').prependTo(legend).css('opacity', options.legend.backgroundOpacity);-                }-            }-        }---        // interactive features-        -        var highlights = [],-            redrawTimeout = null;-        -        // returns the data item the mouse is over, or null if none is found-        function findNearbyItem(mouseX, mouseY, seriesFilter) {-            var maxDistance = options.grid.mouseActiveRadius,-                smallestDistance = maxDistance * maxDistance + 1,-                item = null, foundPoint = false, i, j;--            for (i = series.length - 1; i >= 0; --i) {-                if (!seriesFilter(series[i]))-                    continue;-                -                var s = series[i],-                    axisx = s.xaxis,-                    axisy = s.yaxis,-                    points = s.datapoints.points,-                    ps = s.datapoints.pointsize,-                    mx = axisx.c2p(mouseX), // precompute some stuff to make the loop faster-                    my = axisy.c2p(mouseY),-                    maxx = maxDistance / axisx.scale,-                    maxy = maxDistance / axisy.scale;--                // with inverse transforms, we can't use the maxx/maxy-                // optimization, sadly-                if (axisx.options.inverseTransform)-                    maxx = Number.MAX_VALUE;-                if (axisy.options.inverseTransform)-                    maxy = Number.MAX_VALUE;-                -                if (s.lines.show || s.points.show) {-                    for (j = 0; j < points.length; j += ps) {-                        var x = points[j], y = points[j + 1];-                        if (x == null)-                            continue;-                        -                        // For points and lines, the cursor must be within a-                        // certain distance to the data point-                        if (x - mx > maxx || x - mx < -maxx ||-                            y - my > maxy || y - my < -maxy)-                            continue;--                        // We have to calculate distances in pixels, not in-                        // data units, because the scales of the axes may be different-                        var dx = Math.abs(axisx.p2c(x) - mouseX),-                            dy = Math.abs(axisy.p2c(y) - mouseY),-                            dist = dx * dx + dy * dy; // we save the sqrt--                        // use <= to ensure last point takes precedence-                        // (last generally means on top of)-                        if (dist < smallestDistance) {-                            smallestDistance = dist;-                            item = [i, j / ps];-                        }-                    }-                }-                    -                if (s.bars.show && !item) { // no other point can be nearby-                    var barLeft = s.bars.align == "left" ? 0 : -s.bars.barWidth/2,-                        barRight = barLeft + s.bars.barWidth;-                    -                    for (j = 0; j < points.length; j += ps) {-                        var x = points[j], y = points[j + 1], b = points[j + 2];-                        if (x == null)-                            continue;-  -                        // for a bar graph, the cursor must be inside the bar-                        if (series[i].bars.horizontal ? -                            (mx <= Math.max(b, x) && mx >= Math.min(b, x) && -                             my >= y + barLeft && my <= y + barRight) :-                            (mx >= x + barLeft && mx <= x + barRight &&-                             my >= Math.min(b, y) && my <= Math.max(b, y)))-                                item = [i, j / ps];-                    }-                }-            }--            if (item) {-                i = item[0];-                j = item[1];-                ps = series[i].datapoints.pointsize;-                -                return { datapoint: series[i].datapoints.points.slice(j * ps, (j + 1) * ps),-                         dataIndex: j,-                         series: series[i],-                         seriesIndex: i };-            }-            -            return null;-        }--        function onMouseMove(e) {-            if (options.grid.hoverable)-                triggerClickHoverEvent("plothover", e,-                                       function (s) { return s["hoverable"] != false; });-        }--        function onMouseLeave(e) {-            if (options.grid.hoverable)-                triggerClickHoverEvent("plothover", e,-                                       function (s) { return false; });-        }--        function onClick(e) {-            triggerClickHoverEvent("plotclick", e,-                                   function (s) { return s["clickable"] != false; });-        }--        // trigger click or hover event (they send the same parameters-        // so we share their code)-        function triggerClickHoverEvent(eventname, event, seriesFilter) {-            var offset = eventHolder.offset(),-                canvasX = event.pageX - offset.left - plotOffset.left,-                canvasY = event.pageY - offset.top - plotOffset.top,-            pos = canvasToAxisCoords({ left: canvasX, top: canvasY });--            pos.pageX = event.pageX;-            pos.pageY = event.pageY;--            var item = findNearbyItem(canvasX, canvasY, seriesFilter);--            if (item) {-                // fill in mouse pos for any listeners out there-                item.pageX = parseInt(item.series.xaxis.p2c(item.datapoint[0]) + offset.left + plotOffset.left);-                item.pageY = parseInt(item.series.yaxis.p2c(item.datapoint[1]) + offset.top + plotOffset.top);-            }--            if (options.grid.autoHighlight) {-                // clear auto-highlights-                for (var i = 0; i < highlights.length; ++i) {-                    var h = highlights[i];-                    if (h.auto == eventname &&-                        !(item && h.series == item.series &&-                          h.point[0] == item.datapoint[0] &&-                          h.point[1] == item.datapoint[1]))-                        unhighlight(h.series, h.point);-                }-                -                if (item)-                    highlight(item.series, item.datapoint, eventname);-            }-            -            placeholder.trigger(eventname, [ pos, item ]);-        }--        function triggerRedrawOverlay() {-            if (!redrawTimeout)-                redrawTimeout = setTimeout(drawOverlay, 30);-        }--        function drawOverlay() {-            redrawTimeout = null;--            // draw highlights-            octx.save();-            octx.clearRect(0, 0, canvasWidth, canvasHeight);-            octx.translate(plotOffset.left, plotOffset.top);-            -            var i, hi;-            for (i = 0; i < highlights.length; ++i) {-                hi = highlights[i];--                if (hi.series.bars.show)-                    drawBarHighlight(hi.series, hi.point);-                else-                    drawPointHighlight(hi.series, hi.point);-            }-            octx.restore();-            -            executeHooks(hooks.drawOverlay, [octx]);-        }-        -        function highlight(s, point, auto) {-            if (typeof s == "number")-                s = series[s];--            if (typeof point == "number") {-                var ps = s.datapoints.pointsize;-                point = s.datapoints.points.slice(ps * point, ps * (point + 1));-            }--            var i = indexOfHighlight(s, point);-            if (i == -1) {-                highlights.push({ series: s, point: point, auto: auto });--                triggerRedrawOverlay();-            }-            else if (!auto)-                highlights[i].auto = false;-        }-            -        function unhighlight(s, point) {-            if (s == null && point == null) {-                highlights = [];-                triggerRedrawOverlay();-            }-            -            if (typeof s == "number")-                s = series[s];--            if (typeof point == "number")-                point = s.data[point];--            var i = indexOfHighlight(s, point);-            if (i != -1) {-                highlights.splice(i, 1);--                triggerRedrawOverlay();-            }-        }-        -        function indexOfHighlight(s, p) {-            for (var i = 0; i < highlights.length; ++i) {-                var h = highlights[i];-                if (h.series == s && h.point[0] == p[0]-                    && h.point[1] == p[1])-                    return i;-            }-            return -1;-        }-        -        function drawPointHighlight(series, point) {-            var x = point[0], y = point[1],-                axisx = series.xaxis, axisy = series.yaxis;-            -            if (x < axisx.min || x > axisx.max || y < axisy.min || y > axisy.max)-                return;-            -            var pointRadius = series.points.radius + series.points.lineWidth / 2;-            octx.lineWidth = pointRadius;-            octx.strokeStyle = $.color.parse(series.color).scale('a', 0.5).toString();-            var radius = 1.5 * pointRadius,-                x = axisx.p2c(x),-                y = axisy.p2c(y);-            -            octx.beginPath();-            if (series.points.symbol == "circle")-                octx.arc(x, y, radius, 0, 2 * Math.PI, false);-            else-                series.points.symbol(octx, x, y, radius, false);-            octx.closePath();-            octx.stroke();-        }--        function drawBarHighlight(series, point) {-            octx.lineWidth = series.bars.lineWidth;-            octx.strokeStyle = $.color.parse(series.color).scale('a', 0.5).toString();-            var fillStyle = $.color.parse(series.color).scale('a', 0.5).toString();-            var barLeft = series.bars.align == "left" ? 0 : -series.bars.barWidth/2;-            drawBar(point[0], point[1], point[2] || 0, barLeft, barLeft + series.bars.barWidth,-                    0, function () { return fillStyle; }, series.xaxis, series.yaxis, octx, series.bars.horizontal, series.bars.lineWidth);-        }--        function getColorOrGradient(spec, bottom, top, defaultColor) {-            if (typeof spec == "string")-                return spec;-            else {-                // assume this is a gradient spec; IE currently only-                // supports a simple vertical gradient properly, so that's-                // what we support too-                var gradient = ctx.createLinearGradient(0, top, 0, bottom);-                -                for (var i = 0, l = spec.colors.length; i < l; ++i) {-                    var c = spec.colors[i];-                    if (typeof c != "string") {-                        var co = $.color.parse(defaultColor);-                        if (c.brightness != null)-                            co = co.scale('rgb', c.brightness)-                        if (c.opacity != null)-                            co.a *= c.opacity;-                        c = co.toString();-                    }-                    gradient.addColorStop(i / (l - 1), c);-                }-                -                return gradient;-            }-        }-    }--    $.plot = function(placeholder, data, options) {-        //var t0 = new Date();-        var plot = new Plot($(placeholder), data, options, $.plot.plugins);-        //(window.console ? console.log : alert)("time used (msecs): " + ((new Date()).getTime() - t0.getTime()));-        return plot;-    };--    $.plot.version = "0.7";-    -    $.plot.plugins = [];--    // returns a string with the date d formatted according to fmt-    $.plot.formatDate = function(d, fmt, monthNames) {-        var leftPad = function(n) {-            n = "" + n;-            return n.length == 1 ? "0" + n : n;-        };-        -        var r = [];-        var escape = false, padNext = false;-        var hours = d.getUTCHours();-        var isAM = hours < 12;-        if (monthNames == null)-            monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];--        if (fmt.search(/%p|%P/) != -1) {-            if (hours > 12) {-                hours = hours - 12;-            } else if (hours == 0) {-                hours = 12;-            }-        }-        for (var i = 0; i < fmt.length; ++i) {-            var c = fmt.charAt(i);-            -            if (escape) {-                switch (c) {-                case 'h': c = "" + hours; break;-                case 'H': c = leftPad(hours); break;-                case 'M': c = leftPad(d.getUTCMinutes()); break;-                case 'S': c = leftPad(d.getUTCSeconds()); break;-                case 'd': c = "" + d.getUTCDate(); break;-                case 'm': c = "" + (d.getUTCMonth() + 1); break;-                case 'y': c = "" + d.getUTCFullYear(); break;-                case 'b': c = "" + monthNames[d.getUTCMonth()]; break;-                case 'p': c = (isAM) ? ("" + "am") : ("" + "pm"); break;-                case 'P': c = (isAM) ? ("" + "AM") : ("" + "PM"); break;-                case '0': c = ""; padNext = true; break;-                }-                if (c && padNext) {-                    c = leftPad(c);-                    padNext = false;-                }-                r.push(c);-                if (!padNext)-                    escape = false;-            }-            else {-                if (c == "%")-                    escape = true;-                else-                    r.push(c);-            }-        }-        return r.join("");-    };-    -    // round to nearby lower multiple of base-    function floorInBase(n, base) {-        return base * Math.floor(n / base);-    }-    -})(jQuery);
− static/jquery.flot.min.js
@@ -1,6 +0,0 @@-/* Javascript plotting library for jQuery, v. 0.7.- *- * Released under the MIT license by IOLA, December 2007.- *- */-(function(b){b.color={};b.color.make=function(d,e,g,f){var c={};c.r=d||0;c.g=e||0;c.b=g||0;c.a=f!=null?f:1;c.add=function(h,j){for(var k=0;k<h.length;++k){c[h.charAt(k)]+=j}return c.normalize()};c.scale=function(h,j){for(var k=0;k<h.length;++k){c[h.charAt(k)]*=j}return c.normalize()};c.toString=function(){if(c.a>=1){return"rgb("+[c.r,c.g,c.b].join(",")+")"}else{return"rgba("+[c.r,c.g,c.b,c.a].join(",")+")"}};c.normalize=function(){function h(k,j,l){return j<k?k:(j>l?l:j)}c.r=h(0,parseInt(c.r),255);c.g=h(0,parseInt(c.g),255);c.b=h(0,parseInt(c.b),255);c.a=h(0,c.a,1);return c};c.clone=function(){return b.color.make(c.r,c.b,c.g,c.a)};return c.normalize()};b.color.extract=function(d,e){var c;do{c=d.css(e).toLowerCase();if(c!=""&&c!="transparent"){break}d=d.parent()}while(!b.nodeName(d.get(0),"body"));if(c=="rgba(0, 0, 0, 0)"){c="transparent"}return b.color.parse(c)};b.color.parse=function(c){var d,f=b.color.make;if(d=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(c)){return f(parseInt(d[1],10),parseInt(d[2],10),parseInt(d[3],10))}if(d=/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(c)){return f(parseInt(d[1],10),parseInt(d[2],10),parseInt(d[3],10),parseFloat(d[4]))}if(d=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(c)){return f(parseFloat(d[1])*2.55,parseFloat(d[2])*2.55,parseFloat(d[3])*2.55)}if(d=/rgba\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(c)){return f(parseFloat(d[1])*2.55,parseFloat(d[2])*2.55,parseFloat(d[3])*2.55,parseFloat(d[4]))}if(d=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(c)){return f(parseInt(d[1],16),parseInt(d[2],16),parseInt(d[3],16))}if(d=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(c)){return f(parseInt(d[1]+d[1],16),parseInt(d[2]+d[2],16),parseInt(d[3]+d[3],16))}var e=b.trim(c).toLowerCase();if(e=="transparent"){return f(255,255,255,0)}else{d=a[e]||[0,0,0];return f(d[0],d[1],d[2])}};var a={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0]}})(jQuery);(function(c){function b(av,ai,J,af){var Q=[],O={colors:["#edc240","#afd8f8","#cb4b4b","#4da74d","#9440ed"],legend:{show:true,noColumns:1,labelFormatter:null,labelBoxBorderColor:"#ccc",container:null,position:"ne",margin:5,backgroundColor:null,backgroundOpacity:0.85},xaxis:{show:null,position:"bottom",mode:null,color:null,tickColor:null,transform:null,inverseTransform:null,min:null,max:null,autoscaleMargin:null,ticks:null,tickFormatter:null,labelWidth:null,labelHeight:null,reserveSpace:null,tickLength:null,alignTicksWithAxis:null,tickDecimals:null,tickSize:null,minTickSize:null,monthNames:null,timeformat:null,twelveHourClock:false},yaxis:{autoscaleMargin:0.02,position:"left"},xaxes:[],yaxes:[],series:{points:{show:false,radius:3,lineWidth:2,fill:true,fillColor:"#ffffff",symbol:"circle"},lines:{lineWidth:2,fill:false,fillColor:null,steps:false},bars:{show:false,lineWidth:2,barWidth:1,fill:true,fillColor:null,align:"left",horizontal:false},shadowSize:3},grid:{show:true,aboveData:false,color:"#545454",backgroundColor:null,borderColor:null,tickColor:null,labelMargin:5,axisMargin:8,borderWidth:2,minBorderMargin:null,markings:null,markingsColor:"#f4f4f4",markingsLineWidth:2,clickable:false,hoverable:false,autoHighlight:true,mouseActiveRadius:10},hooks:{}},az=null,ad=null,y=null,H=null,A=null,p=[],aw=[],q={left:0,right:0,top:0,bottom:0},G=0,I=0,h=0,w=0,ak={processOptions:[],processRawData:[],processDatapoints:[],drawSeries:[],draw:[],bindEvents:[],drawOverlay:[],shutdown:[]},aq=this;aq.setData=aj;aq.setupGrid=t;aq.draw=W;aq.getPlaceholder=function(){return av};aq.getCanvas=function(){return az};aq.getPlotOffset=function(){return q};aq.width=function(){return h};aq.height=function(){return w};aq.offset=function(){var aB=y.offset();aB.left+=q.left;aB.top+=q.top;return aB};aq.getData=function(){return Q};aq.getAxes=function(){var aC={},aB;c.each(p.concat(aw),function(aD,aE){if(aE){aC[aE.direction+(aE.n!=1?aE.n:"")+"axis"]=aE}});return aC};aq.getXAxes=function(){return p};aq.getYAxes=function(){return aw};aq.c2p=C;aq.p2c=ar;aq.getOptions=function(){return O};aq.highlight=x;aq.unhighlight=T;aq.triggerRedrawOverlay=f;aq.pointOffset=function(aB){return{left:parseInt(p[aA(aB,"x")-1].p2c(+aB.x)+q.left),top:parseInt(aw[aA(aB,"y")-1].p2c(+aB.y)+q.top)}};aq.shutdown=ag;aq.resize=function(){B();g(az);g(ad)};aq.hooks=ak;F(aq);Z(J);X();aj(ai);t();W();ah();function an(aD,aB){aB=[aq].concat(aB);for(var aC=0;aC<aD.length;++aC){aD[aC].apply(this,aB)}}function F(){for(var aB=0;aB<af.length;++aB){var aC=af[aB];aC.init(aq);if(aC.options){c.extend(true,O,aC.options)}}}function Z(aC){var aB;c.extend(true,O,aC);if(O.xaxis.color==null){O.xaxis.color=O.grid.color}if(O.yaxis.color==null){O.yaxis.color=O.grid.color}if(O.xaxis.tickColor==null){O.xaxis.tickColor=O.grid.tickColor}if(O.yaxis.tickColor==null){O.yaxis.tickColor=O.grid.tickColor}if(O.grid.borderColor==null){O.grid.borderColor=O.grid.color}if(O.grid.tickColor==null){O.grid.tickColor=c.color.parse(O.grid.color).scale("a",0.22).toString()}for(aB=0;aB<Math.max(1,O.xaxes.length);++aB){O.xaxes[aB]=c.extend(true,{},O.xaxis,O.xaxes[aB])}for(aB=0;aB<Math.max(1,O.yaxes.length);++aB){O.yaxes[aB]=c.extend(true,{},O.yaxis,O.yaxes[aB])}if(O.xaxis.noTicks&&O.xaxis.ticks==null){O.xaxis.ticks=O.xaxis.noTicks}if(O.yaxis.noTicks&&O.yaxis.ticks==null){O.yaxis.ticks=O.yaxis.noTicks}if(O.x2axis){O.xaxes[1]=c.extend(true,{},O.xaxis,O.x2axis);O.xaxes[1].position="top"}if(O.y2axis){O.yaxes[1]=c.extend(true,{},O.yaxis,O.y2axis);O.yaxes[1].position="right"}if(O.grid.coloredAreas){O.grid.markings=O.grid.coloredAreas}if(O.grid.coloredAreasColor){O.grid.markingsColor=O.grid.coloredAreasColor}if(O.lines){c.extend(true,O.series.lines,O.lines)}if(O.points){c.extend(true,O.series.points,O.points)}if(O.bars){c.extend(true,O.series.bars,O.bars)}if(O.shadowSize!=null){O.series.shadowSize=O.shadowSize}for(aB=0;aB<O.xaxes.length;++aB){V(p,aB+1).options=O.xaxes[aB]}for(aB=0;aB<O.yaxes.length;++aB){V(aw,aB+1).options=O.yaxes[aB]}for(var aD in ak){if(O.hooks[aD]&&O.hooks[aD].length){ak[aD]=ak[aD].concat(O.hooks[aD])}}an(ak.processOptions,[O])}function aj(aB){Q=Y(aB);ax();z()}function Y(aE){var aC=[];for(var aB=0;aB<aE.length;++aB){var aD=c.extend(true,{},O.series);if(aE[aB].data!=null){aD.data=aE[aB].data;delete aE[aB].data;c.extend(true,aD,aE[aB]);aE[aB].data=aD.data}else{aD.data=aE[aB]}aC.push(aD)}return aC}function aA(aC,aD){var aB=aC[aD+"axis"];if(typeof aB=="object"){aB=aB.n}if(typeof aB!="number"){aB=1}return aB}function m(){return c.grep(p.concat(aw),function(aB){return aB})}function C(aE){var aC={},aB,aD;for(aB=0;aB<p.length;++aB){aD=p[aB];if(aD&&aD.used){aC["x"+aD.n]=aD.c2p(aE.left)}}for(aB=0;aB<aw.length;++aB){aD=aw[aB];if(aD&&aD.used){aC["y"+aD.n]=aD.c2p(aE.top)}}if(aC.x1!==undefined){aC.x=aC.x1}if(aC.y1!==undefined){aC.y=aC.y1}return aC}function ar(aF){var aD={},aC,aE,aB;for(aC=0;aC<p.length;++aC){aE=p[aC];if(aE&&aE.used){aB="x"+aE.n;if(aF[aB]==null&&aE.n==1){aB="x"}if(aF[aB]!=null){aD.left=aE.p2c(aF[aB]);break}}}for(aC=0;aC<aw.length;++aC){aE=aw[aC];if(aE&&aE.used){aB="y"+aE.n;if(aF[aB]==null&&aE.n==1){aB="y"}if(aF[aB]!=null){aD.top=aE.p2c(aF[aB]);break}}}return aD}function V(aC,aB){if(!aC[aB-1]){aC[aB-1]={n:aB,direction:aC==p?"x":"y",options:c.extend(true,{},aC==p?O.xaxis:O.yaxis)}}return aC[aB-1]}function ax(){var aG;var aM=Q.length,aB=[],aE=[];for(aG=0;aG<Q.length;++aG){var aJ=Q[aG].color;if(aJ!=null){--aM;if(typeof aJ=="number"){aE.push(aJ)}else{aB.push(c.color.parse(Q[aG].color))}}}for(aG=0;aG<aE.length;++aG){aM=Math.max(aM,aE[aG]+1)}var aC=[],aF=0;aG=0;while(aC.length<aM){var aI;if(O.colors.length==aG){aI=c.color.make(100,100,100)}else{aI=c.color.parse(O.colors[aG])}var aD=aF%2==1?-1:1;aI.scale("rgb",1+aD*Math.ceil(aF/2)*0.2);aC.push(aI);++aG;if(aG>=O.colors.length){aG=0;++aF}}var aH=0,aN;for(aG=0;aG<Q.length;++aG){aN=Q[aG];if(aN.color==null){aN.color=aC[aH].toString();++aH}else{if(typeof aN.color=="number"){aN.color=aC[aN.color].toString()}}if(aN.lines.show==null){var aL,aK=true;for(aL in aN){if(aN[aL]&&aN[aL].show){aK=false;break}}if(aK){aN.lines.show=true}}aN.xaxis=V(p,aA(aN,"x"));aN.yaxis=V(aw,aA(aN,"y"))}}function z(){var aO=Number.POSITIVE_INFINITY,aI=Number.NEGATIVE_INFINITY,aB=Number.MAX_VALUE,aU,aS,aR,aN,aD,aJ,aT,aP,aH,aG,aC,a0,aX,aL;function aF(a3,a2,a1){if(a2<a3.datamin&&a2!=-aB){a3.datamin=a2}if(a1>a3.datamax&&a1!=aB){a3.datamax=a1}}c.each(m(),function(a1,a2){a2.datamin=aO;a2.datamax=aI;a2.used=false});for(aU=0;aU<Q.length;++aU){aJ=Q[aU];aJ.datapoints={points:[]};an(ak.processRawData,[aJ,aJ.data,aJ.datapoints])}for(aU=0;aU<Q.length;++aU){aJ=Q[aU];var aZ=aJ.data,aW=aJ.datapoints.format;if(!aW){aW=[];aW.push({x:true,number:true,required:true});aW.push({y:true,number:true,required:true});if(aJ.bars.show||(aJ.lines.show&&aJ.lines.fill)){aW.push({y:true,number:true,required:false,defaultValue:0});if(aJ.bars.horizontal){delete aW[aW.length-1].y;aW[aW.length-1].x=true}}aJ.datapoints.format=aW}if(aJ.datapoints.pointsize!=null){continue}aJ.datapoints.pointsize=aW.length;aP=aJ.datapoints.pointsize;aT=aJ.datapoints.points;insertSteps=aJ.lines.show&&aJ.lines.steps;aJ.xaxis.used=aJ.yaxis.used=true;for(aS=aR=0;aS<aZ.length;++aS,aR+=aP){aL=aZ[aS];var aE=aL==null;if(!aE){for(aN=0;aN<aP;++aN){a0=aL[aN];aX=aW[aN];if(aX){if(aX.number&&a0!=null){a0=+a0;if(isNaN(a0)){a0=null}else{if(a0==Infinity){a0=aB}else{if(a0==-Infinity){a0=-aB}}}}if(a0==null){if(aX.required){aE=true}if(aX.defaultValue!=null){a0=aX.defaultValue}}}aT[aR+aN]=a0}}if(aE){for(aN=0;aN<aP;++aN){a0=aT[aR+aN];if(a0!=null){aX=aW[aN];if(aX.x){aF(aJ.xaxis,a0,a0)}if(aX.y){aF(aJ.yaxis,a0,a0)}}aT[aR+aN]=null}}else{if(insertSteps&&aR>0&&aT[aR-aP]!=null&&aT[aR-aP]!=aT[aR]&&aT[aR-aP+1]!=aT[aR+1]){for(aN=0;aN<aP;++aN){aT[aR+aP+aN]=aT[aR+aN]}aT[aR+1]=aT[aR-aP+1];aR+=aP}}}}for(aU=0;aU<Q.length;++aU){aJ=Q[aU];an(ak.processDatapoints,[aJ,aJ.datapoints])}for(aU=0;aU<Q.length;++aU){aJ=Q[aU];aT=aJ.datapoints.points,aP=aJ.datapoints.pointsize;var aK=aO,aQ=aO,aM=aI,aV=aI;for(aS=0;aS<aT.length;aS+=aP){if(aT[aS]==null){continue}for(aN=0;aN<aP;++aN){a0=aT[aS+aN];aX=aW[aN];if(!aX||a0==aB||a0==-aB){continue}if(aX.x){if(a0<aK){aK=a0}if(a0>aM){aM=a0}}if(aX.y){if(a0<aQ){aQ=a0}if(a0>aV){aV=a0}}}}if(aJ.bars.show){var aY=aJ.bars.align=="left"?0:-aJ.bars.barWidth/2;if(aJ.bars.horizontal){aQ+=aY;aV+=aY+aJ.bars.barWidth}else{aK+=aY;aM+=aY+aJ.bars.barWidth}}aF(aJ.xaxis,aK,aM);aF(aJ.yaxis,aQ,aV)}c.each(m(),function(a1,a2){if(a2.datamin==aO){a2.datamin=null}if(a2.datamax==aI){a2.datamax=null}})}function j(aB,aC){var aD=document.createElement("canvas");aD.className=aC;aD.width=G;aD.height=I;if(!aB){c(aD).css({position:"absolute",left:0,top:0})}c(aD).appendTo(av);if(!aD.getContext){aD=window.G_vmlCanvasManager.initElement(aD)}aD.getContext("2d").save();return aD}function B(){G=av.width();I=av.height();if(G<=0||I<=0){throw"Invalid dimensions for plot, width = "+G+", height = "+I}}function g(aC){if(aC.width!=G){aC.width=G}if(aC.height!=I){aC.height=I}var aB=aC.getContext("2d");aB.restore();aB.save()}function X(){var aC,aB=av.children("canvas.base"),aD=av.children("canvas.overlay");if(aB.length==0||aD==0){av.html("");av.css({padding:0});if(av.css("position")=="static"){av.css("position","relative")}B();az=j(true,"base");ad=j(false,"overlay");aC=false}else{az=aB.get(0);ad=aD.get(0);aC=true}H=az.getContext("2d");A=ad.getContext("2d");y=c([ad,az]);if(aC){av.data("plot").shutdown();aq.resize();A.clearRect(0,0,G,I);y.unbind();av.children().not([az,ad]).remove()}av.data("plot",aq)}function ah(){if(O.grid.hoverable){y.mousemove(aa);y.mouseleave(l)}if(O.grid.clickable){y.click(R)}an(ak.bindEvents,[y])}function ag(){if(M){clearTimeout(M)}y.unbind("mousemove",aa);y.unbind("mouseleave",l);y.unbind("click",R);an(ak.shutdown,[y])}function r(aG){function aC(aH){return aH}var aF,aB,aD=aG.options.transform||aC,aE=aG.options.inverseTransform;if(aG.direction=="x"){aF=aG.scale=h/Math.abs(aD(aG.max)-aD(aG.min));aB=Math.min(aD(aG.max),aD(aG.min))}else{aF=aG.scale=w/Math.abs(aD(aG.max)-aD(aG.min));aF=-aF;aB=Math.max(aD(aG.max),aD(aG.min))}if(aD==aC){aG.p2c=function(aH){return(aH-aB)*aF}}else{aG.p2c=function(aH){return(aD(aH)-aB)*aF}}if(!aE){aG.c2p=function(aH){return aB+aH/aF}}else{aG.c2p=function(aH){return aE(aB+aH/aF)}}}function L(aD){var aB=aD.options,aF,aJ=aD.ticks||[],aI=[],aE,aK=aB.labelWidth,aG=aB.labelHeight,aC;function aH(aM,aL){return c('<div style="position:absolute;top:-10000px;'+aL+'font-size:smaller"><div class="'+aD.direction+"Axis "+aD.direction+aD.n+'Axis">'+aM.join("")+"</div></div>").appendTo(av)}if(aD.direction=="x"){if(aK==null){aK=Math.floor(G/(aJ.length>0?aJ.length:1))}if(aG==null){aI=[];for(aF=0;aF<aJ.length;++aF){aE=aJ[aF].label;if(aE){aI.push('<div class="tickLabel" style="float:left;width:'+aK+'px">'+aE+"</div>")}}if(aI.length>0){aI.push('<div style="clear:left"></div>');aC=aH(aI,"width:10000px;");aG=aC.height();aC.remove()}}}else{if(aK==null||aG==null){for(aF=0;aF<aJ.length;++aF){aE=aJ[aF].label;if(aE){aI.push('<div class="tickLabel">'+aE+"</div>")}}if(aI.length>0){aC=aH(aI,"");if(aK==null){aK=aC.children().width()}if(aG==null){aG=aC.find("div.tickLabel").height()}aC.remove()}}}if(aK==null){aK=0}if(aG==null){aG=0}aD.labelWidth=aK;aD.labelHeight=aG}function au(aD){var aC=aD.labelWidth,aL=aD.labelHeight,aH=aD.options.position,aF=aD.options.tickLength,aG=O.grid.axisMargin,aJ=O.grid.labelMargin,aK=aD.direction=="x"?p:aw,aE;var aB=c.grep(aK,function(aN){return aN&&aN.options.position==aH&&aN.reserveSpace});if(c.inArray(aD,aB)==aB.length-1){aG=0}if(aF==null){aF="full"}var aI=c.grep(aK,function(aN){return aN&&aN.reserveSpace});var aM=c.inArray(aD,aI)==0;if(!aM&&aF=="full"){aF=5}if(!isNaN(+aF)){aJ+=+aF}if(aD.direction=="x"){aL+=aJ;if(aH=="bottom"){q.bottom+=aL+aG;aD.box={top:I-q.bottom,height:aL}}else{aD.box={top:q.top+aG,height:aL};q.top+=aL+aG}}else{aC+=aJ;if(aH=="left"){aD.box={left:q.left+aG,width:aC};q.left+=aC+aG}else{q.right+=aC+aG;aD.box={left:G-q.right,width:aC}}}aD.position=aH;aD.tickLength=aF;aD.box.padding=aJ;aD.innermost=aM}function U(aB){if(aB.direction=="x"){aB.box.left=q.left;aB.box.width=h}else{aB.box.top=q.top;aB.box.height=w}}function t(){var aC,aE=m();c.each(aE,function(aF,aG){aG.show=aG.options.show;if(aG.show==null){aG.show=aG.used}aG.reserveSpace=aG.show||aG.options.reserveSpace;n(aG)});allocatedAxes=c.grep(aE,function(aF){return aF.reserveSpace});q.left=q.right=q.top=q.bottom=0;if(O.grid.show){c.each(allocatedAxes,function(aF,aG){S(aG);P(aG);ap(aG,aG.ticks);L(aG)});for(aC=allocatedAxes.length-1;aC>=0;--aC){au(allocatedAxes[aC])}var aD=O.grid.minBorderMargin;if(aD==null){aD=0;for(aC=0;aC<Q.length;++aC){aD=Math.max(aD,Q[aC].points.radius+Q[aC].points.lineWidth/2)}}for(var aB in q){q[aB]+=O.grid.borderWidth;q[aB]=Math.max(aD,q[aB])}}h=G-q.left-q.right;w=I-q.bottom-q.top;c.each(aE,function(aF,aG){r(aG)});if(O.grid.show){c.each(allocatedAxes,function(aF,aG){U(aG)});k()}o()}function n(aE){var aF=aE.options,aD=+(aF.min!=null?aF.min:aE.datamin),aB=+(aF.max!=null?aF.max:aE.datamax),aH=aB-aD;if(aH==0){var aC=aB==0?1:0.01;if(aF.min==null){aD-=aC}if(aF.max==null||aF.min!=null){aB+=aC}}else{var aG=aF.autoscaleMargin;if(aG!=null){if(aF.min==null){aD-=aH*aG;if(aD<0&&aE.datamin!=null&&aE.datamin>=0){aD=0}}if(aF.max==null){aB+=aH*aG;if(aB>0&&aE.datamax!=null&&aE.datamax<=0){aB=0}}}}aE.min=aD;aE.max=aB}function S(aG){var aM=aG.options;var aH;if(typeof aM.ticks=="number"&&aM.ticks>0){aH=aM.ticks}else{aH=0.3*Math.sqrt(aG.direction=="x"?G:I)}var aT=(aG.max-aG.min)/aH,aO,aB,aN,aR,aS,aQ,aI;if(aM.mode=="time"){var aJ={second:1000,minute:60*1000,hour:60*60*1000,day:24*60*60*1000,month:30*24*60*60*1000,year:365.2425*24*60*60*1000};var aK=[[1,"second"],[2,"second"],[5,"second"],[10,"second"],[30,"second"],[1,"minute"],[2,"minute"],[5,"minute"],[10,"minute"],[30,"minute"],[1,"hour"],[2,"hour"],[4,"hour"],[8,"hour"],[12,"hour"],[1,"day"],[2,"day"],[3,"day"],[0.25,"month"],[0.5,"month"],[1,"month"],[2,"month"],[3,"month"],[6,"month"],[1,"year"]];var aC=0;if(aM.minTickSize!=null){if(typeof aM.tickSize=="number"){aC=aM.tickSize}else{aC=aM.minTickSize[0]*aJ[aM.minTickSize[1]]}}for(var aS=0;aS<aK.length-1;++aS){if(aT<(aK[aS][0]*aJ[aK[aS][1]]+aK[aS+1][0]*aJ[aK[aS+1][1]])/2&&aK[aS][0]*aJ[aK[aS][1]]>=aC){break}}aO=aK[aS][0];aN=aK[aS][1];if(aN=="year"){aQ=Math.pow(10,Math.floor(Math.log(aT/aJ.year)/Math.LN10));aI=(aT/aJ.year)/aQ;if(aI<1.5){aO=1}else{if(aI<3){aO=2}else{if(aI<7.5){aO=5}else{aO=10}}}aO*=aQ}aG.tickSize=aM.tickSize||[aO,aN];aB=function(aX){var a2=[],a0=aX.tickSize[0],a3=aX.tickSize[1],a1=new Date(aX.min);var aW=a0*aJ[a3];if(a3=="second"){a1.setUTCSeconds(a(a1.getUTCSeconds(),a0))}if(a3=="minute"){a1.setUTCMinutes(a(a1.getUTCMinutes(),a0))}if(a3=="hour"){a1.setUTCHours(a(a1.getUTCHours(),a0))}if(a3=="month"){a1.setUTCMonth(a(a1.getUTCMonth(),a0))}if(a3=="year"){a1.setUTCFullYear(a(a1.getUTCFullYear(),a0))}a1.setUTCMilliseconds(0);if(aW>=aJ.minute){a1.setUTCSeconds(0)}if(aW>=aJ.hour){a1.setUTCMinutes(0)}if(aW>=aJ.day){a1.setUTCHours(0)}if(aW>=aJ.day*4){a1.setUTCDate(1)}if(aW>=aJ.year){a1.setUTCMonth(0)}var a5=0,a4=Number.NaN,aY;do{aY=a4;a4=a1.getTime();a2.push(a4);if(a3=="month"){if(a0<1){a1.setUTCDate(1);var aV=a1.getTime();a1.setUTCMonth(a1.getUTCMonth()+1);var aZ=a1.getTime();a1.setTime(a4+a5*aJ.hour+(aZ-aV)*a0);a5=a1.getUTCHours();a1.setUTCHours(0)}else{a1.setUTCMonth(a1.getUTCMonth()+a0)}}else{if(a3=="year"){a1.setUTCFullYear(a1.getUTCFullYear()+a0)}else{a1.setTime(a4+aW)}}}while(a4<aX.max&&a4!=aY);return a2};aR=function(aV,aY){var a0=new Date(aV);if(aM.timeformat!=null){return c.plot.formatDate(a0,aM.timeformat,aM.monthNames)}var aW=aY.tickSize[0]*aJ[aY.tickSize[1]];var aX=aY.max-aY.min;var aZ=(aM.twelveHourClock)?" %p":"";if(aW<aJ.minute){fmt="%h:%M:%S"+aZ}else{if(aW<aJ.day){if(aX<2*aJ.day){fmt="%h:%M"+aZ}else{fmt="%b %d %h:%M"+aZ}}else{if(aW<aJ.month){fmt="%b %d"}else{if(aW<aJ.year){if(aX<aJ.year){fmt="%b"}else{fmt="%b %y"}}else{fmt="%y"}}}}return c.plot.formatDate(a0,fmt,aM.monthNames)}}else{var aU=aM.tickDecimals;var aP=-Math.floor(Math.log(aT)/Math.LN10);if(aU!=null&&aP>aU){aP=aU}aQ=Math.pow(10,-aP);aI=aT/aQ;if(aI<1.5){aO=1}else{if(aI<3){aO=2;if(aI>2.25&&(aU==null||aP+1<=aU)){aO=2.5;++aP}}else{if(aI<7.5){aO=5}else{aO=10}}}aO*=aQ;if(aM.minTickSize!=null&&aO<aM.minTickSize){aO=aM.minTickSize}aG.tickDecimals=Math.max(0,aU!=null?aU:aP);aG.tickSize=aM.tickSize||aO;aB=function(aX){var aZ=[];var a0=a(aX.min,aX.tickSize),aW=0,aV=Number.NaN,aY;do{aY=aV;aV=a0+aW*aX.tickSize;aZ.push(aV);++aW}while(aV<aX.max&&aV!=aY);return aZ};aR=function(aV,aW){return aV.toFixed(aW.tickDecimals)}}if(aM.alignTicksWithAxis!=null){var aF=(aG.direction=="x"?p:aw)[aM.alignTicksWithAxis-1];if(aF&&aF.used&&aF!=aG){var aL=aB(aG);if(aL.length>0){if(aM.min==null){aG.min=Math.min(aG.min,aL[0])}if(aM.max==null&&aL.length>1){aG.max=Math.max(aG.max,aL[aL.length-1])}}aB=function(aX){var aY=[],aV,aW;for(aW=0;aW<aF.ticks.length;++aW){aV=(aF.ticks[aW].v-aF.min)/(aF.max-aF.min);aV=aX.min+aV*(aX.max-aX.min);aY.push(aV)}return aY};if(aG.mode!="time"&&aM.tickDecimals==null){var aE=Math.max(0,-Math.floor(Math.log(aT)/Math.LN10)+1),aD=aB(aG);if(!(aD.length>1&&/\..*0$/.test((aD[1]-aD[0]).toFixed(aE)))){aG.tickDecimals=aE}}}}aG.tickGenerator=aB;if(c.isFunction(aM.tickFormatter)){aG.tickFormatter=function(aV,aW){return""+aM.tickFormatter(aV,aW)}}else{aG.tickFormatter=aR}}function P(aF){var aH=aF.options.ticks,aG=[];if(aH==null||(typeof aH=="number"&&aH>0)){aG=aF.tickGenerator(aF)}else{if(aH){if(c.isFunction(aH)){aG=aH({min:aF.min,max:aF.max})}else{aG=aH}}}var aE,aB;aF.ticks=[];for(aE=0;aE<aG.length;++aE){var aC=null;var aD=aG[aE];if(typeof aD=="object"){aB=+aD[0];if(aD.length>1){aC=aD[1]}}else{aB=+aD}if(aC==null){aC=aF.tickFormatter(aB,aF)}if(!isNaN(aB)){aF.ticks.push({v:aB,label:aC})}}}function ap(aB,aC){if(aB.options.autoscaleMargin&&aC.length>0){if(aB.options.min==null){aB.min=Math.min(aB.min,aC[0].v)}if(aB.options.max==null&&aC.length>1){aB.max=Math.max(aB.max,aC[aC.length-1].v)}}}function W(){H.clearRect(0,0,G,I);var aC=O.grid;if(aC.show&&aC.backgroundColor){N()}if(aC.show&&!aC.aboveData){ac()}for(var aB=0;aB<Q.length;++aB){an(ak.drawSeries,[H,Q[aB]]);d(Q[aB])}an(ak.draw,[H]);if(aC.show&&aC.aboveData){ac()}}function D(aB,aI){var aE,aH,aG,aD,aF=m();for(i=0;i<aF.length;++i){aE=aF[i];if(aE.direction==aI){aD=aI+aE.n+"axis";if(!aB[aD]&&aE.n==1){aD=aI+"axis"}if(aB[aD]){aH=aB[aD].from;aG=aB[aD].to;break}}}if(!aB[aD]){aE=aI=="x"?p[0]:aw[0];aH=aB[aI+"1"];aG=aB[aI+"2"]}if(aH!=null&&aG!=null&&aH>aG){var aC=aH;aH=aG;aG=aC}return{from:aH,to:aG,axis:aE}}function N(){H.save();H.translate(q.left,q.top);H.fillStyle=am(O.grid.backgroundColor,w,0,"rgba(255, 255, 255, 0)");H.fillRect(0,0,h,w);H.restore()}function ac(){var aF;H.save();H.translate(q.left,q.top);var aH=O.grid.markings;if(aH){if(c.isFunction(aH)){var aK=aq.getAxes();aK.xmin=aK.xaxis.min;aK.xmax=aK.xaxis.max;aK.ymin=aK.yaxis.min;aK.ymax=aK.yaxis.max;aH=aH(aK)}for(aF=0;aF<aH.length;++aF){var aD=aH[aF],aC=D(aD,"x"),aI=D(aD,"y");if(aC.from==null){aC.from=aC.axis.min}if(aC.to==null){aC.to=aC.axis.max}if(aI.from==null){aI.from=aI.axis.min}if(aI.to==null){aI.to=aI.axis.max}if(aC.to<aC.axis.min||aC.from>aC.axis.max||aI.to<aI.axis.min||aI.from>aI.axis.max){continue}aC.from=Math.max(aC.from,aC.axis.min);aC.to=Math.min(aC.to,aC.axis.max);aI.from=Math.max(aI.from,aI.axis.min);aI.to=Math.min(aI.to,aI.axis.max);if(aC.from==aC.to&&aI.from==aI.to){continue}aC.from=aC.axis.p2c(aC.from);aC.to=aC.axis.p2c(aC.to);aI.from=aI.axis.p2c(aI.from);aI.to=aI.axis.p2c(aI.to);if(aC.from==aC.to||aI.from==aI.to){H.beginPath();H.strokeStyle=aD.color||O.grid.markingsColor;H.lineWidth=aD.lineWidth||O.grid.markingsLineWidth;H.moveTo(aC.from,aI.from);H.lineTo(aC.to,aI.to);H.stroke()}else{H.fillStyle=aD.color||O.grid.markingsColor;H.fillRect(aC.from,aI.to,aC.to-aC.from,aI.from-aI.to)}}}var aK=m(),aM=O.grid.borderWidth;for(var aE=0;aE<aK.length;++aE){var aB=aK[aE],aG=aB.box,aQ=aB.tickLength,aN,aL,aP,aJ;if(!aB.show||aB.ticks.length==0){continue}H.strokeStyle=aB.options.tickColor||c.color.parse(aB.options.color).scale("a",0.22).toString();H.lineWidth=1;if(aB.direction=="x"){aN=0;if(aQ=="full"){aL=(aB.position=="top"?0:w)}else{aL=aG.top-q.top+(aB.position=="top"?aG.height:0)}}else{aL=0;if(aQ=="full"){aN=(aB.position=="left"?0:h)}else{aN=aG.left-q.left+(aB.position=="left"?aG.width:0)}}if(!aB.innermost){H.beginPath();aP=aJ=0;if(aB.direction=="x"){aP=h}else{aJ=w}if(H.lineWidth==1){aN=Math.floor(aN)+0.5;aL=Math.floor(aL)+0.5}H.moveTo(aN,aL);H.lineTo(aN+aP,aL+aJ);H.stroke()}H.beginPath();for(aF=0;aF<aB.ticks.length;++aF){var aO=aB.ticks[aF].v;aP=aJ=0;if(aO<aB.min||aO>aB.max||(aQ=="full"&&aM>0&&(aO==aB.min||aO==aB.max))){continue}if(aB.direction=="x"){aN=aB.p2c(aO);aJ=aQ=="full"?-w:aQ;if(aB.position=="top"){aJ=-aJ}}else{aL=aB.p2c(aO);aP=aQ=="full"?-h:aQ;if(aB.position=="left"){aP=-aP}}if(H.lineWidth==1){if(aB.direction=="x"){aN=Math.floor(aN)+0.5}else{aL=Math.floor(aL)+0.5}}H.moveTo(aN,aL);H.lineTo(aN+aP,aL+aJ)}H.stroke()}if(aM){H.lineWidth=aM;H.strokeStyle=O.grid.borderColor;H.strokeRect(-aM/2,-aM/2,h+aM,w+aM)}H.restore()}function k(){av.find(".tickLabels").remove();var aG=['<div class="tickLabels" style="font-size:smaller">'];var aJ=m();for(var aD=0;aD<aJ.length;++aD){var aC=aJ[aD],aF=aC.box;if(!aC.show){continue}aG.push('<div class="'+aC.direction+"Axis "+aC.direction+aC.n+'Axis" style="color:'+aC.options.color+'">');for(var aE=0;aE<aC.ticks.length;++aE){var aH=aC.ticks[aE];if(!aH.label||aH.v<aC.min||aH.v>aC.max){continue}var aK={},aI;if(aC.direction=="x"){aI="center";aK.left=Math.round(q.left+aC.p2c(aH.v)-aC.labelWidth/2);if(aC.position=="bottom"){aK.top=aF.top+aF.padding}else{aK.bottom=I-(aF.top+aF.height-aF.padding)}}else{aK.top=Math.round(q.top+aC.p2c(aH.v)-aC.labelHeight/2);if(aC.position=="left"){aK.right=G-(aF.left+aF.width-aF.padding);aI="right"}else{aK.left=aF.left+aF.padding;aI="left"}}aK.width=aC.labelWidth;var aB=["position:absolute","text-align:"+aI];for(var aL in aK){aB.push(aL+":"+aK[aL]+"px")}aG.push('<div class="tickLabel" style="'+aB.join(";")+'">'+aH.label+"</div>")}aG.push("</div>")}aG.push("</div>");av.append(aG.join(""))}function d(aB){if(aB.lines.show){at(aB)}if(aB.bars.show){e(aB)}if(aB.points.show){ao(aB)}}function at(aE){function aD(aP,aQ,aI,aU,aT){var aV=aP.points,aJ=aP.pointsize,aN=null,aM=null;H.beginPath();for(var aO=aJ;aO<aV.length;aO+=aJ){var aL=aV[aO-aJ],aS=aV[aO-aJ+1],aK=aV[aO],aR=aV[aO+1];if(aL==null||aK==null){continue}if(aS<=aR&&aS<aT.min){if(aR<aT.min){continue}aL=(aT.min-aS)/(aR-aS)*(aK-aL)+aL;aS=aT.min}else{if(aR<=aS&&aR<aT.min){if(aS<aT.min){continue}aK=(aT.min-aS)/(aR-aS)*(aK-aL)+aL;aR=aT.min}}if(aS>=aR&&aS>aT.max){if(aR>aT.max){continue}aL=(aT.max-aS)/(aR-aS)*(aK-aL)+aL;aS=aT.max}else{if(aR>=aS&&aR>aT.max){if(aS>aT.max){continue}aK=(aT.max-aS)/(aR-aS)*(aK-aL)+aL;aR=aT.max}}if(aL<=aK&&aL<aU.min){if(aK<aU.min){continue}aS=(aU.min-aL)/(aK-aL)*(aR-aS)+aS;aL=aU.min}else{if(aK<=aL&&aK<aU.min){if(aL<aU.min){continue}aR=(aU.min-aL)/(aK-aL)*(aR-aS)+aS;aK=aU.min}}if(aL>=aK&&aL>aU.max){if(aK>aU.max){continue}aS=(aU.max-aL)/(aK-aL)*(aR-aS)+aS;aL=aU.max}else{if(aK>=aL&&aK>aU.max){if(aL>aU.max){continue}aR=(aU.max-aL)/(aK-aL)*(aR-aS)+aS;aK=aU.max}}if(aL!=aN||aS!=aM){H.moveTo(aU.p2c(aL)+aQ,aT.p2c(aS)+aI)}aN=aK;aM=aR;H.lineTo(aU.p2c(aK)+aQ,aT.p2c(aR)+aI)}H.stroke()}function aF(aI,aQ,aP){var aW=aI.points,aV=aI.pointsize,aN=Math.min(Math.max(0,aP.min),aP.max),aX=0,aU,aT=false,aM=1,aL=0,aR=0;while(true){if(aV>0&&aX>aW.length+aV){break}aX+=aV;var aZ=aW[aX-aV],aK=aW[aX-aV+aM],aY=aW[aX],aJ=aW[aX+aM];if(aT){if(aV>0&&aZ!=null&&aY==null){aR=aX;aV=-aV;aM=2;continue}if(aV<0&&aX==aL+aV){H.fill();aT=false;aV=-aV;aM=1;aX=aL=aR+aV;continue}}if(aZ==null||aY==null){continue}if(aZ<=aY&&aZ<aQ.min){if(aY<aQ.min){continue}aK=(aQ.min-aZ)/(aY-aZ)*(aJ-aK)+aK;aZ=aQ.min}else{if(aY<=aZ&&aY<aQ.min){if(aZ<aQ.min){continue}aJ=(aQ.min-aZ)/(aY-aZ)*(aJ-aK)+aK;aY=aQ.min}}if(aZ>=aY&&aZ>aQ.max){if(aY>aQ.max){continue}aK=(aQ.max-aZ)/(aY-aZ)*(aJ-aK)+aK;aZ=aQ.max}else{if(aY>=aZ&&aY>aQ.max){if(aZ>aQ.max){continue}aJ=(aQ.max-aZ)/(aY-aZ)*(aJ-aK)+aK;aY=aQ.max}}if(!aT){H.beginPath();H.moveTo(aQ.p2c(aZ),aP.p2c(aN));aT=true}if(aK>=aP.max&&aJ>=aP.max){H.lineTo(aQ.p2c(aZ),aP.p2c(aP.max));H.lineTo(aQ.p2c(aY),aP.p2c(aP.max));continue}else{if(aK<=aP.min&&aJ<=aP.min){H.lineTo(aQ.p2c(aZ),aP.p2c(aP.min));H.lineTo(aQ.p2c(aY),aP.p2c(aP.min));continue}}var aO=aZ,aS=aY;if(aK<=aJ&&aK<aP.min&&aJ>=aP.min){aZ=(aP.min-aK)/(aJ-aK)*(aY-aZ)+aZ;aK=aP.min}else{if(aJ<=aK&&aJ<aP.min&&aK>=aP.min){aY=(aP.min-aK)/(aJ-aK)*(aY-aZ)+aZ;aJ=aP.min}}if(aK>=aJ&&aK>aP.max&&aJ<=aP.max){aZ=(aP.max-aK)/(aJ-aK)*(aY-aZ)+aZ;aK=aP.max}else{if(aJ>=aK&&aJ>aP.max&&aK<=aP.max){aY=(aP.max-aK)/(aJ-aK)*(aY-aZ)+aZ;aJ=aP.max}}if(aZ!=aO){H.lineTo(aQ.p2c(aO),aP.p2c(aK))}H.lineTo(aQ.p2c(aZ),aP.p2c(aK));H.lineTo(aQ.p2c(aY),aP.p2c(aJ));if(aY!=aS){H.lineTo(aQ.p2c(aY),aP.p2c(aJ));H.lineTo(aQ.p2c(aS),aP.p2c(aJ))}}}H.save();H.translate(q.left,q.top);H.lineJoin="round";var aG=aE.lines.lineWidth,aB=aE.shadowSize;if(aG>0&&aB>0){H.lineWidth=aB;H.strokeStyle="rgba(0,0,0,0.1)";var aH=Math.PI/18;aD(aE.datapoints,Math.sin(aH)*(aG/2+aB/2),Math.cos(aH)*(aG/2+aB/2),aE.xaxis,aE.yaxis);H.lineWidth=aB/2;aD(aE.datapoints,Math.sin(aH)*(aG/2+aB/4),Math.cos(aH)*(aG/2+aB/4),aE.xaxis,aE.yaxis)}H.lineWidth=aG;H.strokeStyle=aE.color;var aC=ae(aE.lines,aE.color,0,w);if(aC){H.fillStyle=aC;aF(aE.datapoints,aE.xaxis,aE.yaxis)}if(aG>0){aD(aE.datapoints,0,0,aE.xaxis,aE.yaxis)}H.restore()}function ao(aE){function aH(aN,aM,aU,aK,aS,aT,aQ,aJ){var aR=aN.points,aI=aN.pointsize;for(var aL=0;aL<aR.length;aL+=aI){var aP=aR[aL],aO=aR[aL+1];if(aP==null||aP<aT.min||aP>aT.max||aO<aQ.min||aO>aQ.max){continue}H.beginPath();aP=aT.p2c(aP);aO=aQ.p2c(aO)+aK;if(aJ=="circle"){H.arc(aP,aO,aM,0,aS?Math.PI:Math.PI*2,false)}else{aJ(H,aP,aO,aM,aS)}H.closePath();if(aU){H.fillStyle=aU;H.fill()}H.stroke()}}H.save();H.translate(q.left,q.top);var aG=aE.points.lineWidth,aC=aE.shadowSize,aB=aE.points.radius,aF=aE.points.symbol;if(aG>0&&aC>0){var aD=aC/2;H.lineWidth=aD;H.strokeStyle="rgba(0,0,0,0.1)";aH(aE.datapoints,aB,null,aD+aD/2,true,aE.xaxis,aE.yaxis,aF);H.strokeStyle="rgba(0,0,0,0.2)";aH(aE.datapoints,aB,null,aD/2,true,aE.xaxis,aE.yaxis,aF)}H.lineWidth=aG;H.strokeStyle=aE.color;aH(aE.datapoints,aB,ae(aE.points,aE.color),0,false,aE.xaxis,aE.yaxis,aF);H.restore()}function E(aN,aM,aV,aI,aQ,aF,aD,aL,aK,aU,aR,aC){var aE,aT,aJ,aP,aG,aB,aO,aH,aS;if(aR){aH=aB=aO=true;aG=false;aE=aV;aT=aN;aP=aM+aI;aJ=aM+aQ;if(aT<aE){aS=aT;aT=aE;aE=aS;aG=true;aB=false}}else{aG=aB=aO=true;aH=false;aE=aN+aI;aT=aN+aQ;aJ=aV;aP=aM;if(aP<aJ){aS=aP;aP=aJ;aJ=aS;aH=true;aO=false}}if(aT<aL.min||aE>aL.max||aP<aK.min||aJ>aK.max){return}if(aE<aL.min){aE=aL.min;aG=false}if(aT>aL.max){aT=aL.max;aB=false}if(aJ<aK.min){aJ=aK.min;aH=false}if(aP>aK.max){aP=aK.max;aO=false}aE=aL.p2c(aE);aJ=aK.p2c(aJ);aT=aL.p2c(aT);aP=aK.p2c(aP);if(aD){aU.beginPath();aU.moveTo(aE,aJ);aU.lineTo(aE,aP);aU.lineTo(aT,aP);aU.lineTo(aT,aJ);aU.fillStyle=aD(aJ,aP);aU.fill()}if(aC>0&&(aG||aB||aO||aH)){aU.beginPath();aU.moveTo(aE,aJ+aF);if(aG){aU.lineTo(aE,aP+aF)}else{aU.moveTo(aE,aP+aF)}if(aO){aU.lineTo(aT,aP+aF)}else{aU.moveTo(aT,aP+aF)}if(aB){aU.lineTo(aT,aJ+aF)}else{aU.moveTo(aT,aJ+aF)}if(aH){aU.lineTo(aE,aJ+aF)}else{aU.moveTo(aE,aJ+aF)}aU.stroke()}}function e(aD){function aC(aJ,aI,aL,aG,aK,aN,aM){var aO=aJ.points,aF=aJ.pointsize;for(var aH=0;aH<aO.length;aH+=aF){if(aO[aH]==null){continue}E(aO[aH],aO[aH+1],aO[aH+2],aI,aL,aG,aK,aN,aM,H,aD.bars.horizontal,aD.bars.lineWidth)}}H.save();H.translate(q.left,q.top);H.lineWidth=aD.bars.lineWidth;H.strokeStyle=aD.color;var aB=aD.bars.align=="left"?0:-aD.bars.barWidth/2;var aE=aD.bars.fill?function(aF,aG){return ae(aD.bars,aD.color,aF,aG)}:null;aC(aD.datapoints,aB,aB+aD.bars.barWidth,0,aE,aD.xaxis,aD.yaxis);H.restore()}function ae(aD,aB,aC,aF){var aE=aD.fill;if(!aE){return null}if(aD.fillColor){return am(aD.fillColor,aC,aF,aB)}var aG=c.color.parse(aB);aG.a=typeof aE=="number"?aE:0.4;aG.normalize();return aG.toString()}function o(){av.find(".legend").remove();if(!O.legend.show){return}var aH=[],aF=false,aN=O.legend.labelFormatter,aM,aJ;for(var aE=0;aE<Q.length;++aE){aM=Q[aE];aJ=aM.label;if(!aJ){continue}if(aE%O.legend.noColumns==0){if(aF){aH.push("</tr>")}aH.push("<tr>");aF=true}if(aN){aJ=aN(aJ,aM)}aH.push('<td class="legendColorBox"><div style="border:1px solid '+O.legend.labelBoxBorderColor+';padding:1px"><div style="width:4px;height:0;border:5px solid '+aM.color+';overflow:hidden"></div></div></td><td class="legendLabel">'+aJ+"</td>")}if(aF){aH.push("</tr>")}if(aH.length==0){return}var aL='<table style="font-size:smaller;color:'+O.grid.color+'">'+aH.join("")+"</table>";if(O.legend.container!=null){c(O.legend.container).html(aL)}else{var aI="",aC=O.legend.position,aD=O.legend.margin;if(aD[0]==null){aD=[aD,aD]}if(aC.charAt(0)=="n"){aI+="top:"+(aD[1]+q.top)+"px;"}else{if(aC.charAt(0)=="s"){aI+="bottom:"+(aD[1]+q.bottom)+"px;"}}if(aC.charAt(1)=="e"){aI+="right:"+(aD[0]+q.right)+"px;"}else{if(aC.charAt(1)=="w"){aI+="left:"+(aD[0]+q.left)+"px;"}}var aK=c('<div class="legend">'+aL.replace('style="','style="position:absolute;'+aI+";")+"</div>").appendTo(av);if(O.legend.backgroundOpacity!=0){var aG=O.legend.backgroundColor;if(aG==null){aG=O.grid.backgroundColor;if(aG&&typeof aG=="string"){aG=c.color.parse(aG)}else{aG=c.color.extract(aK,"background-color")}aG.a=1;aG=aG.toString()}var aB=aK.children();c('<div style="position:absolute;width:'+aB.width()+"px;height:"+aB.height()+"px;"+aI+"background-color:"+aG+';"> </div>').prependTo(aK).css("opacity",O.legend.backgroundOpacity)}}}var ab=[],M=null;function K(aI,aG,aD){var aO=O.grid.mouseActiveRadius,a0=aO*aO+1,aY=null,aR=false,aW,aU;for(aW=Q.length-1;aW>=0;--aW){if(!aD(Q[aW])){continue}var aP=Q[aW],aH=aP.xaxis,aF=aP.yaxis,aV=aP.datapoints.points,aT=aP.datapoints.pointsize,aQ=aH.c2p(aI),aN=aF.c2p(aG),aC=aO/aH.scale,aB=aO/aF.scale;if(aH.options.inverseTransform){aC=Number.MAX_VALUE}if(aF.options.inverseTransform){aB=Number.MAX_VALUE}if(aP.lines.show||aP.points.show){for(aU=0;aU<aV.length;aU+=aT){var aK=aV[aU],aJ=aV[aU+1];if(aK==null){continue}if(aK-aQ>aC||aK-aQ<-aC||aJ-aN>aB||aJ-aN<-aB){continue}var aM=Math.abs(aH.p2c(aK)-aI),aL=Math.abs(aF.p2c(aJ)-aG),aS=aM*aM+aL*aL;if(aS<a0){a0=aS;aY=[aW,aU/aT]}}}if(aP.bars.show&&!aY){var aE=aP.bars.align=="left"?0:-aP.bars.barWidth/2,aX=aE+aP.bars.barWidth;for(aU=0;aU<aV.length;aU+=aT){var aK=aV[aU],aJ=aV[aU+1],aZ=aV[aU+2];if(aK==null){continue}if(Q[aW].bars.horizontal?(aQ<=Math.max(aZ,aK)&&aQ>=Math.min(aZ,aK)&&aN>=aJ+aE&&aN<=aJ+aX):(aQ>=aK+aE&&aQ<=aK+aX&&aN>=Math.min(aZ,aJ)&&aN<=Math.max(aZ,aJ))){aY=[aW,aU/aT]}}}}if(aY){aW=aY[0];aU=aY[1];aT=Q[aW].datapoints.pointsize;return{datapoint:Q[aW].datapoints.points.slice(aU*aT,(aU+1)*aT),dataIndex:aU,series:Q[aW],seriesIndex:aW}}return null}function aa(aB){if(O.grid.hoverable){u("plothover",aB,function(aC){return aC.hoverable!=false})}}function l(aB){if(O.grid.hoverable){u("plothover",aB,function(aC){return false})}}function R(aB){u("plotclick",aB,function(aC){return aC.clickable!=false})}function u(aC,aB,aD){var aE=y.offset(),aH=aB.pageX-aE.left-q.left,aF=aB.pageY-aE.top-q.top,aJ=C({left:aH,top:aF});aJ.pageX=aB.pageX;aJ.pageY=aB.pageY;var aK=K(aH,aF,aD);if(aK){aK.pageX=parseInt(aK.series.xaxis.p2c(aK.datapoint[0])+aE.left+q.left);aK.pageY=parseInt(aK.series.yaxis.p2c(aK.datapoint[1])+aE.top+q.top)}if(O.grid.autoHighlight){for(var aG=0;aG<ab.length;++aG){var aI=ab[aG];if(aI.auto==aC&&!(aK&&aI.series==aK.series&&aI.point[0]==aK.datapoint[0]&&aI.point[1]==aK.datapoint[1])){T(aI.series,aI.point)}}if(aK){x(aK.series,aK.datapoint,aC)}}av.trigger(aC,[aJ,aK])}function f(){if(!M){M=setTimeout(s,30)}}function s(){M=null;A.save();A.clearRect(0,0,G,I);A.translate(q.left,q.top);var aC,aB;for(aC=0;aC<ab.length;++aC){aB=ab[aC];if(aB.series.bars.show){v(aB.series,aB.point)}else{ay(aB.series,aB.point)}}A.restore();an(ak.drawOverlay,[A])}function x(aD,aB,aF){if(typeof aD=="number"){aD=Q[aD]}if(typeof aB=="number"){var aE=aD.datapoints.pointsize;aB=aD.datapoints.points.slice(aE*aB,aE*(aB+1))}var aC=al(aD,aB);if(aC==-1){ab.push({series:aD,point:aB,auto:aF});f()}else{if(!aF){ab[aC].auto=false}}}function T(aD,aB){if(aD==null&&aB==null){ab=[];f()}if(typeof aD=="number"){aD=Q[aD]}if(typeof aB=="number"){aB=aD.data[aB]}var aC=al(aD,aB);if(aC!=-1){ab.splice(aC,1);f()}}function al(aD,aE){for(var aB=0;aB<ab.length;++aB){var aC=ab[aB];if(aC.series==aD&&aC.point[0]==aE[0]&&aC.point[1]==aE[1]){return aB}}return -1}function ay(aE,aD){var aC=aD[0],aI=aD[1],aH=aE.xaxis,aG=aE.yaxis;if(aC<aH.min||aC>aH.max||aI<aG.min||aI>aG.max){return}var aF=aE.points.radius+aE.points.lineWidth/2;A.lineWidth=aF;A.strokeStyle=c.color.parse(aE.color).scale("a",0.5).toString();var aB=1.5*aF,aC=aH.p2c(aC),aI=aG.p2c(aI);A.beginPath();if(aE.points.symbol=="circle"){A.arc(aC,aI,aB,0,2*Math.PI,false)}else{aE.points.symbol(A,aC,aI,aB,false)}A.closePath();A.stroke()}function v(aE,aB){A.lineWidth=aE.bars.lineWidth;A.strokeStyle=c.color.parse(aE.color).scale("a",0.5).toString();var aD=c.color.parse(aE.color).scale("a",0.5).toString();var aC=aE.bars.align=="left"?0:-aE.bars.barWidth/2;E(aB[0],aB[1],aB[2]||0,aC,aC+aE.bars.barWidth,0,function(){return aD},aE.xaxis,aE.yaxis,A,aE.bars.horizontal,aE.bars.lineWidth)}function am(aJ,aB,aH,aC){if(typeof aJ=="string"){return aJ}else{var aI=H.createLinearGradient(0,aH,0,aB);for(var aE=0,aD=aJ.colors.length;aE<aD;++aE){var aF=aJ.colors[aE];if(typeof aF!="string"){var aG=c.color.parse(aC);if(aF.brightness!=null){aG=aG.scale("rgb",aF.brightness)}if(aF.opacity!=null){aG.a*=aF.opacity}aF=aG.toString()}aI.addColorStop(aE/(aD-1),aF)}return aI}}}c.plot=function(g,e,d){var f=new b(c(g),e,d,c.plot.plugins);return f};c.plot.version="0.7";c.plot.plugins=[];c.plot.formatDate=function(l,f,h){var o=function(d){d=""+d;return d.length==1?"0"+d:d};var e=[];var p=false,j=false;var n=l.getUTCHours();var k=n<12;if(h==null){h=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]}if(f.search(/%p|%P/)!=-1){if(n>12){n=n-12}else{if(n==0){n=12}}}for(var g=0;g<f.length;++g){var m=f.charAt(g);if(p){switch(m){case"h":m=""+n;break;case"H":m=o(n);break;case"M":m=o(l.getUTCMinutes());break;case"S":m=o(l.getUTCSeconds());break;case"d":m=""+l.getUTCDate();break;case"m":m=""+(l.getUTCMonth()+1);break;case"y":m=""+l.getUTCFullYear();break;case"b":m=""+h[l.getUTCMonth()];break;case"p":m=(k)?("am"):("pm");break;case"P":m=(k)?("AM"):("PM");break;case"0":m="";j=true;break}if(m&&j){m=o(m);j=false}e.push(m);if(!j){p=false}}else{if(m=="%"){p=true}else{e.push(m)}}}return e.join("")};function a(e,d){return d*Math.floor(e/d)}})(jQuery);
− static/jquery.js
@@ -1,9807 +0,0 @@-/*!- * jQuery JavaScript Library v1.10.1- * http://jquery.com/- *- * Includes Sizzle.js- * http://sizzlejs.com/- *- * Copyright 2005, 2013 jQuery Foundation, Inc. and other contributors- * Released under the MIT license- * http://jquery.org/license- *- * Date: 2013-05-30T21:49Z- */-(function( window, undefined ) {--// Can't do this because several apps including ASP.NET trace-// the stack via arguments.caller.callee and Firefox dies if-// you try to trace through "use strict" call chains. (#13335)-// Support: Firefox 18+-//"use strict";-var-	// The deferred used on DOM ready-	readyList,--	// A central reference to the root jQuery(document)-	rootjQuery,--	// Support: IE<10-	// For `typeof xmlNode.method` instead of `xmlNode.method !== undefined`-	core_strundefined = typeof undefined,--	// Use the correct document accordingly with window argument (sandbox)-	location = window.location,-	document = window.document,-	docElem = document.documentElement,--	// Map over jQuery in case of overwrite-	_jQuery = window.jQuery,--	// Map over the $ in case of overwrite-	_$ = window.$,--	// [[Class]] -> type pairs-	class2type = {},--	// List of deleted data cache ids, so we can reuse them-	core_deletedIds = [],--	core_version = "1.10.1",--	// Save a reference to some core methods-	core_concat = core_deletedIds.concat,-	core_push = core_deletedIds.push,-	core_slice = core_deletedIds.slice,-	core_indexOf = core_deletedIds.indexOf,-	core_toString = class2type.toString,-	core_hasOwn = class2type.hasOwnProperty,-	core_trim = core_version.trim,--	// Define a local copy of jQuery-	jQuery = function( selector, context ) {-		// The jQuery object is actually just the init constructor 'enhanced'-		return new jQuery.fn.init( selector, context, rootjQuery );-	},--	// Used for matching numbers-	core_pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,--	// Used for splitting on whitespace-	core_rnotwhite = /\S+/g,--	// Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE)-	rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,--	// A simple way to check for HTML strings-	// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)-	// Strict HTML recognition (#11290: must start with <)-	rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,--	// Match a standalone tag-	rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/,--	// JSON RegExp-	rvalidchars = /^[\],:{}\s]*$/,-	rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,-	rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,-	rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,--	// Matches dashed string for camelizing-	rmsPrefix = /^-ms-/,-	rdashAlpha = /-([\da-z])/gi,--	// Used by jQuery.camelCase as callback to replace()-	fcamelCase = function( all, letter ) {-		return letter.toUpperCase();-	},--	// The ready event handler-	completed = function( event ) {--		// readyState === "complete" is good enough for us to call the dom ready in oldIE-		if ( document.addEventListener || event.type === "load" || document.readyState === "complete" ) {-			detach();-			jQuery.ready();-		}-	},-	// Clean-up method for dom ready events-	detach = function() {-		if ( document.addEventListener ) {-			document.removeEventListener( "DOMContentLoaded", completed, false );-			window.removeEventListener( "load", completed, false );--		} else {-			document.detachEvent( "onreadystatechange", completed );-			window.detachEvent( "onload", completed );-		}-	};--jQuery.fn = jQuery.prototype = {-	// The current version of jQuery being used-	jquery: core_version,--	constructor: jQuery,-	init: function( selector, context, rootjQuery ) {-		var match, elem;--		// HANDLE: $(""), $(null), $(undefined), $(false)-		if ( !selector ) {-			return this;-		}--		// Handle HTML strings-		if ( typeof selector === "string" ) {-			if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {-				// Assume that strings that start and end with <> are HTML and skip the regex check-				match = [ null, selector, null ];--			} else {-				match = rquickExpr.exec( selector );-			}--			// Match html or make sure no context is specified for #id-			if ( match && (match[1] || !context) ) {--				// HANDLE: $(html) -> $(array)-				if ( match[1] ) {-					context = context instanceof jQuery ? context[0] : context;--					// scripts is true for back-compat-					jQuery.merge( this, jQuery.parseHTML(-						match[1],-						context && context.nodeType ? context.ownerDocument || context : document,-						true-					) );--					// HANDLE: $(html, props)-					if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {-						for ( match in context ) {-							// Properties of context are called as methods if possible-							if ( jQuery.isFunction( this[ match ] ) ) {-								this[ match ]( context[ match ] );--							// ...and otherwise set as attributes-							} else {-								this.attr( match, context[ match ] );-							}-						}-					}--					return this;--				// HANDLE: $(#id)-				} else {-					elem = document.getElementById( match[2] );--					// Check parentNode to catch when Blackberry 4.6 returns-					// nodes that are no longer in the document #6963-					if ( elem && elem.parentNode ) {-						// Handle the case where IE and Opera return items-						// by name instead of ID-						if ( elem.id !== match[2] ) {-							return rootjQuery.find( selector );-						}--						// Otherwise, we inject the element directly into the jQuery object-						this.length = 1;-						this[0] = elem;-					}--					this.context = document;-					this.selector = selector;-					return this;-				}--			// HANDLE: $(expr, $(...))-			} else if ( !context || context.jquery ) {-				return ( context || rootjQuery ).find( selector );--			// HANDLE: $(expr, context)-			// (which is just equivalent to: $(context).find(expr)-			} else {-				return this.constructor( context ).find( selector );-			}--		// HANDLE: $(DOMElement)-		} else if ( selector.nodeType ) {-			this.context = this[0] = selector;-			this.length = 1;-			return this;--		// HANDLE: $(function)-		// Shortcut for document ready-		} else if ( jQuery.isFunction( selector ) ) {-			return rootjQuery.ready( selector );-		}--		if ( selector.selector !== undefined ) {-			this.selector = selector.selector;-			this.context = selector.context;-		}--		return jQuery.makeArray( selector, this );-	},--	// Start with an empty selector-	selector: "",--	// The default length of a jQuery object is 0-	length: 0,--	toArray: function() {-		return core_slice.call( this );-	},--	// Get the Nth element in the matched element set OR-	// Get the whole matched element set as a clean array-	get: function( num ) {-		return num == null ?--			// Return a 'clean' array-			this.toArray() :--			// Return just the object-			( num < 0 ? this[ this.length + num ] : this[ num ] );-	},--	// Take an array of elements and push it onto the stack-	// (returning the new matched element set)-	pushStack: function( elems ) {--		// Build a new jQuery matched element set-		var ret = jQuery.merge( this.constructor(), elems );--		// Add the old object onto the stack (as a reference)-		ret.prevObject = this;-		ret.context = this.context;--		// Return the newly-formed element set-		return ret;-	},--	// Execute a callback for every element in the matched set.-	// (You can seed the arguments with an array of args, but this is-	// only used internally.)-	each: function( callback, args ) {-		return jQuery.each( this, callback, args );-	},--	ready: function( fn ) {-		// Add the callback-		jQuery.ready.promise().done( fn );--		return this;-	},--	slice: function() {-		return this.pushStack( core_slice.apply( this, arguments ) );-	},--	first: function() {-		return this.eq( 0 );-	},--	last: function() {-		return this.eq( -1 );-	},--	eq: function( i ) {-		var len = this.length,-			j = +i + ( i < 0 ? len : 0 );-		return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );-	},--	map: function( callback ) {-		return this.pushStack( jQuery.map(this, function( elem, i ) {-			return callback.call( elem, i, elem );-		}));-	},--	end: function() {-		return this.prevObject || this.constructor(null);-	},--	// For internal use only.-	// Behaves like an Array's method, not like a jQuery method.-	push: core_push,-	sort: [].sort,-	splice: [].splice-};--// Give the init function the jQuery prototype for later instantiation-jQuery.fn.init.prototype = jQuery.fn;--jQuery.extend = jQuery.fn.extend = function() {-	var src, copyIsArray, copy, name, options, clone,-		target = arguments[0] || {},-		i = 1,-		length = arguments.length,-		deep = false;--	// Handle a deep copy situation-	if ( typeof target === "boolean" ) {-		deep = target;-		target = arguments[1] || {};-		// skip the boolean and the target-		i = 2;-	}--	// Handle case when target is a string or something (possible in deep copy)-	if ( typeof target !== "object" && !jQuery.isFunction(target) ) {-		target = {};-	}--	// extend jQuery itself if only one argument is passed-	if ( length === i ) {-		target = this;-		--i;-	}--	for ( ; i < length; i++ ) {-		// Only deal with non-null/undefined values-		if ( (options = arguments[ i ]) != null ) {-			// Extend the base object-			for ( name in options ) {-				src = target[ name ];-				copy = options[ name ];--				// Prevent never-ending loop-				if ( target === copy ) {-					continue;-				}--				// Recurse if we're merging plain objects or arrays-				if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {-					if ( copyIsArray ) {-						copyIsArray = false;-						clone = src && jQuery.isArray(src) ? src : [];--					} else {-						clone = src && jQuery.isPlainObject(src) ? src : {};-					}--					// Never move original objects, clone them-					target[ name ] = jQuery.extend( deep, clone, copy );--				// Don't bring in undefined values-				} else if ( copy !== undefined ) {-					target[ name ] = copy;-				}-			}-		}-	}--	// Return the modified object-	return target;-};--jQuery.extend({-	// Unique for each copy of jQuery on the page-	// Non-digits removed to match rinlinejQuery-	expando: "jQuery" + ( core_version + Math.random() ).replace( /\D/g, "" ),--	noConflict: function( deep ) {-		if ( window.$ === jQuery ) {-			window.$ = _$;-		}--		if ( deep && window.jQuery === jQuery ) {-			window.jQuery = _jQuery;-		}--		return jQuery;-	},--	// Is the DOM ready to be used? Set to true once it occurs.-	isReady: false,--	// A counter to track how many items to wait for before-	// the ready event fires. See #6781-	readyWait: 1,--	// Hold (or release) the ready event-	holdReady: function( hold ) {-		if ( hold ) {-			jQuery.readyWait++;-		} else {-			jQuery.ready( true );-		}-	},--	// Handle when the DOM is ready-	ready: function( wait ) {--		// Abort if there are pending holds or we're already ready-		if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {-			return;-		}--		// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).-		if ( !document.body ) {-			return setTimeout( jQuery.ready );-		}--		// Remember that the DOM is ready-		jQuery.isReady = true;--		// If a normal DOM Ready event fired, decrement, and wait if need be-		if ( wait !== true && --jQuery.readyWait > 0 ) {-			return;-		}--		// If there are functions bound, to execute-		readyList.resolveWith( document, [ jQuery ] );--		// Trigger any bound ready events-		if ( jQuery.fn.trigger ) {-			jQuery( document ).trigger("ready").off("ready");-		}-	},--	// See test/unit/core.js for details concerning isFunction.-	// Since version 1.3, DOM methods and functions like alert-	// aren't supported. They return false on IE (#2968).-	isFunction: function( obj ) {-		return jQuery.type(obj) === "function";-	},--	isArray: Array.isArray || function( obj ) {-		return jQuery.type(obj) === "array";-	},--	isWindow: function( obj ) {-		/* jshint eqeqeq: false */-		return obj != null && obj == obj.window;-	},--	isNumeric: function( obj ) {-		return !isNaN( parseFloat(obj) ) && isFinite( obj );-	},--	type: function( obj ) {-		if ( obj == null ) {-			return String( obj );-		}-		return typeof obj === "object" || typeof obj === "function" ?-			class2type[ core_toString.call(obj) ] || "object" :-			typeof obj;-	},--	isPlainObject: function( obj ) {-		var key;--		// Must be an Object.-		// Because of IE, we also have to check the presence of the constructor property.-		// Make sure that DOM nodes and window objects don't pass through, as well-		if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {-			return false;-		}--		try {-			// Not own constructor property must be Object-			if ( obj.constructor &&-				!core_hasOwn.call(obj, "constructor") &&-				!core_hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {-				return false;-			}-		} catch ( e ) {-			// IE8,9 Will throw exceptions on certain host objects #9897-			return false;-		}--		// Support: IE<9-		// Handle iteration over inherited properties before own properties.-		if ( jQuery.support.ownLast ) {-			for ( key in obj ) {-				return core_hasOwn.call( obj, key );-			}-		}--		// Own properties are enumerated firstly, so to speed up,-		// if last one is own, then all properties are own.-		for ( key in obj ) {}--		return key === undefined || core_hasOwn.call( obj, key );-	},--	isEmptyObject: function( obj ) {-		var name;-		for ( name in obj ) {-			return false;-		}-		return true;-	},--	error: function( msg ) {-		throw new Error( msg );-	},--	// data: string of html-	// context (optional): If specified, the fragment will be created in this context, defaults to document-	// keepScripts (optional): If true, will include scripts passed in the html string-	parseHTML: function( data, context, keepScripts ) {-		if ( !data || typeof data !== "string" ) {-			return null;-		}-		if ( typeof context === "boolean" ) {-			keepScripts = context;-			context = false;-		}-		context = context || document;--		var parsed = rsingleTag.exec( data ),-			scripts = !keepScripts && [];--		// Single tag-		if ( parsed ) {-			return [ context.createElement( parsed[1] ) ];-		}--		parsed = jQuery.buildFragment( [ data ], context, scripts );-		if ( scripts ) {-			jQuery( scripts ).remove();-		}-		return jQuery.merge( [], parsed.childNodes );-	},--	parseJSON: function( data ) {-		// Attempt to parse using the native JSON parser first-		if ( window.JSON && window.JSON.parse ) {-			return window.JSON.parse( data );-		}--		if ( data === null ) {-			return data;-		}--		if ( typeof data === "string" ) {--			// Make sure leading/trailing whitespace is removed (IE can't handle it)-			data = jQuery.trim( data );--			if ( data ) {-				// Make sure the incoming data is actual JSON-				// Logic borrowed from http://json.org/json2.js-				if ( rvalidchars.test( data.replace( rvalidescape, "@" )-					.replace( rvalidtokens, "]" )-					.replace( rvalidbraces, "")) ) {--					return ( new Function( "return " + data ) )();-				}-			}-		}--		jQuery.error( "Invalid JSON: " + data );-	},--	// Cross-browser xml parsing-	parseXML: function( data ) {-		var xml, tmp;-		if ( !data || typeof data !== "string" ) {-			return null;-		}-		try {-			if ( window.DOMParser ) { // Standard-				tmp = new DOMParser();-				xml = tmp.parseFromString( data , "text/xml" );-			} else { // IE-				xml = new ActiveXObject( "Microsoft.XMLDOM" );-				xml.async = "false";-				xml.loadXML( data );-			}-		} catch( e ) {-			xml = undefined;-		}-		if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {-			jQuery.error( "Invalid XML: " + data );-		}-		return xml;-	},--	noop: function() {},--	// Evaluates a script in a global context-	// Workarounds based on findings by Jim Driscoll-	// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context-	globalEval: function( data ) {-		if ( data && jQuery.trim( data ) ) {-			// We use execScript on Internet Explorer-			// We use an anonymous function so that context is window-			// rather than jQuery in Firefox-			( window.execScript || function( data ) {-				window[ "eval" ].call( window, data );-			} )( data );-		}-	},--	// Convert dashed to camelCase; used by the css and data modules-	// Microsoft forgot to hump their vendor prefix (#9572)-	camelCase: function( string ) {-		return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );-	},--	nodeName: function( elem, name ) {-		return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();-	},--	// args is for internal usage only-	each: function( obj, callback, args ) {-		var value,-			i = 0,-			length = obj.length,-			isArray = isArraylike( obj );--		if ( args ) {-			if ( isArray ) {-				for ( ; i < length; i++ ) {-					value = callback.apply( obj[ i ], args );--					if ( value === false ) {-						break;-					}-				}-			} else {-				for ( i in obj ) {-					value = callback.apply( obj[ i ], args );--					if ( value === false ) {-						break;-					}-				}-			}--		// A special, fast, case for the most common use of each-		} else {-			if ( isArray ) {-				for ( ; i < length; i++ ) {-					value = callback.call( obj[ i ], i, obj[ i ] );--					if ( value === false ) {-						break;-					}-				}-			} else {-				for ( i in obj ) {-					value = callback.call( obj[ i ], i, obj[ i ] );--					if ( value === false ) {-						break;-					}-				}-			}-		}--		return obj;-	},--	// Use native String.trim function wherever possible-	trim: core_trim && !core_trim.call("\uFEFF\xA0") ?-		function( text ) {-			return text == null ?-				"" :-				core_trim.call( text );-		} :--		// Otherwise use our own trimming functionality-		function( text ) {-			return text == null ?-				"" :-				( text + "" ).replace( rtrim, "" );-		},--	// results is for internal usage only-	makeArray: function( arr, results ) {-		var ret = results || [];--		if ( arr != null ) {-			if ( isArraylike( Object(arr) ) ) {-				jQuery.merge( ret,-					typeof arr === "string" ?-					[ arr ] : arr-				);-			} else {-				core_push.call( ret, arr );-			}-		}--		return ret;-	},--	inArray: function( elem, arr, i ) {-		var len;--		if ( arr ) {-			if ( core_indexOf ) {-				return core_indexOf.call( arr, elem, i );-			}--			len = arr.length;-			i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;--			for ( ; i < len; i++ ) {-				// Skip accessing in sparse arrays-				if ( i in arr && arr[ i ] === elem ) {-					return i;-				}-			}-		}--		return -1;-	},--	merge: function( first, second ) {-		var l = second.length,-			i = first.length,-			j = 0;--		if ( typeof l === "number" ) {-			for ( ; j < l; j++ ) {-				first[ i++ ] = second[ j ];-			}-		} else {-			while ( second[j] !== undefined ) {-				first[ i++ ] = second[ j++ ];-			}-		}--		first.length = i;--		return first;-	},--	grep: function( elems, callback, inv ) {-		var retVal,-			ret = [],-			i = 0,-			length = elems.length;-		inv = !!inv;--		// Go through the array, only saving the items-		// that pass the validator function-		for ( ; i < length; i++ ) {-			retVal = !!callback( elems[ i ], i );-			if ( inv !== retVal ) {-				ret.push( elems[ i ] );-			}-		}--		return ret;-	},--	// arg is for internal usage only-	map: function( elems, callback, arg ) {-		var value,-			i = 0,-			length = elems.length,-			isArray = isArraylike( elems ),-			ret = [];--		// Go through the array, translating each of the items to their-		if ( isArray ) {-			for ( ; i < length; i++ ) {-				value = callback( elems[ i ], i, arg );--				if ( value != null ) {-					ret[ ret.length ] = value;-				}-			}--		// Go through every key on the object,-		} else {-			for ( i in elems ) {-				value = callback( elems[ i ], i, arg );--				if ( value != null ) {-					ret[ ret.length ] = value;-				}-			}-		}--		// Flatten any nested arrays-		return core_concat.apply( [], ret );-	},--	// A global GUID counter for objects-	guid: 1,--	// Bind a function to a context, optionally partially applying any-	// arguments.-	proxy: function( fn, context ) {-		var args, proxy, tmp;--		if ( typeof context === "string" ) {-			tmp = fn[ context ];-			context = fn;-			fn = tmp;-		}--		// Quick check to determine if target is callable, in the spec-		// this throws a TypeError, but we will just return undefined.-		if ( !jQuery.isFunction( fn ) ) {-			return undefined;-		}--		// Simulated bind-		args = core_slice.call( arguments, 2 );-		proxy = function() {-			return fn.apply( context || this, args.concat( core_slice.call( arguments ) ) );-		};--		// Set the guid of unique handler to the same of original handler, so it can be removed-		proxy.guid = fn.guid = fn.guid || jQuery.guid++;--		return proxy;-	},--	// Multifunctional method to get and set values of a collection-	// The value/s can optionally be executed if it's a function-	access: function( elems, fn, key, value, chainable, emptyGet, raw ) {-		var i = 0,-			length = elems.length,-			bulk = key == null;--		// Sets many values-		if ( jQuery.type( key ) === "object" ) {-			chainable = true;-			for ( i in key ) {-				jQuery.access( elems, fn, i, key[i], true, emptyGet, raw );-			}--		// Sets one value-		} else if ( value !== undefined ) {-			chainable = true;--			if ( !jQuery.isFunction( value ) ) {-				raw = true;-			}--			if ( bulk ) {-				// Bulk operations run against the entire set-				if ( raw ) {-					fn.call( elems, value );-					fn = null;--				// ...except when executing function values-				} else {-					bulk = fn;-					fn = function( elem, key, value ) {-						return bulk.call( jQuery( elem ), value );-					};-				}-			}--			if ( fn ) {-				for ( ; i < length; i++ ) {-					fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );-				}-			}-		}--		return chainable ?-			elems :--			// Gets-			bulk ?-				fn.call( elems ) :-				length ? fn( elems[0], key ) : emptyGet;-	},--	now: function() {-		return ( new Date() ).getTime();-	},--	// A method for quickly swapping in/out CSS properties to get correct calculations.-	// Note: this method belongs to the css module but it's needed here for the support module.-	// If support gets modularized, this method should be moved back to the css module.-	swap: function( elem, options, callback, args ) {-		var ret, name,-			old = {};--		// Remember the old values, and insert the new ones-		for ( name in options ) {-			old[ name ] = elem.style[ name ];-			elem.style[ name ] = options[ name ];-		}--		ret = callback.apply( elem, args || [] );--		// Revert the old values-		for ( name in options ) {-			elem.style[ name ] = old[ name ];-		}--		return ret;-	}-});--jQuery.ready.promise = function( obj ) {-	if ( !readyList ) {--		readyList = jQuery.Deferred();--		// Catch cases where $(document).ready() is called after the browser event has already occurred.-		// we once tried to use readyState "interactive" here, but it caused issues like the one-		// discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15-		if ( document.readyState === "complete" ) {-			// Handle it asynchronously to allow scripts the opportunity to delay ready-			setTimeout( jQuery.ready );--		// Standards-based browsers support DOMContentLoaded-		} else if ( document.addEventListener ) {-			// Use the handy event callback-			document.addEventListener( "DOMContentLoaded", completed, false );--			// A fallback to window.onload, that will always work-			window.addEventListener( "load", completed, false );--		// If IE event model is used-		} else {-			// Ensure firing before onload, maybe late but safe also for iframes-			document.attachEvent( "onreadystatechange", completed );--			// A fallback to window.onload, that will always work-			window.attachEvent( "onload", completed );--			// If IE and not a frame-			// continually check to see if the document is ready-			var top = false;--			try {-				top = window.frameElement == null && document.documentElement;-			} catch(e) {}--			if ( top && top.doScroll ) {-				(function doScrollCheck() {-					if ( !jQuery.isReady ) {--						try {-							// Use the trick by Diego Perini-							// http://javascript.nwbox.com/IEContentLoaded/-							top.doScroll("left");-						} catch(e) {-							return setTimeout( doScrollCheck, 50 );-						}--						// detach all dom ready events-						detach();--						// and execute any waiting functions-						jQuery.ready();-					}-				})();-			}-		}-	}-	return readyList.promise( obj );-};--// Populate the class2type map-jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {-	class2type[ "[object " + name + "]" ] = name.toLowerCase();-});--function isArraylike( obj ) {-	var length = obj.length,-		type = jQuery.type( obj );--	if ( jQuery.isWindow( obj ) ) {-		return false;-	}--	if ( obj.nodeType === 1 && length ) {-		return true;-	}--	return type === "array" || type !== "function" &&-		( length === 0 ||-		typeof length === "number" && length > 0 && ( length - 1 ) in obj );-}--// All jQuery objects should point back to these-rootjQuery = jQuery(document);-/*!- * Sizzle CSS Selector Engine v1.9.4-pre- * http://sizzlejs.com/- *- * Copyright 2013 jQuery Foundation, Inc. and other contributors- * Released under the MIT license- * http://jquery.org/license- *- * Date: 2013-05-27- */-(function( window, undefined ) {--var i,-	support,-	cachedruns,-	Expr,-	getText,-	isXML,-	compile,-	outermostContext,-	sortInput,--	// Local document vars-	setDocument,-	document,-	docElem,-	documentIsHTML,-	rbuggyQSA,-	rbuggyMatches,-	matches,-	contains,--	// Instance-specific data-	expando = "sizzle" + -(new Date()),-	preferredDoc = window.document,-	dirruns = 0,-	done = 0,-	classCache = createCache(),-	tokenCache = createCache(),-	compilerCache = createCache(),-	hasDuplicate = false,-	sortOrder = function() { return 0; },--	// General-purpose constants-	strundefined = typeof undefined,-	MAX_NEGATIVE = 1 << 31,--	// Instance methods-	hasOwn = ({}).hasOwnProperty,-	arr = [],-	pop = arr.pop,-	push_native = arr.push,-	push = arr.push,-	slice = arr.slice,-	// Use a stripped-down indexOf if we can't use a native one-	indexOf = arr.indexOf || function( elem ) {-		var i = 0,-			len = this.length;-		for ( ; i < len; i++ ) {-			if ( this[i] === elem ) {-				return i;-			}-		}-		return -1;-	},--	booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",--	// Regular expressions--	// Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace-	whitespace = "[\\x20\\t\\r\\n\\f]",-	// http://www.w3.org/TR/css3-syntax/#characters-	characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",--	// Loosely modeled on CSS identifier characters-	// An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors-	// Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier-	identifier = characterEncoding.replace( "w", "w#" ),--	// Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors-	attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace +-		"*(?:([*^$|!~]?=)" + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]",--	// Prefer arguments quoted,-	//   then not containing pseudos/brackets,-	//   then attribute selectors/non-parenthetical expressions,-	//   then anything else-	// These preferences are here to reduce the number of selectors-	//   needing tokenize in the PSEUDO preFilter-	pseudos = ":(" + characterEncoding + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + attributes.replace( 3, 8 ) + ")*)|.*)\\)|)",--	// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter-	rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),--	rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),-	rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),--	rsibling = new RegExp( whitespace + "*[+~]" ),-	rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*)" + whitespace + "*\\]", "g" ),--	rpseudo = new RegExp( pseudos ),-	ridentifier = new RegExp( "^" + identifier + "$" ),--	matchExpr = {-		"ID": new RegExp( "^#(" + characterEncoding + ")" ),-		"CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ),-		"TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ),-		"ATTR": new RegExp( "^" + attributes ),-		"PSEUDO": new RegExp( "^" + pseudos ),-		"CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +-			"*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +-			"*(\\d+)|))" + whitespace + "*\\)|)", "i" ),-		"bool": new RegExp( "^(?:" + booleans + ")$", "i" ),-		// For use in libraries implementing .is()-		// We use this for POS matching in `select`-		"needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +-			whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )-	},--	rnative = /^[^{]+\{\s*\[native \w/,--	// Easily-parseable/retrievable ID or TAG or CLASS selectors-	rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,--	rinputs = /^(?:input|select|textarea|button)$/i,-	rheader = /^h\d$/i,--	rescape = /'|\\/g,--	// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters-	runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),-	funescape = function( _, escaped, escapedWhitespace ) {-		var high = "0x" + escaped - 0x10000;-		// NaN means non-codepoint-		// Support: Firefox-		// Workaround erroneous numeric interpretation of +"0x"-		return high !== high || escapedWhitespace ?-			escaped :-			// BMP codepoint-			high < 0 ?-				String.fromCharCode( high + 0x10000 ) :-				// Supplemental Plane codepoint (surrogate pair)-				String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );-	};--// Optimize for push.apply( _, NodeList )-try {-	push.apply(-		(arr = slice.call( preferredDoc.childNodes )),-		preferredDoc.childNodes-	);-	// Support: Android<4.0-	// Detect silently failing push.apply-	arr[ preferredDoc.childNodes.length ].nodeType;-} catch ( e ) {-	push = { apply: arr.length ?--		// Leverage slice if possible-		function( target, els ) {-			push_native.apply( target, slice.call(els) );-		} :--		// Support: IE<9-		// Otherwise append directly-		function( target, els ) {-			var j = target.length,-				i = 0;-			// Can't trust NodeList.length-			while ( (target[j++] = els[i++]) ) {}-			target.length = j - 1;-		}-	};-}--function Sizzle( selector, context, results, seed ) {-	var match, elem, m, nodeType,-		// QSA vars-		i, groups, old, nid, newContext, newSelector;--	if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {-		setDocument( context );-	}--	context = context || document;-	results = results || [];--	if ( !selector || typeof selector !== "string" ) {-		return results;-	}--	if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) {-		return [];-	}--	if ( documentIsHTML && !seed ) {--		// Shortcuts-		if ( (match = rquickExpr.exec( selector )) ) {-			// Speed-up: Sizzle("#ID")-			if ( (m = match[1]) ) {-				if ( nodeType === 9 ) {-					elem = context.getElementById( m );-					// Check parentNode to catch when Blackberry 4.6 returns-					// nodes that are no longer in the document #6963-					if ( elem && elem.parentNode ) {-						// Handle the case where IE, Opera, and Webkit return items-						// by name instead of ID-						if ( elem.id === m ) {-							results.push( elem );-							return results;-						}-					} else {-						return results;-					}-				} else {-					// Context is not a document-					if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&-						contains( context, elem ) && elem.id === m ) {-						results.push( elem );-						return results;-					}-				}--			// Speed-up: Sizzle("TAG")-			} else if ( match[2] ) {-				push.apply( results, context.getElementsByTagName( selector ) );-				return results;--			// Speed-up: Sizzle(".CLASS")-			} else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) {-				push.apply( results, context.getElementsByClassName( m ) );-				return results;-			}-		}--		// QSA path-		if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {-			nid = old = expando;-			newContext = context;-			newSelector = nodeType === 9 && selector;--			// qSA works strangely on Element-rooted queries-			// We can work around this by specifying an extra ID on the root-			// and working up from there (Thanks to Andrew Dupont for the technique)-			// IE 8 doesn't work on object elements-			if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {-				groups = tokenize( selector );--				if ( (old = context.getAttribute("id")) ) {-					nid = old.replace( rescape, "\\$&" );-				} else {-					context.setAttribute( "id", nid );-				}-				nid = "[id='" + nid + "'] ";--				i = groups.length;-				while ( i-- ) {-					groups[i] = nid + toSelector( groups[i] );-				}-				newContext = rsibling.test( selector ) && context.parentNode || context;-				newSelector = groups.join(",");-			}--			if ( newSelector ) {-				try {-					push.apply( results,-						newContext.querySelectorAll( newSelector )-					);-					return results;-				} catch(qsaError) {-				} finally {-					if ( !old ) {-						context.removeAttribute("id");-					}-				}-			}-		}-	}--	// All others-	return select( selector.replace( rtrim, "$1" ), context, results, seed );-}--/**- * For feature detection- * @param {Function} fn The function to test for native support- */-function isNative( fn ) {-	return rnative.test( fn + "" );-}--/**- * Create key-value caches of limited size- * @returns {Function(string, Object)} Returns the Object data after storing it on itself with- *	property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)- *	deleting the oldest entry- */-function createCache() {-	var keys = [];--	function cache( key, value ) {-		// Use (key + " ") to avoid collision with native prototype properties (see Issue #157)-		if ( keys.push( key += " " ) > Expr.cacheLength ) {-			// Only keep the most recent entries-			delete cache[ keys.shift() ];-		}-		return (cache[ key ] = value);-	}-	return cache;-}--/**- * Mark a function for special use by Sizzle- * @param {Function} fn The function to mark- */-function markFunction( fn ) {-	fn[ expando ] = true;-	return fn;-}--/**- * Support testing using an element- * @param {Function} fn Passed the created div and expects a boolean result- */-function assert( fn ) {-	var div = document.createElement("div");--	try {-		return !!fn( div );-	} catch (e) {-		return false;-	} finally {-		// Remove from its parent by default-		if ( div.parentNode ) {-			div.parentNode.removeChild( div );-		}-		// release memory in IE-		div = null;-	}-}--/**- * Adds the same handler for all of the specified attrs- * @param {String} attrs Pipe-separated list of attributes- * @param {Function} handler The method that will be applied if the test fails- * @param {Boolean} test The result of a test. If true, null will be set as the handler in leiu of the specified handler- */-function addHandle( attrs, handler, test ) {-	attrs = attrs.split("|");-	var current,-		i = attrs.length,-		setHandle = test ? null : handler;--	while ( i-- ) {-		// Don't override a user's handler-		if ( !(current = Expr.attrHandle[ attrs[i] ]) || current === handler ) {-			Expr.attrHandle[ attrs[i] ] = setHandle;-		}-	}-}--/**- * Fetches boolean attributes by node- * @param {Element} elem- * @param {String} name- */-function boolHandler( elem, name ) {-	// XML does not need to be checked as this will not be assigned for XML documents-	var val = elem.getAttributeNode( name );-	return val && val.specified ?-		val.value :-		elem[ name ] === true ? name.toLowerCase() : null;-}--/**- * Fetches attributes without interpolation- * http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx- * @param {Element} elem- * @param {String} name- */-function interpolationHandler( elem, name ) {-	// XML does not need to be checked as this will not be assigned for XML documents-	return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );-}--/**- * Uses defaultValue to retrieve value in IE6/7- * @param {Element} elem- * @param {String} name- */-function valueHandler( elem ) {-	// Ignore the value *property* on inputs by using defaultValue-	// Fallback to Sizzle.attr by returning undefined where appropriate-	// XML does not need to be checked as this will not be assigned for XML documents-	if ( elem.nodeName.toLowerCase() === "input" ) {-		return elem.defaultValue;-	}-}--/**- * Checks document order of two siblings- * @param {Element} a- * @param {Element} b- * @returns Returns -1 if a precedes b, 1 if a follows b- */-function siblingCheck( a, b ) {-	var cur = b && a,-		diff = cur && a.nodeType === 1 && b.nodeType === 1 &&-			( ~b.sourceIndex || MAX_NEGATIVE ) --			( ~a.sourceIndex || MAX_NEGATIVE );--	// Use IE sourceIndex if available on both nodes-	if ( diff ) {-		return diff;-	}--	// Check if b follows a-	if ( cur ) {-		while ( (cur = cur.nextSibling) ) {-			if ( cur === b ) {-				return -1;-			}-		}-	}--	return a ? 1 : -1;-}--/**- * Returns a function to use in pseudos for input types- * @param {String} type- */-function createInputPseudo( type ) {-	return function( elem ) {-		var name = elem.nodeName.toLowerCase();-		return name === "input" && elem.type === type;-	};-}--/**- * Returns a function to use in pseudos for buttons- * @param {String} type- */-function createButtonPseudo( type ) {-	return function( elem ) {-		var name = elem.nodeName.toLowerCase();-		return (name === "input" || name === "button") && elem.type === type;-	};-}--/**- * Returns a function to use in pseudos for positionals- * @param {Function} fn- */-function createPositionalPseudo( fn ) {-	return markFunction(function( argument ) {-		argument = +argument;-		return markFunction(function( seed, matches ) {-			var j,-				matchIndexes = fn( [], seed.length, argument ),-				i = matchIndexes.length;--			// Match elements found at the specified indexes-			while ( i-- ) {-				if ( seed[ (j = matchIndexes[i]) ] ) {-					seed[j] = !(matches[j] = seed[j]);-				}-			}-		});-	});-}--/**- * Detect xml- * @param {Element|Object} elem An element or a document- */-isXML = Sizzle.isXML = function( elem ) {-	// documentElement is verified for cases where it doesn't yet exist-	// (such as loading iframes in IE - #4833)-	var documentElement = elem && (elem.ownerDocument || elem).documentElement;-	return documentElement ? documentElement.nodeName !== "HTML" : false;-};--// Expose support vars for convenience-support = Sizzle.support = {};--/**- * Sets document-related variables once based on the current document- * @param {Element|Object} [doc] An element or document object to use to set the document- * @returns {Object} Returns the current document- */-setDocument = Sizzle.setDocument = function( node ) {-	var doc = node ? node.ownerDocument || node : preferredDoc,-		parent = doc.parentWindow;--	// If no document and documentElement is available, return-	if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {-		return document;-	}--	// Set our document-	document = doc;-	docElem = doc.documentElement;--	// Support tests-	documentIsHTML = !isXML( doc );--	// Support: IE>8-	// If iframe document is assigned to "document" variable and if iframe has been reloaded,-	// IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936-	if ( parent && parent.frameElement ) {-		parent.attachEvent( "onbeforeunload", function() {-			setDocument();-		});-	}--	/* Attributes-	---------------------------------------------------------------------- */--	// Support: IE<8-	// Verify that getAttribute really returns attributes and not properties (excepting IE8 booleans)-	support.attributes = assert(function( div ) {--		// Support: IE<8-		// Prevent attribute/property "interpolation"-		div.innerHTML = "<a href='#'></a>";-		addHandle( "type|href|height|width", interpolationHandler, div.firstChild.getAttribute("href") === "#" );--		// Support: IE<9-		// Use getAttributeNode to fetch booleans when getAttribute lies-		addHandle( booleans, boolHandler, div.getAttribute("disabled") == null );--		div.className = "i";-		return !div.getAttribute("className");-	});--	// Support: IE<9-	// Retrieving value should defer to defaultValue-	support.input = assert(function( div ) {-		div.innerHTML = "<input>";-		div.firstChild.setAttribute( "value", "" );-		return div.firstChild.getAttribute( "value" ) === "";-	});--	// IE6/7 still return empty string for value,-	// but are actually retrieving the property-	addHandle( "value", valueHandler, support.attributes && support.input );--	/* getElement(s)By*-	---------------------------------------------------------------------- */--	// Check if getElementsByTagName("*") returns only elements-	support.getElementsByTagName = assert(function( div ) {-		div.appendChild( doc.createComment("") );-		return !div.getElementsByTagName("*").length;-	});--	// Check if getElementsByClassName can be trusted-	support.getElementsByClassName = assert(function( div ) {-		div.innerHTML = "<div class='a'></div><div class='a i'></div>";--		// Support: Safari<4-		// Catch class over-caching-		div.firstChild.className = "i";-		// Support: Opera<10-		// Catch gEBCN failure to find non-leading classes-		return div.getElementsByClassName("i").length === 2;-	});--	// Support: IE<10-	// Check if getElementById returns elements by name-	// The broken getElementById methods don't pick up programatically-set names,-	// so use a roundabout getElementsByName test-	support.getById = assert(function( div ) {-		docElem.appendChild( div ).id = expando;-		return !doc.getElementsByName || !doc.getElementsByName( expando ).length;-	});--	// ID find and filter-	if ( support.getById ) {-		Expr.find["ID"] = function( id, context ) {-			if ( typeof context.getElementById !== strundefined && documentIsHTML ) {-				var m = context.getElementById( id );-				// Check parentNode to catch when Blackberry 4.6 returns-				// nodes that are no longer in the document #6963-				return m && m.parentNode ? [m] : [];-			}-		};-		Expr.filter["ID"] = function( id ) {-			var attrId = id.replace( runescape, funescape );-			return function( elem ) {-				return elem.getAttribute("id") === attrId;-			};-		};-	} else {-		// Support: IE6/7-		// getElementById is not reliable as a find shortcut-		delete Expr.find["ID"];--		Expr.filter["ID"] =  function( id ) {-			var attrId = id.replace( runescape, funescape );-			return function( elem ) {-				var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id");-				return node && node.value === attrId;-			};-		};-	}--	// Tag-	Expr.find["TAG"] = support.getElementsByTagName ?-		function( tag, context ) {-			if ( typeof context.getElementsByTagName !== strundefined ) {-				return context.getElementsByTagName( tag );-			}-		} :-		function( tag, context ) {-			var elem,-				tmp = [],-				i = 0,-				results = context.getElementsByTagName( tag );--			// Filter out possible comments-			if ( tag === "*" ) {-				while ( (elem = results[i++]) ) {-					if ( elem.nodeType === 1 ) {-						tmp.push( elem );-					}-				}--				return tmp;-			}-			return results;-		};--	// Class-	Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {-		if ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) {-			return context.getElementsByClassName( className );-		}-	};--	/* QSA/matchesSelector-	---------------------------------------------------------------------- */--	// QSA and matchesSelector support--	// matchesSelector(:active) reports false when true (IE9/Opera 11.5)-	rbuggyMatches = [];--	// qSa(:focus) reports false when true (Chrome 21)-	// We allow this because of a bug in IE8/9 that throws an error-	// whenever `document.activeElement` is accessed on an iframe-	// So, we allow :focus to pass through QSA all the time to avoid the IE error-	// See http://bugs.jquery.com/ticket/13378-	rbuggyQSA = [];--	if ( (support.qsa = isNative(doc.querySelectorAll)) ) {-		// Build QSA regex-		// Regex strategy adopted from Diego Perini-		assert(function( div ) {-			// Select is set to empty string on purpose-			// This is to test IE's treatment of not explicitly-			// setting a boolean content attribute,-			// since its presence should be enough-			// http://bugs.jquery.com/ticket/12359-			div.innerHTML = "<select><option selected=''></option></select>";--			// Support: IE8-			// Boolean attributes and "value" are not treated correctly-			if ( !div.querySelectorAll("[selected]").length ) {-				rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );-			}--			// Webkit/Opera - :checked should return selected option elements-			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked-			// IE8 throws error here and will not see later tests-			if ( !div.querySelectorAll(":checked").length ) {-				rbuggyQSA.push(":checked");-			}-		});--		assert(function( div ) {--			// Support: Opera 10-12/IE8-			// ^= $= *= and empty values-			// Should not select anything-			// Support: Windows 8 Native Apps-			// The type attribute is restricted during .innerHTML assignment-			var input = doc.createElement("input");-			input.setAttribute( "type", "hidden" );-			div.appendChild( input ).setAttribute( "t", "" );--			if ( div.querySelectorAll("[t^='']").length ) {-				rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );-			}--			// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)-			// IE8 throws error here and will not see later tests-			if ( !div.querySelectorAll(":enabled").length ) {-				rbuggyQSA.push( ":enabled", ":disabled" );-			}--			// Opera 10-11 does not throw on post-comma invalid pseudos-			div.querySelectorAll("*,:x");-			rbuggyQSA.push(",.*:");-		});-	}--	if ( (support.matchesSelector = isNative( (matches = docElem.webkitMatchesSelector ||-		docElem.mozMatchesSelector ||-		docElem.oMatchesSelector ||-		docElem.msMatchesSelector) )) ) {--		assert(function( div ) {-			// Check to see if it's possible to do matchesSelector-			// on a disconnected node (IE 9)-			support.disconnectedMatch = matches.call( div, "div" );--			// This should fail with an exception-			// Gecko does not error, returns false instead-			matches.call( div, "[s!='']:x" );-			rbuggyMatches.push( "!=", pseudos );-		});-	}--	rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );-	rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );--	/* Contains-	---------------------------------------------------------------------- */--	// Element contains another-	// Purposefully does not implement inclusive descendent-	// As in, an element does not contain itself-	contains = isNative(docElem.contains) || docElem.compareDocumentPosition ?-		function( a, b ) {-			var adown = a.nodeType === 9 ? a.documentElement : a,-				bup = b && b.parentNode;-			return a === bup || !!( bup && bup.nodeType === 1 && (-				adown.contains ?-					adown.contains( bup ) :-					a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16-			));-		} :-		function( a, b ) {-			if ( b ) {-				while ( (b = b.parentNode) ) {-					if ( b === a ) {-						return true;-					}-				}-			}-			return false;-		};--	/* Sorting-	---------------------------------------------------------------------- */--	// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)-	// Detached nodes confoundingly follow *each other*-	support.sortDetached = assert(function( div1 ) {-		// Should return 1, but returns 4 (following)-		return div1.compareDocumentPosition( doc.createElement("div") ) & 1;-	});--	// Document order sorting-	sortOrder = docElem.compareDocumentPosition ?-	function( a, b ) {--		// Flag for duplicate removal-		if ( a === b ) {-			hasDuplicate = true;-			return 0;-		}--		var compare = b.compareDocumentPosition && a.compareDocumentPosition && a.compareDocumentPosition( b );--		if ( compare ) {-			// Disconnected nodes-			if ( compare & 1 ||-				(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {--				// Choose the first element that is related to our preferred document-				if ( a === doc || contains(preferredDoc, a) ) {-					return -1;-				}-				if ( b === doc || contains(preferredDoc, b) ) {-					return 1;-				}--				// Maintain original order-				return sortInput ?-					( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :-					0;-			}--			return compare & 4 ? -1 : 1;-		}--		// Not directly comparable, sort on existence of method-		return a.compareDocumentPosition ? -1 : 1;-	} :-	function( a, b ) {-		var cur,-			i = 0,-			aup = a.parentNode,-			bup = b.parentNode,-			ap = [ a ],-			bp = [ b ];--		// Exit early if the nodes are identical-		if ( a === b ) {-			hasDuplicate = true;-			return 0;--		// Parentless nodes are either documents or disconnected-		} else if ( !aup || !bup ) {-			return a === doc ? -1 :-				b === doc ? 1 :-				aup ? -1 :-				bup ? 1 :-				sortInput ?-				( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :-				0;--		// If the nodes are siblings, we can do a quick check-		} else if ( aup === bup ) {-			return siblingCheck( a, b );-		}--		// Otherwise we need full lists of their ancestors for comparison-		cur = a;-		while ( (cur = cur.parentNode) ) {-			ap.unshift( cur );-		}-		cur = b;-		while ( (cur = cur.parentNode) ) {-			bp.unshift( cur );-		}--		// Walk down the tree looking for a discrepancy-		while ( ap[i] === bp[i] ) {-			i++;-		}--		return i ?-			// Do a sibling check if the nodes have a common ancestor-			siblingCheck( ap[i], bp[i] ) :--			// Otherwise nodes in our document sort first-			ap[i] === preferredDoc ? -1 :-			bp[i] === preferredDoc ? 1 :-			0;-	};--	return doc;-};--Sizzle.matches = function( expr, elements ) {-	return Sizzle( expr, null, null, elements );-};--Sizzle.matchesSelector = function( elem, expr ) {-	// Set document vars if needed-	if ( ( elem.ownerDocument || elem ) !== document ) {-		setDocument( elem );-	}--	// Make sure that attribute selectors are quoted-	expr = expr.replace( rattributeQuotes, "='$1']" );--	if ( support.matchesSelector && documentIsHTML &&-		( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&-		( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {--		try {-			var ret = matches.call( elem, expr );--			// IE 9's matchesSelector returns false on disconnected nodes-			if ( ret || support.disconnectedMatch ||-					// As well, disconnected nodes are said to be in a document-					// fragment in IE 9-					elem.document && elem.document.nodeType !== 11 ) {-				return ret;-			}-		} catch(e) {}-	}--	return Sizzle( expr, document, null, [elem] ).length > 0;-};--Sizzle.contains = function( context, elem ) {-	// Set document vars if needed-	if ( ( context.ownerDocument || context ) !== document ) {-		setDocument( context );-	}-	return contains( context, elem );-};--Sizzle.attr = function( elem, name ) {-	// Set document vars if needed-	if ( ( elem.ownerDocument || elem ) !== document ) {-		setDocument( elem );-	}--	var fn = Expr.attrHandle[ name.toLowerCase() ],-		// Don't get fooled by Object.prototype properties (jQuery #13807)-		val = ( fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?-			fn( elem, name, !documentIsHTML ) :-			undefined );--	return val === undefined ?-		support.attributes || !documentIsHTML ?-			elem.getAttribute( name ) :-			(val = elem.getAttributeNode(name)) && val.specified ?-				val.value :-				null :-		val;-};--Sizzle.error = function( msg ) {-	throw new Error( "Syntax error, unrecognized expression: " + msg );-};--/**- * Document sorting and removing duplicates- * @param {ArrayLike} results- */-Sizzle.uniqueSort = function( results ) {-	var elem,-		duplicates = [],-		j = 0,-		i = 0;--	// Unless we *know* we can detect duplicates, assume their presence-	hasDuplicate = !support.detectDuplicates;-	sortInput = !support.sortStable && results.slice( 0 );-	results.sort( sortOrder );--	if ( hasDuplicate ) {-		while ( (elem = results[i++]) ) {-			if ( elem === results[ i ] ) {-				j = duplicates.push( i );-			}-		}-		while ( j-- ) {-			results.splice( duplicates[ j ], 1 );-		}-	}--	return results;-};--/**- * Utility function for retrieving the text value of an array of DOM nodes- * @param {Array|Element} elem- */-getText = Sizzle.getText = function( elem ) {-	var node,-		ret = "",-		i = 0,-		nodeType = elem.nodeType;--	if ( !nodeType ) {-		// If no nodeType, this is expected to be an array-		for ( ; (node = elem[i]); i++ ) {-			// Do not traverse comment nodes-			ret += getText( node );-		}-	} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {-		// Use textContent for elements-		// innerText usage removed for consistency of new lines (see #11153)-		if ( typeof elem.textContent === "string" ) {-			return elem.textContent;-		} else {-			// Traverse its children-			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {-				ret += getText( elem );-			}-		}-	} else if ( nodeType === 3 || nodeType === 4 ) {-		return elem.nodeValue;-	}-	// Do not include comment or processing instruction nodes--	return ret;-};--Expr = Sizzle.selectors = {--	// Can be adjusted by the user-	cacheLength: 50,--	createPseudo: markFunction,--	match: matchExpr,--	attrHandle: {},--	find: {},--	relative: {-		">": { dir: "parentNode", first: true },-		" ": { dir: "parentNode" },-		"+": { dir: "previousSibling", first: true },-		"~": { dir: "previousSibling" }-	},--	preFilter: {-		"ATTR": function( match ) {-			match[1] = match[1].replace( runescape, funescape );--			// Move the given value to match[3] whether quoted or unquoted-			match[3] = ( match[4] || match[5] || "" ).replace( runescape, funescape );--			if ( match[2] === "~=" ) {-				match[3] = " " + match[3] + " ";-			}--			return match.slice( 0, 4 );-		},--		"CHILD": function( match ) {-			/* matches from matchExpr["CHILD"]-				1 type (only|nth|...)-				2 what (child|of-type)-				3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)-				4 xn-component of xn+y argument ([+-]?\d*n|)-				5 sign of xn-component-				6 x of xn-component-				7 sign of y-component-				8 y of y-component-			*/-			match[1] = match[1].toLowerCase();--			if ( match[1].slice( 0, 3 ) === "nth" ) {-				// nth-* requires argument-				if ( !match[3] ) {-					Sizzle.error( match[0] );-				}--				// numeric x and y parameters for Expr.filter.CHILD-				// remember that false/true cast respectively to 0/1-				match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );-				match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );--			// other types prohibit arguments-			} else if ( match[3] ) {-				Sizzle.error( match[0] );-			}--			return match;-		},--		"PSEUDO": function( match ) {-			var excess,-				unquoted = !match[5] && match[2];--			if ( matchExpr["CHILD"].test( match[0] ) ) {-				return null;-			}--			// Accept quoted arguments as-is-			if ( match[3] && match[4] !== undefined ) {-				match[2] = match[4];--			// Strip excess characters from unquoted arguments-			} else if ( unquoted && rpseudo.test( unquoted ) &&-				// Get excess from tokenize (recursively)-				(excess = tokenize( unquoted, true )) &&-				// advance to the next closing parenthesis-				(excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {--				// excess is a negative index-				match[0] = match[0].slice( 0, excess );-				match[2] = unquoted.slice( 0, excess );-			}--			// Return only captures needed by the pseudo filter method (type and argument)-			return match.slice( 0, 3 );-		}-	},--	filter: {--		"TAG": function( nodeNameSelector ) {-			var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();-			return nodeNameSelector === "*" ?-				function() { return true; } :-				function( elem ) {-					return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;-				};-		},--		"CLASS": function( className ) {-			var pattern = classCache[ className + " " ];--			return pattern ||-				(pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&-				classCache( className, function( elem ) {-					return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute("class") || "" );-				});-		},--		"ATTR": function( name, operator, check ) {-			return function( elem ) {-				var result = Sizzle.attr( elem, name );--				if ( result == null ) {-					return operator === "!=";-				}-				if ( !operator ) {-					return true;-				}--				result += "";--				return operator === "=" ? result === check :-					operator === "!=" ? result !== check :-					operator === "^=" ? check && result.indexOf( check ) === 0 :-					operator === "*=" ? check && result.indexOf( check ) > -1 :-					operator === "$=" ? check && result.slice( -check.length ) === check :-					operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 :-					operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :-					false;-			};-		},--		"CHILD": function( type, what, argument, first, last ) {-			var simple = type.slice( 0, 3 ) !== "nth",-				forward = type.slice( -4 ) !== "last",-				ofType = what === "of-type";--			return first === 1 && last === 0 ?--				// Shortcut for :nth-*(n)-				function( elem ) {-					return !!elem.parentNode;-				} :--				function( elem, context, xml ) {-					var cache, outerCache, node, diff, nodeIndex, start,-						dir = simple !== forward ? "nextSibling" : "previousSibling",-						parent = elem.parentNode,-						name = ofType && elem.nodeName.toLowerCase(),-						useCache = !xml && !ofType;--					if ( parent ) {--						// :(first|last|only)-(child|of-type)-						if ( simple ) {-							while ( dir ) {-								node = elem;-								while ( (node = node[ dir ]) ) {-									if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {-										return false;-									}-								}-								// Reverse direction for :only-* (if we haven't yet done so)-								start = dir = type === "only" && !start && "nextSibling";-							}-							return true;-						}--						start = [ forward ? parent.firstChild : parent.lastChild ];--						// non-xml :nth-child(...) stores cache data on `parent`-						if ( forward && useCache ) {-							// Seek `elem` from a previously-cached index-							outerCache = parent[ expando ] || (parent[ expando ] = {});-							cache = outerCache[ type ] || [];-							nodeIndex = cache[0] === dirruns && cache[1];-							diff = cache[0] === dirruns && cache[2];-							node = nodeIndex && parent.childNodes[ nodeIndex ];--							while ( (node = ++nodeIndex && node && node[ dir ] ||--								// Fallback to seeking `elem` from the start-								(diff = nodeIndex = 0) || start.pop()) ) {--								// When found, cache indexes on `parent` and break-								if ( node.nodeType === 1 && ++diff && node === elem ) {-									outerCache[ type ] = [ dirruns, nodeIndex, diff ];-									break;-								}-							}--						// Use previously-cached element index if available-						} else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {-							diff = cache[1];--						// xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)-						} else {-							// Use the same loop as above to seek `elem` from the start-							while ( (node = ++nodeIndex && node && node[ dir ] ||-								(diff = nodeIndex = 0) || start.pop()) ) {--								if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {-									// Cache the index of each encountered element-									if ( useCache ) {-										(node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];-									}--									if ( node === elem ) {-										break;-									}-								}-							}-						}--						// Incorporate the offset, then check against cycle size-						diff -= last;-						return diff === first || ( diff % first === 0 && diff / first >= 0 );-					}-				};-		},--		"PSEUDO": function( pseudo, argument ) {-			// pseudo-class names are case-insensitive-			// http://www.w3.org/TR/selectors/#pseudo-classes-			// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters-			// Remember that setFilters inherits from pseudos-			var args,-				fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||-					Sizzle.error( "unsupported pseudo: " + pseudo );--			// The user may use createPseudo to indicate that-			// arguments are needed to create the filter function-			// just as Sizzle does-			if ( fn[ expando ] ) {-				return fn( argument );-			}--			// But maintain support for old signatures-			if ( fn.length > 1 ) {-				args = [ pseudo, pseudo, "", argument ];-				return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?-					markFunction(function( seed, matches ) {-						var idx,-							matched = fn( seed, argument ),-							i = matched.length;-						while ( i-- ) {-							idx = indexOf.call( seed, matched[i] );-							seed[ idx ] = !( matches[ idx ] = matched[i] );-						}-					}) :-					function( elem ) {-						return fn( elem, 0, args );-					};-			}--			return fn;-		}-	},--	pseudos: {-		// Potentially complex pseudos-		"not": markFunction(function( selector ) {-			// Trim the selector passed to compile-			// to avoid treating leading and trailing-			// spaces as combinators-			var input = [],-				results = [],-				matcher = compile( selector.replace( rtrim, "$1" ) );--			return matcher[ expando ] ?-				markFunction(function( seed, matches, context, xml ) {-					var elem,-						unmatched = matcher( seed, null, xml, [] ),-						i = seed.length;--					// Match elements unmatched by `matcher`-					while ( i-- ) {-						if ( (elem = unmatched[i]) ) {-							seed[i] = !(matches[i] = elem);-						}-					}-				}) :-				function( elem, context, xml ) {-					input[0] = elem;-					matcher( input, null, xml, results );-					return !results.pop();-				};-		}),--		"has": markFunction(function( selector ) {-			return function( elem ) {-				return Sizzle( selector, elem ).length > 0;-			};-		}),--		"contains": markFunction(function( text ) {-			return function( elem ) {-				return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;-			};-		}),--		// "Whether an element is represented by a :lang() selector-		// is based solely on the element's language value-		// being equal to the identifier C,-		// or beginning with the identifier C immediately followed by "-".-		// The matching of C against the element's language value is performed case-insensitively.-		// The identifier C does not have to be a valid language name."-		// http://www.w3.org/TR/selectors/#lang-pseudo-		"lang": markFunction( function( lang ) {-			// lang value must be a valid identifier-			if ( !ridentifier.test(lang || "") ) {-				Sizzle.error( "unsupported lang: " + lang );-			}-			lang = lang.replace( runescape, funescape ).toLowerCase();-			return function( elem ) {-				var elemLang;-				do {-					if ( (elemLang = documentIsHTML ?-						elem.lang :-						elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {--						elemLang = elemLang.toLowerCase();-						return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;-					}-				} while ( (elem = elem.parentNode) && elem.nodeType === 1 );-				return false;-			};-		}),--		// Miscellaneous-		"target": function( elem ) {-			var hash = window.location && window.location.hash;-			return hash && hash.slice( 1 ) === elem.id;-		},--		"root": function( elem ) {-			return elem === docElem;-		},--		"focus": function( elem ) {-			return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);-		},--		// Boolean properties-		"enabled": function( elem ) {-			return elem.disabled === false;-		},--		"disabled": function( elem ) {-			return elem.disabled === true;-		},--		"checked": function( elem ) {-			// In CSS3, :checked should return both checked and selected elements-			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked-			var nodeName = elem.nodeName.toLowerCase();-			return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);-		},--		"selected": function( elem ) {-			// Accessing this property makes selected-by-default-			// options in Safari work properly-			if ( elem.parentNode ) {-				elem.parentNode.selectedIndex;-			}--			return elem.selected === true;-		},--		// Contents-		"empty": function( elem ) {-			// http://www.w3.org/TR/selectors/#empty-pseudo-			// :empty is only affected by element nodes and content nodes(including text(3), cdata(4)),-			//   not comment, processing instructions, or others-			// Thanks to Diego Perini for the nodeName shortcut-			//   Greater than "@" means alpha characters (specifically not starting with "#" or "?")-			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {-				if ( elem.nodeName > "@" || elem.nodeType === 3 || elem.nodeType === 4 ) {-					return false;-				}-			}-			return true;-		},--		"parent": function( elem ) {-			return !Expr.pseudos["empty"]( elem );-		},--		// Element/input types-		"header": function( elem ) {-			return rheader.test( elem.nodeName );-		},--		"input": function( elem ) {-			return rinputs.test( elem.nodeName );-		},--		"button": function( elem ) {-			var name = elem.nodeName.toLowerCase();-			return name === "input" && elem.type === "button" || name === "button";-		},--		"text": function( elem ) {-			var attr;-			// IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)-			// use getAttribute instead to test this case-			return elem.nodeName.toLowerCase() === "input" &&-				elem.type === "text" &&-				( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === elem.type );-		},--		// Position-in-collection-		"first": createPositionalPseudo(function() {-			return [ 0 ];-		}),--		"last": createPositionalPseudo(function( matchIndexes, length ) {-			return [ length - 1 ];-		}),--		"eq": createPositionalPseudo(function( matchIndexes, length, argument ) {-			return [ argument < 0 ? argument + length : argument ];-		}),--		"even": createPositionalPseudo(function( matchIndexes, length ) {-			var i = 0;-			for ( ; i < length; i += 2 ) {-				matchIndexes.push( i );-			}-			return matchIndexes;-		}),--		"odd": createPositionalPseudo(function( matchIndexes, length ) {-			var i = 1;-			for ( ; i < length; i += 2 ) {-				matchIndexes.push( i );-			}-			return matchIndexes;-		}),--		"lt": createPositionalPseudo(function( matchIndexes, length, argument ) {-			var i = argument < 0 ? argument + length : argument;-			for ( ; --i >= 0; ) {-				matchIndexes.push( i );-			}-			return matchIndexes;-		}),--		"gt": createPositionalPseudo(function( matchIndexes, length, argument ) {-			var i = argument < 0 ? argument + length : argument;-			for ( ; ++i < length; ) {-				matchIndexes.push( i );-			}-			return matchIndexes;-		})-	}-};--// Add button/input type pseudos-for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {-	Expr.pseudos[ i ] = createInputPseudo( i );-}-for ( i in { submit: true, reset: true } ) {-	Expr.pseudos[ i ] = createButtonPseudo( i );-}--function tokenize( selector, parseOnly ) {-	var matched, match, tokens, type,-		soFar, groups, preFilters,-		cached = tokenCache[ selector + " " ];--	if ( cached ) {-		return parseOnly ? 0 : cached.slice( 0 );-	}--	soFar = selector;-	groups = [];-	preFilters = Expr.preFilter;--	while ( soFar ) {--		// Comma and first run-		if ( !matched || (match = rcomma.exec( soFar )) ) {-			if ( match ) {-				// Don't consume trailing commas as valid-				soFar = soFar.slice( match[0].length ) || soFar;-			}-			groups.push( tokens = [] );-		}--		matched = false;--		// Combinators-		if ( (match = rcombinators.exec( soFar )) ) {-			matched = match.shift();-			tokens.push({-				value: matched,-				// Cast descendant combinators to space-				type: match[0].replace( rtrim, " " )-			});-			soFar = soFar.slice( matched.length );-		}--		// Filters-		for ( type in Expr.filter ) {-			if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||-				(match = preFilters[ type ]( match ))) ) {-				matched = match.shift();-				tokens.push({-					value: matched,-					type: type,-					matches: match-				});-				soFar = soFar.slice( matched.length );-			}-		}--		if ( !matched ) {-			break;-		}-	}--	// Return the length of the invalid excess-	// if we're just parsing-	// Otherwise, throw an error or return tokens-	return parseOnly ?-		soFar.length :-		soFar ?-			Sizzle.error( selector ) :-			// Cache the tokens-			tokenCache( selector, groups ).slice( 0 );-}--function toSelector( tokens ) {-	var i = 0,-		len = tokens.length,-		selector = "";-	for ( ; i < len; i++ ) {-		selector += tokens[i].value;-	}-	return selector;-}--function addCombinator( matcher, combinator, base ) {-	var dir = combinator.dir,-		checkNonElements = base && dir === "parentNode",-		doneName = done++;--	return combinator.first ?-		// Check against closest ancestor/preceding element-		function( elem, context, xml ) {-			while ( (elem = elem[ dir ]) ) {-				if ( elem.nodeType === 1 || checkNonElements ) {-					return matcher( elem, context, xml );-				}-			}-		} :--		// Check against all ancestor/preceding elements-		function( elem, context, xml ) {-			var data, cache, outerCache,-				dirkey = dirruns + " " + doneName;--			// We can't set arbitrary data on XML nodes, so they don't benefit from dir caching-			if ( xml ) {-				while ( (elem = elem[ dir ]) ) {-					if ( elem.nodeType === 1 || checkNonElements ) {-						if ( matcher( elem, context, xml ) ) {-							return true;-						}-					}-				}-			} else {-				while ( (elem = elem[ dir ]) ) {-					if ( elem.nodeType === 1 || checkNonElements ) {-						outerCache = elem[ expando ] || (elem[ expando ] = {});-						if ( (cache = outerCache[ dir ]) && cache[0] === dirkey ) {-							if ( (data = cache[1]) === true || data === cachedruns ) {-								return data === true;-							}-						} else {-							cache = outerCache[ dir ] = [ dirkey ];-							cache[1] = matcher( elem, context, xml ) || cachedruns;-							if ( cache[1] === true ) {-								return true;-							}-						}-					}-				}-			}-		};-}--function elementMatcher( matchers ) {-	return matchers.length > 1 ?-		function( elem, context, xml ) {-			var i = matchers.length;-			while ( i-- ) {-				if ( !matchers[i]( elem, context, xml ) ) {-					return false;-				}-			}-			return true;-		} :-		matchers[0];-}--function condense( unmatched, map, filter, context, xml ) {-	var elem,-		newUnmatched = [],-		i = 0,-		len = unmatched.length,-		mapped = map != null;--	for ( ; i < len; i++ ) {-		if ( (elem = unmatched[i]) ) {-			if ( !filter || filter( elem, context, xml ) ) {-				newUnmatched.push( elem );-				if ( mapped ) {-					map.push( i );-				}-			}-		}-	}--	return newUnmatched;-}--function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {-	if ( postFilter && !postFilter[ expando ] ) {-		postFilter = setMatcher( postFilter );-	}-	if ( postFinder && !postFinder[ expando ] ) {-		postFinder = setMatcher( postFinder, postSelector );-	}-	return markFunction(function( seed, results, context, xml ) {-		var temp, i, elem,-			preMap = [],-			postMap = [],-			preexisting = results.length,--			// Get initial elements from seed or context-			elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),--			// Prefilter to get matcher input, preserving a map for seed-results synchronization-			matcherIn = preFilter && ( seed || !selector ) ?-				condense( elems, preMap, preFilter, context, xml ) :-				elems,--			matcherOut = matcher ?-				// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,-				postFinder || ( seed ? preFilter : preexisting || postFilter ) ?--					// ...intermediate processing is necessary-					[] :--					// ...otherwise use results directly-					results :-				matcherIn;--		// Find primary matches-		if ( matcher ) {-			matcher( matcherIn, matcherOut, context, xml );-		}--		// Apply postFilter-		if ( postFilter ) {-			temp = condense( matcherOut, postMap );-			postFilter( temp, [], context, xml );--			// Un-match failing elements by moving them back to matcherIn-			i = temp.length;-			while ( i-- ) {-				if ( (elem = temp[i]) ) {-					matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);-				}-			}-		}--		if ( seed ) {-			if ( postFinder || preFilter ) {-				if ( postFinder ) {-					// Get the final matcherOut by condensing this intermediate into postFinder contexts-					temp = [];-					i = matcherOut.length;-					while ( i-- ) {-						if ( (elem = matcherOut[i]) ) {-							// Restore matcherIn since elem is not yet a final match-							temp.push( (matcherIn[i] = elem) );-						}-					}-					postFinder( null, (matcherOut = []), temp, xml );-				}--				// Move matched elements from seed to results to keep them synchronized-				i = matcherOut.length;-				while ( i-- ) {-					if ( (elem = matcherOut[i]) &&-						(temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) {--						seed[temp] = !(results[temp] = elem);-					}-				}-			}--		// Add elements to results, through postFinder if defined-		} else {-			matcherOut = condense(-				matcherOut === results ?-					matcherOut.splice( preexisting, matcherOut.length ) :-					matcherOut-			);-			if ( postFinder ) {-				postFinder( null, results, matcherOut, xml );-			} else {-				push.apply( results, matcherOut );-			}-		}-	});-}--function matcherFromTokens( tokens ) {-	var checkContext, matcher, j,-		len = tokens.length,-		leadingRelative = Expr.relative[ tokens[0].type ],-		implicitRelative = leadingRelative || Expr.relative[" "],-		i = leadingRelative ? 1 : 0,--		// The foundational matcher ensures that elements are reachable from top-level context(s)-		matchContext = addCombinator( function( elem ) {-			return elem === checkContext;-		}, implicitRelative, true ),-		matchAnyContext = addCombinator( function( elem ) {-			return indexOf.call( checkContext, elem ) > -1;-		}, implicitRelative, true ),-		matchers = [ function( elem, context, xml ) {-			return ( !leadingRelative && ( xml || context !== outermostContext ) ) || (-				(checkContext = context).nodeType ?-					matchContext( elem, context, xml ) :-					matchAnyContext( elem, context, xml ) );-		} ];--	for ( ; i < len; i++ ) {-		if ( (matcher = Expr.relative[ tokens[i].type ]) ) {-			matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];-		} else {-			matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );--			// Return special upon seeing a positional matcher-			if ( matcher[ expando ] ) {-				// Find the next relative operator (if any) for proper handling-				j = ++i;-				for ( ; j < len; j++ ) {-					if ( Expr.relative[ tokens[j].type ] ) {-						break;-					}-				}-				return setMatcher(-					i > 1 && elementMatcher( matchers ),-					i > 1 && toSelector(-						// If the preceding token was a descendant combinator, insert an implicit any-element `*`-						tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })-					).replace( rtrim, "$1" ),-					matcher,-					i < j && matcherFromTokens( tokens.slice( i, j ) ),-					j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),-					j < len && toSelector( tokens )-				);-			}-			matchers.push( matcher );-		}-	}--	return elementMatcher( matchers );-}--function matcherFromGroupMatchers( elementMatchers, setMatchers ) {-	// A counter to specify which element is currently being matched-	var matcherCachedRuns = 0,-		bySet = setMatchers.length > 0,-		byElement = elementMatchers.length > 0,-		superMatcher = function( seed, context, xml, results, expandContext ) {-			var elem, j, matcher,-				setMatched = [],-				matchedCount = 0,-				i = "0",-				unmatched = seed && [],-				outermost = expandContext != null,-				contextBackup = outermostContext,-				// We must always have either seed elements or context-				elems = seed || byElement && Expr.find["TAG"]( "*", expandContext && context.parentNode || context ),-				// Use integer dirruns iff this is the outermost matcher-				dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1);--			if ( outermost ) {-				outermostContext = context !== document && context;-				cachedruns = matcherCachedRuns;-			}--			// Add elements passing elementMatchers directly to results-			// Keep `i` a string if there are no elements so `matchedCount` will be "00" below-			for ( ; (elem = elems[i]) != null; i++ ) {-				if ( byElement && elem ) {-					j = 0;-					while ( (matcher = elementMatchers[j++]) ) {-						if ( matcher( elem, context, xml ) ) {-							results.push( elem );-							break;-						}-					}-					if ( outermost ) {-						dirruns = dirrunsUnique;-						cachedruns = ++matcherCachedRuns;-					}-				}--				// Track unmatched elements for set filters-				if ( bySet ) {-					// They will have gone through all possible matchers-					if ( (elem = !matcher && elem) ) {-						matchedCount--;-					}--					// Lengthen the array for every element, matched or not-					if ( seed ) {-						unmatched.push( elem );-					}-				}-			}--			// Apply set filters to unmatched elements-			matchedCount += i;-			if ( bySet && i !== matchedCount ) {-				j = 0;-				while ( (matcher = setMatchers[j++]) ) {-					matcher( unmatched, setMatched, context, xml );-				}--				if ( seed ) {-					// Reintegrate element matches to eliminate the need for sorting-					if ( matchedCount > 0 ) {-						while ( i-- ) {-							if ( !(unmatched[i] || setMatched[i]) ) {-								setMatched[i] = pop.call( results );-							}-						}-					}--					// Discard index placeholder values to get only actual matches-					setMatched = condense( setMatched );-				}--				// Add matches to results-				push.apply( results, setMatched );--				// Seedless set matches succeeding multiple successful matchers stipulate sorting-				if ( outermost && !seed && setMatched.length > 0 &&-					( matchedCount + setMatchers.length ) > 1 ) {--					Sizzle.uniqueSort( results );-				}-			}--			// Override manipulation of globals by nested matchers-			if ( outermost ) {-				dirruns = dirrunsUnique;-				outermostContext = contextBackup;-			}--			return unmatched;-		};--	return bySet ?-		markFunction( superMatcher ) :-		superMatcher;-}--compile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) {-	var i,-		setMatchers = [],-		elementMatchers = [],-		cached = compilerCache[ selector + " " ];--	if ( !cached ) {-		// Generate a function of recursive functions that can be used to check each element-		if ( !group ) {-			group = tokenize( selector );-		}-		i = group.length;-		while ( i-- ) {-			cached = matcherFromTokens( group[i] );-			if ( cached[ expando ] ) {-				setMatchers.push( cached );-			} else {-				elementMatchers.push( cached );-			}-		}--		// Cache the compiled function-		cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );-	}-	return cached;-};--function multipleContexts( selector, contexts, results ) {-	var i = 0,-		len = contexts.length;-	for ( ; i < len; i++ ) {-		Sizzle( selector, contexts[i], results );-	}-	return results;-}--function select( selector, context, results, seed ) {-	var i, tokens, token, type, find,-		match = tokenize( selector );--	if ( !seed ) {-		// Try to minimize operations if there is only one group-		if ( match.length === 1 ) {--			// Take a shortcut and set the context if the root selector is an ID-			tokens = match[0] = match[0].slice( 0 );-			if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&-					support.getById && context.nodeType === 9 && documentIsHTML &&-					Expr.relative[ tokens[1].type ] ) {--				context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];-				if ( !context ) {-					return results;-				}-				selector = selector.slice( tokens.shift().value.length );-			}--			// Fetch a seed set for right-to-left matching-			i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;-			while ( i-- ) {-				token = tokens[i];--				// Abort if we hit a combinator-				if ( Expr.relative[ (type = token.type) ] ) {-					break;-				}-				if ( (find = Expr.find[ type ]) ) {-					// Search, expanding context for leading sibling combinators-					if ( (seed = find(-						token.matches[0].replace( runescape, funescape ),-						rsibling.test( tokens[0].type ) && context.parentNode || context-					)) ) {--						// If seed is empty or no tokens remain, we can return early-						tokens.splice( i, 1 );-						selector = seed.length && toSelector( tokens );-						if ( !selector ) {-							push.apply( results, seed );-							return results;-						}--						break;-					}-				}-			}-		}-	}--	// Compile and execute a filtering function-	// Provide `match` to avoid retokenization if we modified the selector above-	compile( selector, match )(-		seed,-		context,-		!documentIsHTML,-		results,-		rsibling.test( selector )-	);-	return results;-}--// Deprecated-Expr.pseudos["nth"] = Expr.pseudos["eq"];--// Easy API for creating new setFilters-function setFilters() {}-setFilters.prototype = Expr.filters = Expr.pseudos;-Expr.setFilters = new setFilters();--// One-time assignments--// Sort stability-support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;--// Initialize against the default document-setDocument();--// Support: Chrome<<14-// Always assume duplicates if they aren't passed to the comparison function-[0, 0].sort( sortOrder );-support.detectDuplicates = hasDuplicate;--jQuery.find = Sizzle;-jQuery.expr = Sizzle.selectors;-jQuery.expr[":"] = jQuery.expr.pseudos;-jQuery.unique = Sizzle.uniqueSort;-jQuery.text = Sizzle.getText;-jQuery.isXMLDoc = Sizzle.isXML;-jQuery.contains = Sizzle.contains;---})( window );-// String to Object options format cache-var optionsCache = {};--// Convert String-formatted options into Object-formatted ones and store in cache-function createOptions( options ) {-	var object = optionsCache[ options ] = {};-	jQuery.each( options.match( core_rnotwhite ) || [], function( _, flag ) {-		object[ flag ] = true;-	});-	return object;-}--/*- * Create a callback list using the following parameters:- *- *	options: an optional list of space-separated options that will change how- *			the callback list behaves or a more traditional option object- *- * By default a callback list will act like an event callback list and can be- * "fired" multiple times.- *- * Possible options:- *- *	once:			will ensure the callback list can only be fired once (like a Deferred)- *- *	memory:			will keep track of previous values and will call any callback added- *					after the list has been fired right away with the latest "memorized"- *					values (like a Deferred)- *- *	unique:			will ensure a callback can only be added once (no duplicate in the list)- *- *	stopOnFalse:	interrupt callings when a callback returns false- *- */-jQuery.Callbacks = function( options ) {--	// Convert options from String-formatted to Object-formatted if needed-	// (we check in cache first)-	options = typeof options === "string" ?-		( optionsCache[ options ] || createOptions( options ) ) :-		jQuery.extend( {}, options );--	var // Flag to know if list is currently firing-		firing,-		// Last fire value (for non-forgettable lists)-		memory,-		// Flag to know if list was already fired-		fired,-		// End of the loop when firing-		firingLength,-		// Index of currently firing callback (modified by remove if needed)-		firingIndex,-		// First callback to fire (used internally by add and fireWith)-		firingStart,-		// Actual callback list-		list = [],-		// Stack of fire calls for repeatable lists-		stack = !options.once && [],-		// Fire callbacks-		fire = function( data ) {-			memory = options.memory && data;-			fired = true;-			firingIndex = firingStart || 0;-			firingStart = 0;-			firingLength = list.length;-			firing = true;-			for ( ; list && firingIndex < firingLength; firingIndex++ ) {-				if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {-					memory = false; // To prevent further calls using add-					break;-				}-			}-			firing = false;-			if ( list ) {-				if ( stack ) {-					if ( stack.length ) {-						fire( stack.shift() );-					}-				} else if ( memory ) {-					list = [];-				} else {-					self.disable();-				}-			}-		},-		// Actual Callbacks object-		self = {-			// Add a callback or a collection of callbacks to the list-			add: function() {-				if ( list ) {-					// First, we save the current length-					var start = list.length;-					(function add( args ) {-						jQuery.each( args, function( _, arg ) {-							var type = jQuery.type( arg );-							if ( type === "function" ) {-								if ( !options.unique || !self.has( arg ) ) {-									list.push( arg );-								}-							} else if ( arg && arg.length && type !== "string" ) {-								// Inspect recursively-								add( arg );-							}-						});-					})( arguments );-					// Do we need to add the callbacks to the-					// current firing batch?-					if ( firing ) {-						firingLength = list.length;-					// With memory, if we're not firing then-					// we should call right away-					} else if ( memory ) {-						firingStart = start;-						fire( memory );-					}-				}-				return this;-			},-			// Remove a callback from the list-			remove: function() {-				if ( list ) {-					jQuery.each( arguments, function( _, arg ) {-						var index;-						while( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {-							list.splice( index, 1 );-							// Handle firing indexes-							if ( firing ) {-								if ( index <= firingLength ) {-									firingLength--;-								}-								if ( index <= firingIndex ) {-									firingIndex--;-								}-							}-						}-					});-				}-				return this;-			},-			// Check if a given callback is in the list.-			// If no argument is given, return whether or not list has callbacks attached.-			has: function( fn ) {-				return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );-			},-			// Remove all callbacks from the list-			empty: function() {-				list = [];-				firingLength = 0;-				return this;-			},-			// Have the list do nothing anymore-			disable: function() {-				list = stack = memory = undefined;-				return this;-			},-			// Is it disabled?-			disabled: function() {-				return !list;-			},-			// Lock the list in its current state-			lock: function() {-				stack = undefined;-				if ( !memory ) {-					self.disable();-				}-				return this;-			},-			// Is it locked?-			locked: function() {-				return !stack;-			},-			// Call all callbacks with the given context and arguments-			fireWith: function( context, args ) {-				args = args || [];-				args = [ context, args.slice ? args.slice() : args ];-				if ( list && ( !fired || stack ) ) {-					if ( firing ) {-						stack.push( args );-					} else {-						fire( args );-					}-				}-				return this;-			},-			// Call all the callbacks with the given arguments-			fire: function() {-				self.fireWith( this, arguments );-				return this;-			},-			// To know if the callbacks have already been called at least once-			fired: function() {-				return !!fired;-			}-		};--	return self;-};-jQuery.extend({--	Deferred: function( func ) {-		var tuples = [-				// action, add listener, listener list, final state-				[ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ],-				[ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ],-				[ "notify", "progress", jQuery.Callbacks("memory") ]-			],-			state = "pending",-			promise = {-				state: function() {-					return state;-				},-				always: function() {-					deferred.done( arguments ).fail( arguments );-					return this;-				},-				then: function( /* fnDone, fnFail, fnProgress */ ) {-					var fns = arguments;-					return jQuery.Deferred(function( newDefer ) {-						jQuery.each( tuples, function( i, tuple ) {-							var action = tuple[ 0 ],-								fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];-							// deferred[ done | fail | progress ] for forwarding actions to newDefer-							deferred[ tuple[1] ](function() {-								var returned = fn && fn.apply( this, arguments );-								if ( returned && jQuery.isFunction( returned.promise ) ) {-									returned.promise()-										.done( newDefer.resolve )-										.fail( newDefer.reject )-										.progress( newDefer.notify );-								} else {-									newDefer[ action + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );-								}-							});-						});-						fns = null;-					}).promise();-				},-				// Get a promise for this deferred-				// If obj is provided, the promise aspect is added to the object-				promise: function( obj ) {-					return obj != null ? jQuery.extend( obj, promise ) : promise;-				}-			},-			deferred = {};--		// Keep pipe for back-compat-		promise.pipe = promise.then;--		// Add list-specific methods-		jQuery.each( tuples, function( i, tuple ) {-			var list = tuple[ 2 ],-				stateString = tuple[ 3 ];--			// promise[ done | fail | progress ] = list.add-			promise[ tuple[1] ] = list.add;--			// Handle state-			if ( stateString ) {-				list.add(function() {-					// state = [ resolved | rejected ]-					state = stateString;--				// [ reject_list | resolve_list ].disable; progress_list.lock-				}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );-			}--			// deferred[ resolve | reject | notify ]-			deferred[ tuple[0] ] = function() {-				deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments );-				return this;-			};-			deferred[ tuple[0] + "With" ] = list.fireWith;-		});--		// Make the deferred a promise-		promise.promise( deferred );--		// Call given func if any-		if ( func ) {-			func.call( deferred, deferred );-		}--		// All done!-		return deferred;-	},--	// Deferred helper-	when: function( subordinate /* , ..., subordinateN */ ) {-		var i = 0,-			resolveValues = core_slice.call( arguments ),-			length = resolveValues.length,--			// the count of uncompleted subordinates-			remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,--			// the master Deferred. If resolveValues consist of only a single Deferred, just use that.-			deferred = remaining === 1 ? subordinate : jQuery.Deferred(),--			// Update function for both resolve and progress values-			updateFunc = function( i, contexts, values ) {-				return function( value ) {-					contexts[ i ] = this;-					values[ i ] = arguments.length > 1 ? core_slice.call( arguments ) : value;-					if( values === progressValues ) {-						deferred.notifyWith( contexts, values );-					} else if ( !( --remaining ) ) {-						deferred.resolveWith( contexts, values );-					}-				};-			},--			progressValues, progressContexts, resolveContexts;--		// add listeners to Deferred subordinates; treat others as resolved-		if ( length > 1 ) {-			progressValues = new Array( length );-			progressContexts = new Array( length );-			resolveContexts = new Array( length );-			for ( ; i < length; i++ ) {-				if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {-					resolveValues[ i ].promise()-						.done( updateFunc( i, resolveContexts, resolveValues ) )-						.fail( deferred.reject )-						.progress( updateFunc( i, progressContexts, progressValues ) );-				} else {-					--remaining;-				}-			}-		}--		// if we're not waiting on anything, resolve the master-		if ( !remaining ) {-			deferred.resolveWith( resolveContexts, resolveValues );-		}--		return deferred.promise();-	}-});-jQuery.support = (function( support ) {--	var all, a, input, select, fragment, opt, eventName, isSupported, i,-		div = document.createElement("div");--	// Setup-	div.setAttribute( "className", "t" );-	div.innerHTML = "  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";--	// Finish early in limited (non-browser) environments-	all = div.getElementsByTagName("*") || [];-	a = div.getElementsByTagName("a")[ 0 ];-	if ( !a || !a.style || !all.length ) {-		return support;-	}--	// First batch of tests-	select = document.createElement("select");-	opt = select.appendChild( document.createElement("option") );-	input = div.getElementsByTagName("input")[ 0 ];--	a.style.cssText = "top:1px;float:left;opacity:.5";--	// Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)-	support.getSetAttribute = div.className !== "t";--	// IE strips leading whitespace when .innerHTML is used-	support.leadingWhitespace = div.firstChild.nodeType === 3;--	// Make sure that tbody elements aren't automatically inserted-	// IE will insert them into empty tables-	support.tbody = !div.getElementsByTagName("tbody").length;--	// Make sure that link elements get serialized correctly by innerHTML-	// This requires a wrapper element in IE-	support.htmlSerialize = !!div.getElementsByTagName("link").length;--	// Get the style information from getAttribute-	// (IE uses .cssText instead)-	support.style = /top/.test( a.getAttribute("style") );--	// Make sure that URLs aren't manipulated-	// (IE normalizes it by default)-	support.hrefNormalized = a.getAttribute("href") === "/a";--	// Make sure that element opacity exists-	// (IE uses filter instead)-	// Use a regex to work around a WebKit issue. See #5145-	support.opacity = /^0.5/.test( a.style.opacity );--	// Verify style float existence-	// (IE uses styleFloat instead of cssFloat)-	support.cssFloat = !!a.style.cssFloat;--	// Check the default checkbox/radio value ("" on WebKit; "on" elsewhere)-	support.checkOn = !!input.value;--	// Make sure that a selected-by-default option has a working selected property.-	// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)-	support.optSelected = opt.selected;--	// Tests for enctype support on a form (#6743)-	support.enctype = !!document.createElement("form").enctype;--	// Makes sure cloning an html5 element does not cause problems-	// Where outerHTML is undefined, this still works-	support.html5Clone = document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav></:nav>";--	// Will be defined later-	support.inlineBlockNeedsLayout = false;-	support.shrinkWrapBlocks = false;-	support.pixelPosition = false;-	support.deleteExpando = true;-	support.noCloneEvent = true;-	support.reliableMarginRight = true;-	support.boxSizingReliable = true;--	// Make sure checked status is properly cloned-	input.checked = true;-	support.noCloneChecked = input.cloneNode( true ).checked;--	// Make sure that the options inside disabled selects aren't marked as disabled-	// (WebKit marks them as disabled)-	select.disabled = true;-	support.optDisabled = !opt.disabled;--	// Support: IE<9-	try {-		delete div.test;-	} catch( e ) {-		support.deleteExpando = false;-	}--	// Check if we can trust getAttribute("value")-	input = document.createElement("input");-	input.setAttribute( "value", "" );-	support.input = input.getAttribute( "value" ) === "";--	// Check if an input maintains its value after becoming a radio-	input.value = "t";-	input.setAttribute( "type", "radio" );-	support.radioValue = input.value === "t";--	// #11217 - WebKit loses check when the name is after the checked attribute-	input.setAttribute( "checked", "t" );-	input.setAttribute( "name", "t" );--	fragment = document.createDocumentFragment();-	fragment.appendChild( input );--	// Check if a disconnected checkbox will retain its checked-	// value of true after appended to the DOM (IE6/7)-	support.appendChecked = input.checked;--	// WebKit doesn't clone checked state correctly in fragments-	support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;--	// Support: IE<9-	// Opera does not clone events (and typeof div.attachEvent === undefined).-	// IE9-10 clones events bound via attachEvent, but they don't trigger with .click()-	if ( div.attachEvent ) {-		div.attachEvent( "onclick", function() {-			support.noCloneEvent = false;-		});--		div.cloneNode( true ).click();-	}--	// Support: IE<9 (lack submit/change bubble), Firefox 17+ (lack focusin event)-	// Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP)-	for ( i in { submit: true, change: true, focusin: true }) {-		div.setAttribute( eventName = "on" + i, "t" );--		support[ i + "Bubbles" ] = eventName in window || div.attributes[ eventName ].expando === false;-	}--	div.style.backgroundClip = "content-box";-	div.cloneNode( true ).style.backgroundClip = "";-	support.clearCloneStyle = div.style.backgroundClip === "content-box";--	// Support: IE<9-	// Iteration over object's inherited properties before its own.-	for ( i in jQuery( support ) ) {-		break;-	}-	support.ownLast = i !== "0";--	// Run tests that need a body at doc ready-	jQuery(function() {-		var container, marginDiv, tds,-			divReset = "padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",-			body = document.getElementsByTagName("body")[0];--		if ( !body ) {-			// Return for frameset docs that don't have a body-			return;-		}--		container = document.createElement("div");-		container.style.cssText = "border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px";--		body.appendChild( container ).appendChild( div );--		// Support: IE8-		// Check if table cells still have offsetWidth/Height when they are set-		// to display:none and there are still other visible table cells in a-		// table row; if so, offsetWidth/Height are not reliable for use when-		// determining if an element has been hidden directly using-		// display:none (it is still safe to use offsets if a parent element is-		// hidden; don safety goggles and see bug #4512 for more information).-		div.innerHTML = "<table><tr><td></td><td>t</td></tr></table>";-		tds = div.getElementsByTagName("td");-		tds[ 0 ].style.cssText = "padding:0;margin:0;border:0;display:none";-		isSupported = ( tds[ 0 ].offsetHeight === 0 );--		tds[ 0 ].style.display = "";-		tds[ 1 ].style.display = "none";--		// Support: IE8-		// Check if empty table cells still have offsetWidth/Height-		support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );--		// Check box-sizing and margin behavior.-		div.innerHTML = "";-		div.style.cssText = "box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;";--		// Workaround failing boxSizing test due to offsetWidth returning wrong value-		// with some non-1 values of body zoom, ticket #13543-		jQuery.swap( body, body.style.zoom != null ? { zoom: 1 } : {}, function() {-			support.boxSizing = div.offsetWidth === 4;-		});--		// Use window.getComputedStyle because jsdom on node.js will break without it.-		if ( window.getComputedStyle ) {-			support.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== "1%";-			support.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px";--			// Check if div with explicit width and no margin-right incorrectly-			// gets computed margin-right based on width of container. (#3333)-			// Fails in WebKit before Feb 2011 nightlies-			// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right-			marginDiv = div.appendChild( document.createElement("div") );-			marginDiv.style.cssText = div.style.cssText = divReset;-			marginDiv.style.marginRight = marginDiv.style.width = "0";-			div.style.width = "1px";--			support.reliableMarginRight =-				!parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight );-		}--		if ( typeof div.style.zoom !== core_strundefined ) {-			// Support: IE<8-			// Check if natively block-level elements act like inline-block-			// elements when setting their display to 'inline' and giving-			// them layout-			div.innerHTML = "";-			div.style.cssText = divReset + "width:1px;padding:1px;display:inline;zoom:1";-			support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 );--			// Support: IE6-			// Check if elements with layout shrink-wrap their children-			div.style.display = "block";-			div.innerHTML = "<div></div>";-			div.firstChild.style.width = "5px";-			support.shrinkWrapBlocks = ( div.offsetWidth !== 3 );--			if ( support.inlineBlockNeedsLayout ) {-				// Prevent IE 6 from affecting layout for positioned elements #11048-				// Prevent IE from shrinking the body in IE 7 mode #12869-				// Support: IE<8-				body.style.zoom = 1;-			}-		}--		body.removeChild( container );--		// Null elements to avoid leaks in IE-		container = div = tds = marginDiv = null;-	});--	// Null elements to avoid leaks in IE-	all = select = fragment = opt = a = input = null;--	return support;-})({});--var rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/,-	rmultiDash = /([A-Z])/g;--function internalData( elem, name, data, pvt /* Internal Use Only */ ){-	if ( !jQuery.acceptData( elem ) ) {-		return;-	}--	var ret, thisCache,-		internalKey = jQuery.expando,--		// We have to handle DOM nodes and JS objects differently because IE6-7-		// can't GC object references properly across the DOM-JS boundary-		isNode = elem.nodeType,--		// Only DOM nodes need the global jQuery cache; JS object data is-		// attached directly to the object so GC can occur automatically-		cache = isNode ? jQuery.cache : elem,--		// Only defining an ID for JS objects if its cache already exists allows-		// the code to shortcut on the same path as a DOM node with no cache-		id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;--	// Avoid doing any more work than we need to when trying to get data on an-	// object that has no data at all-	if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && data === undefined && typeof name === "string" ) {-		return;-	}--	if ( !id ) {-		// Only DOM nodes need a new unique ID for each element since their data-		// ends up in the global cache-		if ( isNode ) {-			id = elem[ internalKey ] = core_deletedIds.pop() || jQuery.guid++;-		} else {-			id = internalKey;-		}-	}--	if ( !cache[ id ] ) {-		// Avoid exposing jQuery metadata on plain JS objects when the object-		// is serialized using JSON.stringify-		cache[ id ] = isNode ? {} : { toJSON: jQuery.noop };-	}--	// An object can be passed to jQuery.data instead of a key/value pair; this gets-	// shallow copied over onto the existing cache-	if ( typeof name === "object" || typeof name === "function" ) {-		if ( pvt ) {-			cache[ id ] = jQuery.extend( cache[ id ], name );-		} else {-			cache[ id ].data = jQuery.extend( cache[ id ].data, name );-		}-	}--	thisCache = cache[ id ];--	// jQuery data() is stored in a separate object inside the object's internal data-	// cache in order to avoid key collisions between internal data and user-defined-	// data.-	if ( !pvt ) {-		if ( !thisCache.data ) {-			thisCache.data = {};-		}--		thisCache = thisCache.data;-	}--	if ( data !== undefined ) {-		thisCache[ jQuery.camelCase( name ) ] = data;-	}--	// Check for both converted-to-camel and non-converted data property names-	// If a data property was specified-	if ( typeof name === "string" ) {--		// First Try to find as-is property data-		ret = thisCache[ name ];--		// Test for null|undefined property data-		if ( ret == null ) {--			// Try to find the camelCased property-			ret = thisCache[ jQuery.camelCase( name ) ];-		}-	} else {-		ret = thisCache;-	}--	return ret;-}--function internalRemoveData( elem, name, pvt ) {-	if ( !jQuery.acceptData( elem ) ) {-		return;-	}--	var thisCache, i,-		isNode = elem.nodeType,--		// See jQuery.data for more information-		cache = isNode ? jQuery.cache : elem,-		id = isNode ? elem[ jQuery.expando ] : jQuery.expando;--	// If there is already no cache entry for this object, there is no-	// purpose in continuing-	if ( !cache[ id ] ) {-		return;-	}--	if ( name ) {--		thisCache = pvt ? cache[ id ] : cache[ id ].data;--		if ( thisCache ) {--			// Support array or space separated string names for data keys-			if ( !jQuery.isArray( name ) ) {--				// try the string as a key before any manipulation-				if ( name in thisCache ) {-					name = [ name ];-				} else {--					// split the camel cased version by spaces unless a key with the spaces exists-					name = jQuery.camelCase( name );-					if ( name in thisCache ) {-						name = [ name ];-					} else {-						name = name.split(" ");-					}-				}-			} else {-				// If "name" is an array of keys...-				// When data is initially created, via ("key", "val") signature,-				// keys will be converted to camelCase.-				// Since there is no way to tell _how_ a key was added, remove-				// both plain key and camelCase key. #12786-				// This will only penalize the array argument path.-				name = name.concat( jQuery.map( name, jQuery.camelCase ) );-			}--			i = name.length;-			while ( i-- ) {-				delete thisCache[ name[i] ];-			}--			// If there is no data left in the cache, we want to continue-			// and let the cache object itself get destroyed-			if ( pvt ? !isEmptyDataObject(thisCache) : !jQuery.isEmptyObject(thisCache) ) {-				return;-			}-		}-	}--	// See jQuery.data for more information-	if ( !pvt ) {-		delete cache[ id ].data;--		// Don't destroy the parent cache unless the internal data object-		// had been the only thing left in it-		if ( !isEmptyDataObject( cache[ id ] ) ) {-			return;-		}-	}--	// Destroy the cache-	if ( isNode ) {-		jQuery.cleanData( [ elem ], true );--	// Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)-	/* jshint eqeqeq: false */-	} else if ( jQuery.support.deleteExpando || cache != cache.window ) {-		/* jshint eqeqeq: true */-		delete cache[ id ];--	// When all else fails, null-	} else {-		cache[ id ] = null;-	}-}--jQuery.extend({-	cache: {},--	// The following elements throw uncatchable exceptions if you-	// attempt to add expando properties to them.-	noData: {-		"applet": true,-		"embed": true,-		// Ban all objects except for Flash (which handle expandos)-		"object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"-	},--	hasData: function( elem ) {-		elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];-		return !!elem && !isEmptyDataObject( elem );-	},--	data: function( elem, name, data ) {-		return internalData( elem, name, data );-	},--	removeData: function( elem, name ) {-		return internalRemoveData( elem, name );-	},--	// For internal use only.-	_data: function( elem, name, data ) {-		return internalData( elem, name, data, true );-	},--	_removeData: function( elem, name ) {-		return internalRemoveData( elem, name, true );-	},--	// A method for determining if a DOM node can handle the data expando-	acceptData: function( elem ) {-		// Do not set data on non-element because it will not be cleared (#8335).-		if ( elem.nodeType && elem.nodeType !== 1 && elem.nodeType !== 9 ) {-			return false;-		}--		var noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ];--		// nodes accept data unless otherwise specified; rejection can be conditional-		return !noData || noData !== true && elem.getAttribute("classid") === noData;-	}-});--jQuery.fn.extend({-	data: function( key, value ) {-		var attrs, name,-			data = null,-			i = 0,-			elem = this[0];--		// Special expections of .data basically thwart jQuery.access,-		// so implement the relevant behavior ourselves--		// Gets all values-		if ( key === undefined ) {-			if ( this.length ) {-				data = jQuery.data( elem );--				if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) {-					attrs = elem.attributes;-					for ( ; i < attrs.length; i++ ) {-						name = attrs[i].name;--						if ( name.indexOf("data-") === 0 ) {-							name = jQuery.camelCase( name.slice(5) );--							dataAttr( elem, name, data[ name ] );-						}-					}-					jQuery._data( elem, "parsedAttrs", true );-				}-			}--			return data;-		}--		// Sets multiple values-		if ( typeof key === "object" ) {-			return this.each(function() {-				jQuery.data( this, key );-			});-		}--		return arguments.length > 1 ?--			// Sets one value-			this.each(function() {-				jQuery.data( this, key, value );-			}) :--			// Gets one value-			// Try to fetch any internally stored data first-			elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : null;-	},--	removeData: function( key ) {-		return this.each(function() {-			jQuery.removeData( this, key );-		});-	}-});--function dataAttr( elem, key, data ) {-	// If nothing was found internally, try to fetch any-	// data from the HTML5 data-* attribute-	if ( data === undefined && elem.nodeType === 1 ) {--		var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();--		data = elem.getAttribute( name );--		if ( typeof data === "string" ) {-			try {-				data = data === "true" ? true :-					data === "false" ? false :-					data === "null" ? null :-					// Only convert to a number if it doesn't change the string-					+data + "" === data ? +data :-					rbrace.test( data ) ? jQuery.parseJSON( data ) :-						data;-			} catch( e ) {}--			// Make sure we set the data so it isn't changed later-			jQuery.data( elem, key, data );--		} else {-			data = undefined;-		}-	}--	return data;-}--// checks a cache object for emptiness-function isEmptyDataObject( obj ) {-	var name;-	for ( name in obj ) {--		// if the public data object is empty, the private is still empty-		if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) {-			continue;-		}-		if ( name !== "toJSON" ) {-			return false;-		}-	}--	return true;-}-jQuery.extend({-	queue: function( elem, type, data ) {-		var queue;--		if ( elem ) {-			type = ( type || "fx" ) + "queue";-			queue = jQuery._data( elem, type );--			// Speed up dequeue by getting out quickly if this is just a lookup-			if ( data ) {-				if ( !queue || jQuery.isArray(data) ) {-					queue = jQuery._data( elem, type, jQuery.makeArray(data) );-				} else {-					queue.push( data );-				}-			}-			return queue || [];-		}-	},--	dequeue: function( elem, type ) {-		type = type || "fx";--		var queue = jQuery.queue( elem, type ),-			startLength = queue.length,-			fn = queue.shift(),-			hooks = jQuery._queueHooks( elem, type ),-			next = function() {-				jQuery.dequeue( elem, type );-			};--		// If the fx queue is dequeued, always remove the progress sentinel-		if ( fn === "inprogress" ) {-			fn = queue.shift();-			startLength--;-		}--		if ( fn ) {--			// Add a progress sentinel to prevent the fx queue from being-			// automatically dequeued-			if ( type === "fx" ) {-				queue.unshift( "inprogress" );-			}--			// clear up the last queue stop function-			delete hooks.stop;-			fn.call( elem, next, hooks );-		}--		if ( !startLength && hooks ) {-			hooks.empty.fire();-		}-	},--	// not intended for public consumption - generates a queueHooks object, or returns the current one-	_queueHooks: function( elem, type ) {-		var key = type + "queueHooks";-		return jQuery._data( elem, key ) || jQuery._data( elem, key, {-			empty: jQuery.Callbacks("once memory").add(function() {-				jQuery._removeData( elem, type + "queue" );-				jQuery._removeData( elem, key );-			})-		});-	}-});--jQuery.fn.extend({-	queue: function( type, data ) {-		var setter = 2;--		if ( typeof type !== "string" ) {-			data = type;-			type = "fx";-			setter--;-		}--		if ( arguments.length < setter ) {-			return jQuery.queue( this[0], type );-		}--		return data === undefined ?-			this :-			this.each(function() {-				var queue = jQuery.queue( this, type, data );--				// ensure a hooks for this queue-				jQuery._queueHooks( this, type );--				if ( type === "fx" && queue[0] !== "inprogress" ) {-					jQuery.dequeue( this, type );-				}-			});-	},-	dequeue: function( type ) {-		return this.each(function() {-			jQuery.dequeue( this, type );-		});-	},-	// Based off of the plugin by Clint Helfers, with permission.-	// http://blindsignals.com/index.php/2009/07/jquery-delay/-	delay: function( time, type ) {-		time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;-		type = type || "fx";--		return this.queue( type, function( next, hooks ) {-			var timeout = setTimeout( next, time );-			hooks.stop = function() {-				clearTimeout( timeout );-			};-		});-	},-	clearQueue: function( type ) {-		return this.queue( type || "fx", [] );-	},-	// Get a promise resolved when queues of a certain type-	// are emptied (fx is the type by default)-	promise: function( type, obj ) {-		var tmp,-			count = 1,-			defer = jQuery.Deferred(),-			elements = this,-			i = this.length,-			resolve = function() {-				if ( !( --count ) ) {-					defer.resolveWith( elements, [ elements ] );-				}-			};--		if ( typeof type !== "string" ) {-			obj = type;-			type = undefined;-		}-		type = type || "fx";--		while( i-- ) {-			tmp = jQuery._data( elements[ i ], type + "queueHooks" );-			if ( tmp && tmp.empty ) {-				count++;-				tmp.empty.add( resolve );-			}-		}-		resolve();-		return defer.promise( obj );-	}-});-var nodeHook, boolHook,-	rclass = /[\t\r\n\f]/g,-	rreturn = /\r/g,-	rfocusable = /^(?:input|select|textarea|button|object)$/i,-	rclickable = /^(?:a|area)$/i,-	ruseDefault = /^(?:checked|selected)$/i,-	getSetAttribute = jQuery.support.getSetAttribute,-	getSetInput = jQuery.support.input;--jQuery.fn.extend({-	attr: function( name, value ) {-		return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 );-	},--	removeAttr: function( name ) {-		return this.each(function() {-			jQuery.removeAttr( this, name );-		});-	},--	prop: function( name, value ) {-		return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 );-	},--	removeProp: function( name ) {-		name = jQuery.propFix[ name ] || name;-		return this.each(function() {-			// try/catch handles cases where IE balks (such as removing a property on window)-			try {-				this[ name ] = undefined;-				delete this[ name ];-			} catch( e ) {}-		});-	},--	addClass: function( value ) {-		var classes, elem, cur, clazz, j,-			i = 0,-			len = this.length,-			proceed = typeof value === "string" && value;--		if ( jQuery.isFunction( value ) ) {-			return this.each(function( j ) {-				jQuery( this ).addClass( value.call( this, j, this.className ) );-			});-		}--		if ( proceed ) {-			// The disjunction here is for better compressibility (see removeClass)-			classes = ( value || "" ).match( core_rnotwhite ) || [];--			for ( ; i < len; i++ ) {-				elem = this[ i ];-				cur = elem.nodeType === 1 && ( elem.className ?-					( " " + elem.className + " " ).replace( rclass, " " ) :-					" "-				);--				if ( cur ) {-					j = 0;-					while ( (clazz = classes[j++]) ) {-						if ( cur.indexOf( " " + clazz + " " ) < 0 ) {-							cur += clazz + " ";-						}-					}-					elem.className = jQuery.trim( cur );--				}-			}-		}--		return this;-	},--	removeClass: function( value ) {-		var classes, elem, cur, clazz, j,-			i = 0,-			len = this.length,-			proceed = arguments.length === 0 || typeof value === "string" && value;--		if ( jQuery.isFunction( value ) ) {-			return this.each(function( j ) {-				jQuery( this ).removeClass( value.call( this, j, this.className ) );-			});-		}-		if ( proceed ) {-			classes = ( value || "" ).match( core_rnotwhite ) || [];--			for ( ; i < len; i++ ) {-				elem = this[ i ];-				// This expression is here for better compressibility (see addClass)-				cur = elem.nodeType === 1 && ( elem.className ?-					( " " + elem.className + " " ).replace( rclass, " " ) :-					""-				);--				if ( cur ) {-					j = 0;-					while ( (clazz = classes[j++]) ) {-						// Remove *all* instances-						while ( cur.indexOf( " " + clazz + " " ) >= 0 ) {-							cur = cur.replace( " " + clazz + " ", " " );-						}-					}-					elem.className = value ? jQuery.trim( cur ) : "";-				}-			}-		}--		return this;-	},--	toggleClass: function( value, stateVal ) {-		var type = typeof value,-			isBool = typeof stateVal === "boolean";--		if ( jQuery.isFunction( value ) ) {-			return this.each(function( i ) {-				jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );-			});-		}--		return this.each(function() {-			if ( type === "string" ) {-				// toggle individual class names-				var className,-					i = 0,-					self = jQuery( this ),-					state = stateVal,-					classNames = value.match( core_rnotwhite ) || [];--				while ( (className = classNames[ i++ ]) ) {-					// check each className given, space separated list-					state = isBool ? state : !self.hasClass( className );-					self[ state ? "addClass" : "removeClass" ]( className );-				}--			// Toggle whole class name-			} else if ( type === core_strundefined || type === "boolean" ) {-				if ( this.className ) {-					// store className if set-					jQuery._data( this, "__className__", this.className );-				}--				// If the element has a class name or if we're passed "false",-				// then remove the whole classname (if there was one, the above saved it).-				// Otherwise bring back whatever was previously saved (if anything),-				// falling back to the empty string if nothing was stored.-				this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";-			}-		});-	},--	hasClass: function( selector ) {-		var className = " " + selector + " ",-			i = 0,-			l = this.length;-		for ( ; i < l; i++ ) {-			if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) {-				return true;-			}-		}--		return false;-	},--	val: function( value ) {-		var ret, hooks, isFunction,-			elem = this[0];--		if ( !arguments.length ) {-			if ( elem ) {-				hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];--				if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {-					return ret;-				}--				ret = elem.value;--				return typeof ret === "string" ?-					// handle most common string cases-					ret.replace(rreturn, "") :-					// handle cases where value is null/undef or number-					ret == null ? "" : ret;-			}--			return;-		}--		isFunction = jQuery.isFunction( value );--		return this.each(function( i ) {-			var val;--			if ( this.nodeType !== 1 ) {-				return;-			}--			if ( isFunction ) {-				val = value.call( this, i, jQuery( this ).val() );-			} else {-				val = value;-			}--			// Treat null/undefined as ""; convert numbers to string-			if ( val == null ) {-				val = "";-			} else if ( typeof val === "number" ) {-				val += "";-			} else if ( jQuery.isArray( val ) ) {-				val = jQuery.map(val, function ( value ) {-					return value == null ? "" : value + "";-				});-			}--			hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];--			// If set returns undefined, fall back to normal setting-			if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {-				this.value = val;-			}-		});-	}-});--jQuery.extend({-	valHooks: {-		option: {-			get: function( elem ) {-				// Use proper attribute retrieval(#6932, #12072)-				var val = jQuery.find.attr( elem, "value" );-				return val != null ?-					val :-					elem.text;-			}-		},-		select: {-			get: function( elem ) {-				var value, option,-					options = elem.options,-					index = elem.selectedIndex,-					one = elem.type === "select-one" || index < 0,-					values = one ? null : [],-					max = one ? index + 1 : options.length,-					i = index < 0 ?-						max :-						one ? index : 0;--				// Loop through all the selected options-				for ( ; i < max; i++ ) {-					option = options[ i ];--					// oldIE doesn't update selected after form reset (#2551)-					if ( ( option.selected || i === index ) &&-							// Don't return options that are disabled or in a disabled optgroup-							( jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) &&-							( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {--						// Get the specific value for the option-						value = jQuery( option ).val();--						// We don't need an array for one selects-						if ( one ) {-							return value;-						}--						// Multi-Selects return an array-						values.push( value );-					}-				}--				return values;-			},--			set: function( elem, value ) {-				var optionSet, option,-					options = elem.options,-					values = jQuery.makeArray( value ),-					i = options.length;--				while ( i-- ) {-					option = options[ i ];-					if ( (option.selected = jQuery.inArray( jQuery(option).val(), values ) >= 0) ) {-						optionSet = true;-					}-				}--				// force browsers to behave consistently when non-matching value is set-				if ( !optionSet ) {-					elem.selectedIndex = -1;-				}-				return values;-			}-		}-	},--	attr: function( elem, name, value ) {-		var hooks, ret,-			nType = elem.nodeType;--		// don't get/set attributes on text, comment and attribute nodes-		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {-			return;-		}--		// Fallback to prop when attributes are not supported-		if ( typeof elem.getAttribute === core_strundefined ) {-			return jQuery.prop( elem, name, value );-		}--		// All attributes are lowercase-		// Grab necessary hook if one is defined-		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {-			name = name.toLowerCase();-			hooks = jQuery.attrHooks[ name ] ||-				( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook );-		}--		if ( value !== undefined ) {--			if ( value === null ) {-				jQuery.removeAttr( elem, name );--			} else if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {-				return ret;--			} else {-				elem.setAttribute( name, value + "" );-				return value;-			}--		} else if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {-			return ret;--		} else {-			ret = jQuery.find.attr( elem, name );--			// Non-existent attributes return null, we normalize to undefined-			return ret == null ?-				undefined :-				ret;-		}-	},--	removeAttr: function( elem, value ) {-		var name, propName,-			i = 0,-			attrNames = value && value.match( core_rnotwhite );--		if ( attrNames && elem.nodeType === 1 ) {-			while ( (name = attrNames[i++]) ) {-				propName = jQuery.propFix[ name ] || name;--				// Boolean attributes get special treatment (#10870)-				if ( jQuery.expr.match.bool.test( name ) ) {-					// Set corresponding property to false-					if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {-						elem[ propName ] = false;-					// Support: IE<9-					// Also clear defaultChecked/defaultSelected (if appropriate)-					} else {-						elem[ jQuery.camelCase( "default-" + name ) ] =-							elem[ propName ] = false;-					}--				// See #9699 for explanation of this approach (setting first, then removal)-				} else {-					jQuery.attr( elem, name, "" );-				}--				elem.removeAttribute( getSetAttribute ? name : propName );-			}-		}-	},--	attrHooks: {-		type: {-			set: function( elem, value ) {-				if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {-					// Setting the type on a radio button after the value resets the value in IE6-9-					// Reset value to default in case type is set after value during creation-					var val = elem.value;-					elem.setAttribute( "type", value );-					if ( val ) {-						elem.value = val;-					}-					return value;-				}-			}-		}-	},--	propFix: {-		"for": "htmlFor",-		"class": "className"-	},--	prop: function( elem, name, value ) {-		var ret, hooks, notxml,-			nType = elem.nodeType;--		// don't get/set properties on text, comment and attribute nodes-		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {-			return;-		}--		notxml = nType !== 1 || !jQuery.isXMLDoc( elem );--		if ( notxml ) {-			// Fix name and attach hooks-			name = jQuery.propFix[ name ] || name;-			hooks = jQuery.propHooks[ name ];-		}--		if ( value !== undefined ) {-			return hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ?-				ret :-				( elem[ name ] = value );--		} else {-			return hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ?-				ret :-				elem[ name ];-		}-	},--	propHooks: {-		tabIndex: {-			get: function( elem ) {-				// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set-				// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/-				// Use proper attribute retrieval(#12072)-				var tabindex = jQuery.find.attr( elem, "tabindex" );--				return tabindex ?-					parseInt( tabindex, 10 ) :-					rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?-						0 :-						-1;-			}-		}-	}-});--// Hooks for boolean attributes-boolHook = {-	set: function( elem, value, name ) {-		if ( value === false ) {-			// Remove boolean attributes when set to false-			jQuery.removeAttr( elem, name );-		} else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {-			// IE<8 needs the *property* name-			elem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name );--		// Use defaultChecked and defaultSelected for oldIE-		} else {-			elem[ jQuery.camelCase( "default-" + name ) ] = elem[ name ] = true;-		}--		return name;-	}-};-jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {-	var getter = jQuery.expr.attrHandle[ name ] || jQuery.find.attr;--	jQuery.expr.attrHandle[ name ] = getSetInput && getSetAttribute || !ruseDefault.test( name ) ?-		function( elem, name, isXML ) {-			var fn = jQuery.expr.attrHandle[ name ],-				ret = isXML ?-					undefined :-					/* jshint eqeqeq: false */-					(jQuery.expr.attrHandle[ name ] = undefined) !=-						getter( elem, name, isXML ) ?--						name.toLowerCase() :-						null;-			jQuery.expr.attrHandle[ name ] = fn;-			return ret;-		} :-		function( elem, name, isXML ) {-			return isXML ?-				undefined :-				elem[ jQuery.camelCase( "default-" + name ) ] ?-					name.toLowerCase() :-					null;-		};-});--// fix oldIE attroperties-if ( !getSetInput || !getSetAttribute ) {-	jQuery.attrHooks.value = {-		set: function( elem, value, name ) {-			if ( jQuery.nodeName( elem, "input" ) ) {-				// Does not return so that setAttribute is also used-				elem.defaultValue = value;-			} else {-				// Use nodeHook if defined (#1954); otherwise setAttribute is fine-				return nodeHook && nodeHook.set( elem, value, name );-			}-		}-	};-}--// IE6/7 do not support getting/setting some attributes with get/setAttribute-if ( !getSetAttribute ) {--	// Use this for any attribute in IE6/7-	// This fixes almost every IE6/7 issue-	nodeHook = {-		set: function( elem, value, name ) {-			// Set the existing or create a new attribute node-			var ret = elem.getAttributeNode( name );-			if ( !ret ) {-				elem.setAttributeNode(-					(ret = elem.ownerDocument.createAttribute( name ))-				);-			}--			ret.value = value += "";--			// Break association with cloned elements by also using setAttribute (#9646)-			return name === "value" || value === elem.getAttribute( name ) ?-				value :-				undefined;-		}-	};-	jQuery.expr.attrHandle.id = jQuery.expr.attrHandle.name = jQuery.expr.attrHandle.coords =-		// Some attributes are constructed with empty-string values when not defined-		function( elem, name, isXML ) {-			var ret;-			return isXML ?-				undefined :-				(ret = elem.getAttributeNode( name )) && ret.value !== "" ?-					ret.value :-					null;-		};-	jQuery.valHooks.button = {-		get: function( elem, name ) {-			var ret = elem.getAttributeNode( name );-			return ret && ret.specified ?-				ret.value :-				undefined;-		},-		set: nodeHook.set-	};--	// Set contenteditable to false on removals(#10429)-	// Setting to empty string throws an error as an invalid value-	jQuery.attrHooks.contenteditable = {-		set: function( elem, value, name ) {-			nodeHook.set( elem, value === "" ? false : value, name );-		}-	};--	// Set width and height to auto instead of 0 on empty string( Bug #8150 )-	// This is for removals-	jQuery.each([ "width", "height" ], function( i, name ) {-		jQuery.attrHooks[ name ] = {-			set: function( elem, value ) {-				if ( value === "" ) {-					elem.setAttribute( name, "auto" );-					return value;-				}-			}-		};-	});-}---// Some attributes require a special call on IE-// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx-if ( !jQuery.support.hrefNormalized ) {-	// href/src property should get the full normalized URL (#10299/#12915)-	jQuery.each([ "href", "src" ], function( i, name ) {-		jQuery.propHooks[ name ] = {-			get: function( elem ) {-				return elem.getAttribute( name, 4 );-			}-		};-	});-}--if ( !jQuery.support.style ) {-	jQuery.attrHooks.style = {-		get: function( elem ) {-			// Return undefined in the case of empty string-			// Note: IE uppercases css property names, but if we were to .toLowerCase()-			// .cssText, that would destroy case senstitivity in URL's, like in "background"-			return elem.style.cssText || undefined;-		},-		set: function( elem, value ) {-			return ( elem.style.cssText = value + "" );-		}-	};-}--// Safari mis-reports the default selected property of an option-// Accessing the parent's selectedIndex property fixes it-if ( !jQuery.support.optSelected ) {-	jQuery.propHooks.selected = {-		get: function( elem ) {-			var parent = elem.parentNode;--			if ( parent ) {-				parent.selectedIndex;--				// Make sure that it also works with optgroups, see #5701-				if ( parent.parentNode ) {-					parent.parentNode.selectedIndex;-				}-			}-			return null;-		}-	};-}--jQuery.each([-	"tabIndex",-	"readOnly",-	"maxLength",-	"cellSpacing",-	"cellPadding",-	"rowSpan",-	"colSpan",-	"useMap",-	"frameBorder",-	"contentEditable"-], function() {-	jQuery.propFix[ this.toLowerCase() ] = this;-});--// IE6/7 call enctype encoding-if ( !jQuery.support.enctype ) {-	jQuery.propFix.enctype = "encoding";-}--// Radios and checkboxes getter/setter-jQuery.each([ "radio", "checkbox" ], function() {-	jQuery.valHooks[ this ] = {-		set: function( elem, value ) {-			if ( jQuery.isArray( value ) ) {-				return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );-			}-		}-	};-	if ( !jQuery.support.checkOn ) {-		jQuery.valHooks[ this ].get = function( elem ) {-			// Support: Webkit-			// "" is returned instead of "on" if a value isn't specified-			return elem.getAttribute("value") === null ? "on" : elem.value;-		};-	}-});-var rformElems = /^(?:input|select|textarea)$/i,-	rkeyEvent = /^key/,-	rmouseEvent = /^(?:mouse|contextmenu)|click/,-	rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,-	rtypenamespace = /^([^.]*)(?:\.(.+)|)$/;--function returnTrue() {-	return true;-}--function returnFalse() {-	return false;-}--function safeActiveElement() {-	try {-		return document.activeElement;-	} catch ( err ) { }-}--/*- * Helper functions for managing events -- not part of the public interface.- * Props to Dean Edwards' addEvent library for many of the ideas.- */-jQuery.event = {--	global: {},--	add: function( elem, types, handler, data, selector ) {-		var tmp, events, t, handleObjIn,-			special, eventHandle, handleObj,-			handlers, type, namespaces, origType,-			elemData = jQuery._data( elem );--		// Don't attach events to noData or text/comment nodes (but allow plain objects)-		if ( !elemData ) {-			return;-		}--		// Caller can pass in an object of custom data in lieu of the handler-		if ( handler.handler ) {-			handleObjIn = handler;-			handler = handleObjIn.handler;-			selector = handleObjIn.selector;-		}--		// Make sure that the handler has a unique ID, used to find/remove it later-		if ( !handler.guid ) {-			handler.guid = jQuery.guid++;-		}--		// Init the element's event structure and main handler, if this is the first-		if ( !(events = elemData.events) ) {-			events = elemData.events = {};-		}-		if ( !(eventHandle = elemData.handle) ) {-			eventHandle = elemData.handle = function( e ) {-				// Discard the second event of a jQuery.event.trigger() and-				// when an event is called after a page has unloaded-				return typeof jQuery !== core_strundefined && (!e || jQuery.event.triggered !== e.type) ?-					jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :-					undefined;-			};-			// Add elem as a property of the handle fn to prevent a memory leak with IE non-native events-			eventHandle.elem = elem;-		}--		// Handle multiple events separated by a space-		types = ( types || "" ).match( core_rnotwhite ) || [""];-		t = types.length;-		while ( t-- ) {-			tmp = rtypenamespace.exec( types[t] ) || [];-			type = origType = tmp[1];-			namespaces = ( tmp[2] || "" ).split( "." ).sort();--			// There *must* be a type, no attaching namespace-only handlers-			if ( !type ) {-				continue;-			}--			// If event changes its type, use the special event handlers for the changed type-			special = jQuery.event.special[ type ] || {};--			// If selector defined, determine special event api type, otherwise given type-			type = ( selector ? special.delegateType : special.bindType ) || type;--			// Update special based on newly reset type-			special = jQuery.event.special[ type ] || {};--			// handleObj is passed to all event handlers-			handleObj = jQuery.extend({-				type: type,-				origType: origType,-				data: data,-				handler: handler,-				guid: handler.guid,-				selector: selector,-				needsContext: selector && jQuery.expr.match.needsContext.test( selector ),-				namespace: namespaces.join(".")-			}, handleObjIn );--			// Init the event handler queue if we're the first-			if ( !(handlers = events[ type ]) ) {-				handlers = events[ type ] = [];-				handlers.delegateCount = 0;--				// Only use addEventListener/attachEvent if the special events handler returns false-				if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {-					// Bind the global event handler to the element-					if ( elem.addEventListener ) {-						elem.addEventListener( type, eventHandle, false );--					} else if ( elem.attachEvent ) {-						elem.attachEvent( "on" + type, eventHandle );-					}-				}-			}--			if ( special.add ) {-				special.add.call( elem, handleObj );--				if ( !handleObj.handler.guid ) {-					handleObj.handler.guid = handler.guid;-				}-			}--			// Add to the element's handler list, delegates in front-			if ( selector ) {-				handlers.splice( handlers.delegateCount++, 0, handleObj );-			} else {-				handlers.push( handleObj );-			}--			// Keep track of which events have ever been used, for event optimization-			jQuery.event.global[ type ] = true;-		}--		// Nullify elem to prevent memory leaks in IE-		elem = null;-	},--	// Detach an event or set of events from an element-	remove: function( elem, types, handler, selector, mappedTypes ) {-		var j, handleObj, tmp,-			origCount, t, events,-			special, handlers, type,-			namespaces, origType,-			elemData = jQuery.hasData( elem ) && jQuery._data( elem );--		if ( !elemData || !(events = elemData.events) ) {-			return;-		}--		// Once for each type.namespace in types; type may be omitted-		types = ( types || "" ).match( core_rnotwhite ) || [""];-		t = types.length;-		while ( t-- ) {-			tmp = rtypenamespace.exec( types[t] ) || [];-			type = origType = tmp[1];-			namespaces = ( tmp[2] || "" ).split( "." ).sort();--			// Unbind all events (on this namespace, if provided) for the element-			if ( !type ) {-				for ( type in events ) {-					jQuery.event.remove( elem, type + types[ t ], handler, selector, true );-				}-				continue;-			}--			special = jQuery.event.special[ type ] || {};-			type = ( selector ? special.delegateType : special.bindType ) || type;-			handlers = events[ type ] || [];-			tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" );--			// Remove matching events-			origCount = j = handlers.length;-			while ( j-- ) {-				handleObj = handlers[ j ];--				if ( ( mappedTypes || origType === handleObj.origType ) &&-					( !handler || handler.guid === handleObj.guid ) &&-					( !tmp || tmp.test( handleObj.namespace ) ) &&-					( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {-					handlers.splice( j, 1 );--					if ( handleObj.selector ) {-						handlers.delegateCount--;-					}-					if ( special.remove ) {-						special.remove.call( elem, handleObj );-					}-				}-			}--			// Remove generic event handler if we removed something and no more handlers exist-			// (avoids potential for endless recursion during removal of special event handlers)-			if ( origCount && !handlers.length ) {-				if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {-					jQuery.removeEvent( elem, type, elemData.handle );-				}--				delete events[ type ];-			}-		}--		// Remove the expando if it's no longer used-		if ( jQuery.isEmptyObject( events ) ) {-			delete elemData.handle;--			// removeData also checks for emptiness and clears the expando if empty-			// so use it instead of delete-			jQuery._removeData( elem, "events" );-		}-	},--	trigger: function( event, data, elem, onlyHandlers ) {-		var handle, ontype, cur,-			bubbleType, special, tmp, i,-			eventPath = [ elem || document ],-			type = core_hasOwn.call( event, "type" ) ? event.type : event,-			namespaces = core_hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : [];--		cur = tmp = elem = elem || document;--		// Don't do events on text and comment nodes-		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {-			return;-		}--		// focus/blur morphs to focusin/out; ensure we're not firing them right now-		if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {-			return;-		}--		if ( type.indexOf(".") >= 0 ) {-			// Namespaced trigger; create a regexp to match event type in handle()-			namespaces = type.split(".");-			type = namespaces.shift();-			namespaces.sort();-		}-		ontype = type.indexOf(":") < 0 && "on" + type;--		// Caller can pass in a jQuery.Event object, Object, or just an event type string-		event = event[ jQuery.expando ] ?-			event :-			new jQuery.Event( type, typeof event === "object" && event );--		// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)-		event.isTrigger = onlyHandlers ? 2 : 3;-		event.namespace = namespaces.join(".");-		event.namespace_re = event.namespace ?-			new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) :-			null;--		// Clean up the event in case it is being reused-		event.result = undefined;-		if ( !event.target ) {-			event.target = elem;-		}--		// Clone any incoming data and prepend the event, creating the handler arg list-		data = data == null ?-			[ event ] :-			jQuery.makeArray( data, [ event ] );--		// Allow special events to draw outside the lines-		special = jQuery.event.special[ type ] || {};-		if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {-			return;-		}--		// Determine event propagation path in advance, per W3C events spec (#9951)-		// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)-		if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {--			bubbleType = special.delegateType || type;-			if ( !rfocusMorph.test( bubbleType + type ) ) {-				cur = cur.parentNode;-			}-			for ( ; cur; cur = cur.parentNode ) {-				eventPath.push( cur );-				tmp = cur;-			}--			// Only add window if we got to document (e.g., not plain obj or detached DOM)-			if ( tmp === (elem.ownerDocument || document) ) {-				eventPath.push( tmp.defaultView || tmp.parentWindow || window );-			}-		}--		// Fire handlers on the event path-		i = 0;-		while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) {--			event.type = i > 1 ?-				bubbleType :-				special.bindType || type;--			// jQuery handler-			handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" );-			if ( handle ) {-				handle.apply( cur, data );-			}--			// Native handler-			handle = ontype && cur[ ontype ];-			if ( handle && jQuery.acceptData( cur ) && handle.apply && handle.apply( cur, data ) === false ) {-				event.preventDefault();-			}-		}-		event.type = type;--		// If nobody prevented the default action, do it now-		if ( !onlyHandlers && !event.isDefaultPrevented() ) {--			if ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) &&-				jQuery.acceptData( elem ) ) {--				// Call a native DOM method on the target with the same name name as the event.-				// Can't use an .isFunction() check here because IE6/7 fails that test.-				// Don't do default actions on window, that's where global variables be (#6170)-				if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) {--					// Don't re-trigger an onFOO event when we call its FOO() method-					tmp = elem[ ontype ];--					if ( tmp ) {-						elem[ ontype ] = null;-					}--					// Prevent re-triggering of the same event, since we already bubbled it above-					jQuery.event.triggered = type;-					try {-						elem[ type ]();-					} catch ( e ) {-						// IE<9 dies on focus/blur to hidden element (#1486,#12518)-						// only reproducible on winXP IE8 native, not IE9 in IE8 mode-					}-					jQuery.event.triggered = undefined;--					if ( tmp ) {-						elem[ ontype ] = tmp;-					}-				}-			}-		}--		return event.result;-	},--	dispatch: function( event ) {--		// Make a writable jQuery.Event from the native event object-		event = jQuery.event.fix( event );--		var i, ret, handleObj, matched, j,-			handlerQueue = [],-			args = core_slice.call( arguments ),-			handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [],-			special = jQuery.event.special[ event.type ] || {};--		// Use the fix-ed jQuery.Event rather than the (read-only) native event-		args[0] = event;-		event.delegateTarget = this;--		// Call the preDispatch hook for the mapped type, and let it bail if desired-		if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {-			return;-		}--		// Determine handlers-		handlerQueue = jQuery.event.handlers.call( this, event, handlers );--		// Run delegates first; they may want to stop propagation beneath us-		i = 0;-		while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {-			event.currentTarget = matched.elem;--			j = 0;-			while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {--				// Triggered event must either 1) have no namespace, or-				// 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).-				if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {--					event.handleObj = handleObj;-					event.data = handleObj.data;--					ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )-							.apply( matched.elem, args );--					if ( ret !== undefined ) {-						if ( (event.result = ret) === false ) {-							event.preventDefault();-							event.stopPropagation();-						}-					}-				}-			}-		}--		// Call the postDispatch hook for the mapped type-		if ( special.postDispatch ) {-			special.postDispatch.call( this, event );-		}--		return event.result;-	},--	handlers: function( event, handlers ) {-		var sel, handleObj, matches, i,-			handlerQueue = [],-			delegateCount = handlers.delegateCount,-			cur = event.target;--		// Find delegate handlers-		// Black-hole SVG <use> instance trees (#13180)-		// Avoid non-left-click bubbling in Firefox (#3861)-		if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) {--			/* jshint eqeqeq: false */-			for ( ; cur != this; cur = cur.parentNode || this ) {-				/* jshint eqeqeq: true */--				// Don't check non-elements (#13208)-				// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)-				if ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click") ) {-					matches = [];-					for ( i = 0; i < delegateCount; i++ ) {-						handleObj = handlers[ i ];--						// Don't conflict with Object.prototype properties (#13203)-						sel = handleObj.selector + " ";--						if ( matches[ sel ] === undefined ) {-							matches[ sel ] = handleObj.needsContext ?-								jQuery( sel, this ).index( cur ) >= 0 :-								jQuery.find( sel, this, null, [ cur ] ).length;-						}-						if ( matches[ sel ] ) {-							matches.push( handleObj );-						}-					}-					if ( matches.length ) {-						handlerQueue.push({ elem: cur, handlers: matches });-					}-				}-			}-		}--		// Add the remaining (directly-bound) handlers-		if ( delegateCount < handlers.length ) {-			handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });-		}--		return handlerQueue;-	},--	fix: function( event ) {-		if ( event[ jQuery.expando ] ) {-			return event;-		}--		// Create a writable copy of the event object and normalize some properties-		var i, prop, copy,-			type = event.type,-			originalEvent = event,-			fixHook = this.fixHooks[ type ];--		if ( !fixHook ) {-			this.fixHooks[ type ] = fixHook =-				rmouseEvent.test( type ) ? this.mouseHooks :-				rkeyEvent.test( type ) ? this.keyHooks :-				{};-		}-		copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;--		event = new jQuery.Event( originalEvent );--		i = copy.length;-		while ( i-- ) {-			prop = copy[ i ];-			event[ prop ] = originalEvent[ prop ];-		}--		// Support: IE<9-		// Fix target property (#1925)-		if ( !event.target ) {-			event.target = originalEvent.srcElement || document;-		}--		// Support: Chrome 23+, Safari?-		// Target should not be a text node (#504, #13143)-		if ( event.target.nodeType === 3 ) {-			event.target = event.target.parentNode;-		}--		// Support: IE<9-		// For mouse/key events, metaKey==false if it's undefined (#3368, #11328)-		event.metaKey = !!event.metaKey;--		return fixHook.filter ? fixHook.filter( event, originalEvent ) : event;-	},--	// Includes some event props shared by KeyEvent and MouseEvent-	props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),--	fixHooks: {},--	keyHooks: {-		props: "char charCode key keyCode".split(" "),-		filter: function( event, original ) {--			// Add which for key events-			if ( event.which == null ) {-				event.which = original.charCode != null ? original.charCode : original.keyCode;-			}--			return event;-		}-	},--	mouseHooks: {-		props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),-		filter: function( event, original ) {-			var body, eventDoc, doc,-				button = original.button,-				fromElement = original.fromElement;--			// Calculate pageX/Y if missing and clientX/Y available-			if ( event.pageX == null && original.clientX != null ) {-				eventDoc = event.target.ownerDocument || document;-				doc = eventDoc.documentElement;-				body = eventDoc.body;--				event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );-				event.pageY = original.clientY + ( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) - ( doc && doc.clientTop  || body && body.clientTop  || 0 );-			}--			// Add relatedTarget, if necessary-			if ( !event.relatedTarget && fromElement ) {-				event.relatedTarget = fromElement === event.target ? original.toElement : fromElement;-			}--			// Add which for click: 1 === left; 2 === middle; 3 === right-			// Note: button is not normalized, so don't use it-			if ( !event.which && button !== undefined ) {-				event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );-			}--			return event;-		}-	},--	special: {-		load: {-			// Prevent triggered image.load events from bubbling to window.load-			noBubble: true-		},-		focus: {-			// Fire native event if possible so blur/focus sequence is correct-			trigger: function() {-				if ( this !== safeActiveElement() && this.focus ) {-					try {-						this.focus();-						return false;-					} catch ( e ) {-						// Support: IE<9-						// If we error on focus to hidden element (#1486, #12518),-						// let .trigger() run the handlers-					}-				}-			},-			delegateType: "focusin"-		},-		blur: {-			trigger: function() {-				if ( this === safeActiveElement() && this.blur ) {-					this.blur();-					return false;-				}-			},-			delegateType: "focusout"-		},-		click: {-			// For checkbox, fire native event so checked state will be right-			trigger: function() {-				if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) {-					this.click();-					return false;-				}-			},--			// For cross-browser consistency, don't fire native .click() on links-			_default: function( event ) {-				return jQuery.nodeName( event.target, "a" );-			}-		},--		beforeunload: {-			postDispatch: function( event ) {--				// Even when returnValue equals to undefined Firefox will still show alert-				if ( event.result !== undefined ) {-					event.originalEvent.returnValue = event.result;-				}-			}-		}-	},--	simulate: function( type, elem, event, bubble ) {-		// Piggyback on a donor event to simulate a different one.-		// Fake originalEvent to avoid donor's stopPropagation, but if the-		// simulated event prevents default then we do the same on the donor.-		var e = jQuery.extend(-			new jQuery.Event(),-			event,-			{-				type: type,-				isSimulated: true,-				originalEvent: {}-			}-		);-		if ( bubble ) {-			jQuery.event.trigger( e, null, elem );-		} else {-			jQuery.event.dispatch.call( elem, e );-		}-		if ( e.isDefaultPrevented() ) {-			event.preventDefault();-		}-	}-};--jQuery.removeEvent = document.removeEventListener ?-	function( elem, type, handle ) {-		if ( elem.removeEventListener ) {-			elem.removeEventListener( type, handle, false );-		}-	} :-	function( elem, type, handle ) {-		var name = "on" + type;--		if ( elem.detachEvent ) {--			// #8545, #7054, preventing memory leaks for custom events in IE6-8-			// detachEvent needed property on element, by name of that event, to properly expose it to GC-			if ( typeof elem[ name ] === core_strundefined ) {-				elem[ name ] = null;-			}--			elem.detachEvent( name, handle );-		}-	};--jQuery.Event = function( src, props ) {-	// Allow instantiation without the 'new' keyword-	if ( !(this instanceof jQuery.Event) ) {-		return new jQuery.Event( src, props );-	}--	// Event object-	if ( src && src.type ) {-		this.originalEvent = src;-		this.type = src.type;--		// Events bubbling up the document may have been marked as prevented-		// by a handler lower down the tree; reflect the correct value.-		this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false ||-			src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse;--	// Event type-	} else {-		this.type = src;-	}--	// Put explicitly provided properties onto the event object-	if ( props ) {-		jQuery.extend( this, props );-	}--	// Create a timestamp if incoming event doesn't have one-	this.timeStamp = src && src.timeStamp || jQuery.now();--	// Mark it as fixed-	this[ jQuery.expando ] = true;-};--// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding-// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html-jQuery.Event.prototype = {-	isDefaultPrevented: returnFalse,-	isPropagationStopped: returnFalse,-	isImmediatePropagationStopped: returnFalse,--	preventDefault: function() {-		var e = this.originalEvent;--		this.isDefaultPrevented = returnTrue;-		if ( !e ) {-			return;-		}--		// If preventDefault exists, run it on the original event-		if ( e.preventDefault ) {-			e.preventDefault();--		// Support: IE-		// Otherwise set the returnValue property of the original event to false-		} else {-			e.returnValue = false;-		}-	},-	stopPropagation: function() {-		var e = this.originalEvent;--		this.isPropagationStopped = returnTrue;-		if ( !e ) {-			return;-		}-		// If stopPropagation exists, run it on the original event-		if ( e.stopPropagation ) {-			e.stopPropagation();-		}--		// Support: IE-		// Set the cancelBubble property of the original event to true-		e.cancelBubble = true;-	},-	stopImmediatePropagation: function() {-		this.isImmediatePropagationStopped = returnTrue;-		this.stopPropagation();-	}-};--// Create mouseenter/leave events using mouseover/out and event-time checks-jQuery.each({-	mouseenter: "mouseover",-	mouseleave: "mouseout"-}, function( orig, fix ) {-	jQuery.event.special[ orig ] = {-		delegateType: fix,-		bindType: fix,--		handle: function( event ) {-			var ret,-				target = this,-				related = event.relatedTarget,-				handleObj = event.handleObj;--			// For mousenter/leave call the handler if related is outside the target.-			// NB: No relatedTarget if the mouse left/entered the browser window-			if ( !related || (related !== target && !jQuery.contains( target, related )) ) {-				event.type = handleObj.origType;-				ret = handleObj.handler.apply( this, arguments );-				event.type = fix;-			}-			return ret;-		}-	};-});--// IE submit delegation-if ( !jQuery.support.submitBubbles ) {--	jQuery.event.special.submit = {-		setup: function() {-			// Only need this for delegated form submit events-			if ( jQuery.nodeName( this, "form" ) ) {-				return false;-			}--			// Lazy-add a submit handler when a descendant form may potentially be submitted-			jQuery.event.add( this, "click._submit keypress._submit", function( e ) {-				// Node name check avoids a VML-related crash in IE (#9807)-				var elem = e.target,-					form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined;-				if ( form && !jQuery._data( form, "submitBubbles" ) ) {-					jQuery.event.add( form, "submit._submit", function( event ) {-						event._submit_bubble = true;-					});-					jQuery._data( form, "submitBubbles", true );-				}-			});-			// return undefined since we don't need an event listener-		},--		postDispatch: function( event ) {-			// If form was submitted by the user, bubble the event up the tree-			if ( event._submit_bubble ) {-				delete event._submit_bubble;-				if ( this.parentNode && !event.isTrigger ) {-					jQuery.event.simulate( "submit", this.parentNode, event, true );-				}-			}-		},--		teardown: function() {-			// Only need this for delegated form submit events-			if ( jQuery.nodeName( this, "form" ) ) {-				return false;-			}--			// Remove delegated handlers; cleanData eventually reaps submit handlers attached above-			jQuery.event.remove( this, "._submit" );-		}-	};-}--// IE change delegation and checkbox/radio fix-if ( !jQuery.support.changeBubbles ) {--	jQuery.event.special.change = {--		setup: function() {--			if ( rformElems.test( this.nodeName ) ) {-				// IE doesn't fire change on a check/radio until blur; trigger it on click-				// after a propertychange. Eat the blur-change in special.change.handle.-				// This still fires onchange a second time for check/radio after blur.-				if ( this.type === "checkbox" || this.type === "radio" ) {-					jQuery.event.add( this, "propertychange._change", function( event ) {-						if ( event.originalEvent.propertyName === "checked" ) {-							this._just_changed = true;-						}-					});-					jQuery.event.add( this, "click._change", function( event ) {-						if ( this._just_changed && !event.isTrigger ) {-							this._just_changed = false;-						}-						// Allow triggered, simulated change events (#11500)-						jQuery.event.simulate( "change", this, event, true );-					});-				}-				return false;-			}-			// Delegated event; lazy-add a change handler on descendant inputs-			jQuery.event.add( this, "beforeactivate._change", function( e ) {-				var elem = e.target;--				if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "changeBubbles" ) ) {-					jQuery.event.add( elem, "change._change", function( event ) {-						if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {-							jQuery.event.simulate( "change", this.parentNode, event, true );-						}-					});-					jQuery._data( elem, "changeBubbles", true );-				}-			});-		},--		handle: function( event ) {-			var elem = event.target;--			// Swallow native change events from checkbox/radio, we already triggered them above-			if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) {-				return event.handleObj.handler.apply( this, arguments );-			}-		},--		teardown: function() {-			jQuery.event.remove( this, "._change" );--			return !rformElems.test( this.nodeName );-		}-	};-}--// Create "bubbling" focus and blur events-if ( !jQuery.support.focusinBubbles ) {-	jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {--		// Attach a single capturing handler while someone wants focusin/focusout-		var attaches = 0,-			handler = function( event ) {-				jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );-			};--		jQuery.event.special[ fix ] = {-			setup: function() {-				if ( attaches++ === 0 ) {-					document.addEventListener( orig, handler, true );-				}-			},-			teardown: function() {-				if ( --attaches === 0 ) {-					document.removeEventListener( orig, handler, true );-				}-			}-		};-	});-}--jQuery.fn.extend({--	on: function( types, selector, data, fn, /*INTERNAL*/ one ) {-		var type, origFn;--		// Types can be a map of types/handlers-		if ( typeof types === "object" ) {-			// ( types-Object, selector, data )-			if ( typeof selector !== "string" ) {-				// ( types-Object, data )-				data = data || selector;-				selector = undefined;-			}-			for ( type in types ) {-				this.on( type, selector, data, types[ type ], one );-			}-			return this;-		}--		if ( data == null && fn == null ) {-			// ( types, fn )-			fn = selector;-			data = selector = undefined;-		} else if ( fn == null ) {-			if ( typeof selector === "string" ) {-				// ( types, selector, fn )-				fn = data;-				data = undefined;-			} else {-				// ( types, data, fn )-				fn = data;-				data = selector;-				selector = undefined;-			}-		}-		if ( fn === false ) {-			fn = returnFalse;-		} else if ( !fn ) {-			return this;-		}--		if ( one === 1 ) {-			origFn = fn;-			fn = function( event ) {-				// Can use an empty set, since event contains the info-				jQuery().off( event );-				return origFn.apply( this, arguments );-			};-			// Use same guid so caller can remove using origFn-			fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );-		}-		return this.each( function() {-			jQuery.event.add( this, types, fn, data, selector );-		});-	},-	one: function( types, selector, data, fn ) {-		return this.on( types, selector, data, fn, 1 );-	},-	off: function( types, selector, fn ) {-		var handleObj, type;-		if ( types && types.preventDefault && types.handleObj ) {-			// ( event )  dispatched jQuery.Event-			handleObj = types.handleObj;-			jQuery( types.delegateTarget ).off(-				handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,-				handleObj.selector,-				handleObj.handler-			);-			return this;-		}-		if ( typeof types === "object" ) {-			// ( types-object [, selector] )-			for ( type in types ) {-				this.off( type, selector, types[ type ] );-			}-			return this;-		}-		if ( selector === false || typeof selector === "function" ) {-			// ( types [, fn] )-			fn = selector;-			selector = undefined;-		}-		if ( fn === false ) {-			fn = returnFalse;-		}-		return this.each(function() {-			jQuery.event.remove( this, types, fn, selector );-		});-	},--	trigger: function( type, data ) {-		return this.each(function() {-			jQuery.event.trigger( type, data, this );-		});-	},-	triggerHandler: function( type, data ) {-		var elem = this[0];-		if ( elem ) {-			return jQuery.event.trigger( type, data, elem, true );-		}-	}-});-var isSimple = /^.[^:#\[\.,]*$/,-	rparentsprev = /^(?:parents|prev(?:Until|All))/,-	rneedsContext = jQuery.expr.match.needsContext,-	// methods guaranteed to produce a unique set when starting from a unique set-	guaranteedUnique = {-		children: true,-		contents: true,-		next: true,-		prev: true-	};--jQuery.fn.extend({-	find: function( selector ) {-		var i,-			ret = [],-			self = this,-			len = self.length;--		if ( typeof selector !== "string" ) {-			return this.pushStack( jQuery( selector ).filter(function() {-				for ( i = 0; i < len; i++ ) {-					if ( jQuery.contains( self[ i ], this ) ) {-						return true;-					}-				}-			}) );-		}--		for ( i = 0; i < len; i++ ) {-			jQuery.find( selector, self[ i ], ret );-		}--		// Needed because $( selector, context ) becomes $( context ).find( selector )-		ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );-		ret.selector = this.selector ? this.selector + " " + selector : selector;-		return ret;-	},--	has: function( target ) {-		var i,-			targets = jQuery( target, this ),-			len = targets.length;--		return this.filter(function() {-			for ( i = 0; i < len; i++ ) {-				if ( jQuery.contains( this, targets[i] ) ) {-					return true;-				}-			}-		});-	},--	not: function( selector ) {-		return this.pushStack( winnow(this, selector || [], true) );-	},--	filter: function( selector ) {-		return this.pushStack( winnow(this, selector || [], false) );-	},--	is: function( selector ) {-		return !!winnow(-			this,--			// If this is a positional/relative selector, check membership in the returned set-			// so $("p:first").is("p:last") won't return true for a doc with two "p".-			typeof selector === "string" && rneedsContext.test( selector ) ?-				jQuery( selector ) :-				selector || [],-			false-		).length;-	},--	closest: function( selectors, context ) {-		var cur,-			i = 0,-			l = this.length,-			ret = [],-			pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ?-				jQuery( selectors, context || this.context ) :-				0;--		for ( ; i < l; i++ ) {-			for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) {-				// Always skip document fragments-				if ( cur.nodeType < 11 && (pos ?-					pos.index(cur) > -1 :--					// Don't pass non-elements to Sizzle-					cur.nodeType === 1 &&-						jQuery.find.matchesSelector(cur, selectors)) ) {--					cur = ret.push( cur );-					break;-				}-			}-		}--		return this.pushStack( ret.length > 1 ? jQuery.unique( ret ) : ret );-	},--	// Determine the position of an element within-	// the matched set of elements-	index: function( elem ) {--		// No argument, return index in parent-		if ( !elem ) {-			return ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1;-		}--		// index in selector-		if ( typeof elem === "string" ) {-			return jQuery.inArray( this[0], jQuery( elem ) );-		}--		// Locate the position of the desired element-		return jQuery.inArray(-			// If it receives a jQuery object, the first element is used-			elem.jquery ? elem[0] : elem, this );-	},--	add: function( selector, context ) {-		var set = typeof selector === "string" ?-				jQuery( selector, context ) :-				jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),-			all = jQuery.merge( this.get(), set );--		return this.pushStack( jQuery.unique(all) );-	},--	addBack: function( selector ) {-		return this.add( selector == null ?-			this.prevObject : this.prevObject.filter(selector)-		);-	}-});--function sibling( cur, dir ) {-	do {-		cur = cur[ dir ];-	} while ( cur && cur.nodeType !== 1 );--	return cur;-}--jQuery.each({-	parent: function( elem ) {-		var parent = elem.parentNode;-		return parent && parent.nodeType !== 11 ? parent : null;-	},-	parents: function( elem ) {-		return jQuery.dir( elem, "parentNode" );-	},-	parentsUntil: function( elem, i, until ) {-		return jQuery.dir( elem, "parentNode", until );-	},-	next: function( elem ) {-		return sibling( elem, "nextSibling" );-	},-	prev: function( elem ) {-		return sibling( elem, "previousSibling" );-	},-	nextAll: function( elem ) {-		return jQuery.dir( elem, "nextSibling" );-	},-	prevAll: function( elem ) {-		return jQuery.dir( elem, "previousSibling" );-	},-	nextUntil: function( elem, i, until ) {-		return jQuery.dir( elem, "nextSibling", until );-	},-	prevUntil: function( elem, i, until ) {-		return jQuery.dir( elem, "previousSibling", until );-	},-	siblings: function( elem ) {-		return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );-	},-	children: function( elem ) {-		return jQuery.sibling( elem.firstChild );-	},-	contents: function( elem ) {-		return jQuery.nodeName( elem, "iframe" ) ?-			elem.contentDocument || elem.contentWindow.document :-			jQuery.merge( [], elem.childNodes );-	}-}, function( name, fn ) {-	jQuery.fn[ name ] = function( until, selector ) {-		var ret = jQuery.map( this, fn, until );--		if ( name.slice( -5 ) !== "Until" ) {-			selector = until;-		}--		if ( selector && typeof selector === "string" ) {-			ret = jQuery.filter( selector, ret );-		}--		if ( this.length > 1 ) {-			// Remove duplicates-			if ( !guaranteedUnique[ name ] ) {-				ret = jQuery.unique( ret );-			}--			// Reverse order for parents* and prev-derivatives-			if ( rparentsprev.test( name ) ) {-				ret = ret.reverse();-			}-		}--		return this.pushStack( ret );-	};-});--jQuery.extend({-	filter: function( expr, elems, not ) {-		var elem = elems[ 0 ];--		if ( not ) {-			expr = ":not(" + expr + ")";-		}--		return elems.length === 1 && elem.nodeType === 1 ?-			jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :-			jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {-				return elem.nodeType === 1;-			}));-	},--	dir: function( elem, dir, until ) {-		var matched = [],-			cur = elem[ dir ];--		while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {-			if ( cur.nodeType === 1 ) {-				matched.push( cur );-			}-			cur = cur[dir];-		}-		return matched;-	},--	sibling: function( n, elem ) {-		var r = [];--		for ( ; n; n = n.nextSibling ) {-			if ( n.nodeType === 1 && n !== elem ) {-				r.push( n );-			}-		}--		return r;-	}-});--// Implement the identical functionality for filter and not-function winnow( elements, qualifier, not ) {-	if ( jQuery.isFunction( qualifier ) ) {-		return jQuery.grep( elements, function( elem, i ) {-			/* jshint -W018 */-			return !!qualifier.call( elem, i, elem ) !== not;-		});--	}--	if ( qualifier.nodeType ) {-		return jQuery.grep( elements, function( elem ) {-			return ( elem === qualifier ) !== not;-		});--	}--	if ( typeof qualifier === "string" ) {-		if ( isSimple.test( qualifier ) ) {-			return jQuery.filter( qualifier, elements, not );-		}--		qualifier = jQuery.filter( qualifier, elements );-	}--	return jQuery.grep( elements, function( elem ) {-		return ( jQuery.inArray( elem, qualifier ) >= 0 ) !== not;-	});-}-function createSafeFragment( document ) {-	var list = nodeNames.split( "|" ),-		safeFrag = document.createDocumentFragment();--	if ( safeFrag.createElement ) {-		while ( list.length ) {-			safeFrag.createElement(-				list.pop()-			);-		}-	}-	return safeFrag;-}--var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" +-		"header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",-	rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g,-	rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"),-	rleadingWhitespace = /^\s+/,-	rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,-	rtagName = /<([\w:]+)/,-	rtbody = /<tbody/i,-	rhtml = /<|&#?\w+;/,-	rnoInnerhtml = /<(?:script|style|link)/i,-	manipulation_rcheckableType = /^(?:checkbox|radio)$/i,-	// checked="checked" or checked-	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,-	rscriptType = /^$|\/(?:java|ecma)script/i,-	rscriptTypeMasked = /^true\/(.*)/,-	rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,--	// We have to close these tags to support XHTML (#13200)-	wrapMap = {-		option: [ 1, "<select multiple='multiple'>", "</select>" ],-		legend: [ 1, "<fieldset>", "</fieldset>" ],-		area: [ 1, "<map>", "</map>" ],-		param: [ 1, "<object>", "</object>" ],-		thead: [ 1, "<table>", "</table>" ],-		tr: [ 2, "<table><tbody>", "</tbody></table>" ],-		col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],-		td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],--		// IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,-		// unless wrapped in a div with non-breaking characters in front of it.-		_default: jQuery.support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X<div>", "</div>"  ]-	},-	safeFragment = createSafeFragment( document ),-	fragmentDiv = safeFragment.appendChild( document.createElement("div") );--wrapMap.optgroup = wrapMap.option;-wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;-wrapMap.th = wrapMap.td;--jQuery.fn.extend({-	text: function( value ) {-		return jQuery.access( this, function( value ) {-			return value === undefined ?-				jQuery.text( this ) :-				this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );-		}, null, value, arguments.length );-	},--	append: function() {-		return this.domManip( arguments, function( elem ) {-			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {-				var target = manipulationTarget( this, elem );-				target.appendChild( elem );-			}-		});-	},--	prepend: function() {-		return this.domManip( arguments, function( elem ) {-			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {-				var target = manipulationTarget( this, elem );-				target.insertBefore( elem, target.firstChild );-			}-		});-	},--	before: function() {-		return this.domManip( arguments, function( elem ) {-			if ( this.parentNode ) {-				this.parentNode.insertBefore( elem, this );-			}-		});-	},--	after: function() {-		return this.domManip( arguments, function( elem ) {-			if ( this.parentNode ) {-				this.parentNode.insertBefore( elem, this.nextSibling );-			}-		});-	},--	// keepData is for internal use only--do not document-	remove: function( selector, keepData ) {-		var elem,-			elems = selector ? jQuery.filter( selector, this ) : this,-			i = 0;--		for ( ; (elem = elems[i]) != null; i++ ) {--			if ( !keepData && elem.nodeType === 1 ) {-				jQuery.cleanData( getAll( elem ) );-			}--			if ( elem.parentNode ) {-				if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {-					setGlobalEval( getAll( elem, "script" ) );-				}-				elem.parentNode.removeChild( elem );-			}-		}--		return this;-	},--	empty: function() {-		var elem,-			i = 0;--		for ( ; (elem = this[i]) != null; i++ ) {-			// Remove element nodes and prevent memory leaks-			if ( elem.nodeType === 1 ) {-				jQuery.cleanData( getAll( elem, false ) );-			}--			// Remove any remaining nodes-			while ( elem.firstChild ) {-				elem.removeChild( elem.firstChild );-			}--			// If this is a select, ensure that it displays empty (#12336)-			// Support: IE<9-			if ( elem.options && jQuery.nodeName( elem, "select" ) ) {-				elem.options.length = 0;-			}-		}--		return this;-	},--	clone: function( dataAndEvents, deepDataAndEvents ) {-		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;-		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;--		return this.map( function () {-			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );-		});-	},--	html: function( value ) {-		return jQuery.access( this, function( value ) {-			var elem = this[0] || {},-				i = 0,-				l = this.length;--			if ( value === undefined ) {-				return elem.nodeType === 1 ?-					elem.innerHTML.replace( rinlinejQuery, "" ) :-					undefined;-			}--			// See if we can take a shortcut and just use innerHTML-			if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&-				( jQuery.support.htmlSerialize || !rnoshimcache.test( value )  ) &&-				( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&-				!wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) {--				value = value.replace( rxhtmlTag, "<$1></$2>" );--				try {-					for (; i < l; i++ ) {-						// Remove element nodes and prevent memory leaks-						elem = this[i] || {};-						if ( elem.nodeType === 1 ) {-							jQuery.cleanData( getAll( elem, false ) );-							elem.innerHTML = value;-						}-					}--					elem = 0;--				// If using innerHTML throws an exception, use the fallback method-				} catch(e) {}-			}--			if ( elem ) {-				this.empty().append( value );-			}-		}, null, value, arguments.length );-	},--	replaceWith: function() {-		var-			// Snapshot the DOM in case .domManip sweeps something relevant into its fragment-			args = jQuery.map( this, function( elem ) {-				return [ elem.nextSibling, elem.parentNode ];-			}),-			i = 0;--		// Make the changes, replacing each context element with the new content-		this.domManip( arguments, function( elem ) {-			var next = args[ i++ ],-				parent = args[ i++ ];--			if ( parent ) {-				// Don't use the snapshot next if it has moved (#13810)-				if ( next && next.parentNode !== parent ) {-					next = this.nextSibling;-				}-				jQuery( this ).remove();-				parent.insertBefore( elem, next );-			}-		// Allow new content to include elements from the context set-		}, true );--		// Force removal if there was no new content (e.g., from empty arguments)-		return i ? this : this.remove();-	},--	detach: function( selector ) {-		return this.remove( selector, true );-	},--	domManip: function( args, callback, allowIntersection ) {--		// Flatten any nested arrays-		args = core_concat.apply( [], args );--		var first, node, hasScripts,-			scripts, doc, fragment,-			i = 0,-			l = this.length,-			set = this,-			iNoClone = l - 1,-			value = args[0],-			isFunction = jQuery.isFunction( value );--		// We can't cloneNode fragments that contain checked, in WebKit-		if ( isFunction || !( l <= 1 || typeof value !== "string" || jQuery.support.checkClone || !rchecked.test( value ) ) ) {-			return this.each(function( index ) {-				var self = set.eq( index );-				if ( isFunction ) {-					args[0] = value.call( this, index, self.html() );-				}-				self.domManip( args, callback, allowIntersection );-			});-		}--		if ( l ) {-			fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, !allowIntersection && this );-			first = fragment.firstChild;--			if ( fragment.childNodes.length === 1 ) {-				fragment = first;-			}--			if ( first ) {-				scripts = jQuery.map( getAll( fragment, "script" ), disableScript );-				hasScripts = scripts.length;--				// Use the original fragment for the last item instead of the first because it can end up-				// being emptied incorrectly in certain situations (#8070).-				for ( ; i < l; i++ ) {-					node = fragment;--					if ( i !== iNoClone ) {-						node = jQuery.clone( node, true, true );--						// Keep references to cloned scripts for later restoration-						if ( hasScripts ) {-							jQuery.merge( scripts, getAll( node, "script" ) );-						}-					}--					callback.call( this[i], node, i );-				}--				if ( hasScripts ) {-					doc = scripts[ scripts.length - 1 ].ownerDocument;--					// Reenable scripts-					jQuery.map( scripts, restoreScript );--					// Evaluate executable scripts on first document insertion-					for ( i = 0; i < hasScripts; i++ ) {-						node = scripts[ i ];-						if ( rscriptType.test( node.type || "" ) &&-							!jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) {--							if ( node.src ) {-								// Hope ajax is available...-								jQuery._evalUrl( node.src );-							} else {-								jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ).replace( rcleanScript, "" ) );-							}-						}-					}-				}--				// Fix #11809: Avoid leaking memory-				fragment = first = null;-			}-		}--		return this;-	}-});--// Support: IE<8-// Manipulating tables requires a tbody-function manipulationTarget( elem, content ) {-	return jQuery.nodeName( elem, "table" ) &&-		jQuery.nodeName( content.nodeType === 1 ? content : content.firstChild, "tr" ) ?--		elem.getElementsByTagName("tbody")[0] ||-			elem.appendChild( elem.ownerDocument.createElement("tbody") ) :-		elem;-}--// Replace/restore the type attribute of script elements for safe DOM manipulation-function disableScript( elem ) {-	elem.type = (jQuery.find.attr( elem, "type" ) !== null) + "/" + elem.type;-	return elem;-}-function restoreScript( elem ) {-	var match = rscriptTypeMasked.exec( elem.type );-	if ( match ) {-		elem.type = match[1];-	} else {-		elem.removeAttribute("type");-	}-	return elem;-}--// Mark scripts as having already been evaluated-function setGlobalEval( elems, refElements ) {-	var elem,-		i = 0;-	for ( ; (elem = elems[i]) != null; i++ ) {-		jQuery._data( elem, "globalEval", !refElements || jQuery._data( refElements[i], "globalEval" ) );-	}-}--function cloneCopyEvent( src, dest ) {--	if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {-		return;-	}--	var type, i, l,-		oldData = jQuery._data( src ),-		curData = jQuery._data( dest, oldData ),-		events = oldData.events;--	if ( events ) {-		delete curData.handle;-		curData.events = {};--		for ( type in events ) {-			for ( i = 0, l = events[ type ].length; i < l; i++ ) {-				jQuery.event.add( dest, type, events[ type ][ i ] );-			}-		}-	}--	// make the cloned public data object a copy from the original-	if ( curData.data ) {-		curData.data = jQuery.extend( {}, curData.data );-	}-}--function fixCloneNodeIssues( src, dest ) {-	var nodeName, e, data;--	// We do not need to do anything for non-Elements-	if ( dest.nodeType !== 1 ) {-		return;-	}--	nodeName = dest.nodeName.toLowerCase();--	// IE6-8 copies events bound via attachEvent when using cloneNode.-	if ( !jQuery.support.noCloneEvent && dest[ jQuery.expando ] ) {-		data = jQuery._data( dest );--		for ( e in data.events ) {-			jQuery.removeEvent( dest, e, data.handle );-		}--		// Event data gets referenced instead of copied if the expando gets copied too-		dest.removeAttribute( jQuery.expando );-	}--	// IE blanks contents when cloning scripts, and tries to evaluate newly-set text-	if ( nodeName === "script" && dest.text !== src.text ) {-		disableScript( dest ).text = src.text;-		restoreScript( dest );--	// IE6-10 improperly clones children of object elements using classid.-	// IE10 throws NoModificationAllowedError if parent is null, #12132.-	} else if ( nodeName === "object" ) {-		if ( dest.parentNode ) {-			dest.outerHTML = src.outerHTML;-		}--		// This path appears unavoidable for IE9. When cloning an object-		// element in IE9, the outerHTML strategy above is not sufficient.-		// If the src has innerHTML and the destination does not,-		// copy the src.innerHTML into the dest.innerHTML. #10324-		if ( jQuery.support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) {-			dest.innerHTML = src.innerHTML;-		}--	} else if ( nodeName === "input" && manipulation_rcheckableType.test( src.type ) ) {-		// IE6-8 fails to persist the checked state of a cloned checkbox-		// or radio button. Worse, IE6-7 fail to give the cloned element-		// a checked appearance if the defaultChecked value isn't also set--		dest.defaultChecked = dest.checked = src.checked;--		// IE6-7 get confused and end up setting the value of a cloned-		// checkbox/radio button to an empty string instead of "on"-		if ( dest.value !== src.value ) {-			dest.value = src.value;-		}--	// IE6-8 fails to return the selected option to the default selected-	// state when cloning options-	} else if ( nodeName === "option" ) {-		dest.defaultSelected = dest.selected = src.defaultSelected;--	// IE6-8 fails to set the defaultValue to the correct value when-	// cloning other types of input fields-	} else if ( nodeName === "input" || nodeName === "textarea" ) {-		dest.defaultValue = src.defaultValue;-	}-}--jQuery.each({-	appendTo: "append",-	prependTo: "prepend",-	insertBefore: "before",-	insertAfter: "after",-	replaceAll: "replaceWith"-}, function( name, original ) {-	jQuery.fn[ name ] = function( selector ) {-		var elems,-			i = 0,-			ret = [],-			insert = jQuery( selector ),-			last = insert.length - 1;--		for ( ; i <= last; i++ ) {-			elems = i === last ? this : this.clone(true);-			jQuery( insert[i] )[ original ]( elems );--			// Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get()-			core_push.apply( ret, elems.get() );-		}--		return this.pushStack( ret );-	};-});--function getAll( context, tag ) {-	var elems, elem,-		i = 0,-		found = typeof context.getElementsByTagName !== core_strundefined ? context.getElementsByTagName( tag || "*" ) :-			typeof context.querySelectorAll !== core_strundefined ? context.querySelectorAll( tag || "*" ) :-			undefined;--	if ( !found ) {-		for ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) {-			if ( !tag || jQuery.nodeName( elem, tag ) ) {-				found.push( elem );-			} else {-				jQuery.merge( found, getAll( elem, tag ) );-			}-		}-	}--	return tag === undefined || tag && jQuery.nodeName( context, tag ) ?-		jQuery.merge( [ context ], found ) :-		found;-}--// Used in buildFragment, fixes the defaultChecked property-function fixDefaultChecked( elem ) {-	if ( manipulation_rcheckableType.test( elem.type ) ) {-		elem.defaultChecked = elem.checked;-	}-}--jQuery.extend({-	clone: function( elem, dataAndEvents, deepDataAndEvents ) {-		var destElements, node, clone, i, srcElements,-			inPage = jQuery.contains( elem.ownerDocument, elem );--		if ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) {-			clone = elem.cloneNode( true );--		// IE<=8 does not properly clone detached, unknown element nodes-		} else {-			fragmentDiv.innerHTML = elem.outerHTML;-			fragmentDiv.removeChild( clone = fragmentDiv.firstChild );-		}--		if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&-				(elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {--			// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2-			destElements = getAll( clone );-			srcElements = getAll( elem );--			// Fix all IE cloning issues-			for ( i = 0; (node = srcElements[i]) != null; ++i ) {-				// Ensure that the destination node is not null; Fixes #9587-				if ( destElements[i] ) {-					fixCloneNodeIssues( node, destElements[i] );-				}-			}-		}--		// Copy the events from the original to the clone-		if ( dataAndEvents ) {-			if ( deepDataAndEvents ) {-				srcElements = srcElements || getAll( elem );-				destElements = destElements || getAll( clone );--				for ( i = 0; (node = srcElements[i]) != null; i++ ) {-					cloneCopyEvent( node, destElements[i] );-				}-			} else {-				cloneCopyEvent( elem, clone );-			}-		}--		// Preserve script evaluation history-		destElements = getAll( clone, "script" );-		if ( destElements.length > 0 ) {-			setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );-		}--		destElements = srcElements = node = null;--		// Return the cloned set-		return clone;-	},--	buildFragment: function( elems, context, scripts, selection ) {-		var j, elem, contains,-			tmp, tag, tbody, wrap,-			l = elems.length,--			// Ensure a safe fragment-			safe = createSafeFragment( context ),--			nodes = [],-			i = 0;--		for ( ; i < l; i++ ) {-			elem = elems[ i ];--			if ( elem || elem === 0 ) {--				// Add nodes directly-				if ( jQuery.type( elem ) === "object" ) {-					jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );--				// Convert non-html into a text node-				} else if ( !rhtml.test( elem ) ) {-					nodes.push( context.createTextNode( elem ) );--				// Convert html into DOM nodes-				} else {-					tmp = tmp || safe.appendChild( context.createElement("div") );--					// Deserialize a standard representation-					tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase();-					wrap = wrapMap[ tag ] || wrapMap._default;--					tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<$1></$2>" ) + wrap[2];--					// Descend through wrappers to the right content-					j = wrap[0];-					while ( j-- ) {-						tmp = tmp.lastChild;-					}--					// Manually add leading whitespace removed by IE-					if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {-						nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) );-					}--					// Remove IE's autoinserted <tbody> from table fragments-					if ( !jQuery.support.tbody ) {--						// String was a <table>, *may* have spurious <tbody>-						elem = tag === "table" && !rtbody.test( elem ) ?-							tmp.firstChild :--							// String was a bare <thead> or <tfoot>-							wrap[1] === "<table>" && !rtbody.test( elem ) ?-								tmp :-								0;--						j = elem && elem.childNodes.length;-						while ( j-- ) {-							if ( jQuery.nodeName( (tbody = elem.childNodes[j]), "tbody" ) && !tbody.childNodes.length ) {-								elem.removeChild( tbody );-							}-						}-					}--					jQuery.merge( nodes, tmp.childNodes );--					// Fix #12392 for WebKit and IE > 9-					tmp.textContent = "";--					// Fix #12392 for oldIE-					while ( tmp.firstChild ) {-						tmp.removeChild( tmp.firstChild );-					}--					// Remember the top-level container for proper cleanup-					tmp = safe.lastChild;-				}-			}-		}--		// Fix #11356: Clear elements from fragment-		if ( tmp ) {-			safe.removeChild( tmp );-		}--		// Reset defaultChecked for any radios and checkboxes-		// about to be appended to the DOM in IE 6/7 (#8060)-		if ( !jQuery.support.appendChecked ) {-			jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked );-		}--		i = 0;-		while ( (elem = nodes[ i++ ]) ) {--			// #4087 - If origin and destination elements are the same, and this is-			// that element, do not do anything-			if ( selection && jQuery.inArray( elem, selection ) !== -1 ) {-				continue;-			}--			contains = jQuery.contains( elem.ownerDocument, elem );--			// Append to fragment-			tmp = getAll( safe.appendChild( elem ), "script" );--			// Preserve script evaluation history-			if ( contains ) {-				setGlobalEval( tmp );-			}--			// Capture executables-			if ( scripts ) {-				j = 0;-				while ( (elem = tmp[ j++ ]) ) {-					if ( rscriptType.test( elem.type || "" ) ) {-						scripts.push( elem );-					}-				}-			}-		}--		tmp = null;--		return safe;-	},--	cleanData: function( elems, /* internal */ acceptData ) {-		var elem, type, id, data,-			i = 0,-			internalKey = jQuery.expando,-			cache = jQuery.cache,-			deleteExpando = jQuery.support.deleteExpando,-			special = jQuery.event.special;--		for ( ; (elem = elems[i]) != null; i++ ) {--			if ( acceptData || jQuery.acceptData( elem ) ) {--				id = elem[ internalKey ];-				data = id && cache[ id ];--				if ( data ) {-					if ( data.events ) {-						for ( type in data.events ) {-							if ( special[ type ] ) {-								jQuery.event.remove( elem, type );--							// This is a shortcut to avoid jQuery.event.remove's overhead-							} else {-								jQuery.removeEvent( elem, type, data.handle );-							}-						}-					}--					// Remove cache only if it was not already removed by jQuery.event.remove-					if ( cache[ id ] ) {--						delete cache[ id ];--						// IE does not allow us to delete expando properties from nodes,-						// nor does it have a removeAttribute function on Document nodes;-						// we must handle all of these cases-						if ( deleteExpando ) {-							delete elem[ internalKey ];--						} else if ( typeof elem.removeAttribute !== core_strundefined ) {-							elem.removeAttribute( internalKey );--						} else {-							elem[ internalKey ] = null;-						}--						core_deletedIds.push( id );-					}-				}-			}-		}-	},--	_evalUrl: function( url ) {-		return jQuery.ajax({-			url: url,-			type: "GET",-			dataType: "script",-			async: false,-			global: false,-			"throws": true-		});-	}-});-jQuery.fn.extend({-	wrapAll: function( html ) {-		if ( jQuery.isFunction( html ) ) {-			return this.each(function(i) {-				jQuery(this).wrapAll( html.call(this, i) );-			});-		}--		if ( this[0] ) {-			// The elements to wrap the target around-			var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);--			if ( this[0].parentNode ) {-				wrap.insertBefore( this[0] );-			}--			wrap.map(function() {-				var elem = this;--				while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {-					elem = elem.firstChild;-				}--				return elem;-			}).append( this );-		}--		return this;-	},--	wrapInner: function( html ) {-		if ( jQuery.isFunction( html ) ) {-			return this.each(function(i) {-				jQuery(this).wrapInner( html.call(this, i) );-			});-		}--		return this.each(function() {-			var self = jQuery( this ),-				contents = self.contents();--			if ( contents.length ) {-				contents.wrapAll( html );--			} else {-				self.append( html );-			}-		});-	},--	wrap: function( html ) {-		var isFunction = jQuery.isFunction( html );--		return this.each(function(i) {-			jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );-		});-	},--	unwrap: function() {-		return this.parent().each(function() {-			if ( !jQuery.nodeName( this, "body" ) ) {-				jQuery( this ).replaceWith( this.childNodes );-			}-		}).end();-	}-});-var iframe, getStyles, curCSS,-	ralpha = /alpha\([^)]*\)/i,-	ropacity = /opacity\s*=\s*([^)]*)/,-	rposition = /^(top|right|bottom|left)$/,-	// swappable if display is none or starts with table except "table", "table-cell", or "table-caption"-	// see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display-	rdisplayswap = /^(none|table(?!-c[ea]).+)/,-	rmargin = /^margin/,-	rnumsplit = new RegExp( "^(" + core_pnum + ")(.*)$", "i" ),-	rnumnonpx = new RegExp( "^(" + core_pnum + ")(?!px)[a-z%]+$", "i" ),-	rrelNum = new RegExp( "^([+-])=(" + core_pnum + ")", "i" ),-	elemdisplay = { BODY: "block" },--	cssShow = { position: "absolute", visibility: "hidden", display: "block" },-	cssNormalTransform = {-		letterSpacing: 0,-		fontWeight: 400-	},--	cssExpand = [ "Top", "Right", "Bottom", "Left" ],-	cssPrefixes = [ "Webkit", "O", "Moz", "ms" ];--// return a css property mapped to a potentially vendor prefixed property-function vendorPropName( style, name ) {--	// shortcut for names that are not vendor prefixed-	if ( name in style ) {-		return name;-	}--	// check for vendor prefixed names-	var capName = name.charAt(0).toUpperCase() + name.slice(1),-		origName = name,-		i = cssPrefixes.length;--	while ( i-- ) {-		name = cssPrefixes[ i ] + capName;-		if ( name in style ) {-			return name;-		}-	}--	return origName;-}--function isHidden( elem, el ) {-	// isHidden might be called from jQuery#filter function;-	// in that case, element will be second argument-	elem = el || elem;-	return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem );-}--function showHide( elements, show ) {-	var display, elem, hidden,-		values = [],-		index = 0,-		length = elements.length;--	for ( ; index < length; index++ ) {-		elem = elements[ index ];-		if ( !elem.style ) {-			continue;-		}--		values[ index ] = jQuery._data( elem, "olddisplay" );-		display = elem.style.display;-		if ( show ) {-			// Reset the inline display of this element to learn if it is-			// being hidden by cascaded rules or not-			if ( !values[ index ] && display === "none" ) {-				elem.style.display = "";-			}--			// Set elements which have been overridden with display: none-			// in a stylesheet to whatever the default browser style is-			// for such an element-			if ( elem.style.display === "" && isHidden( elem ) ) {-				values[ index ] = jQuery._data( elem, "olddisplay", css_defaultDisplay(elem.nodeName) );-			}-		} else {--			if ( !values[ index ] ) {-				hidden = isHidden( elem );--				if ( display && display !== "none" || !hidden ) {-					jQuery._data( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) );-				}-			}-		}-	}--	// Set the display of most of the elements in a second loop-	// to avoid the constant reflow-	for ( index = 0; index < length; index++ ) {-		elem = elements[ index ];-		if ( !elem.style ) {-			continue;-		}-		if ( !show || elem.style.display === "none" || elem.style.display === "" ) {-			elem.style.display = show ? values[ index ] || "" : "none";-		}-	}--	return elements;-}--jQuery.fn.extend({-	css: function( name, value ) {-		return jQuery.access( this, function( elem, name, value ) {-			var len, styles,-				map = {},-				i = 0;--			if ( jQuery.isArray( name ) ) {-				styles = getStyles( elem );-				len = name.length;--				for ( ; i < len; i++ ) {-					map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );-				}--				return map;-			}--			return value !== undefined ?-				jQuery.style( elem, name, value ) :-				jQuery.css( elem, name );-		}, name, value, arguments.length > 1 );-	},-	show: function() {-		return showHide( this, true );-	},-	hide: function() {-		return showHide( this );-	},-	toggle: function( state ) {-		var bool = typeof state === "boolean";--		return this.each(function() {-			if ( bool ? state : isHidden( this ) ) {-				jQuery( this ).show();-			} else {-				jQuery( this ).hide();-			}-		});-	}-});--jQuery.extend({-	// Add in style property hooks for overriding the default-	// behavior of getting and setting a style property-	cssHooks: {-		opacity: {-			get: function( elem, computed ) {-				if ( computed ) {-					// We should always get a number back from opacity-					var ret = curCSS( elem, "opacity" );-					return ret === "" ? "1" : ret;-				}-			}-		}-	},--	// Don't automatically add "px" to these possibly-unitless properties-	cssNumber: {-		"columnCount": true,-		"fillOpacity": true,-		"fontWeight": true,-		"lineHeight": true,-		"opacity": true,-		"orphans": true,-		"widows": true,-		"zIndex": true,-		"zoom": true-	},--	// Add in properties whose names you wish to fix before-	// setting or getting the value-	cssProps: {-		// normalize float css property-		"float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"-	},--	// Get and set the style property on a DOM Node-	style: function( elem, name, value, extra ) {-		// Don't set styles on text and comment nodes-		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {-			return;-		}--		// Make sure that we're working with the right name-		var ret, type, hooks,-			origName = jQuery.camelCase( name ),-			style = elem.style;--		name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );--		// gets hook for the prefixed version-		// followed by the unprefixed version-		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];--		// Check if we're setting a value-		if ( value !== undefined ) {-			type = typeof value;--			// convert relative number strings (+= or -=) to relative numbers. #7345-			if ( type === "string" && (ret = rrelNum.exec( value )) ) {-				value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );-				// Fixes bug #9237-				type = "number";-			}--			// Make sure that NaN and null values aren't set. See: #7116-			if ( value == null || type === "number" && isNaN( value ) ) {-				return;-			}--			// If a number was passed in, add 'px' to the (except for certain CSS properties)-			if ( type === "number" && !jQuery.cssNumber[ origName ] ) {-				value += "px";-			}--			// Fixes #8908, it can be done more correctly by specifing setters in cssHooks,-			// but it would mean to define eight (for every problematic property) identical functions-			if ( !jQuery.support.clearCloneStyle && value === "" && name.indexOf("background") === 0 ) {-				style[ name ] = "inherit";-			}--			// If a hook was provided, use that value, otherwise just set the specified value-			if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {--				// Wrapped to prevent IE from throwing errors when 'invalid' values are provided-				// Fixes bug #5509-				try {-					style[ name ] = value;-				} catch(e) {}-			}--		} else {-			// If a hook was provided get the non-computed value from there-			if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {-				return ret;-			}--			// Otherwise just get the value from the style object-			return style[ name ];-		}-	},--	css: function( elem, name, extra, styles ) {-		var num, val, hooks,-			origName = jQuery.camelCase( name );--		// Make sure that we're working with the right name-		name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );--		// gets hook for the prefixed version-		// followed by the unprefixed version-		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];--		// If a hook was provided get the computed value from there-		if ( hooks && "get" in hooks ) {-			val = hooks.get( elem, true, extra );-		}--		// Otherwise, if a way to get the computed value exists, use that-		if ( val === undefined ) {-			val = curCSS( elem, name, styles );-		}--		//convert "normal" to computed value-		if ( val === "normal" && name in cssNormalTransform ) {-			val = cssNormalTransform[ name ];-		}--		// Return, converting to number if forced or a qualifier was provided and val looks numeric-		if ( extra === "" || extra ) {-			num = parseFloat( val );-			return extra === true || jQuery.isNumeric( num ) ? num || 0 : val;-		}-		return val;-	}-});--// NOTE: we've included the "window" in window.getComputedStyle-// because jsdom on node.js will break without it.-if ( window.getComputedStyle ) {-	getStyles = function( elem ) {-		return window.getComputedStyle( elem, null );-	};--	curCSS = function( elem, name, _computed ) {-		var width, minWidth, maxWidth,-			computed = _computed || getStyles( elem ),--			// getPropertyValue is only needed for .css('filter') in IE9, see #12537-			ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined,-			style = elem.style;--		if ( computed ) {--			if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {-				ret = jQuery.style( elem, name );-			}--			// A tribute to the "awesome hack by Dean Edwards"-			// Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right-			// Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels-			// this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values-			if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {--				// Remember the original values-				width = style.width;-				minWidth = style.minWidth;-				maxWidth = style.maxWidth;--				// Put in the new values to get a computed value out-				style.minWidth = style.maxWidth = style.width = ret;-				ret = computed.width;--				// Revert the changed values-				style.width = width;-				style.minWidth = minWidth;-				style.maxWidth = maxWidth;-			}-		}--		return ret;-	};-} else if ( document.documentElement.currentStyle ) {-	getStyles = function( elem ) {-		return elem.currentStyle;-	};--	curCSS = function( elem, name, _computed ) {-		var left, rs, rsLeft,-			computed = _computed || getStyles( elem ),-			ret = computed ? computed[ name ] : undefined,-			style = elem.style;--		// Avoid setting ret to empty string here-		// so we don't default to auto-		if ( ret == null && style && style[ name ] ) {-			ret = style[ name ];-		}--		// From the awesome hack by Dean Edwards-		// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291--		// If we're not dealing with a regular pixel number-		// but a number that has a weird ending, we need to convert it to pixels-		// but not position css attributes, as those are proportional to the parent element instead-		// and we can't measure the parent instead because it might trigger a "stacking dolls" problem-		if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {--			// Remember the original values-			left = style.left;-			rs = elem.runtimeStyle;-			rsLeft = rs && rs.left;--			// Put in the new values to get a computed value out-			if ( rsLeft ) {-				rs.left = elem.currentStyle.left;-			}-			style.left = name === "fontSize" ? "1em" : ret;-			ret = style.pixelLeft + "px";--			// Revert the changed values-			style.left = left;-			if ( rsLeft ) {-				rs.left = rsLeft;-			}-		}--		return ret === "" ? "auto" : ret;-	};-}--function setPositiveNumber( elem, value, subtract ) {-	var matches = rnumsplit.exec( value );-	return matches ?-		// Guard against undefined "subtract", e.g., when used as in cssHooks-		Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) :-		value;-}--function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {-	var i = extra === ( isBorderBox ? "border" : "content" ) ?-		// If we already have the right measurement, avoid augmentation-		4 :-		// Otherwise initialize for horizontal or vertical properties-		name === "width" ? 1 : 0,--		val = 0;--	for ( ; i < 4; i += 2 ) {-		// both box models exclude margin, so add it if we want it-		if ( extra === "margin" ) {-			val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );-		}--		if ( isBorderBox ) {-			// border-box includes padding, so remove it if we want content-			if ( extra === "content" ) {-				val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );-			}--			// at this point, extra isn't border nor margin, so remove border-			if ( extra !== "margin" ) {-				val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );-			}-		} else {-			// at this point, extra isn't content, so add padding-			val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );--			// at this point, extra isn't content nor padding, so add border-			if ( extra !== "padding" ) {-				val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );-			}-		}-	}--	return val;-}--function getWidthOrHeight( elem, name, extra ) {--	// Start with offset property, which is equivalent to the border-box value-	var valueIsBorderBox = true,-		val = name === "width" ? elem.offsetWidth : elem.offsetHeight,-		styles = getStyles( elem ),-		isBorderBox = jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box";--	// some non-html elements return undefined for offsetWidth, so check for null/undefined-	// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285-	// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668-	if ( val <= 0 || val == null ) {-		// Fall back to computed then uncomputed css if necessary-		val = curCSS( elem, name, styles );-		if ( val < 0 || val == null ) {-			val = elem.style[ name ];-		}--		// Computed unit is not pixels. Stop here and return.-		if ( rnumnonpx.test(val) ) {-			return val;-		}--		// we need the check for style in case a browser which returns unreliable values-		// for getComputedStyle silently falls back to the reliable elem.style-		valueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] );--		// Normalize "", auto, and prepare for extra-		val = parseFloat( val ) || 0;-	}--	// use the active box-sizing model to add/subtract irrelevant styles-	return ( val +-		augmentWidthOrHeight(-			elem,-			name,-			extra || ( isBorderBox ? "border" : "content" ),-			valueIsBorderBox,-			styles-		)-	) + "px";-}--// Try to determine the default display value of an element-function css_defaultDisplay( nodeName ) {-	var doc = document,-		display = elemdisplay[ nodeName ];--	if ( !display ) {-		display = actualDisplay( nodeName, doc );--		// If the simple way fails, read from inside an iframe-		if ( display === "none" || !display ) {-			// Use the already-created iframe if possible-			iframe = ( iframe ||-				jQuery("<iframe frameborder='0' width='0' height='0'/>")-				.css( "cssText", "display:block !important" )-			).appendTo( doc.documentElement );--			// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse-			doc = ( iframe[0].contentWindow || iframe[0].contentDocument ).document;-			doc.write("<!doctype html><html><body>");-			doc.close();--			display = actualDisplay( nodeName, doc );-			iframe.detach();-		}--		// Store the correct default display-		elemdisplay[ nodeName ] = display;-	}--	return display;-}--// Called ONLY from within css_defaultDisplay-function actualDisplay( name, doc ) {-	var elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),-		display = jQuery.css( elem[0], "display" );-	elem.remove();-	return display;-}--jQuery.each([ "height", "width" ], function( i, name ) {-	jQuery.cssHooks[ name ] = {-		get: function( elem, computed, extra ) {-			if ( computed ) {-				// certain elements can have dimension info if we invisibly show them-				// however, it must have a current display style that would benefit from this-				return elem.offsetWidth === 0 && rdisplayswap.test( jQuery.css( elem, "display" ) ) ?-					jQuery.swap( elem, cssShow, function() {-						return getWidthOrHeight( elem, name, extra );-					}) :-					getWidthOrHeight( elem, name, extra );-			}-		},--		set: function( elem, value, extra ) {-			var styles = extra && getStyles( elem );-			return setPositiveNumber( elem, value, extra ?-				augmentWidthOrHeight(-					elem,-					name,-					extra,-					jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box",-					styles-				) : 0-			);-		}-	};-});--if ( !jQuery.support.opacity ) {-	jQuery.cssHooks.opacity = {-		get: function( elem, computed ) {-			// IE uses filters for opacity-			return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?-				( 0.01 * parseFloat( RegExp.$1 ) ) + "" :-				computed ? "1" : "";-		},--		set: function( elem, value ) {-			var style = elem.style,-				currentStyle = elem.currentStyle,-				opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "",-				filter = currentStyle && currentStyle.filter || style.filter || "";--			// IE has trouble with opacity if it does not have layout-			// Force it by setting the zoom level-			style.zoom = 1;--			// if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652-			// if value === "", then remove inline opacity #12685-			if ( ( value >= 1 || value === "" ) &&-					jQuery.trim( filter.replace( ralpha, "" ) ) === "" &&-					style.removeAttribute ) {--				// Setting style.filter to null, "" & " " still leave "filter:" in the cssText-				// if "filter:" is present at all, clearType is disabled, we want to avoid this-				// style.removeAttribute is IE Only, but so apparently is this code path...-				style.removeAttribute( "filter" );--				// if there is no filter style applied in a css rule or unset inline opacity, we are done-				if ( value === "" || currentStyle && !currentStyle.filter ) {-					return;-				}-			}--			// otherwise, set new filter values-			style.filter = ralpha.test( filter ) ?-				filter.replace( ralpha, opacity ) :-				filter + " " + opacity;-		}-	};-}--// These hooks cannot be added until DOM ready because the support test-// for it is not run until after DOM ready-jQuery(function() {-	if ( !jQuery.support.reliableMarginRight ) {-		jQuery.cssHooks.marginRight = {-			get: function( elem, computed ) {-				if ( computed ) {-					// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right-					// Work around by temporarily setting element display to inline-block-					return jQuery.swap( elem, { "display": "inline-block" },-						curCSS, [ elem, "marginRight" ] );-				}-			}-		};-	}--	// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084-	// getComputedStyle returns percent when specified for top/left/bottom/right-	// rather than make the css module depend on the offset module, we just check for it here-	if ( !jQuery.support.pixelPosition && jQuery.fn.position ) {-		jQuery.each( [ "top", "left" ], function( i, prop ) {-			jQuery.cssHooks[ prop ] = {-				get: function( elem, computed ) {-					if ( computed ) {-						computed = curCSS( elem, prop );-						// if curCSS returns percentage, fallback to offset-						return rnumnonpx.test( computed ) ?-							jQuery( elem ).position()[ prop ] + "px" :-							computed;-					}-				}-			};-		});-	}--});--if ( jQuery.expr && jQuery.expr.filters ) {-	jQuery.expr.filters.hidden = function( elem ) {-		// Support: Opera <= 12.12-		// Opera reports offsetWidths and offsetHeights less than zero on some elements-		return elem.offsetWidth <= 0 && elem.offsetHeight <= 0 ||-			(!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || jQuery.css( elem, "display" )) === "none");-	};--	jQuery.expr.filters.visible = function( elem ) {-		return !jQuery.expr.filters.hidden( elem );-	};-}--// These hooks are used by animate to expand properties-jQuery.each({-	margin: "",-	padding: "",-	border: "Width"-}, function( prefix, suffix ) {-	jQuery.cssHooks[ prefix + suffix ] = {-		expand: function( value ) {-			var i = 0,-				expanded = {},--				// assumes a single number if not a string-				parts = typeof value === "string" ? value.split(" ") : [ value ];--			for ( ; i < 4; i++ ) {-				expanded[ prefix + cssExpand[ i ] + suffix ] =-					parts[ i ] || parts[ i - 2 ] || parts[ 0 ];-			}--			return expanded;-		}-	};--	if ( !rmargin.test( prefix ) ) {-		jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;-	}-});-var r20 = /%20/g,-	rbracket = /\[\]$/,-	rCRLF = /\r?\n/g,-	rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,-	rsubmittable = /^(?:input|select|textarea|keygen)/i;--jQuery.fn.extend({-	serialize: function() {-		return jQuery.param( this.serializeArray() );-	},-	serializeArray: function() {-		return this.map(function(){-			// Can add propHook for "elements" to filter or add form elements-			var elements = jQuery.prop( this, "elements" );-			return elements ? jQuery.makeArray( elements ) : this;-		})-		.filter(function(){-			var type = this.type;-			// Use .is(":disabled") so that fieldset[disabled] works-			return this.name && !jQuery( this ).is( ":disabled" ) &&-				rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&-				( this.checked || !manipulation_rcheckableType.test( type ) );-		})-		.map(function( i, elem ){-			var val = jQuery( this ).val();--			return val == null ?-				null :-				jQuery.isArray( val ) ?-					jQuery.map( val, function( val ){-						return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };-					}) :-					{ name: elem.name, value: val.replace( rCRLF, "\r\n" ) };-		}).get();-	}-});--//Serialize an array of form elements or a set of-//key/values into a query string-jQuery.param = function( a, traditional ) {-	var prefix,-		s = [],-		add = function( key, value ) {-			// If value is a function, invoke it and return its value-			value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value );-			s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );-		};--	// Set traditional to true for jQuery <= 1.3.2 behavior.-	if ( traditional === undefined ) {-		traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;-	}--	// If an array was passed in, assume that it is an array of form elements.-	if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {-		// Serialize the form elements-		jQuery.each( a, function() {-			add( this.name, this.value );-		});--	} else {-		// If traditional, encode the "old" way (the way 1.3.2 or older-		// did it), otherwise encode params recursively.-		for ( prefix in a ) {-			buildParams( prefix, a[ prefix ], traditional, add );-		}-	}--	// Return the resulting serialization-	return s.join( "&" ).replace( r20, "+" );-};--function buildParams( prefix, obj, traditional, add ) {-	var name;--	if ( jQuery.isArray( obj ) ) {-		// Serialize array item.-		jQuery.each( obj, function( i, v ) {-			if ( traditional || rbracket.test( prefix ) ) {-				// Treat each array item as a scalar.-				add( prefix, v );--			} else {-				// Item is non-scalar (array or object), encode its numeric index.-				buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add );-			}-		});--	} else if ( !traditional && jQuery.type( obj ) === "object" ) {-		// Serialize object item.-		for ( name in obj ) {-			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );-		}--	} else {-		// Serialize scalar item.-		add( prefix, obj );-	}-}-jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +-	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +-	"change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {--	// Handle event binding-	jQuery.fn[ name ] = function( data, fn ) {-		return arguments.length > 0 ?-			this.on( name, null, data, fn ) :-			this.trigger( name );-	};-});--jQuery.fn.extend({-	hover: function( fnOver, fnOut ) {-		return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );-	},--	bind: function( types, data, fn ) {-		return this.on( types, null, data, fn );-	},-	unbind: function( types, fn ) {-		return this.off( types, null, fn );-	},--	delegate: function( selector, types, data, fn ) {-		return this.on( types, selector, data, fn );-	},-	undelegate: function( selector, types, fn ) {-		// ( namespace ) or ( selector, types [, fn] )-		return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn );-	}-});-var-	// Document location-	ajaxLocParts,-	ajaxLocation,-	ajax_nonce = jQuery.now(),--	ajax_rquery = /\?/,-	rhash = /#.*$/,-	rts = /([?&])_=[^&]*/,-	rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL-	// #7653, #8125, #8152: local protocol detection-	rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,-	rnoContent = /^(?:GET|HEAD)$/,-	rprotocol = /^\/\//,-	rurl = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,--	// Keep a copy of the old load method-	_load = jQuery.fn.load,--	/* Prefilters-	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)-	 * 2) These are called:-	 *    - BEFORE asking for a transport-	 *    - AFTER param serialization (s.data is a string if s.processData is true)-	 * 3) key is the dataType-	 * 4) the catchall symbol "*" can be used-	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed-	 */-	prefilters = {},--	/* Transports bindings-	 * 1) key is the dataType-	 * 2) the catchall symbol "*" can be used-	 * 3) selection will start with transport dataType and THEN go to "*" if needed-	 */-	transports = {},--	// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression-	allTypes = "*/".concat("*");--// #8138, IE may throw an exception when accessing-// a field from window.location if document.domain has been set-try {-	ajaxLocation = location.href;-} catch( e ) {-	// Use the href attribute of an A element-	// since IE will modify it given document.location-	ajaxLocation = document.createElement( "a" );-	ajaxLocation.href = "";-	ajaxLocation = ajaxLocation.href;-}--// Segment location into parts-ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];--// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport-function addToPrefiltersOrTransports( structure ) {--	// dataTypeExpression is optional and defaults to "*"-	return function( dataTypeExpression, func ) {--		if ( typeof dataTypeExpression !== "string" ) {-			func = dataTypeExpression;-			dataTypeExpression = "*";-		}--		var dataType,-			i = 0,-			dataTypes = dataTypeExpression.toLowerCase().match( core_rnotwhite ) || [];--		if ( jQuery.isFunction( func ) ) {-			// For each dataType in the dataTypeExpression-			while ( (dataType = dataTypes[i++]) ) {-				// Prepend if requested-				if ( dataType[0] === "+" ) {-					dataType = dataType.slice( 1 ) || "*";-					(structure[ dataType ] = structure[ dataType ] || []).unshift( func );--				// Otherwise append-				} else {-					(structure[ dataType ] = structure[ dataType ] || []).push( func );-				}-			}-		}-	};-}--// Base inspection function for prefilters and transports-function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {--	var inspected = {},-		seekingTransport = ( structure === transports );--	function inspect( dataType ) {-		var selected;-		inspected[ dataType ] = true;-		jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {-			var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );-			if( typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) {-				options.dataTypes.unshift( dataTypeOrTransport );-				inspect( dataTypeOrTransport );-				return false;-			} else if ( seekingTransport ) {-				return !( selected = dataTypeOrTransport );-			}-		});-		return selected;-	}--	return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );-}--// A special extend for ajax options-// that takes "flat" options (not to be deep extended)-// Fixes #9887-function ajaxExtend( target, src ) {-	var deep, key,-		flatOptions = jQuery.ajaxSettings.flatOptions || {};--	for ( key in src ) {-		if ( src[ key ] !== undefined ) {-			( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ];-		}-	}-	if ( deep ) {-		jQuery.extend( true, target, deep );-	}--	return target;-}--jQuery.fn.load = function( url, params, callback ) {-	if ( typeof url !== "string" && _load ) {-		return _load.apply( this, arguments );-	}--	var selector, response, type,-		self = this,-		off = url.indexOf(" ");--	if ( off >= 0 ) {-		selector = url.slice( off, url.length );-		url = url.slice( 0, off );-	}--	// If it's a function-	if ( jQuery.isFunction( params ) ) {--		// We assume that it's the callback-		callback = params;-		params = undefined;--	// Otherwise, build a param string-	} else if ( params && typeof params === "object" ) {-		type = "POST";-	}--	// If we have elements to modify, make the request-	if ( self.length > 0 ) {-		jQuery.ajax({-			url: url,--			// if "type" variable is undefined, then "GET" method will be used-			type: type,-			dataType: "html",-			data: params-		}).done(function( responseText ) {--			// Save response for use in complete callback-			response = arguments;--			self.html( selector ?--				// If a selector was specified, locate the right elements in a dummy div-				// Exclude scripts to avoid IE 'Permission Denied' errors-				jQuery("<div>").append( jQuery.parseHTML( responseText ) ).find( selector ) :--				// Otherwise use the full result-				responseText );--		}).complete( callback && function( jqXHR, status ) {-			self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );-		});-	}--	return this;-};--// Attach a bunch of functions for handling common AJAX events-jQuery.each( [ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend" ], function( i, type ){-	jQuery.fn[ type ] = function( fn ){-		return this.on( type, fn );-	};-});--jQuery.extend({--	// Counter for holding the number of active queries-	active: 0,--	// Last-Modified header cache for next request-	lastModified: {},-	etag: {},--	ajaxSettings: {-		url: ajaxLocation,-		type: "GET",-		isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),-		global: true,-		processData: true,-		async: true,-		contentType: "application/x-www-form-urlencoded; charset=UTF-8",-		/*-		timeout: 0,-		data: null,-		dataType: null,-		username: null,-		password: null,-		cache: null,-		throws: false,-		traditional: false,-		headers: {},-		*/--		accepts: {-			"*": allTypes,-			text: "text/plain",-			html: "text/html",-			xml: "application/xml, text/xml",-			json: "application/json, text/javascript"-		},--		contents: {-			xml: /xml/,-			html: /html/,-			json: /json/-		},--		responseFields: {-			xml: "responseXML",-			text: "responseText",-			json: "responseJSON"-		},--		// Data converters-		// Keys separate source (or catchall "*") and destination types with a single space-		converters: {--			// Convert anything to text-			"* text": String,--			// Text to html (true = no transformation)-			"text html": true,--			// Evaluate text as a json expression-			"text json": jQuery.parseJSON,--			// Parse text as xml-			"text xml": jQuery.parseXML-		},--		// For options that shouldn't be deep extended:-		// you can add your own custom options here if-		// and when you create one that shouldn't be-		// deep extended (see ajaxExtend)-		flatOptions: {-			url: true,-			context: true-		}-	},--	// Creates a full fledged settings object into target-	// with both ajaxSettings and settings fields.-	// If target is omitted, writes into ajaxSettings.-	ajaxSetup: function( target, settings ) {-		return settings ?--			// Building a settings object-			ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :--			// Extending ajaxSettings-			ajaxExtend( jQuery.ajaxSettings, target );-	},--	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),-	ajaxTransport: addToPrefiltersOrTransports( transports ),--	// Main method-	ajax: function( url, options ) {--		// If url is an object, simulate pre-1.5 signature-		if ( typeof url === "object" ) {-			options = url;-			url = undefined;-		}--		// Force options to be an object-		options = options || {};--		var // Cross-domain detection vars-			parts,-			// Loop variable-			i,-			// URL without anti-cache param-			cacheURL,-			// Response headers as string-			responseHeadersString,-			// timeout handle-			timeoutTimer,--			// To know if global events are to be dispatched-			fireGlobals,--			transport,-			// Response headers-			responseHeaders,-			// Create the final options object-			s = jQuery.ajaxSetup( {}, options ),-			// Callbacks context-			callbackContext = s.context || s,-			// Context for global events is callbackContext if it is a DOM node or jQuery collection-			globalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ?-				jQuery( callbackContext ) :-				jQuery.event,-			// Deferreds-			deferred = jQuery.Deferred(),-			completeDeferred = jQuery.Callbacks("once memory"),-			// Status-dependent callbacks-			statusCode = s.statusCode || {},-			// Headers (they are sent all at once)-			requestHeaders = {},-			requestHeadersNames = {},-			// The jqXHR state-			state = 0,-			// Default abort message-			strAbort = "canceled",-			// Fake xhr-			jqXHR = {-				readyState: 0,--				// Builds headers hashtable if needed-				getResponseHeader: function( key ) {-					var match;-					if ( state === 2 ) {-						if ( !responseHeaders ) {-							responseHeaders = {};-							while ( (match = rheaders.exec( responseHeadersString )) ) {-								responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];-							}-						}-						match = responseHeaders[ key.toLowerCase() ];-					}-					return match == null ? null : match;-				},--				// Raw string-				getAllResponseHeaders: function() {-					return state === 2 ? responseHeadersString : null;-				},--				// Caches the header-				setRequestHeader: function( name, value ) {-					var lname = name.toLowerCase();-					if ( !state ) {-						name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;-						requestHeaders[ name ] = value;-					}-					return this;-				},--				// Overrides response content-type header-				overrideMimeType: function( type ) {-					if ( !state ) {-						s.mimeType = type;-					}-					return this;-				},--				// Status-dependent callbacks-				statusCode: function( map ) {-					var code;-					if ( map ) {-						if ( state < 2 ) {-							for ( code in map ) {-								// Lazy-add the new callback in a way that preserves old ones-								statusCode[ code ] = [ statusCode[ code ], map[ code ] ];-							}-						} else {-							// Execute the appropriate callbacks-							jqXHR.always( map[ jqXHR.status ] );-						}-					}-					return this;-				},--				// Cancel the request-				abort: function( statusText ) {-					var finalText = statusText || strAbort;-					if ( transport ) {-						transport.abort( finalText );-					}-					done( 0, finalText );-					return this;-				}-			};--		// Attach deferreds-		deferred.promise( jqXHR ).complete = completeDeferred.add;-		jqXHR.success = jqXHR.done;-		jqXHR.error = jqXHR.fail;--		// Remove hash character (#7531: and string promotion)-		// Add protocol if not provided (#5866: IE7 issue with protocol-less urls)-		// Handle falsy url in the settings object (#10093: consistency with old signature)-		// We also use the url parameter if available-		s.url = ( ( url || s.url || ajaxLocation ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );--		// Alias method option to type as per ticket #12004-		s.type = options.method || options.type || s.method || s.type;--		// Extract dataTypes list-		s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( core_rnotwhite ) || [""];--		// A cross-domain request is in order when we have a protocol:host:port mismatch-		if ( s.crossDomain == null ) {-			parts = rurl.exec( s.url.toLowerCase() );-			s.crossDomain = !!( parts &&-				( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||-					( parts[ 3 ] || ( parts[ 1 ] === "http:" ? "80" : "443" ) ) !==-						( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? "80" : "443" ) ) )-			);-		}--		// Convert data if not already a string-		if ( s.data && s.processData && typeof s.data !== "string" ) {-			s.data = jQuery.param( s.data, s.traditional );-		}--		// Apply prefilters-		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );--		// If request was aborted inside a prefilter, stop there-		if ( state === 2 ) {-			return jqXHR;-		}--		// We can fire global events as of now if asked to-		fireGlobals = s.global;--		// Watch for a new set of requests-		if ( fireGlobals && jQuery.active++ === 0 ) {-			jQuery.event.trigger("ajaxStart");-		}--		// Uppercase the type-		s.type = s.type.toUpperCase();--		// Determine if request has content-		s.hasContent = !rnoContent.test( s.type );--		// Save the URL in case we're toying with the If-Modified-Since-		// and/or If-None-Match header later on-		cacheURL = s.url;--		// More options handling for requests with no content-		if ( !s.hasContent ) {--			// If data is available, append data to url-			if ( s.data ) {-				cacheURL = ( s.url += ( ajax_rquery.test( cacheURL ) ? "&" : "?" ) + s.data );-				// #9682: remove data so that it's not used in an eventual retry-				delete s.data;-			}--			// Add anti-cache in url if needed-			if ( s.cache === false ) {-				s.url = rts.test( cacheURL ) ?--					// If there is already a '_' parameter, set its value-					cacheURL.replace( rts, "$1_=" + ajax_nonce++ ) :--					// Otherwise add one to the end-					cacheURL + ( ajax_rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ajax_nonce++;-			}-		}--		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.-		if ( s.ifModified ) {-			if ( jQuery.lastModified[ cacheURL ] ) {-				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );-			}-			if ( jQuery.etag[ cacheURL ] ) {-				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );-			}-		}--		// Set the correct header, if data is being sent-		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {-			jqXHR.setRequestHeader( "Content-Type", s.contentType );-		}--		// Set the Accepts header for the server, depending on the dataType-		jqXHR.setRequestHeader(-			"Accept",-			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?-				s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :-				s.accepts[ "*" ]-		);--		// Check for headers option-		for ( i in s.headers ) {-			jqXHR.setRequestHeader( i, s.headers[ i ] );-		}--		// Allow custom headers/mimetypes and early abort-		if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {-			// Abort if not done already and return-			return jqXHR.abort();-		}--		// aborting is no longer a cancellation-		strAbort = "abort";--		// Install callbacks on deferreds-		for ( i in { success: 1, error: 1, complete: 1 } ) {-			jqXHR[ i ]( s[ i ] );-		}--		// Get transport-		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );--		// If no transport, we auto-abort-		if ( !transport ) {-			done( -1, "No Transport" );-		} else {-			jqXHR.readyState = 1;--			// Send global event-			if ( fireGlobals ) {-				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );-			}-			// Timeout-			if ( s.async && s.timeout > 0 ) {-				timeoutTimer = setTimeout(function() {-					jqXHR.abort("timeout");-				}, s.timeout );-			}--			try {-				state = 1;-				transport.send( requestHeaders, done );-			} catch ( e ) {-				// Propagate exception as error if not done-				if ( state < 2 ) {-					done( -1, e );-				// Simply rethrow otherwise-				} else {-					throw e;-				}-			}-		}--		// Callback for when everything is done-		function done( status, nativeStatusText, responses, headers ) {-			var isSuccess, success, error, response, modified,-				statusText = nativeStatusText;--			// Called once-			if ( state === 2 ) {-				return;-			}--			// State is "done" now-			state = 2;--			// Clear timeout if it exists-			if ( timeoutTimer ) {-				clearTimeout( timeoutTimer );-			}--			// Dereference transport for early garbage collection-			// (no matter how long the jqXHR object will be used)-			transport = undefined;--			// Cache response headers-			responseHeadersString = headers || "";--			// Set readyState-			jqXHR.readyState = status > 0 ? 4 : 0;--			// Determine if successful-			isSuccess = status >= 200 && status < 300 || status === 304;--			// Get response data-			if ( responses ) {-				response = ajaxHandleResponses( s, jqXHR, responses );-			}--			// Convert no matter what (that way responseXXX fields are always set)-			response = ajaxConvert( s, response, jqXHR, isSuccess );--			// If successful, handle type chaining-			if ( isSuccess ) {--				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.-				if ( s.ifModified ) {-					modified = jqXHR.getResponseHeader("Last-Modified");-					if ( modified ) {-						jQuery.lastModified[ cacheURL ] = modified;-					}-					modified = jqXHR.getResponseHeader("etag");-					if ( modified ) {-						jQuery.etag[ cacheURL ] = modified;-					}-				}--				// if no content-				if ( status === 204 || s.type === "HEAD" ) {-					statusText = "nocontent";--				// if not modified-				} else if ( status === 304 ) {-					statusText = "notmodified";--				// If we have data, let's convert it-				} else {-					statusText = response.state;-					success = response.data;-					error = response.error;-					isSuccess = !error;-				}-			} else {-				// We extract error from statusText-				// then normalize statusText and status for non-aborts-				error = statusText;-				if ( status || !statusText ) {-					statusText = "error";-					if ( status < 0 ) {-						status = 0;-					}-				}-			}--			// Set data for the fake xhr object-			jqXHR.status = status;-			jqXHR.statusText = ( nativeStatusText || statusText ) + "";--			// Success/Error-			if ( isSuccess ) {-				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );-			} else {-				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );-			}--			// Status-dependent callbacks-			jqXHR.statusCode( statusCode );-			statusCode = undefined;--			if ( fireGlobals ) {-				globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",-					[ jqXHR, s, isSuccess ? success : error ] );-			}--			// Complete-			completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );--			if ( fireGlobals ) {-				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );-				// Handle the global AJAX counter-				if ( !( --jQuery.active ) ) {-					jQuery.event.trigger("ajaxStop");-				}-			}-		}--		return jqXHR;-	},--	getJSON: function( url, data, callback ) {-		return jQuery.get( url, data, callback, "json" );-	},--	getScript: function( url, callback ) {-		return jQuery.get( url, undefined, callback, "script" );-	}-});--jQuery.each( [ "get", "post" ], function( i, method ) {-	jQuery[ method ] = function( url, data, callback, type ) {-		// shift arguments if data argument was omitted-		if ( jQuery.isFunction( data ) ) {-			type = type || callback;-			callback = data;-			data = undefined;-		}--		return jQuery.ajax({-			url: url,-			type: method,-			dataType: type,-			data: data,-			success: callback-		});-	};-});--/* Handles responses to an ajax request:- * - finds the right dataType (mediates between content-type and expected dataType)- * - returns the corresponding response- */-function ajaxHandleResponses( s, jqXHR, responses ) {-	var firstDataType, ct, finalDataType, type,-		contents = s.contents,-		dataTypes = s.dataTypes;--	// Remove auto dataType and get content-type in the process-	while( dataTypes[ 0 ] === "*" ) {-		dataTypes.shift();-		if ( ct === undefined ) {-			ct = s.mimeType || jqXHR.getResponseHeader("Content-Type");-		}-	}--	// Check if we're dealing with a known content-type-	if ( ct ) {-		for ( type in contents ) {-			if ( contents[ type ] && contents[ type ].test( ct ) ) {-				dataTypes.unshift( type );-				break;-			}-		}-	}--	// Check to see if we have a response for the expected dataType-	if ( dataTypes[ 0 ] in responses ) {-		finalDataType = dataTypes[ 0 ];-	} else {-		// Try convertible dataTypes-		for ( type in responses ) {-			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {-				finalDataType = type;-				break;-			}-			if ( !firstDataType ) {-				firstDataType = type;-			}-		}-		// Or just use first one-		finalDataType = finalDataType || firstDataType;-	}--	// If we found a dataType-	// We add the dataType to the list if needed-	// and return the corresponding response-	if ( finalDataType ) {-		if ( finalDataType !== dataTypes[ 0 ] ) {-			dataTypes.unshift( finalDataType );-		}-		return responses[ finalDataType ];-	}-}--/* Chain conversions given the request and the original response- * Also sets the responseXXX fields on the jqXHR instance- */-function ajaxConvert( s, response, jqXHR, isSuccess ) {-	var conv2, current, conv, tmp, prev,-		converters = {},-		// Work with a copy of dataTypes in case we need to modify it for conversion-		dataTypes = s.dataTypes.slice();--	// Create converters map with lowercased keys-	if ( dataTypes[ 1 ] ) {-		for ( conv in s.converters ) {-			converters[ conv.toLowerCase() ] = s.converters[ conv ];-		}-	}--	current = dataTypes.shift();--	// Convert to each sequential dataType-	while ( current ) {--		if ( s.responseFields[ current ] ) {-			jqXHR[ s.responseFields[ current ] ] = response;-		}--		// Apply the dataFilter if provided-		if ( !prev && isSuccess && s.dataFilter ) {-			response = s.dataFilter( response, s.dataType );-		}--		prev = current;-		current = dataTypes.shift();--		if ( current ) {--			// There's only work to do if current dataType is non-auto-			if ( current === "*" ) {--				current = prev;--			// Convert response if prev dataType is non-auto and differs from current-			} else if ( prev !== "*" && prev !== current ) {--				// Seek a direct converter-				conv = converters[ prev + " " + current ] || converters[ "* " + current ];--				// If none found, seek a pair-				if ( !conv ) {-					for ( conv2 in converters ) {--						// If conv2 outputs current-						tmp = conv2.split( " " );-						if ( tmp[ 1 ] === current ) {--							// If prev can be converted to accepted input-							conv = converters[ prev + " " + tmp[ 0 ] ] ||-								converters[ "* " + tmp[ 0 ] ];-							if ( conv ) {-								// Condense equivalence converters-								if ( conv === true ) {-									conv = converters[ conv2 ];--								// Otherwise, insert the intermediate dataType-								} else if ( converters[ conv2 ] !== true ) {-									current = tmp[ 0 ];-									dataTypes.unshift( tmp[ 1 ] );-								}-								break;-							}-						}-					}-				}--				// Apply converter (if not an equivalence)-				if ( conv !== true ) {--					// Unless errors are allowed to bubble, catch and return them-					if ( conv && s[ "throws" ] ) {-						response = conv( response );-					} else {-						try {-							response = conv( response );-						} catch ( e ) {-							return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current };-						}-					}-				}-			}-		}-	}--	return { state: "success", data: response };-}-// Install script dataType-jQuery.ajaxSetup({-	accepts: {-		script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"-	},-	contents: {-		script: /(?:java|ecma)script/-	},-	converters: {-		"text script": function( text ) {-			jQuery.globalEval( text );-			return text;-		}-	}-});--// Handle cache's special case and global-jQuery.ajaxPrefilter( "script", function( s ) {-	if ( s.cache === undefined ) {-		s.cache = false;-	}-	if ( s.crossDomain ) {-		s.type = "GET";-		s.global = false;-	}-});--// Bind script tag hack transport-jQuery.ajaxTransport( "script", function(s) {--	// This transport only deals with cross domain requests-	if ( s.crossDomain ) {--		var script,-			head = document.head || jQuery("head")[0] || document.documentElement;--		return {--			send: function( _, callback ) {--				script = document.createElement("script");--				script.async = true;--				if ( s.scriptCharset ) {-					script.charset = s.scriptCharset;-				}--				script.src = s.url;--				// Attach handlers for all browsers-				script.onload = script.onreadystatechange = function( _, isAbort ) {--					if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {--						// Handle memory leak in IE-						script.onload = script.onreadystatechange = null;--						// Remove the script-						if ( script.parentNode ) {-							script.parentNode.removeChild( script );-						}--						// Dereference the script-						script = null;--						// Callback if not abort-						if ( !isAbort ) {-							callback( 200, "success" );-						}-					}-				};--				// Circumvent IE6 bugs with base elements (#2709 and #4378) by prepending-				// Use native DOM manipulation to avoid our domManip AJAX trickery-				head.insertBefore( script, head.firstChild );-			},--			abort: function() {-				if ( script ) {-					script.onload( undefined, true );-				}-			}-		};-	}-});-var oldCallbacks = [],-	rjsonp = /(=)\?(?=&|$)|\?\?/;--// Default jsonp settings-jQuery.ajaxSetup({-	jsonp: "callback",-	jsonpCallback: function() {-		var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( ajax_nonce++ ) );-		this[ callback ] = true;-		return callback;-	}-});--// Detect, normalize options and install callbacks for jsonp requests-jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {--	var callbackName, overwritten, responseContainer,-		jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?-			"url" :-			typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data"-		);--	// Handle iff the expected data type is "jsonp" or we have a parameter to set-	if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {--		// Get callback name, remembering preexisting value associated with it-		callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?-			s.jsonpCallback() :-			s.jsonpCallback;--		// Insert callback into url or form data-		if ( jsonProp ) {-			s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );-		} else if ( s.jsonp !== false ) {-			s.url += ( ajax_rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;-		}--		// Use data converter to retrieve json after script execution-		s.converters["script json"] = function() {-			if ( !responseContainer ) {-				jQuery.error( callbackName + " was not called" );-			}-			return responseContainer[ 0 ];-		};--		// force json dataType-		s.dataTypes[ 0 ] = "json";--		// Install callback-		overwritten = window[ callbackName ];-		window[ callbackName ] = function() {-			responseContainer = arguments;-		};--		// Clean-up function (fires after converters)-		jqXHR.always(function() {-			// Restore preexisting value-			window[ callbackName ] = overwritten;--			// Save back as free-			if ( s[ callbackName ] ) {-				// make sure that re-using the options doesn't screw things around-				s.jsonpCallback = originalSettings.jsonpCallback;--				// save the callback name for future use-				oldCallbacks.push( callbackName );-			}--			// Call if it was a function and we have a response-			if ( responseContainer && jQuery.isFunction( overwritten ) ) {-				overwritten( responseContainer[ 0 ] );-			}--			responseContainer = overwritten = undefined;-		});--		// Delegate to script-		return "script";-	}-});-var xhrCallbacks, xhrSupported,-	xhrId = 0,-	// #5280: Internet Explorer will keep connections alive if we don't abort on unload-	xhrOnUnloadAbort = window.ActiveXObject && function() {-		// Abort all pending requests-		var key;-		for ( key in xhrCallbacks ) {-			xhrCallbacks[ key ]( undefined, true );-		}-	};--// Functions to create xhrs-function createStandardXHR() {-	try {-		return new window.XMLHttpRequest();-	} catch( e ) {}-}--function createActiveXHR() {-	try {-		return new window.ActiveXObject("Microsoft.XMLHTTP");-	} catch( e ) {}-}--// Create the request object-// (This is still attached to ajaxSettings for backward compatibility)-jQuery.ajaxSettings.xhr = window.ActiveXObject ?-	/* Microsoft failed to properly-	 * implement the XMLHttpRequest in IE7 (can't request local files),-	 * so we use the ActiveXObject when it is available-	 * Additionally XMLHttpRequest can be disabled in IE7/IE8 so-	 * we need a fallback.-	 */-	function() {-		return !this.isLocal && createStandardXHR() || createActiveXHR();-	} :-	// For all other browsers, use the standard XMLHttpRequest object-	createStandardXHR;--// Determine support properties-xhrSupported = jQuery.ajaxSettings.xhr();-jQuery.support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );-xhrSupported = jQuery.support.ajax = !!xhrSupported;--// Create transport if the browser can provide an xhr-if ( xhrSupported ) {--	jQuery.ajaxTransport(function( s ) {-		// Cross domain only allowed if supported through XMLHttpRequest-		if ( !s.crossDomain || jQuery.support.cors ) {--			var callback;--			return {-				send: function( headers, complete ) {--					// Get a new xhr-					var handle, i,-						xhr = s.xhr();--					// Open the socket-					// Passing null username, generates a login popup on Opera (#2865)-					if ( s.username ) {-						xhr.open( s.type, s.url, s.async, s.username, s.password );-					} else {-						xhr.open( s.type, s.url, s.async );-					}--					// Apply custom fields if provided-					if ( s.xhrFields ) {-						for ( i in s.xhrFields ) {-							xhr[ i ] = s.xhrFields[ i ];-						}-					}--					// Override mime type if needed-					if ( s.mimeType && xhr.overrideMimeType ) {-						xhr.overrideMimeType( s.mimeType );-					}--					// X-Requested-With header-					// For cross-domain requests, seeing as conditions for a preflight are-					// akin to a jigsaw puzzle, we simply never set it to be sure.-					// (it can always be set on a per-request basis or even using ajaxSetup)-					// For same-domain requests, won't change header if already provided.-					if ( !s.crossDomain && !headers["X-Requested-With"] ) {-						headers["X-Requested-With"] = "XMLHttpRequest";-					}--					// Need an extra try/catch for cross domain requests in Firefox 3-					try {-						for ( i in headers ) {-							xhr.setRequestHeader( i, headers[ i ] );-						}-					} catch( err ) {}--					// Do send the request-					// This may raise an exception which is actually-					// handled in jQuery.ajax (so no try/catch here)-					xhr.send( ( s.hasContent && s.data ) || null );--					// Listener-					callback = function( _, isAbort ) {-						var status, responseHeaders, statusText, responses;--						// Firefox throws exceptions when accessing properties-						// of an xhr when a network error occurred-						// http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)-						try {--							// Was never called and is aborted or complete-							if ( callback && ( isAbort || xhr.readyState === 4 ) ) {--								// Only called once-								callback = undefined;--								// Do not keep as active anymore-								if ( handle ) {-									xhr.onreadystatechange = jQuery.noop;-									if ( xhrOnUnloadAbort ) {-										delete xhrCallbacks[ handle ];-									}-								}--								// If it's an abort-								if ( isAbort ) {-									// Abort it manually if needed-									if ( xhr.readyState !== 4 ) {-										xhr.abort();-									}-								} else {-									responses = {};-									status = xhr.status;-									responseHeaders = xhr.getAllResponseHeaders();--									// When requesting binary data, IE6-9 will throw an exception-									// on any attempt to access responseText (#11426)-									if ( typeof xhr.responseText === "string" ) {-										responses.text = xhr.responseText;-									}--									// Firefox throws an exception when accessing-									// statusText for faulty cross-domain requests-									try {-										statusText = xhr.statusText;-									} catch( e ) {-										// We normalize with Webkit giving an empty statusText-										statusText = "";-									}--									// Filter status for non standard behaviors--									// If the request is local and we have data: assume a success-									// (success with no data won't get notified, that's the best we-									// can do given current implementations)-									if ( !status && s.isLocal && !s.crossDomain ) {-										status = responses.text ? 200 : 404;-									// IE - #1450: sometimes returns 1223 when it should be 204-									} else if ( status === 1223 ) {-										status = 204;-									}-								}-							}-						} catch( firefoxAccessException ) {-							if ( !isAbort ) {-								complete( -1, firefoxAccessException );-							}-						}--						// Call complete if needed-						if ( responses ) {-							complete( status, statusText, responses, responseHeaders );-						}-					};--					if ( !s.async ) {-						// if we're in sync mode we fire the callback-						callback();-					} else if ( xhr.readyState === 4 ) {-						// (IE6 & IE7) if it's in cache and has been-						// retrieved directly we need to fire the callback-						setTimeout( callback );-					} else {-						handle = ++xhrId;-						if ( xhrOnUnloadAbort ) {-							// Create the active xhrs callbacks list if needed-							// and attach the unload handler-							if ( !xhrCallbacks ) {-								xhrCallbacks = {};-								jQuery( window ).unload( xhrOnUnloadAbort );-							}-							// Add to list of active xhrs callbacks-							xhrCallbacks[ handle ] = callback;-						}-						xhr.onreadystatechange = callback;-					}-				},--				abort: function() {-					if ( callback ) {-						callback( undefined, true );-					}-				}-			};-		}-	});-}-var fxNow, timerId,-	rfxtypes = /^(?:toggle|show|hide)$/,-	rfxnum = new RegExp( "^(?:([+-])=|)(" + core_pnum + ")([a-z%]*)$", "i" ),-	rrun = /queueHooks$/,-	animationPrefilters = [ defaultPrefilter ],-	tweeners = {-		"*": [function( prop, value ) {-			var tween = this.createTween( prop, value ),-				target = tween.cur(),-				parts = rfxnum.exec( value ),-				unit = parts && parts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),--				// Starting value computation is required for potential unit mismatches-				start = ( jQuery.cssNumber[ prop ] || unit !== "px" && +target ) &&-					rfxnum.exec( jQuery.css( tween.elem, prop ) ),-				scale = 1,-				maxIterations = 20;--			if ( start && start[ 3 ] !== unit ) {-				// Trust units reported by jQuery.css-				unit = unit || start[ 3 ];--				// Make sure we update the tween properties later on-				parts = parts || [];--				// Iteratively approximate from a nonzero starting point-				start = +target || 1;--				do {-					// If previous iteration zeroed out, double until we get *something*-					// Use a string for doubling factor so we don't accidentally see scale as unchanged below-					scale = scale || ".5";--					// Adjust and apply-					start = start / scale;-					jQuery.style( tween.elem, prop, start + unit );--				// Update scale, tolerating zero or NaN from tween.cur()-				// And breaking the loop if scale is unchanged or perfect, or if we've just had enough-				} while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );-			}--			// Update tween properties-			if ( parts ) {-				start = tween.start = +start || +target || 0;-				tween.unit = unit;-				// If a +=/-= token was provided, we're doing a relative animation-				tween.end = parts[ 1 ] ?-					start + ( parts[ 1 ] + 1 ) * parts[ 2 ] :-					+parts[ 2 ];-			}--			return tween;-		}]-	};--// Animations created synchronously will run synchronously-function createFxNow() {-	setTimeout(function() {-		fxNow = undefined;-	});-	return ( fxNow = jQuery.now() );-}--function createTween( value, prop, animation ) {-	var tween,-		collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ),-		index = 0,-		length = collection.length;-	for ( ; index < length; index++ ) {-		if ( (tween = collection[ index ].call( animation, prop, value )) ) {--			// we're done with this property-			return tween;-		}-	}-}--function Animation( elem, properties, options ) {-	var result,-		stopped,-		index = 0,-		length = animationPrefilters.length,-		deferred = jQuery.Deferred().always( function() {-			// don't match elem in the :animated selector-			delete tick.elem;-		}),-		tick = function() {-			if ( stopped ) {-				return false;-			}-			var currentTime = fxNow || createFxNow(),-				remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),-				// archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497)-				temp = remaining / animation.duration || 0,-				percent = 1 - temp,-				index = 0,-				length = animation.tweens.length;--			for ( ; index < length ; index++ ) {-				animation.tweens[ index ].run( percent );-			}--			deferred.notifyWith( elem, [ animation, percent, remaining ]);--			if ( percent < 1 && length ) {-				return remaining;-			} else {-				deferred.resolveWith( elem, [ animation ] );-				return false;-			}-		},-		animation = deferred.promise({-			elem: elem,-			props: jQuery.extend( {}, properties ),-			opts: jQuery.extend( true, { specialEasing: {} }, options ),-			originalProperties: properties,-			originalOptions: options,-			startTime: fxNow || createFxNow(),-			duration: options.duration,-			tweens: [],-			createTween: function( prop, end ) {-				var tween = jQuery.Tween( elem, animation.opts, prop, end,-						animation.opts.specialEasing[ prop ] || animation.opts.easing );-				animation.tweens.push( tween );-				return tween;-			},-			stop: function( gotoEnd ) {-				var index = 0,-					// if we are going to the end, we want to run all the tweens-					// otherwise we skip this part-					length = gotoEnd ? animation.tweens.length : 0;-				if ( stopped ) {-					return this;-				}-				stopped = true;-				for ( ; index < length ; index++ ) {-					animation.tweens[ index ].run( 1 );-				}--				// resolve when we played the last frame-				// otherwise, reject-				if ( gotoEnd ) {-					deferred.resolveWith( elem, [ animation, gotoEnd ] );-				} else {-					deferred.rejectWith( elem, [ animation, gotoEnd ] );-				}-				return this;-			}-		}),-		props = animation.props;--	propFilter( props, animation.opts.specialEasing );--	for ( ; index < length ; index++ ) {-		result = animationPrefilters[ index ].call( animation, elem, props, animation.opts );-		if ( result ) {-			return result;-		}-	}--	jQuery.map( props, createTween, animation );--	if ( jQuery.isFunction( animation.opts.start ) ) {-		animation.opts.start.call( elem, animation );-	}--	jQuery.fx.timer(-		jQuery.extend( tick, {-			elem: elem,-			anim: animation,-			queue: animation.opts.queue-		})-	);--	// attach callbacks from options-	return animation.progress( animation.opts.progress )-		.done( animation.opts.done, animation.opts.complete )-		.fail( animation.opts.fail )-		.always( animation.opts.always );-}--function propFilter( props, specialEasing ) {-	var index, name, easing, value, hooks;--	// camelCase, specialEasing and expand cssHook pass-	for ( index in props ) {-		name = jQuery.camelCase( index );-		easing = specialEasing[ name ];-		value = props[ index ];-		if ( jQuery.isArray( value ) ) {-			easing = value[ 1 ];-			value = props[ index ] = value[ 0 ];-		}--		if ( index !== name ) {-			props[ name ] = value;-			delete props[ index ];-		}--		hooks = jQuery.cssHooks[ name ];-		if ( hooks && "expand" in hooks ) {-			value = hooks.expand( value );-			delete props[ name ];--			// not quite $.extend, this wont overwrite keys already present.-			// also - reusing 'index' from above because we have the correct "name"-			for ( index in value ) {-				if ( !( index in props ) ) {-					props[ index ] = value[ index ];-					specialEasing[ index ] = easing;-				}-			}-		} else {-			specialEasing[ name ] = easing;-		}-	}-}--jQuery.Animation = jQuery.extend( Animation, {--	tweener: function( props, callback ) {-		if ( jQuery.isFunction( props ) ) {-			callback = props;-			props = [ "*" ];-		} else {-			props = props.split(" ");-		}--		var prop,-			index = 0,-			length = props.length;--		for ( ; index < length ; index++ ) {-			prop = props[ index ];-			tweeners[ prop ] = tweeners[ prop ] || [];-			tweeners[ prop ].unshift( callback );-		}-	},--	prefilter: function( callback, prepend ) {-		if ( prepend ) {-			animationPrefilters.unshift( callback );-		} else {-			animationPrefilters.push( callback );-		}-	}-});--function defaultPrefilter( elem, props, opts ) {-	/* jshint validthis: true */-	var prop, value, toggle, tween, hooks, oldfire,-		anim = this,-		orig = {},-		style = elem.style,-		hidden = elem.nodeType && isHidden( elem ),-		dataShow = jQuery._data( elem, "fxshow" );--	// handle queue: false promises-	if ( !opts.queue ) {-		hooks = jQuery._queueHooks( elem, "fx" );-		if ( hooks.unqueued == null ) {-			hooks.unqueued = 0;-			oldfire = hooks.empty.fire;-			hooks.empty.fire = function() {-				if ( !hooks.unqueued ) {-					oldfire();-				}-			};-		}-		hooks.unqueued++;--		anim.always(function() {-			// doing this makes sure that the complete handler will be called-			// before this completes-			anim.always(function() {-				hooks.unqueued--;-				if ( !jQuery.queue( elem, "fx" ).length ) {-					hooks.empty.fire();-				}-			});-		});-	}--	// height/width overflow pass-	if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) {-		// Make sure that nothing sneaks out-		// Record all 3 overflow attributes because IE does not-		// change the overflow attribute when overflowX and-		// overflowY are set to the same value-		opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];--		// Set display property to inline-block for height/width-		// animations on inline elements that are having width/height animated-		if ( jQuery.css( elem, "display" ) === "inline" &&-				jQuery.css( elem, "float" ) === "none" ) {--			// inline-level elements accept inline-block;-			// block-level elements need to be inline with layout-			if ( !jQuery.support.inlineBlockNeedsLayout || css_defaultDisplay( elem.nodeName ) === "inline" ) {-				style.display = "inline-block";--			} else {-				style.zoom = 1;-			}-		}-	}--	if ( opts.overflow ) {-		style.overflow = "hidden";-		if ( !jQuery.support.shrinkWrapBlocks ) {-			anim.always(function() {-				style.overflow = opts.overflow[ 0 ];-				style.overflowX = opts.overflow[ 1 ];-				style.overflowY = opts.overflow[ 2 ];-			});-		}-	}---	// show/hide pass-	for ( prop in props ) {-		value = props[ prop ];-		if ( rfxtypes.exec( value ) ) {-			delete props[ prop ];-			toggle = toggle || value === "toggle";-			if ( value === ( hidden ? "hide" : "show" ) ) {-				continue;-			}-			orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );-		}-	}--	if ( !jQuery.isEmptyObject( orig ) ) {-		if ( dataShow ) {-			if ( "hidden" in dataShow ) {-				hidden = dataShow.hidden;-			}-		} else {-			dataShow = jQuery._data( elem, "fxshow", {} );-		}--		// store state if its toggle - enables .stop().toggle() to "reverse"-		if ( toggle ) {-			dataShow.hidden = !hidden;-		}-		if ( hidden ) {-			jQuery( elem ).show();-		} else {-			anim.done(function() {-				jQuery( elem ).hide();-			});-		}-		anim.done(function() {-			var prop;-			jQuery._removeData( elem, "fxshow" );-			for ( prop in orig ) {-				jQuery.style( elem, prop, orig[ prop ] );-			}-		});-		for ( prop in orig ) {-			tween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );--			if ( !( prop in dataShow ) ) {-				dataShow[ prop ] = tween.start;-				if ( hidden ) {-					tween.end = tween.start;-					tween.start = prop === "width" || prop === "height" ? 1 : 0;-				}-			}-		}-	}-}--function Tween( elem, options, prop, end, easing ) {-	return new Tween.prototype.init( elem, options, prop, end, easing );-}-jQuery.Tween = Tween;--Tween.prototype = {-	constructor: Tween,-	init: function( elem, options, prop, end, easing, unit ) {-		this.elem = elem;-		this.prop = prop;-		this.easing = easing || "swing";-		this.options = options;-		this.start = this.now = this.cur();-		this.end = end;-		this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );-	},-	cur: function() {-		var hooks = Tween.propHooks[ this.prop ];--		return hooks && hooks.get ?-			hooks.get( this ) :-			Tween.propHooks._default.get( this );-	},-	run: function( percent ) {-		var eased,-			hooks = Tween.propHooks[ this.prop ];--		if ( this.options.duration ) {-			this.pos = eased = jQuery.easing[ this.easing ](-				percent, this.options.duration * percent, 0, 1, this.options.duration-			);-		} else {-			this.pos = eased = percent;-		}-		this.now = ( this.end - this.start ) * eased + this.start;--		if ( this.options.step ) {-			this.options.step.call( this.elem, this.now, this );-		}--		if ( hooks && hooks.set ) {-			hooks.set( this );-		} else {-			Tween.propHooks._default.set( this );-		}-		return this;-	}-};--Tween.prototype.init.prototype = Tween.prototype;--Tween.propHooks = {-	_default: {-		get: function( tween ) {-			var result;--			if ( tween.elem[ tween.prop ] != null &&-				(!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {-				return tween.elem[ tween.prop ];-			}--			// passing an empty string as a 3rd parameter to .css will automatically-			// attempt a parseFloat and fallback to a string if the parse fails-			// so, simple values such as "10px" are parsed to Float.-			// complex values such as "rotate(1rad)" are returned as is.-			result = jQuery.css( tween.elem, tween.prop, "" );-			// Empty strings, null, undefined and "auto" are converted to 0.-			return !result || result === "auto" ? 0 : result;-		},-		set: function( tween ) {-			// use step hook for back compat - use cssHook if its there - use .style if its-			// available and use plain properties where available-			if ( jQuery.fx.step[ tween.prop ] ) {-				jQuery.fx.step[ tween.prop ]( tween );-			} else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {-				jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );-			} else {-				tween.elem[ tween.prop ] = tween.now;-			}-		}-	}-};--// Support: IE <=9-// Panic based approach to setting things on disconnected nodes--Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {-	set: function( tween ) {-		if ( tween.elem.nodeType && tween.elem.parentNode ) {-			tween.elem[ tween.prop ] = tween.now;-		}-	}-};--jQuery.each([ "toggle", "show", "hide" ], function( i, name ) {-	var cssFn = jQuery.fn[ name ];-	jQuery.fn[ name ] = function( speed, easing, callback ) {-		return speed == null || typeof speed === "boolean" ?-			cssFn.apply( this, arguments ) :-			this.animate( genFx( name, true ), speed, easing, callback );-	};-});--jQuery.fn.extend({-	fadeTo: function( speed, to, easing, callback ) {--		// show any hidden elements after setting opacity to 0-		return this.filter( isHidden ).css( "opacity", 0 ).show()--			// animate to the value specified-			.end().animate({ opacity: to }, speed, easing, callback );-	},-	animate: function( prop, speed, easing, callback ) {-		var empty = jQuery.isEmptyObject( prop ),-			optall = jQuery.speed( speed, easing, callback ),-			doAnimation = function() {-				// Operate on a copy of prop so per-property easing won't be lost-				var anim = Animation( this, jQuery.extend( {}, prop ), optall );--				// Empty animations, or finishing resolves immediately-				if ( empty || jQuery._data( this, "finish" ) ) {-					anim.stop( true );-				}-			};-			doAnimation.finish = doAnimation;--		return empty || optall.queue === false ?-			this.each( doAnimation ) :-			this.queue( optall.queue, doAnimation );-	},-	stop: function( type, clearQueue, gotoEnd ) {-		var stopQueue = function( hooks ) {-			var stop = hooks.stop;-			delete hooks.stop;-			stop( gotoEnd );-		};--		if ( typeof type !== "string" ) {-			gotoEnd = clearQueue;-			clearQueue = type;-			type = undefined;-		}-		if ( clearQueue && type !== false ) {-			this.queue( type || "fx", [] );-		}--		return this.each(function() {-			var dequeue = true,-				index = type != null && type + "queueHooks",-				timers = jQuery.timers,-				data = jQuery._data( this );--			if ( index ) {-				if ( data[ index ] && data[ index ].stop ) {-					stopQueue( data[ index ] );-				}-			} else {-				for ( index in data ) {-					if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {-						stopQueue( data[ index ] );-					}-				}-			}--			for ( index = timers.length; index--; ) {-				if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {-					timers[ index ].anim.stop( gotoEnd );-					dequeue = false;-					timers.splice( index, 1 );-				}-			}--			// start the next in the queue if the last step wasn't forced-			// timers currently will call their complete callbacks, which will dequeue-			// but only if they were gotoEnd-			if ( dequeue || !gotoEnd ) {-				jQuery.dequeue( this, type );-			}-		});-	},-	finish: function( type ) {-		if ( type !== false ) {-			type = type || "fx";-		}-		return this.each(function() {-			var index,-				data = jQuery._data( this ),-				queue = data[ type + "queue" ],-				hooks = data[ type + "queueHooks" ],-				timers = jQuery.timers,-				length = queue ? queue.length : 0;--			// enable finishing flag on private data-			data.finish = true;--			// empty the queue first-			jQuery.queue( this, type, [] );--			if ( hooks && hooks.stop ) {-				hooks.stop.call( this, true );-			}--			// look for any active animations, and finish them-			for ( index = timers.length; index--; ) {-				if ( timers[ index ].elem === this && timers[ index ].queue === type ) {-					timers[ index ].anim.stop( true );-					timers.splice( index, 1 );-				}-			}--			// look for any animations in the old queue and finish them-			for ( index = 0; index < length; index++ ) {-				if ( queue[ index ] && queue[ index ].finish ) {-					queue[ index ].finish.call( this );-				}-			}--			// turn off finishing flag-			delete data.finish;-		});-	}-});--// Generate parameters to create a standard animation-function genFx( type, includeWidth ) {-	var which,-		attrs = { height: type },-		i = 0;--	// if we include width, step value is 1 to do all cssExpand values,-	// if we don't include width, step value is 2 to skip over Left and Right-	includeWidth = includeWidth? 1 : 0;-	for( ; i < 4 ; i += 2 - includeWidth ) {-		which = cssExpand[ i ];-		attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;-	}--	if ( includeWidth ) {-		attrs.opacity = attrs.width = type;-	}--	return attrs;-}--// Generate shortcuts for custom animations-jQuery.each({-	slideDown: genFx("show"),-	slideUp: genFx("hide"),-	slideToggle: genFx("toggle"),-	fadeIn: { opacity: "show" },-	fadeOut: { opacity: "hide" },-	fadeToggle: { opacity: "toggle" }-}, function( name, props ) {-	jQuery.fn[ name ] = function( speed, easing, callback ) {-		return this.animate( props, speed, easing, callback );-	};-});--jQuery.speed = function( speed, easing, fn ) {-	var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {-		complete: fn || !fn && easing ||-			jQuery.isFunction( speed ) && speed,-		duration: speed,-		easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing-	};--	opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :-		opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;--	// normalize opt.queue - true/undefined/null -> "fx"-	if ( opt.queue == null || opt.queue === true ) {-		opt.queue = "fx";-	}--	// Queueing-	opt.old = opt.complete;--	opt.complete = function() {-		if ( jQuery.isFunction( opt.old ) ) {-			opt.old.call( this );-		}--		if ( opt.queue ) {-			jQuery.dequeue( this, opt.queue );-		}-	};--	return opt;-};--jQuery.easing = {-	linear: function( p ) {-		return p;-	},-	swing: function( p ) {-		return 0.5 - Math.cos( p*Math.PI ) / 2;-	}-};--jQuery.timers = [];-jQuery.fx = Tween.prototype.init;-jQuery.fx.tick = function() {-	var timer,-		timers = jQuery.timers,-		i = 0;--	fxNow = jQuery.now();--	for ( ; i < timers.length; i++ ) {-		timer = timers[ i ];-		// Checks the timer has not already been removed-		if ( !timer() && timers[ i ] === timer ) {-			timers.splice( i--, 1 );-		}-	}--	if ( !timers.length ) {-		jQuery.fx.stop();-	}-	fxNow = undefined;-};--jQuery.fx.timer = function( timer ) {-	if ( timer() && jQuery.timers.push( timer ) ) {-		jQuery.fx.start();-	}-};--jQuery.fx.interval = 13;--jQuery.fx.start = function() {-	if ( !timerId ) {-		timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );-	}-};--jQuery.fx.stop = function() {-	clearInterval( timerId );-	timerId = null;-};--jQuery.fx.speeds = {-	slow: 600,-	fast: 200,-	// Default speed-	_default: 400-};--// Back Compat <1.8 extension point-jQuery.fx.step = {};--if ( jQuery.expr && jQuery.expr.filters ) {-	jQuery.expr.filters.animated = function( elem ) {-		return jQuery.grep(jQuery.timers, function( fn ) {-			return elem === fn.elem;-		}).length;-	};-}-jQuery.fn.offset = function( options ) {-	if ( arguments.length ) {-		return options === undefined ?-			this :-			this.each(function( i ) {-				jQuery.offset.setOffset( this, options, i );-			});-	}--	var docElem, win,-		box = { top: 0, left: 0 },-		elem = this[ 0 ],-		doc = elem && elem.ownerDocument;--	if ( !doc ) {-		return;-	}--	docElem = doc.documentElement;--	// Make sure it's not a disconnected DOM node-	if ( !jQuery.contains( docElem, elem ) ) {-		return box;-	}--	// If we don't have gBCR, just use 0,0 rather than error-	// BlackBerry 5, iOS 3 (original iPhone)-	if ( typeof elem.getBoundingClientRect !== core_strundefined ) {-		box = elem.getBoundingClientRect();-	}-	win = getWindow( doc );-	return {-		top: box.top  + ( win.pageYOffset || docElem.scrollTop )  - ( docElem.clientTop  || 0 ),-		left: box.left + ( win.pageXOffset || docElem.scrollLeft ) - ( docElem.clientLeft || 0 )-	};-};--jQuery.offset = {--	setOffset: function( elem, options, i ) {-		var position = jQuery.css( elem, "position" );--		// set position first, in-case top/left are set even on static elem-		if ( position === "static" ) {-			elem.style.position = "relative";-		}--		var curElem = jQuery( elem ),-			curOffset = curElem.offset(),-			curCSSTop = jQuery.css( elem, "top" ),-			curCSSLeft = jQuery.css( elem, "left" ),-			calculatePosition = ( position === "absolute" || position === "fixed" ) && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1,-			props = {}, curPosition = {}, curTop, curLeft;--		// need to be able to calculate position if either top or left is auto and position is either absolute or fixed-		if ( calculatePosition ) {-			curPosition = curElem.position();-			curTop = curPosition.top;-			curLeft = curPosition.left;-		} else {-			curTop = parseFloat( curCSSTop ) || 0;-			curLeft = parseFloat( curCSSLeft ) || 0;-		}--		if ( jQuery.isFunction( options ) ) {-			options = options.call( elem, i, curOffset );-		}--		if ( options.top != null ) {-			props.top = ( options.top - curOffset.top ) + curTop;-		}-		if ( options.left != null ) {-			props.left = ( options.left - curOffset.left ) + curLeft;-		}--		if ( "using" in options ) {-			options.using.call( elem, props );-		} else {-			curElem.css( props );-		}-	}-};---jQuery.fn.extend({--	position: function() {-		if ( !this[ 0 ] ) {-			return;-		}--		var offsetParent, offset,-			parentOffset = { top: 0, left: 0 },-			elem = this[ 0 ];--		// fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is it's only offset parent-		if ( jQuery.css( elem, "position" ) === "fixed" ) {-			// we assume that getBoundingClientRect is available when computed position is fixed-			offset = elem.getBoundingClientRect();-		} else {-			// Get *real* offsetParent-			offsetParent = this.offsetParent();--			// Get correct offsets-			offset = this.offset();-			if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) {-				parentOffset = offsetParent.offset();-			}--			// Add offsetParent borders-			parentOffset.top  += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true );-			parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true );-		}--		// Subtract parent offsets and element margins-		// note: when an element has margin: auto the offsetLeft and marginLeft-		// are the same in Safari causing offset.left to incorrectly be 0-		return {-			top:  offset.top  - parentOffset.top - jQuery.css( elem, "marginTop", true ),-			left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true)-		};-	},--	offsetParent: function() {-		return this.map(function() {-			var offsetParent = this.offsetParent || docElem;-			while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) && jQuery.css( offsetParent, "position") === "static" ) ) {-				offsetParent = offsetParent.offsetParent;-			}-			return offsetParent || docElem;-		});-	}-});---// Create scrollLeft and scrollTop methods-jQuery.each( {scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function( method, prop ) {-	var top = /Y/.test( prop );--	jQuery.fn[ method ] = function( val ) {-		return jQuery.access( this, function( elem, method, val ) {-			var win = getWindow( elem );--			if ( val === undefined ) {-				return win ? (prop in win) ? win[ prop ] :-					win.document.documentElement[ method ] :-					elem[ method ];-			}--			if ( win ) {-				win.scrollTo(-					!top ? val : jQuery( win ).scrollLeft(),-					top ? val : jQuery( win ).scrollTop()-				);--			} else {-				elem[ method ] = val;-			}-		}, method, val, arguments.length, null );-	};-});--function getWindow( elem ) {-	return jQuery.isWindow( elem ) ?-		elem :-		elem.nodeType === 9 ?-			elem.defaultView || elem.parentWindow :-			false;-}-// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods-jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {-	jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) {-		// margin is only for outerHeight, outerWidth-		jQuery.fn[ funcName ] = function( margin, value ) {-			var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),-				extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );--			return jQuery.access( this, function( elem, type, value ) {-				var doc;--				if ( jQuery.isWindow( elem ) ) {-					// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there-					// isn't a whole lot we can do. See pull request at this URL for discussion:-					// https://github.com/jquery/jquery/pull/764-					return elem.document.documentElement[ "client" + name ];-				}--				// Get document width or height-				if ( elem.nodeType === 9 ) {-					doc = elem.documentElement;--					// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest-					// unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it.-					return Math.max(-						elem.body[ "scroll" + name ], doc[ "scroll" + name ],-						elem.body[ "offset" + name ], doc[ "offset" + name ],-						doc[ "client" + name ]-					);-				}--				return value === undefined ?-					// Get width or height on the element, requesting but not forcing parseFloat-					jQuery.css( elem, type, extra ) :--					// Set width or height on the element-					jQuery.style( elem, type, value, extra );-			}, type, chainable ? margin : undefined, chainable, null );-		};-	});-});-// Limit scope pollution from any deprecated API-// (function() {--// The number of elements contained in the matched element set-jQuery.fn.size = function() {-	return this.length;-};--jQuery.fn.andSelf = jQuery.fn.addBack;--// })();-if ( typeof module === "object" && module && typeof module.exports === "object" ) {-	// Expose jQuery as module.exports in loaders that implement the Node-	// module pattern (including browserify). Do not create the global, since-	// the user will be storing it themselves locally, and globals are frowned-	// upon in the Node module world.-	module.exports = jQuery;-} else {-	// Otherwise expose jQuery to the global object as usual-	window.jQuery = window.$ = jQuery;--	// Register as a named AMD module, since jQuery can be concatenated with other-	// files that may use define, but not via a proper concatenation script that-	// understands anonymous AMD modules. A named AMD is safest and most robust-	// way to register. Lowercase jquery is used because AMD module names are-	// derived from file names, and jQuery is normally delivered in a lowercase-	// file name. Do this after creating the global so that if an AMD module wants-	// to call noConflict to hide this version of jQuery, it will work.-	if ( typeof define === "function" && define.amd ) {-		define( "jquery", [], function () { return jQuery; } );-	}-}--})( window );
− static/jquery.min.js
@@ -1,6 +0,0 @@-/*! jQuery v1.10.1 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license-//@ sourceMappingURL=jquery-1.10.1.min.map-*/-(function(e,t){var n,r,i=typeof t,o=e.location,a=e.document,s=a.documentElement,l=e.jQuery,u=e.$,c={},p=[],f="1.10.1",d=p.concat,h=p.push,g=p.slice,m=p.indexOf,y=c.toString,v=c.hasOwnProperty,b=f.trim,x=function(e,t){return new x.fn.init(e,t,r)},w=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=/\S+/g,C=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,N=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,k=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,E=/^[\],:{}\s]*$/,S=/(?:^|:|,)(?:\s*\[)+/g,A=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,j=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,D=/^-ms-/,L=/-([\da-z])/gi,H=function(e,t){return t.toUpperCase()},q=function(e){(a.addEventListener||"load"===e.type||"complete"===a.readyState)&&(_(),x.ready())},_=function(){a.addEventListener?(a.removeEventListener("DOMContentLoaded",q,!1),e.removeEventListener("load",q,!1)):(a.detachEvent("onreadystatechange",q),e.detachEvent("onload",q))};x.fn=x.prototype={jquery:f,constructor:x,init:function(e,n,r){var i,o;if(!e)return this;if("string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:N.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof x?n[0]:n,x.merge(this,x.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:a,!0)),k.test(i[1])&&x.isPlainObject(n))for(i in n)x.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(o=a.getElementById(i[2]),o&&o.parentNode){if(o.id!==i[2])return r.find(e);this.length=1,this[0]=o}return this.context=a,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):x.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),x.makeArray(e,this))},selector:"",length:0,toArray:function(){return g.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=x.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return x.each(this,e,t)},ready:function(e){return x.ready.promise().done(e),this},slice:function(){return this.pushStack(g.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(x.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:h,sort:[].sort,splice:[].splice},x.fn.init.prototype=x.fn,x.extend=x.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},l=1,u=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},l=2),"object"==typeof s||x.isFunction(s)||(s={}),u===l&&(s=this,--l);u>l;l++)if(null!=(o=arguments[l]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(x.isPlainObject(r)||(n=x.isArray(r)))?(n?(n=!1,a=e&&x.isArray(e)?e:[]):a=e&&x.isPlainObject(e)?e:{},s[i]=x.extend(c,a,r)):r!==t&&(s[i]=r));return s},x.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),noConflict:function(t){return e.$===x&&(e.$=u),t&&e.jQuery===x&&(e.jQuery=l),x},isReady:!1,readyWait:1,holdReady:function(e){e?x.readyWait++:x.ready(!0)},ready:function(e){if(e===!0?!--x.readyWait:!x.isReady){if(!a.body)return setTimeout(x.ready);x.isReady=!0,e!==!0&&--x.readyWait>0||(n.resolveWith(a,[x]),x.fn.trigger&&x(a).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===x.type(e)},isArray:Array.isArray||function(e){return"array"===x.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?c[y.call(e)]||"object":typeof e},isPlainObject:function(e){var n;if(!e||"object"!==x.type(e)||e.nodeType||x.isWindow(e))return!1;try{if(e.constructor&&!v.call(e,"constructor")&&!v.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(r){return!1}if(x.support.ownLast)for(n in e)return v.call(e,n);for(n in e);return n===t||v.call(e,n)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||a;var r=k.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=x.buildFragment([e],t,i),i&&x(i).remove(),x.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=x.trim(n),n&&E.test(n.replace(A,"@").replace(j,"]").replace(S,"")))?Function("return "+n)():(x.error("Invalid JSON: "+n),t)},parseXML:function(n){var r,i;if(!n||"string"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName("parsererror").length||x.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&x.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(D,"ms-").replace(L,H)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(a){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:b&&!b.call("\ufeff\u00a0")?function(e){return null==e?"":b.call(e)}:function(e){return null==e?"":(e+"").replace(C,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(M(Object(e))?x.merge(n,"string"==typeof e?[e]:e):h.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(m)return m.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if("number"==typeof r)for(;r>o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,a=M(e),s=[];if(a)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(s[s.length]=r);return d.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(o=e[n],n=e,e=o),x.isFunction(e)?(r=g.call(arguments,2),i=function(){return e.apply(n||this,r.concat(g.call(arguments)))},i.guid=e.guid=e.guid||x.guid++,i):t},access:function(e,n,r,i,o,a,s){var l=0,u=e.length,c=null==r;if("object"===x.type(r)){o=!0;for(l in r)x.access(e,n,l,r[l],!0,a,s)}else if(i!==t&&(o=!0,x.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(x(e),n)})),n))for(;u>l;l++)n(e[l],r,s?i:i.call(e[l],l,n(e[l],r)));return o?e:c?n.call(e):u?n(e[0],r):a},now:function(){return(new Date).getTime()},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),x.ready.promise=function(t){if(!n)if(n=x.Deferred(),"complete"===a.readyState)setTimeout(x.ready);else if(a.addEventListener)a.addEventListener("DOMContentLoaded",q,!1),e.addEventListener("load",q,!1);else{a.attachEvent("onreadystatechange",q),e.attachEvent("onload",q);var r=!1;try{r=null==e.frameElement&&a.documentElement}catch(i){}r&&r.doScroll&&function o(){if(!x.isReady){try{r.doScroll("left")}catch(e){return setTimeout(o,50)}_(),x.ready()}}()}return n.promise(t)},x.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){c["[object "+t+"]"]=t.toLowerCase()});function M(e){var t=e.length,n=x.type(e);return x.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}r=x(a),function(e,t){var n,r,i,o,a,s,l,u,c,p,f,d,h,g,m,y,v,b="sizzle"+-new Date,w=e.document,T=0,C=0,N=lt(),k=lt(),E=lt(),S=!1,A=function(){return 0},j=typeof t,D=1<<31,L={}.hasOwnProperty,H=[],q=H.pop,_=H.push,M=H.push,O=H.slice,F=H.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},B="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",P="[\\x20\\t\\r\\n\\f]",R="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",W=R.replace("w","w#"),$="\\["+P+"*("+R+")"+P+"*(?:([*^$|!~]?=)"+P+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+W+")|)|)"+P+"*\\]",I=":("+R+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+$.replace(3,8)+")*)|.*)\\)|)",z=RegExp("^"+P+"+|((?:^|[^\\\\])(?:\\\\.)*)"+P+"+$","g"),X=RegExp("^"+P+"*,"+P+"*"),U=RegExp("^"+P+"*([>+~]|"+P+")"+P+"*"),V=RegExp(P+"*[+~]"),Y=RegExp("="+P+"*([^\\]'\"]*)"+P+"*\\]","g"),J=RegExp(I),G=RegExp("^"+W+"$"),Q={ID:RegExp("^#("+R+")"),CLASS:RegExp("^\\.("+R+")"),TAG:RegExp("^("+R.replace("w","w*")+")"),ATTR:RegExp("^"+$),PSEUDO:RegExp("^"+I),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+P+"*(even|odd|(([+-]|)(\\d*)n|)"+P+"*(?:([+-]|)"+P+"*(\\d+)|))"+P+"*\\)|)","i"),bool:RegExp("^(?:"+B+")$","i"),needsContext:RegExp("^"+P+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+P+"*((?:-\\d)?\\d*)"+P+"*\\)|)(?=[^-]|$)","i")},K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,et=/^(?:input|select|textarea|button)$/i,tt=/^h\d$/i,nt=/'|\\/g,rt=RegExp("\\\\([\\da-f]{1,6}"+P+"?|("+P+")|.)","ig"),it=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:0>r?String.fromCharCode(r+65536):String.fromCharCode(55296|r>>10,56320|1023&r)};try{M.apply(H=O.call(w.childNodes),w.childNodes),H[w.childNodes.length].nodeType}catch(ot){M={apply:H.length?function(e,t){_.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function at(e,t,n,i){var o,a,s,l,u,c,d,m,y,x;if((t?t.ownerDocument||t:w)!==f&&p(t),t=t||f,n=n||[],!e||"string"!=typeof e)return n;if(1!==(l=t.nodeType)&&9!==l)return[];if(h&&!i){if(o=Z.exec(e))if(s=o[1]){if(9===l){if(a=t.getElementById(s),!a||!a.parentNode)return n;if(a.id===s)return n.push(a),n}else if(t.ownerDocument&&(a=t.ownerDocument.getElementById(s))&&v(t,a)&&a.id===s)return n.push(a),n}else{if(o[2])return M.apply(n,t.getElementsByTagName(e)),n;if((s=o[3])&&r.getElementsByClassName&&t.getElementsByClassName)return M.apply(n,t.getElementsByClassName(s)),n}if(r.qsa&&(!g||!g.test(e))){if(m=d=b,y=t,x=9===l&&e,1===l&&"object"!==t.nodeName.toLowerCase()){c=bt(e),(d=t.getAttribute("id"))?m=d.replace(nt,"\\$&"):t.setAttribute("id",m),m="[id='"+m+"'] ",u=c.length;while(u--)c[u]=m+xt(c[u]);y=V.test(e)&&t.parentNode||t,x=c.join(",")}if(x)try{return M.apply(n,y.querySelectorAll(x)),n}catch(T){}finally{d||t.removeAttribute("id")}}}return At(e.replace(z,"$1"),t,n,i)}function st(e){return K.test(e+"")}function lt(){var e=[];function t(n,r){return e.push(n+=" ")>o.cacheLength&&delete t[e.shift()],t[n]=r}return t}function ut(e){return e[b]=!0,e}function ct(e){var t=f.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function pt(e,t,n){e=e.split("|");var r,i=e.length,a=n?null:t;while(i--)(r=o.attrHandle[e[i]])&&r!==t||(o.attrHandle[e[i]]=a)}function ft(e,t){var n=e.getAttributeNode(t);return n&&n.specified?n.value:e[t]===!0?t.toLowerCase():null}function dt(e,t){return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}function ht(e){return"input"===e.nodeName.toLowerCase()?e.defaultValue:t}function gt(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||D)-(~e.sourceIndex||D);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function mt(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function yt(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function vt(e){return ut(function(t){return t=+t,ut(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}s=at.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},r=at.support={},p=at.setDocument=function(e){var n=e?e.ownerDocument||e:w,i=n.parentWindow;return n!==f&&9===n.nodeType&&n.documentElement?(f=n,d=n.documentElement,h=!s(n),i&&i.frameElement&&i.attachEvent("onbeforeunload",function(){p()}),r.attributes=ct(function(e){return e.innerHTML="<a href='#'></a>",pt("type|href|height|width",dt,"#"===e.firstChild.getAttribute("href")),pt(B,ft,null==e.getAttribute("disabled")),e.className="i",!e.getAttribute("className")}),r.input=ct(function(e){return e.innerHTML="<input>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")}),pt("value",ht,r.attributes&&r.input),r.getElementsByTagName=ct(function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length}),r.getElementsByClassName=ct(function(e){return e.innerHTML="<div class='a'></div><div class='a i'></div>",e.firstChild.className="i",2===e.getElementsByClassName("i").length}),r.getById=ct(function(e){return d.appendChild(e).id=b,!n.getElementsByName||!n.getElementsByName(b).length}),r.getById?(o.find.ID=function(e,t){if(typeof t.getElementById!==j&&h){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){return e.getAttribute("id")===t}}):(delete o.find.ID,o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){var n=typeof e.getAttributeNode!==j&&e.getAttributeNode("id");return n&&n.value===t}}),o.find.TAG=r.getElementsByTagName?function(e,n){return typeof n.getElementsByTagName!==j?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},o.find.CLASS=r.getElementsByClassName&&function(e,n){return typeof n.getElementsByClassName!==j&&h?n.getElementsByClassName(e):t},m=[],g=[],(r.qsa=st(n.querySelectorAll))&&(ct(function(e){e.innerHTML="<select><option selected=''></option></select>",e.querySelectorAll("[selected]").length||g.push("\\["+P+"*(?:value|"+B+")"),e.querySelectorAll(":checked").length||g.push(":checked")}),ct(function(e){var t=n.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("t",""),e.querySelectorAll("[t^='']").length&&g.push("[*^$]="+P+"*(?:''|\"\")"),e.querySelectorAll(":enabled").length||g.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),g.push(",.*:")})),(r.matchesSelector=st(y=d.webkitMatchesSelector||d.mozMatchesSelector||d.oMatchesSelector||d.msMatchesSelector))&&ct(function(e){r.disconnectedMatch=y.call(e,"div"),y.call(e,"[s!='']:x"),m.push("!=",I)}),g=g.length&&RegExp(g.join("|")),m=m.length&&RegExp(m.join("|")),v=st(d.contains)||d.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},r.sortDetached=ct(function(e){return 1&e.compareDocumentPosition(n.createElement("div"))}),A=d.compareDocumentPosition?function(e,t){if(e===t)return S=!0,0;var i=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t);return i?1&i||!r.sortDetached&&t.compareDocumentPosition(e)===i?e===n||v(w,e)?-1:t===n||v(w,t)?1:c?F.call(c,e)-F.call(c,t):0:4&i?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return S=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:c?F.call(c,e)-F.call(c,t):0;if(o===a)return gt(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?gt(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},n):f},at.matches=function(e,t){return at(e,null,null,t)},at.matchesSelector=function(e,t){if((e.ownerDocument||e)!==f&&p(e),t=t.replace(Y,"='$1']"),!(!r.matchesSelector||!h||m&&m.test(t)||g&&g.test(t)))try{var n=y.call(e,t);if(n||r.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(i){}return at(t,f,null,[e]).length>0},at.contains=function(e,t){return(e.ownerDocument||e)!==f&&p(e),v(e,t)},at.attr=function(e,n){(e.ownerDocument||e)!==f&&p(e);var i=o.attrHandle[n.toLowerCase()],a=i&&L.call(o.attrHandle,n.toLowerCase())?i(e,n,!h):t;return a===t?r.attributes||!h?e.getAttribute(n):(a=e.getAttributeNode(n))&&a.specified?a.value:null:a},at.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},at.uniqueSort=function(e){var t,n=[],i=0,o=0;if(S=!r.detectDuplicates,c=!r.sortStable&&e.slice(0),e.sort(A),S){while(t=e[o++])t===e[o]&&(i=n.push(o));while(i--)e.splice(n[i],1)}return e},a=at.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=a(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=a(t);return n},o=at.selectors={cacheLength:50,createPseudo:ut,match:Q,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(rt,it),e[3]=(e[4]||e[5]||"").replace(rt,it),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||at.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&at.error(e[0]),e},PSEUDO:function(e){var n,r=!e[5]&&e[2];return Q.CHILD.test(e[0])?null:(e[3]&&e[4]!==t?e[2]=e[4]:r&&J.test(r)&&(n=bt(r,!0))&&(n=r.indexOf(")",r.length-n)-r.length)&&(e[0]=e[0].slice(0,n),e[2]=r.slice(0,n)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(rt,it).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=N[e+" "];return t||(t=RegExp("(^|"+P+")"+e+"("+P+"|$)"))&&N(e,function(e){return t.test("string"==typeof e.className&&e.className||typeof e.getAttribute!==j&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=at.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,l){var u,c,p,f,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!l&&!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){c=m[b]||(m[b]={}),u=c[e]||[],d=u[0]===T&&u[1],f=u[0]===T&&u[2],p=d&&m.childNodes[d];while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[T,d,f];break}}else if(v&&(u=(t[b]||(t[b]={}))[e])&&u[0]===T)f=u[1];else while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(v&&((p[b]||(p[b]={}))[e]=[T,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=o.pseudos[e]||o.setFilters[e.toLowerCase()]||at.error("unsupported pseudo: "+e);return r[b]?r(t):r.length>1?(n=[e,e,"",t],o.setFilters.hasOwnProperty(e.toLowerCase())?ut(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=F.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:ut(function(e){var t=[],n=[],r=l(e.replace(z,"$1"));return r[b]?ut(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:ut(function(e){return function(t){return at(e,t).length>0}}),contains:ut(function(e){return function(t){return(t.textContent||t.innerText||a(t)).indexOf(e)>-1}}),lang:ut(function(e){return G.test(e||"")||at.error("unsupported lang: "+e),e=e.replace(rt,it).toLowerCase(),function(t){var n;do if(n=h?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===d},focus:function(e){return e===f.activeElement&&(!f.hasFocus||f.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!o.pseudos.empty(e)},header:function(e){return tt.test(e.nodeName)},input:function(e){return et.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:vt(function(){return[0]}),last:vt(function(e,t){return[t-1]}),eq:vt(function(e,t,n){return[0>n?n+t:n]}),even:vt(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:vt(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:vt(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:vt(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}};for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})o.pseudos[n]=mt(n);for(n in{submit:!0,reset:!0})o.pseudos[n]=yt(n);function bt(e,t){var n,r,i,a,s,l,u,c=k[e+" "];if(c)return t?0:c.slice(0);s=e,l=[],u=o.preFilter;while(s){(!n||(r=X.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),l.push(i=[])),n=!1,(r=U.exec(s))&&(n=r.shift(),i.push({value:n,type:r[0].replace(z," ")}),s=s.slice(n.length));for(a in o.filter)!(r=Q[a].exec(s))||u[a]&&!(r=u[a](r))||(n=r.shift(),i.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?at.error(e):k(e,l).slice(0)}function xt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function wt(e,t,n){var r=t.dir,o=n&&"parentNode"===r,a=C++;return t.first?function(t,n,i){while(t=t[r])if(1===t.nodeType||o)return e(t,n,i)}:function(t,n,s){var l,u,c,p=T+" "+a;if(s){while(t=t[r])if((1===t.nodeType||o)&&e(t,n,s))return!0}else while(t=t[r])if(1===t.nodeType||o)if(c=t[b]||(t[b]={}),(u=c[r])&&u[0]===p){if((l=u[1])===!0||l===i)return l===!0}else if(u=c[r]=[p],u[1]=e(t,n,s)||i,u[1]===!0)return!0}}function Tt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function Ct(e,t,n,r,i){var o,a=[],s=0,l=e.length,u=null!=t;for(;l>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),u&&t.push(s));return a}function Nt(e,t,n,r,i,o){return r&&!r[b]&&(r=Nt(r)),i&&!i[b]&&(i=Nt(i,o)),ut(function(o,a,s,l){var u,c,p,f=[],d=[],h=a.length,g=o||St(t||"*",s.nodeType?[s]:s,[]),m=!e||!o&&t?g:Ct(g,f,e,s,l),y=n?i||(o?e:h||r)?[]:a:m;if(n&&n(m,y,s,l),r){u=Ct(y,d),r(u,[],s,l),c=u.length;while(c--)(p=u[c])&&(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){u=[],c=y.length;while(c--)(p=y[c])&&u.push(m[c]=p);i(null,y=[],u,l)}c=y.length;while(c--)(p=y[c])&&(u=i?F.call(o,p):f[c])>-1&&(o[u]=!(a[u]=p))}}else y=Ct(y===a?y.splice(h,y.length):y),i?i(null,a,y,l):M.apply(a,y)})}function kt(e){var t,n,r,i=e.length,a=o.relative[e[0].type],s=a||o.relative[" "],l=a?1:0,c=wt(function(e){return e===t},s,!0),p=wt(function(e){return F.call(t,e)>-1},s,!0),f=[function(e,n,r){return!a&&(r||n!==u)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;i>l;l++)if(n=o.relative[e[l].type])f=[wt(Tt(f),n)];else{if(n=o.filter[e[l].type].apply(null,e[l].matches),n[b]){for(r=++l;i>r;r++)if(o.relative[e[r].type])break;return Nt(l>1&&Tt(f),l>1&&xt(e.slice(0,l-1).concat({value:" "===e[l-2].type?"*":""})).replace(z,"$1"),n,r>l&&kt(e.slice(l,r)),i>r&&kt(e=e.slice(r)),i>r&&xt(e))}f.push(n)}return Tt(f)}function Et(e,t){var n=0,r=t.length>0,a=e.length>0,s=function(s,l,c,p,d){var h,g,m,y=[],v=0,b="0",x=s&&[],w=null!=d,C=u,N=s||a&&o.find.TAG("*",d&&l.parentNode||l),k=T+=null==C?1:Math.random()||.1;for(w&&(u=l!==f&&l,i=n);null!=(h=N[b]);b++){if(a&&h){g=0;while(m=e[g++])if(m(h,l,c)){p.push(h);break}w&&(T=k,i=++n)}r&&((h=!m&&h)&&v--,s&&x.push(h))}if(v+=b,r&&b!==v){g=0;while(m=t[g++])m(x,y,l,c);if(s){if(v>0)while(b--)x[b]||y[b]||(y[b]=q.call(p));y=Ct(y)}M.apply(p,y),w&&!s&&y.length>0&&v+t.length>1&&at.uniqueSort(p)}return w&&(T=k,u=C),x};return r?ut(s):s}l=at.compile=function(e,t){var n,r=[],i=[],o=E[e+" "];if(!o){t||(t=bt(e)),n=t.length;while(n--)o=kt(t[n]),o[b]?r.push(o):i.push(o);o=E(e,Et(i,r))}return o};function St(e,t,n){var r=0,i=t.length;for(;i>r;r++)at(e,t[r],n);return n}function At(e,t,n,i){var a,s,u,c,p,f=bt(e);if(!i&&1===f.length){if(s=f[0]=f[0].slice(0),s.length>2&&"ID"===(u=s[0]).type&&r.getById&&9===t.nodeType&&h&&o.relative[s[1].type]){if(t=(o.find.ID(u.matches[0].replace(rt,it),t)||[])[0],!t)return n;e=e.slice(s.shift().value.length)}a=Q.needsContext.test(e)?0:s.length;while(a--){if(u=s[a],o.relative[c=u.type])break;if((p=o.find[c])&&(i=p(u.matches[0].replace(rt,it),V.test(s[0].type)&&t.parentNode||t))){if(s.splice(a,1),e=i.length&&xt(s),!e)return M.apply(n,i),n;break}}}return l(e,f)(i,t,!h,n,V.test(e)),n}o.pseudos.nth=o.pseudos.eq;function jt(){}jt.prototype=o.filters=o.pseudos,o.setFilters=new jt,r.sortStable=b.split("").sort(A).join("")===b,p(),[0,0].sort(A),r.detectDuplicates=S,x.find=at,x.expr=at.selectors,x.expr[":"]=x.expr.pseudos,x.unique=at.uniqueSort,x.text=at.getText,x.isXMLDoc=at.isXML,x.contains=at.contains}(e);var O={};function F(e){var t=O[e]={};return x.each(e.match(T)||[],function(e,n){t[n]=!0}),t}x.Callbacks=function(e){e="string"==typeof e?O[e]||F(e):x.extend({},e);var n,r,i,o,a,s,l=[],u=!e.once&&[],c=function(t){for(r=e.memory&&t,i=!0,a=s||0,s=0,o=l.length,n=!0;l&&o>a;a++)if(l[a].apply(t[0],t[1])===!1&&e.stopOnFalse){r=!1;break}n=!1,l&&(u?u.length&&c(u.shift()):r?l=[]:p.disable())},p={add:function(){if(l){var t=l.length;(function i(t){x.each(t,function(t,n){var r=x.type(n);"function"===r?e.unique&&p.has(n)||l.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=l.length:r&&(s=t,c(r))}return this},remove:function(){return l&&x.each(arguments,function(e,t){var r;while((r=x.inArray(t,l,r))>-1)l.splice(r,1),n&&(o>=r&&o--,a>=r&&a--)}),this},has:function(e){return e?x.inArray(e,l)>-1:!(!l||!l.length)},empty:function(){return l=[],o=0,this},disable:function(){return l=u=r=t,this},disabled:function(){return!l},lock:function(){return u=t,r||p.disable(),this},locked:function(){return!u},fireWith:function(e,t){return t=t||[],t=[e,t.slice?t.slice():t],!l||i&&!u||(n?u.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},x.extend({Deferred:function(e){var t=[["resolve","done",x.Callbacks("once memory"),"resolved"],["reject","fail",x.Callbacks("once memory"),"rejected"],["notify","progress",x.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return x.Deferred(function(n){x.each(t,function(t,o){var a=o[0],s=x.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&x.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?x.extend(e,r):r}},i={};return r.pipe=r.then,x.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=g.call(arguments),r=n.length,i=1!==r||e&&x.isFunction(e.promise)?r:0,o=1===i?e:x.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?g.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,l,u;if(r>1)for(s=Array(r),l=Array(r),u=Array(r);r>t;t++)n[t]&&x.isFunction(n[t].promise)?n[t].promise().done(a(t,u,n)).fail(o.reject).progress(a(t,l,s)):--i;return i||o.resolveWith(u,n),o.promise()}}),x.support=function(t){var n,r,o,s,l,u,c,p,f,d=a.createElement("div");if(d.setAttribute("className","t"),d.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",n=d.getElementsByTagName("*")||[],r=d.getElementsByTagName("a")[0],!r||!r.style||!n.length)return t;s=a.createElement("select"),u=s.appendChild(a.createElement("option")),o=d.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t.getSetAttribute="t"!==d.className,t.leadingWhitespace=3===d.firstChild.nodeType,t.tbody=!d.getElementsByTagName("tbody").length,t.htmlSerialize=!!d.getElementsByTagName("link").length,t.style=/top/.test(r.getAttribute("style")),t.hrefNormalized="/a"===r.getAttribute("href"),t.opacity=/^0.5/.test(r.style.opacity),t.cssFloat=!!r.style.cssFloat,t.checkOn=!!o.value,t.optSelected=u.selected,t.enctype=!!a.createElement("form").enctype,t.html5Clone="<:nav></:nav>"!==a.createElement("nav").cloneNode(!0).outerHTML,t.inlineBlockNeedsLayout=!1,t.shrinkWrapBlocks=!1,t.pixelPosition=!1,t.deleteExpando=!0,t.noCloneEvent=!0,t.reliableMarginRight=!0,t.boxSizingReliable=!0,o.checked=!0,t.noCloneChecked=o.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!u.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}o=a.createElement("input"),o.setAttribute("value",""),t.input=""===o.getAttribute("value"),o.value="t",o.setAttribute("type","radio"),t.radioValue="t"===o.value,o.setAttribute("checked","t"),o.setAttribute("name","t"),l=a.createDocumentFragment(),l.appendChild(o),t.appendChecked=o.checked,t.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&&(d.attachEvent("onclick",function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c="on"+f,"t"),t[f+"Bubbles"]=c in e||d.attributes[c].expando===!1;d.style.backgroundClip="content-box",d.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===d.style.backgroundClip;for(f in x(t))break;return t.ownLast="0"!==f,x(function(){var n,r,o,s="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",l=a.getElementsByTagName("body")[0];l&&(n=a.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",l.appendChild(n).appendChild(d),d.innerHTML="<table><tr><td></td><td>t</td></tr></table>",o=d.getElementsByTagName("td"),o[0].style.cssText="padding:0;margin:0;border:0;display:none",p=0===o[0].offsetHeight,o[0].style.display="",o[1].style.display="none",t.reliableHiddenOffsets=p&&0===o[0].offsetHeight,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",x.swap(l,null!=l.style.zoom?{zoom:1}:{},function(){t.boxSizing=4===d.offsetWidth}),e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(d,null)||{width:"4px"}).width,r=d.appendChild(a.createElement("div")),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width="0",d.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&&(d.innerHTML="",d.style.cssText=s+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display="block",d.innerHTML="<div></div>",d.firstChild.style.width="5px",t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&&(l.style.zoom=1)),l.removeChild(n),n=d=o=r=null)-}),n=s=l=u=r=o=null,t}({});var B=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,P=/([A-Z])/g;function R(e,n,r,i){if(x.acceptData(e)){var o,a,s=x.expando,l=e.nodeType,u=l?x.cache:e,c=l?e[s]:e[s]&&s;if(c&&u[c]&&(i||u[c].data)||r!==t||"string"!=typeof n)return c||(c=l?e[s]=p.pop()||x.guid++:s),u[c]||(u[c]=l?{}:{toJSON:x.noop}),("object"==typeof n||"function"==typeof n)&&(i?u[c]=x.extend(u[c],n):u[c].data=x.extend(u[c].data,n)),a=u[c],i||(a.data||(a.data={}),a=a.data),r!==t&&(a[x.camelCase(n)]=r),"string"==typeof n?(o=a[n],null==o&&(o=a[x.camelCase(n)])):o=a,o}}function W(e,t,n){if(x.acceptData(e)){var r,i,o=e.nodeType,a=o?x.cache:e,s=o?e[x.expando]:x.expando;if(a[s]){if(t&&(r=n?a[s]:a[s].data)){x.isArray(t)?t=t.concat(x.map(t,x.camelCase)):t in r?t=[t]:(t=x.camelCase(t),t=t in r?[t]:t.split(" ")),i=t.length;while(i--)delete r[t[i]];if(n?!I(r):!x.isEmptyObject(r))return}(n||(delete a[s].data,I(a[s])))&&(o?x.cleanData([e],!0):x.support.deleteExpando||a!=a.window?delete a[s]:a[s]=null)}}}x.extend({cache:{},noData:{applet:!0,embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(e){return e=e.nodeType?x.cache[e[x.expando]]:e[x.expando],!!e&&!I(e)},data:function(e,t,n){return R(e,t,n)},removeData:function(e,t){return W(e,t)},_data:function(e,t,n){return R(e,t,n,!0)},_removeData:function(e,t){return W(e,t,!0)},acceptData:function(e){if(e.nodeType&&1!==e.nodeType&&9!==e.nodeType)return!1;var t=e.nodeName&&x.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),x.fn.extend({data:function(e,n){var r,i,o=null,a=0,s=this[0];if(e===t){if(this.length&&(o=x.data(s),1===s.nodeType&&!x._data(s,"parsedAttrs"))){for(r=s.attributes;r.length>a;a++)i=r[a].name,0===i.indexOf("data-")&&(i=x.camelCase(i.slice(5)),$(s,i,o[i]));x._data(s,"parsedAttrs",!0)}return o}return"object"==typeof e?this.each(function(){x.data(this,e)}):arguments.length>1?this.each(function(){x.data(this,e,n)}):s?$(s,e,x.data(s,e)):null},removeData:function(e){return this.each(function(){x.removeData(this,e)})}});function $(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(P,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:B.test(r)?x.parseJSON(r):r}catch(o){}x.data(e,n,r)}else r=t}return r}function I(e){var t;for(t in e)if(("data"!==t||!x.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}x.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=x._data(e,n),r&&(!i||x.isArray(r)?i=x._data(e,n,x.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=x.queue(e,t),r=n.length,i=n.shift(),o=x._queueHooks(e,t),a=function(){x.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return x._data(e,n)||x._data(e,n,{empty:x.Callbacks("once memory").add(function(){x._removeData(e,t+"queue"),x._removeData(e,n)})})}}),x.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?x.queue(this[0],e):n===t?this:this.each(function(){var t=x.queue(this,e,n);x._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&x.dequeue(this,e)})},dequeue:function(e){return this.each(function(){x.dequeue(this,e)})},delay:function(e,t){return e=x.fx?x.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,o=x.Deferred(),a=this,s=this.length,l=function(){--i||o.resolveWith(a,[a])};"string"!=typeof e&&(n=e,e=t),e=e||"fx";while(s--)r=x._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(l));return l(),o.promise(n)}});var z,X,U=/[\t\r\n\f]/g,V=/\r/g,Y=/^(?:input|select|textarea|button|object)$/i,J=/^(?:a|area)$/i,G=/^(?:checked|selected)$/i,Q=x.support.getSetAttribute,K=x.support.input;x.fn.extend({attr:function(e,t){return x.access(this,x.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){x.removeAttr(this,e)})},prop:function(e,t){return x.access(this,x.prop,e,t,arguments.length>1)},removeProp:function(e){return e=x.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,l="string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).addClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=x.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,l=0===arguments.length||"string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).removeClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?x.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e,r="boolean"==typeof t;return x.isFunction(e)?this.each(function(n){x(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var o,a=0,s=x(this),l=t,u=e.match(T)||[];while(o=u[a++])l=r?l:!s.hasClass(o),s[l?"addClass":"removeClass"](o)}else(n===i||"boolean"===n)&&(this.className&&x._data(this,"__className__",this.className),this.className=this.className||e===!1?"":x._data(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(U," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=x.isFunction(e),this.each(function(n){var o;1===this.nodeType&&(o=i?e.call(this,n,x(this).val()):e,null==o?o="":"number"==typeof o?o+="":x.isArray(o)&&(o=x.map(o,function(e){return null==e?"":e+""})),r=x.valHooks[this.type]||x.valHooks[this.nodeName.toLowerCase()],r&&"set"in r&&r.set(this,o,"value")!==t||(this.value=o))});if(o)return r=x.valHooks[o.type]||x.valHooks[o.nodeName.toLowerCase()],r&&"get"in r&&(n=r.get(o,"value"))!==t?n:(n=o.value,"string"==typeof n?n.replace(V,""):null==n?"":n)}}}),x.extend({valHooks:{option:{get:function(e){var t=x.find.attr(e,"value");return null!=t?t:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,l=0>i?s:o?i:0;for(;s>l;l++)if(n=r[l],!(!n.selected&&l!==i||(x.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&x.nodeName(n.parentNode,"optgroup"))){if(t=x(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n,r,i=e.options,o=x.makeArray(t),a=i.length;while(a--)r=i[a],(r.selected=x.inArray(x(r).val(),o)>=0)&&(n=!0);return n||(e.selectedIndex=-1),o}}},attr:function(e,n,r){var o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return typeof e.getAttribute===i?x.prop(e,n,r):(1===s&&x.isXMLDoc(e)||(n=n.toLowerCase(),o=x.attrHooks[n]||(x.expr.match.bool.test(n)?X:z)),r===t?o&&"get"in o&&null!==(a=o.get(e,n))?a:(a=x.find.attr(e,n),null==a?t:a):null!==r?o&&"set"in o&&(a=o.set(e,r,n))!==t?a:(e.setAttribute(n,r+""),r):(x.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(T);if(o&&1===e.nodeType)while(n=o[i++])r=x.propFix[n]||n,x.expr.match.bool.test(n)?K&&Q||!G.test(n)?e[r]=!1:e[x.camelCase("default-"+n)]=e[r]=!1:x.attr(e,n,""),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!x.support.radioValue&&"radio"===t&&x.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{"for":"htmlFor","class":"className"},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!x.isXMLDoc(e),a&&(n=x.propFix[n]||n,o=x.propHooks[n]),r!==t?o&&"set"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&"get"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var t=x.find.attr(e,"tabindex");return t?parseInt(t,10):Y.test(e.nodeName)||J.test(e.nodeName)&&e.href?0:-1}}}}),X={set:function(e,t,n){return t===!1?x.removeAttr(e,n):K&&Q||!G.test(n)?e.setAttribute(!Q&&x.propFix[n]||n,n):e[x.camelCase("default-"+n)]=e[n]=!0,n}},x.each(x.expr.match.bool.source.match(/\w+/g),function(e,n){var r=x.expr.attrHandle[n]||x.find.attr;x.expr.attrHandle[n]=K&&Q||!G.test(n)?function(e,n,i){var o=x.expr.attrHandle[n],a=i?t:(x.expr.attrHandle[n]=t)!=r(e,n,i)?n.toLowerCase():null;return x.expr.attrHandle[n]=o,a}:function(e,n,r){return r?t:e[x.camelCase("default-"+n)]?n.toLowerCase():null}}),K&&Q||(x.attrHooks.value={set:function(e,n,r){return x.nodeName(e,"input")?(e.defaultValue=n,t):z&&z.set(e,n,r)}}),Q||(z={set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+="","value"===r||n===e.getAttribute(r)?n:t}},x.expr.attrHandle.id=x.expr.attrHandle.name=x.expr.attrHandle.coords=function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&""!==i.value?i.value:null},x.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&r.specified?r.value:t},set:z.set},x.attrHooks.contenteditable={set:function(e,t,n){z.set(e,""===t?!1:t,n)}},x.each(["width","height"],function(e,n){x.attrHooks[n]={set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}}})),x.support.hrefNormalized||x.each(["href","src"],function(e,t){x.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}}),x.support.style||(x.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),x.support.optSelected||(x.propHooks.selected={get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}}),x.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){x.propFix[this.toLowerCase()]=this}),x.support.enctype||(x.propFix.enctype="encoding"),x.each(["radio","checkbox"],function(){x.valHooks[this]={set:function(e,n){return x.isArray(n)?e.checked=x.inArray(x(e).val(),n)>=0:t}},x.support.checkOn||(x.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\.(.+)|)$/;function it(){return!0}function ot(){return!1}function at(){try{return a.activeElement}catch(e){}}x.event={global:{},add:function(e,n,r,o,a){var s,l,u,c,p,f,d,h,g,m,y,v=x._data(e);if(v){r.handler&&(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=x.guid++),(l=v.events)||(l=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof x===i||e&&x.event.triggered===e.type?t:x.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||"").match(T)||[""],u=n.length;while(u--)s=rt.exec(n[u])||[],g=y=s[1],m=(s[2]||"").split(".").sort(),g&&(p=x.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=x.event.special[g]||{},d=x.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&&x.expr.match.needsContext.test(a),namespace:m.join(".")},c),(h=l[g])||(h=l[g]=[],h.delegateCount=0,p.setup&&p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&&e.attachEvent("on"+g,f))),p.add&&(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),x.event.global[g]=!0);e=null}},remove:function(e,t,n,r,i){var o,a,s,l,u,c,p,f,d,h,g,m=x.hasData(e)&&x._data(e);if(m&&(c=m.events)){t=(t||"").match(T)||[""],u=t.length;while(u--)if(s=rt.exec(t[u])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){p=x.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),l=o=f.length;while(o--)a=f[o],!i&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&("**"!==r||!a.selector)||(f.splice(o,1),a.selector&&f.delegateCount--,p.remove&&p.remove.call(e,a));l&&!f.length&&(p.teardown&&p.teardown.call(e,h,m.handle)!==!1||x.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)x.event.remove(e,d+t[u],n,r,!0);x.isEmptyObject(c)&&(delete m.handle,x._removeData(e,"events"))}},trigger:function(n,r,i,o){var s,l,u,c,p,f,d,h=[i||a],g=v.call(n,"type")?n.type:n,m=v.call(n,"namespace")?n.namespace.split("."):[];if(u=f=i=i||a,3!==i.nodeType&&8!==i.nodeType&&!nt.test(g+x.event.triggered)&&(g.indexOf(".")>=0&&(m=g.split("."),g=m.shift(),m.sort()),l=0>g.indexOf(":")&&"on"+g,n=n[x.expando]?n:new x.Event(g,"object"==typeof n&&n),n.isTrigger=o?2:3,n.namespace=m.join("."),n.namespace_re=n.namespace?RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:x.makeArray(r,[n]),p=x.event.special[g]||{},o||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!o&&!p.noBubble&&!x.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(u=u.parentNode);u;u=u.parentNode)h.push(u),f=u;f===(i.ownerDocument||a)&&h.push(f.defaultView||f.parentWindow||e)}d=0;while((u=h[d++])&&!n.isPropagationStopped())n.type=d>1?c:p.bindType||g,s=(x._data(u,"events")||{})[n.type]&&x._data(u,"handle"),s&&s.apply(u,r),s=l&&u[l],s&&x.acceptData(u)&&s.apply&&s.apply(u,r)===!1&&n.preventDefault();if(n.type=g,!o&&!n.isDefaultPrevented()&&(!p._default||p._default.apply(h.pop(),r)===!1)&&x.acceptData(i)&&l&&i[g]&&!x.isWindow(i)){f=i[l],f&&(i[l]=null),x.event.triggered=g;try{i[g]()}catch(y){}x.event.triggered=t,f&&(i[l]=f)}return n.result}},dispatch:function(e){e=x.event.fix(e);var n,r,i,o,a,s=[],l=g.call(arguments),u=(x._data(this,"events")||{})[e.type]||[],c=x.event.special[e.type]||{};if(l[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=x.event.handlers.call(this,e,u),n=0;while((o=s[n++])&&!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,r=((x.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,l),r!==t&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],l=n.delegateCount,u=e.target;if(l&&u.nodeType&&(!e.button||"click"!==e.type))for(;u!=this;u=u.parentNode||this)if(1===u.nodeType&&(u.disabled!==!0||"click"!==e.type)){for(o=[],a=0;l>a;a++)i=n[a],r=i.selector+" ",o[r]===t&&(o[r]=i.needsContext?x(r,this).index(u)>=0:x.find(r,this,null,[u]).length),o[r]&&o.push(i);o.length&&s.push({elem:u,handlers:o})}return n.length>l&&s.push({elem:this,handlers:n.slice(l)}),s},fix:function(e){if(e[x.expando])return e;var t,n,r,i=e.type,o=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=tt.test(i)?this.mouseHooks:et.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new x.Event(o),t=r.length;while(t--)n=r[t],e[n]=o[n];return e.target||(e.target=o.srcElement||a),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,o):e},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,i,o,s=n.button,l=n.fromElement;return null==e.pageX&&null!=n.clientX&&(i=e.target.ownerDocument||a,o=i.documentElement,r=i.body,e.pageX=n.clientX+(o&&o.scrollLeft||r&&r.scrollLeft||0)-(o&&o.clientLeft||r&&r.clientLeft||0),e.pageY=n.clientY+(o&&o.scrollTop||r&&r.scrollTop||0)-(o&&o.clientTop||r&&r.clientTop||0)),!e.relatedTarget&&l&&(e.relatedTarget=l===e.target?n.toElement:l),e.which||s===t||(e.which=1&s?1:2&s?3:4&s?2:0),e}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==at()&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===at()&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},click:{trigger:function(){return x.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t},_default:function(e){return x.nodeName(e.target,"a")}},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=x.extend(new x.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?x.event.trigger(i,null,t):x.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},x.removeEvent=a.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]===i&&(e[r]=null),e.detachEvent(r,n))},x.Event=function(e,n){return this instanceof x.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?it:ot):this.type=e,n&&x.extend(this,n),this.timeStamp=e&&e.timeStamp||x.now(),this[x.expando]=!0,t):new x.Event(e,n)},x.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,this.stopPropagation()}},x.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){x.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return(!i||i!==r&&!x.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),x.support.submitBubbles||(x.event.special.submit={setup:function(){return x.nodeName(this,"form")?!1:(x.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=x.nodeName(n,"input")||x.nodeName(n,"button")?n.form:t;r&&!x._data(r,"submitBubbles")&&(x.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),x._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&x.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return x.nodeName(this,"form")?!1:(x.event.remove(this,"._submit"),t)}}),x.support.changeBubbles||(x.event.special.change={setup:function(){return Z.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(x.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),x.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),x.event.simulate("change",this,e,!0)})),!1):(x.event.add(this,"beforeactivate._change",function(e){var t=e.target;Z.test(t.nodeName)&&!x._data(t,"changeBubbles")&&(x.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||x.event.simulate("change",this.parentNode,e,!0)}),x._data(t,"changeBubbles",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||"radio"!==n.type&&"checkbox"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return x.event.remove(this,"._change"),!Z.test(this.nodeName)}}),x.support.focusinBubbles||x.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){x.event.simulate(t,e.target,x.event.fix(e),!0)};x.event.special[t]={setup:function(){0===n++&&a.addEventListener(e,r,!0)},teardown:function(){0===--n&&a.removeEventListener(e,r,!0)}}}),x.fn.extend({on:function(e,n,r,i,o){var a,s;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&("string"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&&(s=i,i=function(e){return x().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=x.guid++)),this.each(function(){x.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,x(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||"function"==typeof n)&&(r=n,n=t),r===!1&&(r=ot),this.each(function(){x.event.remove(this,e,r,n)})},trigger:function(e,t){return this.each(function(){x.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?x.event.trigger(e,n,r,!0):t}});var st=/^.[^:#\[\.,]*$/,lt=/^(?:parents|prev(?:Until|All))/,ut=x.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};x.fn.extend({find:function(e){var t,n=[],r=this,i=r.length;if("string"!=typeof e)return this.pushStack(x(e).filter(function(){for(t=0;i>t;t++)if(x.contains(r[t],this))return!0}));for(t=0;i>t;t++)x.find(e,r[t],n);return n=this.pushStack(i>1?x.unique(n):n),n.selector=this.selector?this.selector+" "+e:e,n},has:function(e){var t,n=x(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(x.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e||[],!0))},filter:function(e){return this.pushStack(ft(this,e||[],!1))},is:function(e){return!!ft(this,"string"==typeof e&&ut.test(e)?x(e):e||[],!1).length},closest:function(e,t){var n,r=0,i=this.length,o=[],a=ut.test(e)||"string"!=typeof e?x(e,t||this.context):0;for(;i>r;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(11>n.nodeType&&(a?a.index(n)>-1:1===n.nodeType&&x.find.matchesSelector(n,e))){n=o.push(n);break}return this.pushStack(o.length>1?x.unique(o):o)},index:function(e){return e?"string"==typeof e?x.inArray(this[0],x(e)):x.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?x(e,t):x.makeArray(e&&e.nodeType?[e]:e),r=x.merge(this.get(),n);return this.pushStack(x.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}x.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return x.dir(e,"parentNode")},parentsUntil:function(e,t,n){return x.dir(e,"parentNode",n)},next:function(e){return pt(e,"nextSibling")},prev:function(e){return pt(e,"previousSibling")},nextAll:function(e){return x.dir(e,"nextSibling")},prevAll:function(e){return x.dir(e,"previousSibling")},nextUntil:function(e,t,n){return x.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return x.dir(e,"previousSibling",n)},siblings:function(e){return x.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return x.sibling(e.firstChild)},contents:function(e){return x.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:x.merge([],e.childNodes)}},function(e,t){x.fn[e]=function(n,r){var i=x.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=x.filter(r,i)),this.length>1&&(ct[e]||(i=x.unique(i)),lt.test(e)&&(i=i.reverse())),this.pushStack(i)}}),x.extend({filter:function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?x.find.matchesSelector(r,e)?[r]:[]:x.find.matches(e,x.grep(t,function(e){return 1===e.nodeType}))},dir:function(e,n,r){var i=[],o=e[n];while(o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!x(o).is(r)))1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function ft(e,t,n){if(x.isFunction(t))return x.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return x.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(st.test(t))return x.filter(t,e,n);t=x.filter(t,e)}return x.grep(e,function(e){return x.inArray(e,t)>=0!==n})}function dt(e){var t=ht.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gt=/ jQuery\d+="(?:null|\d+)"/g,mt=RegExp("<(?:"+ht+")[\\s/>]","i"),yt=/^\s+/,vt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bt=/<([\w:]+)/,xt=/<tbody/i,wt=/<|&#?\w+;/,Tt=/<(?:script|style|link)/i,Ct=/^(?:checkbox|radio)$/i,Nt=/checked\s*(?:[^=]|=\s*.checked.)/i,kt=/^$|\/(?:java|ecma)script/i,Et=/^true\/(.*)/,St=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,At={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:x.support.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},jt=dt(a),Dt=jt.appendChild(a.createElement("div"));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,x.fn.extend({text:function(e){return x.access(this,function(e){return e===t?x.text(this):this.empty().append((this[0]&&this[0].ownerDocument||a).createTextNode(e))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.appendChild(e)}})},prepend:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=e?x.filter(e,this):this,i=0;for(;null!=(n=r[i]);i++)t||1!==n.nodeType||x.cleanData(Ft(n)),n.parentNode&&(t&&x.contains(n.ownerDocument,n)&&_t(Ft(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&&x.cleanData(Ft(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&x.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return x.clone(this,e,t)})},html:function(e){return x.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,""):t;if(!("string"!=typeof e||Tt.test(e)||!x.support.htmlSerialize&&mt.test(e)||!x.support.leadingWhitespace&&yt.test(e)||At[(bt.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(vt,"<$1></$2>");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(x.cleanData(Ft(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=x.map(this,function(e){return[e.nextSibling,e.parentNode]}),t=0;return this.domManip(arguments,function(n){var r=e[t++],i=e[t++];i&&(r&&r.parentNode!==i&&(r=this.nextSibling),x(this).remove(),i.insertBefore(n,r))},!0),t?this:this.remove()},detach:function(e){return this.remove(e,!0)},domManip:function(e,t,n){e=d.apply([],e);var r,i,o,a,s,l,u=0,c=this.length,p=this,f=c-1,h=e[0],g=x.isFunction(h);if(g||!(1>=c||"string"!=typeof h||x.support.checkClone)&&Nt.test(h))return this.each(function(r){var i=p.eq(r);g&&(e[0]=h.call(this,r,i.html())),i.domManip(e,t,n)});if(c&&(l=x.buildFragment(e,this[0].ownerDocument,!1,!n&&this),r=l.firstChild,1===l.childNodes.length&&(l=r),r)){for(a=x.map(Ft(l,"script"),Ht),o=a.length;c>u;u++)i=l,u!==f&&(i=x.clone(i,!0,!0),o&&x.merge(a,Ft(i,"script"))),t.call(this[u],i,u);if(o)for(s=a[a.length-1].ownerDocument,x.map(a,qt),u=0;o>u;u++)i=a[u],kt.test(i.type||"")&&!x._data(i,"globalEval")&&x.contains(s,i)&&(i.src?x._evalUrl(i.src):x.globalEval((i.text||i.textContent||i.innerHTML||"").replace(St,"")));l=r=null}return this}});function Lt(e,t){return x.nodeName(e,"table")&&x.nodeName(1===t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function Ht(e){return e.type=(null!==x.find.attr(e,"type"))+"/"+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function _t(e,t){var n,r=0;for(;null!=(n=e[r]);r++)x._data(n,"globalEval",!t||x._data(t[r],"globalEval"))}function Mt(e,t){if(1===t.nodeType&&x.hasData(e)){var n,r,i,o=x._data(e),a=x._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)x.event.add(t,n,s[n][r])}a.data&&(a.data=x.extend({},a.data))}}function Ot(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!x.support.noCloneEvent&&t[x.expando]){i=x._data(t);for(r in i.events)x.removeEvent(t,r,i.handle);t.removeAttribute(x.expando)}"script"===n&&t.text!==e.text?(Ht(t).text=e.text,qt(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),x.support.html5Clone&&e.innerHTML&&!x.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Ct.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}x.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){x.fn[e]=function(e){var n,r=0,i=[],o=x(e),a=o.length-1;for(;a>=r;r++)n=r===a?this:this.clone(!0),x(o[r])[t](n),h.apply(i,n.get());return this.pushStack(i)}});function Ft(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||"*"):typeof e.querySelectorAll!==i?e.querySelectorAll(n||"*"):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||x.nodeName(o,n)?s.push(o):x.merge(s,Ft(o,n));return n===t||n&&x.nodeName(e,n)?x.merge([e],s):s}function Bt(e){Ct.test(e.type)&&(e.defaultChecked=e.checked)}x.extend({clone:function(e,t,n){var r,i,o,a,s,l=x.contains(e.ownerDocument,e);if(x.support.html5Clone||x.isXMLDoc(e)||!mt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(x.support.noCloneEvent&&x.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||x.isXMLDoc(e)))for(r=Ft(o),s=Ft(e),a=0;null!=(i=s[a]);++a)r[a]&&Ot(i,r[a]);if(t)if(n)for(s=s||Ft(e),r=r||Ft(o),a=0;null!=(i=s[a]);a++)Mt(i,r[a]);else Mt(e,o);return r=Ft(o,"script"),r.length>0&&_t(r,!l&&Ft(e,"script")),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,l,u,c,p=e.length,f=dt(t),d=[],h=0;for(;p>h;h++)if(o=e[h],o||0===o)if("object"===x.type(o))x.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement("div")),l=(bt.exec(o)||["",""])[1].toLowerCase(),c=At[l]||At._default,s.innerHTML=c[1]+o.replace(vt,"<$1></$2>")+c[2],i=c[0];while(i--)s=s.lastChild;if(!x.support.leadingWhitespace&&yt.test(o)&&d.push(t.createTextNode(yt.exec(o)[0])),!x.support.tbody){o="table"!==l||xt.test(o)?"<table>"!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&&o.childNodes.length;while(i--)x.nodeName(u=o.childNodes[i],"tbody")&&!u.childNodes.length&&o.removeChild(u)}x.merge(d,s.childNodes),s.textContent="";while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&&f.removeChild(s),x.support.appendChecked||x.grep(Ft(d,"input"),Bt),h=0;while(o=d[h++])if((!r||-1===x.inArray(o,r))&&(a=x.contains(o.ownerDocument,o),s=Ft(f.appendChild(o),"script"),a&&_t(s),n)){i=0;while(o=s[i++])kt.test(o.type||"")&&n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,l=x.expando,u=x.cache,c=x.support.deleteExpando,f=x.event.special;for(;null!=(n=e[s]);s++)if((t||x.acceptData(n))&&(o=n[l],a=o&&u[o])){if(a.events)for(r in a.events)f[r]?x.event.remove(n,r):x.removeEvent(n,r,a.handle);-u[o]&&(delete u[o],c?delete n[l]:typeof n.removeAttribute!==i?n.removeAttribute(l):n[l]=null,p.push(o))}},_evalUrl:function(e){return x.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})}}),x.fn.extend({wrapAll:function(e){if(x.isFunction(e))return this.each(function(t){x(this).wrapAll(e.call(this,t))});if(this[0]){var t=x(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return x.isFunction(e)?this.each(function(t){x(this).wrapInner(e.call(this,t))}):this.each(function(){var t=x(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=x.isFunction(e);return this.each(function(n){x(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){x.nodeName(this,"body")||x(this).replaceWith(this.childNodes)}).end()}});var Pt,Rt,Wt,$t=/alpha\([^)]*\)/i,It=/opacity\s*=\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp("^("+w+")(.*)$","i"),Yt=RegExp("^("+w+")(?!px)[a-z%]+$","i"),Jt=RegExp("^([+-])=("+w+")","i"),Gt={BODY:"block"},Qt={position:"absolute",visibility:"hidden",display:"block"},Kt={letterSpacing:0,fontWeight:400},Zt=["Top","Right","Bottom","Left"],en=["Webkit","O","Moz","ms"];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,"none"===x.css(e,"display")||!x.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.style&&(o[a]=x._data(r,"olddisplay"),n=r.style.display,t?(o[a]||"none"!==n||(r.style.display=""),""===r.style.display&&nn(r)&&(o[a]=x._data(r,"olddisplay",ln(r.nodeName)))):o[a]||(i=nn(r),(n&&"none"!==n||!i)&&x._data(r,"olddisplay",i?n:x.css(r,"display"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[a]||"":"none"));return e}x.fn.extend({css:function(e,n){return x.access(this,function(e,n,r){var i,o,a={},s=0;if(x.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=x.css(e,n[s],!1,o);return a}return r!==t?x.style(e,n,r):x.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){var t="boolean"==typeof e;return this.each(function(){(t?e:nn(this))?x(this).show():x(this).hide()})}}),x.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":x.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,l=x.camelCase(n),u=e.style;if(n=x.cssProps[l]||(x.cssProps[l]=tn(u,l)),s=x.cssHooks[n]||x.cssHooks[l],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:u[n];if(a=typeof r,"string"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(x.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||x.cssNumber[l]||(r+="px"),x.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(u[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{u[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,l=x.camelCase(n);return n=x.cssProps[l]||(x.cssProps[l]=tn(e.style,l)),s=x.cssHooks[n]||x.cssHooks[l],s&&"get"in s&&(a=s.get(e,!0,r)),a===t&&(a=Wt(e,n,i)),"normal"===a&&n in Kt&&(a=Kt[n]),""===r||r?(o=parseFloat(a),r===!0||x.isNumeric(o)?o||0:a):a}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s.getPropertyValue(n)||s[n]:t,u=e.style;return s&&(""!==l||x.contains(e.ownerDocument,e)||(l=x.style(e,n)),Yt.test(l)&&Ut.test(n)&&(i=u.width,o=u.minWidth,a=u.maxWidth,u.minWidth=u.maxWidth=u.width=l,l=s.width,u.width=i,u.minWidth=o,u.maxWidth=a)),l}):a.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s[n]:t,u=e.style;return null==l&&u&&u[n]&&(l=u[n]),Yt.test(l)&&!zt.test(n)&&(i=u.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),u.left="fontSize"===n?"1em":l,l=u.pixelLeft+"px",u.left=i,a&&(o.left=a)),""===l?"auto":l});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function an(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;for(;4>o;o+=2)"margin"===n&&(a+=x.css(e,n+Zt[o],!0,i)),r?("content"===n&&(a-=x.css(e,"padding"+Zt[o],!0,i)),"margin"!==n&&(a-=x.css(e,"border"+Zt[o]+"Width",!0,i))):(a+=x.css(e,"padding"+Zt[o],!0,i),"padding"!==n&&(a+=x.css(e,"border"+Zt[o]+"Width",!0,i)));return a}function sn(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=Wt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Yt.test(i))return i;r=a&&(x.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?"border":"content"),r,o)+"px"}function ln(e){var t=a,n=Gt[e];return n||(n=un(e,t),"none"!==n&&n||(Pt=(Pt||x("<iframe frameborder='0' width='0' height='0'/>").css("cssText","display:block !important")).appendTo(t.documentElement),t=(Pt[0].contentWindow||Pt[0].contentDocument).document,t.write("<!doctype html><html><body>"),t.close(),n=un(e,t),Pt.detach()),Gt[e]=n),n}function un(e,t){var n=x(t.createElement(e)).appendTo(t.body),r=x.css(n[0],"display");return n.remove(),r}x.each(["height","width"],function(e,n){x.cssHooks[n]={get:function(e,r,i){return r?0===e.offsetWidth&&Xt.test(x.css(e,"display"))?x.swap(e,Qt,function(){return sn(e,n,i)}):sn(e,n,i):t},set:function(e,t,r){var i=r&&Rt(e);return on(e,t,r?an(e,n,r,x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,i),i):0)}}}),x.support.opacity||(x.cssHooks.opacity={get:function(e,t){return It.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=x.isNumeric(t)?"alpha(opacity="+100*t+")":"",o=r&&r.filter||n.filter||"";n.zoom=1,(t>=1||""===t)&&""===x.trim(o.replace($t,""))&&n.removeAttribute&&(n.removeAttribute("filter"),""===t||r&&!r.filter)||(n.filter=$t.test(o)?o.replace($t,i):o+" "+i)}}),x(function(){x.support.reliableMarginRight||(x.cssHooks.marginRight={get:function(e,n){return n?x.swap(e,{display:"inline-block"},Wt,[e,"marginRight"]):t}}),!x.support.pixelPosition&&x.fn.position&&x.each(["top","left"],function(e,n){x.cssHooks[n]={get:function(e,r){return r?(r=Wt(e,n),Yt.test(r)?x(e).position()[n]+"px":r):t}}})}),x.expr&&x.expr.filters&&(x.expr.filters.hidden=function(e){return 0>=e.offsetWidth&&0>=e.offsetHeight||!x.support.reliableHiddenOffsets&&"none"===(e.style&&e.style.display||x.css(e,"display"))},x.expr.filters.visible=function(e){return!x.expr.filters.hidden(e)}),x.each({margin:"",padding:"",border:"Width"},function(e,t){x.cssHooks[e+t]={expand:function(n){var r=0,i={},o="string"==typeof n?n.split(" "):[n];for(;4>r;r++)i[e+Zt[r]+t]=o[r]||o[r-2]||o[0];return i}},Ut.test(e)||(x.cssHooks[e+t].set=on)});var cn=/%20/g,pn=/\[\]$/,fn=/\r?\n/g,dn=/^(?:submit|button|image|reset|file)$/i,hn=/^(?:input|select|textarea|keygen)/i;x.fn.extend({serialize:function(){return x.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=x.prop(this,"elements");return e?x.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!x(this).is(":disabled")&&hn.test(this.nodeName)&&!dn.test(e)&&(this.checked||!Ct.test(e))}).map(function(e,t){var n=x(this).val();return null==n?null:x.isArray(n)?x.map(n,function(e){return{name:t.name,value:e.replace(fn,"\r\n")}}):{name:t.name,value:n.replace(fn,"\r\n")}}).get()}}),x.param=function(e,n){var r,i=[],o=function(e,t){t=x.isFunction(t)?t():null==t?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(n===t&&(n=x.ajaxSettings&&x.ajaxSettings.traditional),x.isArray(e)||e.jquery&&!x.isPlainObject(e))x.each(e,function(){o(this.name,this.value)});else for(r in e)gn(r,e[r],n,o);return i.join("&").replace(cn,"+")};function gn(e,t,n,r){var i;if(x.isArray(t))x.each(t,function(t,i){n||pn.test(e)?r(e,i):gn(e+"["+("object"==typeof i?t:"")+"]",i,n,r)});else if(n||"object"!==x.type(t))r(e,t);else for(i in t)gn(e+"["+i+"]",t[i],n,r)}x.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(e,t){x.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),x.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)}});var mn,yn,vn=x.now(),bn=/\?/,xn=/#.*$/,wn=/([?&])_=[^&]*/,Tn=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Cn=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Nn=/^(?:GET|HEAD)$/,kn=/^\/\//,En=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,Sn=x.fn.load,An={},jn={},Dn="*/".concat("*");try{yn=o.href}catch(Ln){yn=a.createElement("a"),yn.href="",yn=yn.href}mn=En.exec(yn.toLowerCase())||[];function Hn(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(T)||[];if(x.isFunction(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function qn(e,n,r,i){var o={},a=e===jn;function s(l){var u;return o[l]=!0,x.each(e[l]||[],function(e,l){var c=l(n,r,i);return"string"!=typeof c||a||o[c]?a?!(u=c):t:(n.dataTypes.unshift(c),s(c),!1)}),u}return s(n.dataTypes[0])||!o["*"]&&s("*")}function _n(e,n){var r,i,o=x.ajaxSettings.flatOptions||{};for(i in n)n[i]!==t&&((o[i]?e:r||(r={}))[i]=n[i]);return r&&x.extend(!0,e,r),e}x.fn.load=function(e,n,r){if("string"!=typeof e&&Sn)return Sn.apply(this,arguments);var i,o,a,s=this,l=e.indexOf(" ");return l>=0&&(i=e.slice(l,e.length),e=e.slice(0,l)),x.isFunction(n)?(r=n,n=t):n&&"object"==typeof n&&(a="POST"),s.length>0&&x.ajax({url:e,type:a,dataType:"html",data:n}).done(function(e){o=arguments,s.html(i?x("<div>").append(x.parseHTML(e)).find(i):e)}).complete(r&&function(e,t){s.each(r,o||[e.responseText,t,e])}),this},x.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){x.fn[t]=function(e){return this.on(t,e)}}),x.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:yn,type:"GET",isLocal:Cn.test(mn[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Dn,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":x.parseJSON,"text xml":x.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?_n(_n(e,x.ajaxSettings),t):_n(x.ajaxSettings,e)},ajaxPrefilter:Hn(An),ajaxTransport:Hn(jn),ajax:function(e,n){"object"==typeof e&&(n=e,e=t),n=n||{};var r,i,o,a,s,l,u,c,p=x.ajaxSetup({},n),f=p.context||p,d=p.context&&(f.nodeType||f.jquery)?x(f):x.event,h=x.Deferred(),g=x.Callbacks("once memory"),m=p.statusCode||{},y={},v={},b=0,w="canceled",C={readyState:0,getResponseHeader:function(e){var t;if(2===b){if(!c){c={};while(t=Tn.exec(a))c[t[1].toLowerCase()]=t[2]}t=c[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===b?a:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return b||(e=v[n]=v[n]||e,y[e]=t),this},overrideMimeType:function(e){return b||(p.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>b)for(t in e)m[t]=[m[t],e[t]];else C.always(e[C.status]);return this},abort:function(e){var t=e||w;return u&&u.abort(t),k(0,t),this}};if(h.promise(C).complete=g.add,C.success=C.done,C.error=C.fail,p.url=((e||p.url||yn)+"").replace(xn,"").replace(kn,mn[1]+"//"),p.type=n.method||n.type||p.method||p.type,p.dataTypes=x.trim(p.dataType||"*").toLowerCase().match(T)||[""],null==p.crossDomain&&(r=En.exec(p.url.toLowerCase()),p.crossDomain=!(!r||r[1]===mn[1]&&r[2]===mn[2]&&(r[3]||("http:"===r[1]?"80":"443"))===(mn[3]||("http:"===mn[1]?"80":"443")))),p.data&&p.processData&&"string"!=typeof p.data&&(p.data=x.param(p.data,p.traditional)),qn(An,p,n,C),2===b)return C;l=p.global,l&&0===x.active++&&x.event.trigger("ajaxStart"),p.type=p.type.toUpperCase(),p.hasContent=!Nn.test(p.type),o=p.url,p.hasContent||(p.data&&(o=p.url+=(bn.test(o)?"&":"?")+p.data,delete p.data),p.cache===!1&&(p.url=wn.test(o)?o.replace(wn,"$1_="+vn++):o+(bn.test(o)?"&":"?")+"_="+vn++)),p.ifModified&&(x.lastModified[o]&&C.setRequestHeader("If-Modified-Since",x.lastModified[o]),x.etag[o]&&C.setRequestHeader("If-None-Match",x.etag[o])),(p.data&&p.hasContent&&p.contentType!==!1||n.contentType)&&C.setRequestHeader("Content-Type",p.contentType),C.setRequestHeader("Accept",p.dataTypes[0]&&p.accepts[p.dataTypes[0]]?p.accepts[p.dataTypes[0]]+("*"!==p.dataTypes[0]?", "+Dn+"; q=0.01":""):p.accepts["*"]);for(i in p.headers)C.setRequestHeader(i,p.headers[i]);if(p.beforeSend&&(p.beforeSend.call(f,C,p)===!1||2===b))return C.abort();w="abort";for(i in{success:1,error:1,complete:1})C[i](p[i]);if(u=qn(jn,p,n,C)){C.readyState=1,l&&d.trigger("ajaxSend",[C,p]),p.async&&p.timeout>0&&(s=setTimeout(function(){C.abort("timeout")},p.timeout));try{b=1,u.send(y,k)}catch(N){if(!(2>b))throw N;k(-1,N)}}else k(-1,"No Transport");function k(e,n,r,i){var c,y,v,w,T,N=n;2!==b&&(b=2,s&&clearTimeout(s),u=t,a=i||"",C.readyState=e>0?4:0,c=e>=200&&300>e||304===e,r&&(w=Mn(p,C,r)),w=On(p,w,C,c),c?(p.ifModified&&(T=C.getResponseHeader("Last-Modified"),T&&(x.lastModified[o]=T),T=C.getResponseHeader("etag"),T&&(x.etag[o]=T)),204===e||"HEAD"===p.type?N="nocontent":304===e?N="notmodified":(N=w.state,y=w.data,v=w.error,c=!v)):(v=N,(e||!N)&&(N="error",0>e&&(e=0))),C.status=e,C.statusText=(n||N)+"",c?h.resolveWith(f,[y,N,C]):h.rejectWith(f,[C,N,v]),C.statusCode(m),m=t,l&&d.trigger(c?"ajaxSuccess":"ajaxError",[C,p,c?y:v]),g.fireWith(f,[C,N]),l&&(d.trigger("ajaxComplete",[C,p]),--x.active||x.event.trigger("ajaxStop")))}return C},getJSON:function(e,t,n){return x.get(e,t,n,"json")},getScript:function(e,n){return x.get(e,t,n,"script")}}),x.each(["get","post"],function(e,n){x[n]=function(e,r,i,o){return x.isFunction(r)&&(o=o||i,i=r,r=t),x.ajax({url:e,type:n,dataType:o,data:r,success:i})}});function Mn(e,n,r){var i,o,a,s,l=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),o===t&&(o=e.mimeType||n.getResponseHeader("Content-Type"));if(o)for(s in l)if(l[s]&&l[s].test(o)){u.unshift(s);break}if(u[0]in r)a=u[0];else{for(s in r){if(!u[0]||e.converters[s+" "+u[0]]){a=s;break}i||(i=s)}a=a||i}return a?(a!==u[0]&&u.unshift(a),r[a]):t}function On(e,t,n,r){var i,o,a,s,l,u={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)u[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!l&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),l=o,o=c.shift())if("*"===o)o=l;else if("*"!==l&&l!==o){if(a=u[l+" "+o]||u["* "+o],!a)for(i in u)if(s=i.split(" "),s[1]===o&&(a=u[l+" "+s[0]]||u["* "+s[0]])){a===!0?a=u[i]:u[i]!==!0&&(o=s[0],c.unshift(s[1]));break}if(a!==!0)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(p){return{state:"parsererror",error:a?p:"No conversion from "+l+" to "+o}}}return{state:"success",data:t}}x.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(e){return x.globalEval(e),e}}}),x.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),x.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=a.head||x("head")[0]||a.documentElement;return{send:function(t,i){n=a.createElement("script"),n.async=!0,e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,t){(t||!n.readyState||/loaded|complete/.test(n.readyState))&&(n.onload=n.onreadystatechange=null,n.parentNode&&n.parentNode.removeChild(n),n=null,t||i(200,"success"))},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(t,!0)}}}});var Fn=[],Bn=/(=)\?(?=&|$)|\?\?/;x.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Fn.pop()||x.expando+"_"+vn++;return this[e]=!0,e}}),x.ajaxPrefilter("json jsonp",function(n,r,i){var o,a,s,l=n.jsonp!==!1&&(Bn.test(n.url)?"url":"string"==typeof n.data&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&Bn.test(n.data)&&"data");return l||"jsonp"===n.dataTypes[0]?(o=n.jsonpCallback=x.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,l?n[l]=n[l].replace(Bn,"$1"+o):n.jsonp!==!1&&(n.url+=(bn.test(n.url)?"&":"?")+n.jsonp+"="+o),n.converters["script json"]=function(){return s||x.error(o+" was not called"),s[0]},n.dataTypes[0]="json",a=e[o],e[o]=function(){s=arguments},i.always(function(){e[o]=a,n[o]&&(n.jsonpCallback=r.jsonpCallback,Fn.push(o)),s&&x.isFunction(a)&&a(s[0]),s=a=t}),"script"):t});var Pn,Rn,Wn=0,$n=e.ActiveXObject&&function(){var e;for(e in Pn)Pn[e](t,!0)};function In(){try{return new e.XMLHttpRequest}catch(t){}}function zn(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(t){}}x.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&In()||zn()}:In,Rn=x.ajaxSettings.xhr(),x.support.cors=!!Rn&&"withCredentials"in Rn,Rn=x.support.ajax=!!Rn,Rn&&x.ajaxTransport(function(n){if(!n.crossDomain||x.support.cors){var r;return{send:function(i,o){var a,s,l=n.xhr();if(n.username?l.open(n.type,n.url,n.async,n.username,n.password):l.open(n.type,n.url,n.async),n.xhrFields)for(s in n.xhrFields)l[s]=n.xhrFields[s];n.mimeType&&l.overrideMimeType&&l.overrideMimeType(n.mimeType),n.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");try{for(s in i)l.setRequestHeader(s,i[s])}catch(u){}l.send(n.hasContent&&n.data||null),r=function(e,i){var s,u,c,p;try{if(r&&(i||4===l.readyState))if(r=t,a&&(l.onreadystatechange=x.noop,$n&&delete Pn[a]),i)4!==l.readyState&&l.abort();else{p={},s=l.status,u=l.getAllResponseHeaders(),"string"==typeof l.responseText&&(p.text=l.responseText);try{c=l.statusText}catch(f){c=""}s||!n.isLocal||n.crossDomain?1223===s&&(s=204):s=p.text?200:404}}catch(d){i||o(-1,d)}p&&o(s,c,p,u)},n.async?4===l.readyState?setTimeout(r):(a=++Wn,$n&&(Pn||(Pn={},x(e).unload($n)),Pn[a]=r),l.onreadystatechange=r):r()},abort:function(){r&&r(t,!0)}}}});var Xn,Un,Vn=/^(?:toggle|show|hide)$/,Yn=RegExp("^(?:([+-])=|)("+w+")([a-z%]*)$","i"),Jn=/queueHooks$/,Gn=[nr],Qn={"*":[function(e,t){var n=this.createTween(e,t),r=n.cur(),i=Yn.exec(t),o=i&&i[3]||(x.cssNumber[e]?"":"px"),a=(x.cssNumber[e]||"px"!==o&&+r)&&Yn.exec(x.css(n.elem,e)),s=1,l=20;if(a&&a[3]!==o){o=o||a[3],i=i||[],a=+r||1;do s=s||".5",a/=s,x.style(n.elem,e,a+o);while(s!==(s=n.cur()/r)&&1!==s&&--l)}return i&&(a=n.start=+a||+r||0,n.unit=o,n.end=i[1]?a+(i[1]+1)*i[2]:+i[2]),n}]};function Kn(){return setTimeout(function(){Xn=t}),Xn=x.now()}function Zn(e,t,n){var r,i=(Qn[t]||[]).concat(Qn["*"]),o=0,a=i.length;for(;a>o;o++)if(r=i[o].call(n,t,e))return r}function er(e,t,n){var r,i,o=0,a=Gn.length,s=x.Deferred().always(function(){delete l.elem}),l=function(){if(i)return!1;var t=Xn||Kn(),n=Math.max(0,u.startTime+u.duration-t),r=n/u.duration||0,o=1-r,a=0,l=u.tweens.length;for(;l>a;a++)u.tweens[a].run(o);return s.notifyWith(e,[u,o,n]),1>o&&l?n:(s.resolveWith(e,[u]),!1)},u=s.promise({elem:e,props:x.extend({},t),opts:x.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:Xn||Kn(),duration:n.duration,tweens:[],createTween:function(t,n){var r=x.Tween(e,u.opts,t,n,u.opts.specialEasing[t]||u.opts.easing);return u.tweens.push(r),r},stop:function(t){var n=0,r=t?u.tweens.length:0;if(i)return this;for(i=!0;r>n;n++)u.tweens[n].run(1);return t?s.resolveWith(e,[u,t]):s.rejectWith(e,[u,t]),this}}),c=u.props;for(tr(c,u.opts.specialEasing);a>o;o++)if(r=Gn[o].call(u,e,c,u.opts))return r;return x.map(c,Zn,u),x.isFunction(u.opts.start)&&u.opts.start.call(e,u),x.fx.timer(x.extend(l,{elem:e,anim:u,queue:u.opts.queue})),u.progress(u.opts.progress).done(u.opts.done,u.opts.complete).fail(u.opts.fail).always(u.opts.always)}function tr(e,t){var n,r,i,o,a;for(n in e)if(r=x.camelCase(n),i=t[r],o=e[n],x.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),a=x.cssHooks[r],a&&"expand"in a){o=a.expand(o),delete e[r];for(n in o)n in e||(e[n]=o[n],t[n]=i)}else t[r]=i}x.Animation=x.extend(er,{tweener:function(e,t){x.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");var n,r=0,i=e.length;for(;i>r;r++)n=e[r],Qn[n]=Qn[n]||[],Qn[n].unshift(t)},prefilter:function(e,t){t?Gn.unshift(e):Gn.push(e)}});function nr(e,t,n){var r,i,o,a,s,l,u=this,c={},p=e.style,f=e.nodeType&&nn(e),d=x._data(e,"fxshow");n.queue||(s=x._queueHooks(e,"fx"),null==s.unqueued&&(s.unqueued=0,l=s.empty.fire,s.empty.fire=function(){s.unqueued||l()}),s.unqueued++,u.always(function(){u.always(function(){s.unqueued--,x.queue(e,"fx").length||s.empty.fire()})})),1===e.nodeType&&("height"in t||"width"in t)&&(n.overflow=[p.overflow,p.overflowX,p.overflowY],"inline"===x.css(e,"display")&&"none"===x.css(e,"float")&&(x.support.inlineBlockNeedsLayout&&"inline"!==ln(e.nodeName)?p.zoom=1:p.display="inline-block")),n.overflow&&(p.overflow="hidden",x.support.shrinkWrapBlocks||u.always(function(){p.overflow=n.overflow[0],p.overflowX=n.overflow[1],p.overflowY=n.overflow[2]}));for(r in t)if(i=t[r],Vn.exec(i)){if(delete t[r],o=o||"toggle"===i,i===(f?"hide":"show"))continue;c[r]=d&&d[r]||x.style(e,r)}if(!x.isEmptyObject(c)){d?"hidden"in d&&(f=d.hidden):d=x._data(e,"fxshow",{}),o&&(d.hidden=!f),f?x(e).show():u.done(function(){x(e).hide()}),u.done(function(){var t;x._removeData(e,"fxshow");for(t in c)x.style(e,t,c[t])});for(r in c)a=Zn(f?d[r]:0,r,u),r in d||(d[r]=a.start,f&&(a.end=a.start,a.start="width"===r||"height"===r?1:0))}}function rr(e,t,n,r,i){return new rr.prototype.init(e,t,n,r,i)}x.Tween=rr,rr.prototype={constructor:rr,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||"swing",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(x.cssNumber[n]?"":"px")},cur:function(){var e=rr.propHooks[this.prop];return e&&e.get?e.get(this):rr.propHooks._default.get(this)},run:function(e){var t,n=rr.propHooks[this.prop];return this.pos=t=this.options.duration?x.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):rr.propHooks._default.set(this),this}},rr.prototype.init.prototype=rr.prototype,rr.propHooks={_default:{get:function(e){var t;return null==e.elem[e.prop]||e.elem.style&&null!=e.elem.style[e.prop]?(t=x.css(e.elem,e.prop,""),t&&"auto"!==t?t:0):e.elem[e.prop]},set:function(e){x.fx.step[e.prop]?x.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[x.cssProps[e.prop]]||x.cssHooks[e.prop])?x.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},rr.propHooks.scrollTop=rr.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},x.each(["toggle","show","hide"],function(e,t){var n=x.fn[t];x.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(ir(t,!0),e,r,i)}}),x.fn.extend({fadeTo:function(e,t,n,r){return this.filter(nn).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=x.isEmptyObject(e),o=x.speed(t,n,r),a=function(){var t=er(this,x.extend({},e),o);(i||x._data(this,"finish"))&&t.stop(!0)};return a.finish=a,i||o.queue===!1?this.each(a):this.queue(o.queue,a)},stop:function(e,n,r){var i=function(e){var t=e.stop;delete e.stop,t(r)};return"string"!=typeof e&&(r=n,n=e,e=t),n&&e!==!1&&this.queue(e||"fx",[]),this.each(function(){var t=!0,n=null!=e&&e+"queueHooks",o=x.timers,a=x._data(this);if(n)a[n]&&a[n].stop&&i(a[n]);else for(n in a)a[n]&&a[n].stop&&Jn.test(n)&&i(a[n]);for(n=o.length;n--;)o[n].elem!==this||null!=e&&o[n].queue!==e||(o[n].anim.stop(r),t=!1,o.splice(n,1));(t||!r)&&x.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||"fx"),this.each(function(){var t,n=x._data(this),r=n[e+"queue"],i=n[e+"queueHooks"],o=x.timers,a=r?r.length:0;for(n.finish=!0,x.queue(this,e,[]),i&&i.stop&&i.stop.call(this,!0),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;a>t;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}});function ir(e,t){var n,r={height:e},i=0;for(t=t?1:0;4>i;i+=2-t)n=Zt[i],r["margin"+n]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}x.each({slideDown:ir("show"),slideUp:ir("hide"),slideToggle:ir("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){x.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),x.speed=function(e,t,n){var r=e&&"object"==typeof e?x.extend({},e):{complete:n||!n&&t||x.isFunction(e)&&e,duration:e,easing:n&&t||t&&!x.isFunction(t)&&t};return r.duration=x.fx.off?0:"number"==typeof r.duration?r.duration:r.duration in x.fx.speeds?x.fx.speeds[r.duration]:x.fx.speeds._default,(null==r.queue||r.queue===!0)&&(r.queue="fx"),r.old=r.complete,r.complete=function(){x.isFunction(r.old)&&r.old.call(this),r.queue&&x.dequeue(this,r.queue)},r},x.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},x.timers=[],x.fx=rr.prototype.init,x.fx.tick=function(){var e,n=x.timers,r=0;for(Xn=x.now();n.length>r;r++)e=n[r],e()||n[r]!==e||n.splice(r--,1);n.length||x.fx.stop(),Xn=t},x.fx.timer=function(e){e()&&x.timers.push(e)&&x.fx.start()},x.fx.interval=13,x.fx.start=function(){Un||(Un=setInterval(x.fx.tick,x.fx.interval))},x.fx.stop=function(){clearInterval(Un),Un=null},x.fx.speeds={slow:600,fast:200,_default:400},x.fx.step={},x.expr&&x.expr.filters&&(x.expr.filters.animated=function(e){return x.grep(x.timers,function(t){return e===t.elem}).length}),x.fn.offset=function(e){if(arguments.length)return e===t?this:this.each(function(t){x.offset.setOffset(this,e,t)});var n,r,o={top:0,left:0},a=this[0],s=a&&a.ownerDocument;if(s)return n=s.documentElement,x.contains(n,a)?(typeof a.getBoundingClientRect!==i&&(o=a.getBoundingClientRect()),r=or(s),{top:o.top+(r.pageYOffset||n.scrollTop)-(n.clientTop||0),left:o.left+(r.pageXOffset||n.scrollLeft)-(n.clientLeft||0)}):o},x.offset={setOffset:function(e,t,n){var r=x.css(e,"position");"static"===r&&(e.style.position="relative");var i=x(e),o=i.offset(),a=x.css(e,"top"),s=x.css(e,"left"),l=("absolute"===r||"fixed"===r)&&x.inArray("auto",[a,s])>-1,u={},c={},p,f;l?(c=i.position(),p=c.top,f=c.left):(p=parseFloat(a)||0,f=parseFloat(s)||0),x.isFunction(t)&&(t=t.call(e,n,o)),null!=t.top&&(u.top=t.top-o.top+p),null!=t.left&&(u.left=t.left-o.left+f),"using"in t?t.using.call(e,u):i.css(u)}},x.fn.extend({position:function(){if(this[0]){var e,t,n={top:0,left:0},r=this[0];return"fixed"===x.css(r,"position")?t=r.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),x.nodeName(e[0],"html")||(n=e.offset()),n.top+=x.css(e[0],"borderTopWidth",!0),n.left+=x.css(e[0],"borderLeftWidth",!0)),{top:t.top-n.top-x.css(r,"marginTop",!0),left:t.left-n.left-x.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||s;while(e&&!x.nodeName(e,"html")&&"static"===x.css(e,"position"))e=e.offsetParent;return e||s})}}),x.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);x.fn[e]=function(i){return x.access(this,function(e,i,o){var a=or(e);return o===t?a?n in a?a[n]:a.document.documentElement[i]:e[i]:(a?a.scrollTo(r?x(a).scrollLeft():o,r?o:x(a).scrollTop()):e[i]=o,t)},e,i,arguments.length,null)}});function or(e){return x.isWindow(e)?e:9===e.nodeType?e.defaultView||e.parentWindow:!1}x.each({Height:"height",Width:"width"},function(e,n){x.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){x.fn[i]=function(i,o){var a=arguments.length&&(r||"boolean"!=typeof i),s=r||(i===!0||o===!0?"margin":"border");return x.access(this,function(n,r,i){var o;return x.isWindow(n)?n.document.documentElement["client"+e]:9===n.nodeType?(o=n.documentElement,Math.max(n.body["scroll"+e],o["scroll"+e],n.body["offset"+e],o["offset"+e],o["client"+e])):i===t?x.css(n,r,s):x.style(n,r,i,s)},n,a?i:t,a,null)}})}),x.fn.size=function(){return this.length},x.fn.andSelf=x.fn.addBack,"object"==typeof module&&module&&"object"==typeof module.exports?module.exports=x:(e.jQuery=e.$=x,"function"==typeof define&&define.amd&&define("jquery",[],function(){return x}))})(window);
− static/jquery.url.js
@@ -1,181 +0,0 @@-// JQuery URL Parser-// Written by Mark Perkins, mark@allmarkedup.com-// License: http://unlicense.org/ (i.e. do what you want with it!)--jQuery.url = function()-{-	var segments = {};-	-	var parsed = {};-	-	/**-    * Options object. Only the URI and strictMode values can be changed via the setters below.-    */-  	var options = {-	-		url : window.location, // default URI is the page in which the script is running-		-		strictMode: false, // 'loose' parsing by default-	-		key: ["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"], // keys available to query -		-		q: {-			name: "queryKey",-			parser: /(?:^|&|;)([^&=;]*)=?([^&;]*)/g-		},-		-		parser: {-			strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,  //less intuitive, more accurate to the specs-			loose:  /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/ // more intuitive, fails on relative paths and deviates from specs-		}-		-	};-	-    /**-     * Deals with the parsing of the URI according to the regex above.- 	 * Written by Steven Levithan - see credits at top.-     */		-	var parseUri = function()-	{-		str = decodeURI( options.url );-		-		var m = options.parser[ options.strictMode ? "strict" : "loose" ].exec( str );-		var uri = {};-		var i = 14;--		while ( i-- ) {-			uri[ options.key[i] ] = m[i] || "";-		}--		uri[ options.q.name ] = {};-		uri[ options.key[12] ].replace( options.q.parser, function ( $0, $1, $2 ) {-			if ($1) {-				uri[options.q.name][$1] = $2;-			}-		});--		return uri;-	};--    /**-     * Returns the value of the passed in key from the parsed URI.-  	 * -	 * @param string key The key whose value is required-     */		-	var key = function( key )-	{-		if ( jQuery.isEmptyObject(parsed) )-		{-			setUp(); // if the URI has not been parsed yet then do this first...	-		} -		if ( key == "base" )-		{-			if ( parsed.port !== null && parsed.port !== "" )-			{-				return parsed.protocol+"://"+parsed.host+":"+parsed.port+"/";	-			}-			else-			{-				return parsed.protocol+"://"+parsed.host+"/";-			}-		}-	-		return ( parsed[key] === "" ) ? null : parsed[key];-	};-	-	/**-     * Returns the value of the required query string parameter.-  	 * -	 * @param string item The parameter whose value is required-     */		-	var param = function( item )-	{-		if ( jQuery.isEmptyObject(parsed) )-		{-			setUp(); // if the URI has not been parsed yet then do this first...	-		}-		if ( item === undefined )-		{-            return parsed.queryKey;-        }-        else-        {-            return ( parsed.queryKey[item] === null ) ? null : parsed.queryKey[item];-        }-	};--    /**-     * 'Constructor' (not really!) function.-     *  Called whenever the URI changes to kick off re-parsing of the URI and splitting it up into segments. -     */	-	var setUp = function()-	{-		parsed = parseUri();-		-		getSegments();	-	};-	-    /**-     * Splits up the body of the URI into segments (i.e. sections delimited by '/')-     */-	var getSegments = function()-	{-		var p = parsed.path;-		segments = []; // clear out segments array-		segments = parsed.path.length == 1 ? {} : ( p.charAt( p.length - 1 ) == "/" ? p.substring( 1, p.length - 1 ) : path = p.substring( 1 ) ).split("/");-	};-	-	return {-		-	    /**-	     * Sets the parsing mode - either strict or loose. Set to loose by default.-	     *-	     * @param string mode The mode to set the parser to. Anything apart from a value of 'strict' will set it to loose!-	     */-		setMode : function( mode )-		{-			options.strictMode = mode == "strict" ? true : false;-			return this;-		},-		-		/**-	     * Sets URI to parse if you don't want to to parse the current page's URI.-		 * Calling the function with no value for newUri resets it to the current page's URI.-	     *-	     * @param string newUri The URI to parse.-	     */		-		setUrl : function( newUri )-		{-			options.url = newUri === undefined ? window.location : newUri;-			setUp();-			return this;-		},		-		-		/**-	     * Returns the value of the specified URI segment. Segments are numbered from 1 to the number of segments.-		 * For example the URI http://test.com/about/company/ segment(1) would return 'about'.-		 *-		 * If no integer is passed into the function it returns the number of segments in the URI.-	     *-	     * @param int pos The position of the segment to return. Can be empty.-	     */	-		segment : function( pos )-		{-			if ( jQuery.isEmptyObject(parsed) )-			{-				setUp(); // if the URI has not been parsed yet then do this first...	-			} -			if ( pos === undefined )-			{-				return segments.length;-			}-			return ( segments[pos] === "" || segments[pos] === undefined ) ? null : segments[pos];-		},-		-		attr : key, // provides public access to private 'key' function - see above-		-		param : param // provides public access to private 'param' function - see above-		-	};-	-}();
+ static/js/bootstrap.js view
@@ -0,0 +1,2114 @@+/*!+ * Bootstrap v3.2.0 (http://getbootstrap.com)+ * Copyright 2011-2014 Twitter, Inc.+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)+ */++if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript requires jQuery') }++/* ========================================================================+ * Bootstrap: transition.js v3.2.0+ * http://getbootstrap.com/javascript/#transitions+ * ========================================================================+ * Copyright 2011-2014 Twitter, Inc.+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)+ * ======================================================================== */++++function ($) {+  'use strict';++  // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)+  // ============================================================++  function transitionEnd() {+    var el = document.createElement('bootstrap')++    var transEndEventNames = {+      WebkitTransition : 'webkitTransitionEnd',+      MozTransition    : 'transitionend',+      OTransition      : 'oTransitionEnd otransitionend',+      transition       : 'transitionend'+    }++    for (var name in transEndEventNames) {+      if (el.style[name] !== undefined) {+        return { end: transEndEventNames[name] }+      }+    }++    return false // explicit for ie8 (  ._.)+  }++  // http://blog.alexmaccaw.com/css-transitions+  $.fn.emulateTransitionEnd = function (duration) {+    var called = false+    var $el = this+    $(this).one('bsTransitionEnd', function () { called = true })+    var callback = function () { if (!called) $($el).trigger($.support.transition.end) }+    setTimeout(callback, duration)+    return this+  }++  $(function () {+    $.support.transition = transitionEnd()++    if (!$.support.transition) return++    $.event.special.bsTransitionEnd = {+      bindType: $.support.transition.end,+      delegateType: $.support.transition.end,+      handle: function (e) {+        if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)+      }+    }+  })++}(jQuery);++/* ========================================================================+ * Bootstrap: alert.js v3.2.0+ * http://getbootstrap.com/javascript/#alerts+ * ========================================================================+ * Copyright 2011-2014 Twitter, Inc.+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)+ * ======================================================================== */++++function ($) {+  'use strict';++  // ALERT CLASS DEFINITION+  // ======================++  var dismiss = '[data-dismiss="alert"]'+  var Alert   = function (el) {+    $(el).on('click', dismiss, this.close)+  }++  Alert.VERSION = '3.2.0'++  Alert.prototype.close = function (e) {+    var $this    = $(this)+    var selector = $this.attr('data-target')++    if (!selector) {+      selector = $this.attr('href')+      selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7+    }++    var $parent = $(selector)++    if (e) e.preventDefault()++    if (!$parent.length) {+      $parent = $this.hasClass('alert') ? $this : $this.parent()+    }++    $parent.trigger(e = $.Event('close.bs.alert'))++    if (e.isDefaultPrevented()) return++    $parent.removeClass('in')++    function removeElement() {+      // detach from parent, fire event then clean up data+      $parent.detach().trigger('closed.bs.alert').remove()+    }++    $.support.transition && $parent.hasClass('fade') ?+      $parent+        .one('bsTransitionEnd', removeElement)+        .emulateTransitionEnd(150) :+      removeElement()+  }+++  // ALERT PLUGIN DEFINITION+  // =======================++  function Plugin(option) {+    return this.each(function () {+      var $this = $(this)+      var data  = $this.data('bs.alert')++      if (!data) $this.data('bs.alert', (data = new Alert(this)))+      if (typeof option == 'string') data[option].call($this)+    })+  }++  var old = $.fn.alert++  $.fn.alert             = Plugin+  $.fn.alert.Constructor = Alert+++  // ALERT NO CONFLICT+  // =================++  $.fn.alert.noConflict = function () {+    $.fn.alert = old+    return this+  }+++  // ALERT DATA-API+  // ==============++  $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)++}(jQuery);++/* ========================================================================+ * Bootstrap: button.js v3.2.0+ * http://getbootstrap.com/javascript/#buttons+ * ========================================================================+ * Copyright 2011-2014 Twitter, Inc.+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)+ * ======================================================================== */++++function ($) {+  'use strict';++  // BUTTON PUBLIC CLASS DEFINITION+  // ==============================++  var Button = function (element, options) {+    this.$element  = $(element)+    this.options   = $.extend({}, Button.DEFAULTS, options)+    this.isLoading = false+  }++  Button.VERSION  = '3.2.0'++  Button.DEFAULTS = {+    loadingText: 'loading...'+  }++  Button.prototype.setState = function (state) {+    var d    = 'disabled'+    var $el  = this.$element+    var val  = $el.is('input') ? 'val' : 'html'+    var data = $el.data()++    state = state + 'Text'++    if (data.resetText == null) $el.data('resetText', $el[val]())++    $el[val](data[state] == null ? this.options[state] : data[state])++    // push to event loop to allow forms to submit+    setTimeout($.proxy(function () {+      if (state == 'loadingText') {+        this.isLoading = true+        $el.addClass(d).attr(d, d)+      } else if (this.isLoading) {+        this.isLoading = false+        $el.removeClass(d).removeAttr(d)+      }+    }, this), 0)+  }++  Button.prototype.toggle = function () {+    var changed = true+    var $parent = this.$element.closest('[data-toggle="buttons"]')++    if ($parent.length) {+      var $input = this.$element.find('input')+      if ($input.prop('type') == 'radio') {+        if ($input.prop('checked') && this.$element.hasClass('active')) changed = false+        else $parent.find('.active').removeClass('active')+      }+      if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change')+    }++    if (changed) this.$element.toggleClass('active')+  }+++  // BUTTON PLUGIN DEFINITION+  // ========================++  function Plugin(option) {+    return this.each(function () {+      var $this   = $(this)+      var data    = $this.data('bs.button')+      var options = typeof option == 'object' && option++      if (!data) $this.data('bs.button', (data = new Button(this, options)))++      if (option == 'toggle') data.toggle()+      else if (option) data.setState(option)+    })+  }++  var old = $.fn.button++  $.fn.button             = Plugin+  $.fn.button.Constructor = Button+++  // BUTTON NO CONFLICT+  // ==================++  $.fn.button.noConflict = function () {+    $.fn.button = old+    return this+  }+++  // BUTTON DATA-API+  // ===============++  $(document).on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) {+    var $btn = $(e.target)+    if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')+    Plugin.call($btn, 'toggle')+    e.preventDefault()+  })++}(jQuery);++/* ========================================================================+ * Bootstrap: carousel.js v3.2.0+ * http://getbootstrap.com/javascript/#carousel+ * ========================================================================+ * Copyright 2011-2014 Twitter, Inc.+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)+ * ======================================================================== */++++function ($) {+  'use strict';++  // CAROUSEL CLASS DEFINITION+  // =========================++  var Carousel = function (element, options) {+    this.$element    = $(element).on('keydown.bs.carousel', $.proxy(this.keydown, this))+    this.$indicators = this.$element.find('.carousel-indicators')+    this.options     = options+    this.paused      =+    this.sliding     =+    this.interval    =+    this.$active     =+    this.$items      = null++    this.options.pause == 'hover' && this.$element+      .on('mouseenter.bs.carousel', $.proxy(this.pause, this))+      .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))+  }++  Carousel.VERSION  = '3.2.0'++  Carousel.DEFAULTS = {+    interval: 5000,+    pause: 'hover',+    wrap: true+  }++  Carousel.prototype.keydown = function (e) {+    switch (e.which) {+      case 37: this.prev(); break+      case 39: this.next(); break+      default: return+    }++    e.preventDefault()+  }++  Carousel.prototype.cycle = function (e) {+    e || (this.paused = false)++    this.interval && clearInterval(this.interval)++    this.options.interval+      && !this.paused+      && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))++    return this+  }++  Carousel.prototype.getItemIndex = function (item) {+    this.$items = item.parent().children('.item')+    return this.$items.index(item || this.$active)+  }++  Carousel.prototype.to = function (pos) {+    var that        = this+    var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))++    if (pos > (this.$items.length - 1) || pos < 0) return++    if (this.sliding)       return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid"+    if (activeIndex == pos) return this.pause().cycle()++    return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos]))+  }++  Carousel.prototype.pause = function (e) {+    e || (this.paused = true)++    if (this.$element.find('.next, .prev').length && $.support.transition) {+      this.$element.trigger($.support.transition.end)+      this.cycle(true)+    }++    this.interval = clearInterval(this.interval)++    return this+  }++  Carousel.prototype.next = function () {+    if (this.sliding) return+    return this.slide('next')+  }++  Carousel.prototype.prev = function () {+    if (this.sliding) return+    return this.slide('prev')+  }++  Carousel.prototype.slide = function (type, next) {+    var $active   = this.$element.find('.item.active')+    var $next     = next || $active[type]()+    var isCycling = this.interval+    var direction = type == 'next' ? 'left' : 'right'+    var fallback  = type == 'next' ? 'first' : 'last'+    var that      = this++    if (!$next.length) {+      if (!this.options.wrap) return+      $next = this.$element.find('.item')[fallback]()+    }++    if ($next.hasClass('active')) return (this.sliding = false)++    var relatedTarget = $next[0]+    var slideEvent = $.Event('slide.bs.carousel', {+      relatedTarget: relatedTarget,+      direction: direction+    })+    this.$element.trigger(slideEvent)+    if (slideEvent.isDefaultPrevented()) return++    this.sliding = true++    isCycling && this.pause()++    if (this.$indicators.length) {+      this.$indicators.find('.active').removeClass('active')+      var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])+      $nextIndicator && $nextIndicator.addClass('active')+    }++    var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid"+    if ($.support.transition && this.$element.hasClass('slide')) {+      $next.addClass(type)+      $next[0].offsetWidth // force reflow+      $active.addClass(direction)+      $next.addClass(direction)+      $active+        .one('bsTransitionEnd', function () {+          $next.removeClass([type, direction].join(' ')).addClass('active')+          $active.removeClass(['active', direction].join(' '))+          that.sliding = false+          setTimeout(function () {+            that.$element.trigger(slidEvent)+          }, 0)+        })+        .emulateTransitionEnd($active.css('transition-duration').slice(0, -1) * 1000)+    } else {+      $active.removeClass('active')+      $next.addClass('active')+      this.sliding = false+      this.$element.trigger(slidEvent)+    }++    isCycling && this.cycle()++    return this+  }+++  // CAROUSEL PLUGIN DEFINITION+  // ==========================++  function Plugin(option) {+    return this.each(function () {+      var $this   = $(this)+      var data    = $this.data('bs.carousel')+      var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)+      var action  = typeof option == 'string' ? option : options.slide++      if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))+      if (typeof option == 'number') data.to(option)+      else if (action) data[action]()+      else if (options.interval) data.pause().cycle()+    })+  }++  var old = $.fn.carousel++  $.fn.carousel             = Plugin+  $.fn.carousel.Constructor = Carousel+++  // CAROUSEL NO CONFLICT+  // ====================++  $.fn.carousel.noConflict = function () {+    $.fn.carousel = old+    return this+  }+++  // CAROUSEL DATA-API+  // =================++  $(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e) {+    var href+    var $this   = $(this)+    var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7+    if (!$target.hasClass('carousel')) return+    var options = $.extend({}, $target.data(), $this.data())+    var slideIndex = $this.attr('data-slide-to')+    if (slideIndex) options.interval = false++    Plugin.call($target, options)++    if (slideIndex) {+      $target.data('bs.carousel').to(slideIndex)+    }++    e.preventDefault()+  })++  $(window).on('load', function () {+    $('[data-ride="carousel"]').each(function () {+      var $carousel = $(this)+      Plugin.call($carousel, $carousel.data())+    })+  })++}(jQuery);++/* ========================================================================+ * Bootstrap: collapse.js v3.2.0+ * http://getbootstrap.com/javascript/#collapse+ * ========================================================================+ * Copyright 2011-2014 Twitter, Inc.+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)+ * ======================================================================== */++++function ($) {+  'use strict';++  // COLLAPSE PUBLIC CLASS DEFINITION+  // ================================++  var Collapse = function (element, options) {+    this.$element      = $(element)+    this.options       = $.extend({}, Collapse.DEFAULTS, options)+    this.transitioning = null++    if (this.options.parent) this.$parent = $(this.options.parent)+    if (this.options.toggle) this.toggle()+  }++  Collapse.VERSION  = '3.2.0'++  Collapse.DEFAULTS = {+    toggle: true+  }++  Collapse.prototype.dimension = function () {+    var hasWidth = this.$element.hasClass('width')+    return hasWidth ? 'width' : 'height'+  }++  Collapse.prototype.show = function () {+    if (this.transitioning || this.$element.hasClass('in')) return++    var startEvent = $.Event('show.bs.collapse')+    this.$element.trigger(startEvent)+    if (startEvent.isDefaultPrevented()) return++    var actives = this.$parent && this.$parent.find('> .panel > .in')++    if (actives && actives.length) {+      var hasData = actives.data('bs.collapse')+      if (hasData && hasData.transitioning) return+      Plugin.call(actives, 'hide')+      hasData || actives.data('bs.collapse', null)+    }++    var dimension = this.dimension()++    this.$element+      .removeClass('collapse')+      .addClass('collapsing')[dimension](0)++    this.transitioning = 1++    var complete = function () {+      this.$element+        .removeClass('collapsing')+        .addClass('collapse in')[dimension]('')+      this.transitioning = 0+      this.$element+        .trigger('shown.bs.collapse')+    }++    if (!$.support.transition) return complete.call(this)++    var scrollSize = $.camelCase(['scroll', dimension].join('-'))++    this.$element+      .one('bsTransitionEnd', $.proxy(complete, this))+      .emulateTransitionEnd(350)[dimension](this.$element[0][scrollSize])+  }++  Collapse.prototype.hide = function () {+    if (this.transitioning || !this.$element.hasClass('in')) return++    var startEvent = $.Event('hide.bs.collapse')+    this.$element.trigger(startEvent)+    if (startEvent.isDefaultPrevented()) return++    var dimension = this.dimension()++    this.$element[dimension](this.$element[dimension]())[0].offsetHeight++    this.$element+      .addClass('collapsing')+      .removeClass('collapse')+      .removeClass('in')++    this.transitioning = 1++    var complete = function () {+      this.transitioning = 0+      this.$element+        .trigger('hidden.bs.collapse')+        .removeClass('collapsing')+        .addClass('collapse')+    }++    if (!$.support.transition) return complete.call(this)++    this.$element+      [dimension](0)+      .one('bsTransitionEnd', $.proxy(complete, this))+      .emulateTransitionEnd(350)+  }++  Collapse.prototype.toggle = function () {+    this[this.$element.hasClass('in') ? 'hide' : 'show']()+  }+++  // COLLAPSE PLUGIN DEFINITION+  // ==========================++  function Plugin(option) {+    return this.each(function () {+      var $this   = $(this)+      var data    = $this.data('bs.collapse')+      var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)++      if (!data && options.toggle && option == 'show') option = !option+      if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))+      if (typeof option == 'string') data[option]()+    })+  }++  var old = $.fn.collapse++  $.fn.collapse             = Plugin+  $.fn.collapse.Constructor = Collapse+++  // COLLAPSE NO CONFLICT+  // ====================++  $.fn.collapse.noConflict = function () {+    $.fn.collapse = old+    return this+  }+++  // COLLAPSE DATA-API+  // =================++  $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) {+    var href+    var $this   = $(this)+    var target  = $this.attr('data-target')+        || e.preventDefault()+        || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7+    var $target = $(target)+    var data    = $target.data('bs.collapse')+    var option  = data ? 'toggle' : $this.data()+    var parent  = $this.attr('data-parent')+    var $parent = parent && $(parent)++    if (!data || !data.transitioning) {+      if ($parent) $parent.find('[data-toggle="collapse"][data-parent="' + parent + '"]').not($this).addClass('collapsed')+      $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed')+    }++    Plugin.call($target, option)+  })++}(jQuery);++/* ========================================================================+ * Bootstrap: dropdown.js v3.2.0+ * http://getbootstrap.com/javascript/#dropdowns+ * ========================================================================+ * Copyright 2011-2014 Twitter, Inc.+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)+ * ======================================================================== */++++function ($) {+  'use strict';++  // DROPDOWN CLASS DEFINITION+  // =========================++  var backdrop = '.dropdown-backdrop'+  var toggle   = '[data-toggle="dropdown"]'+  var Dropdown = function (element) {+    $(element).on('click.bs.dropdown', this.toggle)+  }++  Dropdown.VERSION = '3.2.0'++  Dropdown.prototype.toggle = function (e) {+    var $this = $(this)++    if ($this.is('.disabled, :disabled')) return++    var $parent  = getParent($this)+    var isActive = $parent.hasClass('open')++    clearMenus()++    if (!isActive) {+      if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {+        // if mobile we use a backdrop because click events don't delegate+        $('<div class="dropdown-backdrop"/>').insertAfter($(this)).on('click', clearMenus)+      }++      var relatedTarget = { relatedTarget: this }+      $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))++      if (e.isDefaultPrevented()) return++      $this.trigger('focus')++      $parent+        .toggleClass('open')+        .trigger('shown.bs.dropdown', relatedTarget)+    }++    return false+  }++  Dropdown.prototype.keydown = function (e) {+    if (!/(38|40|27)/.test(e.keyCode)) return++    var $this = $(this)++    e.preventDefault()+    e.stopPropagation()++    if ($this.is('.disabled, :disabled')) return++    var $parent  = getParent($this)+    var isActive = $parent.hasClass('open')++    if (!isActive || (isActive && e.keyCode == 27)) {+      if (e.which == 27) $parent.find(toggle).trigger('focus')+      return $this.trigger('click')+    }++    var desc = ' li:not(.divider):visible a'+    var $items = $parent.find('[role="menu"]' + desc + ', [role="listbox"]' + desc)++    if (!$items.length) return++    var index = $items.index($items.filter(':focus'))++    if (e.keyCode == 38 && index > 0)                 index--                        // up+    if (e.keyCode == 40 && index < $items.length - 1) index++                        // down+    if (!~index)                                      index = 0++    $items.eq(index).trigger('focus')+  }++  function clearMenus(e) {+    if (e && e.which === 3) return+    $(backdrop).remove()+    $(toggle).each(function () {+      var $parent = getParent($(this))+      var relatedTarget = { relatedTarget: this }+      if (!$parent.hasClass('open')) return+      $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))+      if (e.isDefaultPrevented()) return+      $parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget)+    })+  }++  function getParent($this) {+    var selector = $this.attr('data-target')++    if (!selector) {+      selector = $this.attr('href')+      selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7+    }++    var $parent = selector && $(selector)++    return $parent && $parent.length ? $parent : $this.parent()+  }+++  // DROPDOWN PLUGIN DEFINITION+  // ==========================++  function Plugin(option) {+    return this.each(function () {+      var $this = $(this)+      var data  = $this.data('bs.dropdown')++      if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))+      if (typeof option == 'string') data[option].call($this)+    })+  }++  var old = $.fn.dropdown++  $.fn.dropdown             = Plugin+  $.fn.dropdown.Constructor = Dropdown+++  // DROPDOWN NO CONFLICT+  // ====================++  $.fn.dropdown.noConflict = function () {+    $.fn.dropdown = old+    return this+  }+++  // APPLY TO STANDARD DROPDOWN ELEMENTS+  // ===================================++  $(document)+    .on('click.bs.dropdown.data-api', clearMenus)+    .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })+    .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)+    .on('keydown.bs.dropdown.data-api', toggle + ', [role="menu"], [role="listbox"]', Dropdown.prototype.keydown)++}(jQuery);++/* ========================================================================+ * Bootstrap: modal.js v3.2.0+ * http://getbootstrap.com/javascript/#modals+ * ========================================================================+ * Copyright 2011-2014 Twitter, Inc.+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)+ * ======================================================================== */++++function ($) {+  'use strict';++  // MODAL CLASS DEFINITION+  // ======================++  var Modal = function (element, options) {+    this.options        = options+    this.$body          = $(document.body)+    this.$element       = $(element)+    this.$backdrop      =+    this.isShown        = null+    this.scrollbarWidth = 0++    if (this.options.remote) {+      this.$element+        .find('.modal-content')+        .load(this.options.remote, $.proxy(function () {+          this.$element.trigger('loaded.bs.modal')+        }, this))+    }+  }++  Modal.VERSION  = '3.2.0'++  Modal.DEFAULTS = {+    backdrop: true,+    keyboard: true,+    show: true+  }++  Modal.prototype.toggle = function (_relatedTarget) {+    return this.isShown ? this.hide() : this.show(_relatedTarget)+  }++  Modal.prototype.show = function (_relatedTarget) {+    var that = this+    var e    = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })++    this.$element.trigger(e)++    if (this.isShown || e.isDefaultPrevented()) return++    this.isShown = true++    this.checkScrollbar()+    this.$body.addClass('modal-open')++    this.setScrollbar()+    this.escape()++    this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))++    this.backdrop(function () {+      var transition = $.support.transition && that.$element.hasClass('fade')++      if (!that.$element.parent().length) {+        that.$element.appendTo(that.$body) // don't move modals dom position+      }++      that.$element+        .show()+        .scrollTop(0)++      if (transition) {+        that.$element[0].offsetWidth // force reflow+      }++      that.$element+        .addClass('in')+        .attr('aria-hidden', false)++      that.enforceFocus()++      var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })++      transition ?+        that.$element.find('.modal-dialog') // wait for modal to slide in+          .one('bsTransitionEnd', function () {+            that.$element.trigger('focus').trigger(e)+          })+          .emulateTransitionEnd(300) :+        that.$element.trigger('focus').trigger(e)+    })+  }++  Modal.prototype.hide = function (e) {+    if (e) e.preventDefault()++    e = $.Event('hide.bs.modal')++    this.$element.trigger(e)++    if (!this.isShown || e.isDefaultPrevented()) return++    this.isShown = false++    this.$body.removeClass('modal-open')++    this.resetScrollbar()+    this.escape()++    $(document).off('focusin.bs.modal')++    this.$element+      .removeClass('in')+      .attr('aria-hidden', true)+      .off('click.dismiss.bs.modal')++    $.support.transition && this.$element.hasClass('fade') ?+      this.$element+        .one('bsTransitionEnd', $.proxy(this.hideModal, this))+        .emulateTransitionEnd(300) :+      this.hideModal()+  }++  Modal.prototype.enforceFocus = function () {+    $(document)+      .off('focusin.bs.modal') // guard against infinite focus loop+      .on('focusin.bs.modal', $.proxy(function (e) {+        if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {+          this.$element.trigger('focus')+        }+      }, this))+  }++  Modal.prototype.escape = function () {+    if (this.isShown && this.options.keyboard) {+      this.$element.on('keyup.dismiss.bs.modal', $.proxy(function (e) {+        e.which == 27 && this.hide()+      }, this))+    } else if (!this.isShown) {+      this.$element.off('keyup.dismiss.bs.modal')+    }+  }++  Modal.prototype.hideModal = function () {+    var that = this+    this.$element.hide()+    this.backdrop(function () {+      that.$element.trigger('hidden.bs.modal')+    })+  }++  Modal.prototype.removeBackdrop = function () {+    this.$backdrop && this.$backdrop.remove()+    this.$backdrop = null+  }++  Modal.prototype.backdrop = function (callback) {+    var that = this+    var animate = this.$element.hasClass('fade') ? 'fade' : ''++    if (this.isShown && this.options.backdrop) {+      var doAnimate = $.support.transition && animate++      this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')+        .appendTo(this.$body)++      this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {+        if (e.target !== e.currentTarget) return+        this.options.backdrop == 'static'+          ? this.$element[0].focus.call(this.$element[0])+          : this.hide.call(this)+      }, this))++      if (doAnimate) this.$backdrop[0].offsetWidth // force reflow++      this.$backdrop.addClass('in')++      if (!callback) return++      doAnimate ?+        this.$backdrop+          .one('bsTransitionEnd', callback)+          .emulateTransitionEnd(150) :+        callback()++    } else if (!this.isShown && this.$backdrop) {+      this.$backdrop.removeClass('in')++      var callbackRemove = function () {+        that.removeBackdrop()+        callback && callback()+      }+      $.support.transition && this.$element.hasClass('fade') ?+        this.$backdrop+          .one('bsTransitionEnd', callbackRemove)+          .emulateTransitionEnd(150) :+        callbackRemove()++    } else if (callback) {+      callback()+    }+  }++  Modal.prototype.checkScrollbar = function () {+    if (document.body.clientWidth >= window.innerWidth) return+    this.scrollbarWidth = this.scrollbarWidth || this.measureScrollbar()+  }++  Modal.prototype.setScrollbar = function () {+    var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)+    if (this.scrollbarWidth) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)+  }++  Modal.prototype.resetScrollbar = function () {+    this.$body.css('padding-right', '')+  }++  Modal.prototype.measureScrollbar = function () { // thx walsh+    var scrollDiv = document.createElement('div')+    scrollDiv.className = 'modal-scrollbar-measure'+    this.$body.append(scrollDiv)+    var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth+    this.$body[0].removeChild(scrollDiv)+    return scrollbarWidth+  }+++  // MODAL PLUGIN DEFINITION+  // =======================++  function Plugin(option, _relatedTarget) {+    return this.each(function () {+      var $this   = $(this)+      var data    = $this.data('bs.modal')+      var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)++      if (!data) $this.data('bs.modal', (data = new Modal(this, options)))+      if (typeof option == 'string') data[option](_relatedTarget)+      else if (options.show) data.show(_relatedTarget)+    })+  }++  var old = $.fn.modal++  $.fn.modal             = Plugin+  $.fn.modal.Constructor = Modal+++  // MODAL NO CONFLICT+  // =================++  $.fn.modal.noConflict = function () {+    $.fn.modal = old+    return this+  }+++  // MODAL DATA-API+  // ==============++  $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {+    var $this   = $(this)+    var href    = $this.attr('href')+    var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7+    var option  = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())++    if ($this.is('a')) e.preventDefault()++    $target.one('show.bs.modal', function (showEvent) {+      if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown+      $target.one('hidden.bs.modal', function () {+        $this.is(':visible') && $this.trigger('focus')+      })+    })+    Plugin.call($target, option, this)+  })++}(jQuery);++/* ========================================================================+ * Bootstrap: tooltip.js v3.2.0+ * http://getbootstrap.com/javascript/#tooltip+ * Inspired by the original jQuery.tipsy by Jason Frame+ * ========================================================================+ * Copyright 2011-2014 Twitter, Inc.+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)+ * ======================================================================== */++++function ($) {+  'use strict';++  // TOOLTIP PUBLIC CLASS DEFINITION+  // ===============================++  var Tooltip = function (element, options) {+    this.type       =+    this.options    =+    this.enabled    =+    this.timeout    =+    this.hoverState =+    this.$element   = null++    this.init('tooltip', element, options)+  }++  Tooltip.VERSION  = '3.2.0'++  Tooltip.DEFAULTS = {+    animation: true,+    placement: 'top',+    selector: false,+    template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',+    trigger: 'hover focus',+    title: '',+    delay: 0,+    html: false,+    container: false,+    viewport: {+      selector: 'body',+      padding: 0+    }+  }++  Tooltip.prototype.init = function (type, element, options) {+    this.enabled   = true+    this.type      = type+    this.$element  = $(element)+    this.options   = this.getOptions(options)+    this.$viewport = this.options.viewport && $(this.options.viewport.selector || this.options.viewport)++    var triggers = this.options.trigger.split(' ')++    for (var i = triggers.length; i--;) {+      var trigger = triggers[i]++      if (trigger == 'click') {+        this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))+      } else if (trigger != 'manual') {+        var eventIn  = trigger == 'hover' ? 'mouseenter' : 'focusin'+        var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'++        this.$element.on(eventIn  + '.' + this.type, this.options.selector, $.proxy(this.enter, this))+        this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))+      }+    }++    this.options.selector ?+      (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :+      this.fixTitle()+  }++  Tooltip.prototype.getDefaults = function () {+    return Tooltip.DEFAULTS+  }++  Tooltip.prototype.getOptions = function (options) {+    options = $.extend({}, this.getDefaults(), this.$element.data(), options)++    if (options.delay && typeof options.delay == 'number') {+      options.delay = {+        show: options.delay,+        hide: options.delay+      }+    }++    return options+  }++  Tooltip.prototype.getDelegateOptions = function () {+    var options  = {}+    var defaults = this.getDefaults()++    this._options && $.each(this._options, function (key, value) {+      if (defaults[key] != value) options[key] = value+    })++    return options+  }++  Tooltip.prototype.enter = function (obj) {+    var self = obj instanceof this.constructor ?+      obj : $(obj.currentTarget).data('bs.' + this.type)++    if (!self) {+      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())+      $(obj.currentTarget).data('bs.' + this.type, self)+    }++    clearTimeout(self.timeout)++    self.hoverState = 'in'++    if (!self.options.delay || !self.options.delay.show) return self.show()++    self.timeout = setTimeout(function () {+      if (self.hoverState == 'in') self.show()+    }, self.options.delay.show)+  }++  Tooltip.prototype.leave = function (obj) {+    var self = obj instanceof this.constructor ?+      obj : $(obj.currentTarget).data('bs.' + this.type)++    if (!self) {+      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())+      $(obj.currentTarget).data('bs.' + this.type, self)+    }++    clearTimeout(self.timeout)++    self.hoverState = 'out'++    if (!self.options.delay || !self.options.delay.hide) return self.hide()++    self.timeout = setTimeout(function () {+      if (self.hoverState == 'out') self.hide()+    }, self.options.delay.hide)+  }++  Tooltip.prototype.show = function () {+    var e = $.Event('show.bs.' + this.type)++    if (this.hasContent() && this.enabled) {+      this.$element.trigger(e)++      var inDom = $.contains(document.documentElement, this.$element[0])+      if (e.isDefaultPrevented() || !inDom) return+      var that = this++      var $tip = this.tip()++      var tipId = this.getUID(this.type)++      this.setContent()+      $tip.attr('id', tipId)+      this.$element.attr('aria-describedby', tipId)++      if (this.options.animation) $tip.addClass('fade')++      var placement = typeof this.options.placement == 'function' ?+        this.options.placement.call(this, $tip[0], this.$element[0]) :+        this.options.placement++      var autoToken = /\s?auto?\s?/i+      var autoPlace = autoToken.test(placement)+      if (autoPlace) placement = placement.replace(autoToken, '') || 'top'++      $tip+        .detach()+        .css({ top: 0, left: 0, display: 'block' })+        .addClass(placement)+        .data('bs.' + this.type, this)++      this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)++      var pos          = this.getPosition()+      var actualWidth  = $tip[0].offsetWidth+      var actualHeight = $tip[0].offsetHeight++      if (autoPlace) {+        var orgPlacement = placement+        var $parent      = this.$element.parent()+        var parentDim    = this.getPosition($parent)++        placement = placement == 'bottom' && pos.top   + pos.height       + actualHeight - parentDim.scroll > parentDim.height ? 'top'    :+                    placement == 'top'    && pos.top   - parentDim.scroll - actualHeight < 0                                   ? 'bottom' :+                    placement == 'right'  && pos.right + actualWidth      > parentDim.width                                    ? 'left'   :+                    placement == 'left'   && pos.left  - actualWidth      < parentDim.left                                     ? 'right'  :+                    placement++        $tip+          .removeClass(orgPlacement)+          .addClass(placement)+      }++      var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)++      this.applyPlacement(calculatedOffset, placement)++      var complete = function () {+        that.$element.trigger('shown.bs.' + that.type)+        that.hoverState = null+      }++      $.support.transition && this.$tip.hasClass('fade') ?+        $tip+          .one('bsTransitionEnd', complete)+          .emulateTransitionEnd(150) :+        complete()+    }+  }++  Tooltip.prototype.applyPlacement = function (offset, placement) {+    var $tip   = this.tip()+    var width  = $tip[0].offsetWidth+    var height = $tip[0].offsetHeight++    // manually read margins because getBoundingClientRect includes difference+    var marginTop = parseInt($tip.css('margin-top'), 10)+    var marginLeft = parseInt($tip.css('margin-left'), 10)++    // we must check for NaN for ie 8/9+    if (isNaN(marginTop))  marginTop  = 0+    if (isNaN(marginLeft)) marginLeft = 0++    offset.top  = offset.top  + marginTop+    offset.left = offset.left + marginLeft++    // $.fn.offset doesn't round pixel values+    // so we use setOffset directly with our own function B-0+    $.offset.setOffset($tip[0], $.extend({+      using: function (props) {+        $tip.css({+          top: Math.round(props.top),+          left: Math.round(props.left)+        })+      }+    }, offset), 0)++    $tip.addClass('in')++    // check to see if placing tip in new offset caused the tip to resize itself+    var actualWidth  = $tip[0].offsetWidth+    var actualHeight = $tip[0].offsetHeight++    if (placement == 'top' && actualHeight != height) {+      offset.top = offset.top + height - actualHeight+    }++    var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)++    if (delta.left) offset.left += delta.left+    else offset.top += delta.top++    var arrowDelta          = delta.left ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight+    var arrowPosition       = delta.left ? 'left'        : 'top'+    var arrowOffsetPosition = delta.left ? 'offsetWidth' : 'offsetHeight'++    $tip.offset(offset)+    this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], arrowPosition)+  }++  Tooltip.prototype.replaceArrow = function (delta, dimension, position) {+    this.arrow().css(position, delta ? (50 * (1 - delta / dimension) + '%') : '')+  }++  Tooltip.prototype.setContent = function () {+    var $tip  = this.tip()+    var title = this.getTitle()++    $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)+    $tip.removeClass('fade in top bottom left right')+  }++  Tooltip.prototype.hide = function () {+    var that = this+    var $tip = this.tip()+    var e    = $.Event('hide.bs.' + this.type)++    this.$element.removeAttr('aria-describedby')++    function complete() {+      if (that.hoverState != 'in') $tip.detach()+      that.$element.trigger('hidden.bs.' + that.type)+    }++    this.$element.trigger(e)++    if (e.isDefaultPrevented()) return++    $tip.removeClass('in')++    $.support.transition && this.$tip.hasClass('fade') ?+      $tip+        .one('bsTransitionEnd', complete)+        .emulateTransitionEnd(150) :+      complete()++    this.hoverState = null++    return this+  }++  Tooltip.prototype.fixTitle = function () {+    var $e = this.$element+    if ($e.attr('title') || typeof ($e.attr('data-original-title')) != 'string') {+      $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')+    }+  }++  Tooltip.prototype.hasContent = function () {+    return this.getTitle()+  }++  Tooltip.prototype.getPosition = function ($element) {+    $element   = $element || this.$element+    var el     = $element[0]+    var isBody = el.tagName == 'BODY'+    return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : null, {+      scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop(),+      width:  isBody ? $(window).width()  : $element.outerWidth(),+      height: isBody ? $(window).height() : $element.outerHeight()+    }, isBody ? { top: 0, left: 0 } : $element.offset())+  }++  Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {+    return placement == 'bottom' ? { top: pos.top + pos.height,   left: pos.left + pos.width / 2 - actualWidth / 2  } :+           placement == 'top'    ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2  } :+           placement == 'left'   ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :+        /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width   }++  }++  Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {+    var delta = { top: 0, left: 0 }+    if (!this.$viewport) return delta++    var viewportPadding = this.options.viewport && this.options.viewport.padding || 0+    var viewportDimensions = this.getPosition(this.$viewport)++    if (/right|left/.test(placement)) {+      var topEdgeOffset    = pos.top - viewportPadding - viewportDimensions.scroll+      var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight+      if (topEdgeOffset < viewportDimensions.top) { // top overflow+        delta.top = viewportDimensions.top - topEdgeOffset+      } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow+        delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset+      }+    } else {+      var leftEdgeOffset  = pos.left - viewportPadding+      var rightEdgeOffset = pos.left + viewportPadding + actualWidth+      if (leftEdgeOffset < viewportDimensions.left) { // left overflow+        delta.left = viewportDimensions.left - leftEdgeOffset+      } else if (rightEdgeOffset > viewportDimensions.width) { // right overflow+        delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset+      }+    }++    return delta+  }++  Tooltip.prototype.getTitle = function () {+    var title+    var $e = this.$element+    var o  = this.options++    title = $e.attr('data-original-title')+      || (typeof o.title == 'function' ? o.title.call($e[0]) :  o.title)++    return title+  }++  Tooltip.prototype.getUID = function (prefix) {+    do prefix += ~~(Math.random() * 1000000)+    while (document.getElementById(prefix))+    return prefix+  }++  Tooltip.prototype.tip = function () {+    return (this.$tip = this.$tip || $(this.options.template))+  }++  Tooltip.prototype.arrow = function () {+    return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))+  }++  Tooltip.prototype.validate = function () {+    if (!this.$element[0].parentNode) {+      this.hide()+      this.$element = null+      this.options  = null+    }+  }++  Tooltip.prototype.enable = function () {+    this.enabled = true+  }++  Tooltip.prototype.disable = function () {+    this.enabled = false+  }++  Tooltip.prototype.toggleEnabled = function () {+    this.enabled = !this.enabled+  }++  Tooltip.prototype.toggle = function (e) {+    var self = this+    if (e) {+      self = $(e.currentTarget).data('bs.' + this.type)+      if (!self) {+        self = new this.constructor(e.currentTarget, this.getDelegateOptions())+        $(e.currentTarget).data('bs.' + this.type, self)+      }+    }++    self.tip().hasClass('in') ? self.leave(self) : self.enter(self)+  }++  Tooltip.prototype.destroy = function () {+    clearTimeout(this.timeout)+    this.hide().$element.off('.' + this.type).removeData('bs.' + this.type)+  }+++  // TOOLTIP PLUGIN DEFINITION+  // =========================++  function Plugin(option) {+    return this.each(function () {+      var $this   = $(this)+      var data    = $this.data('bs.tooltip')+      var options = typeof option == 'object' && option++      if (!data && option == 'destroy') return+      if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))+      if (typeof option == 'string') data[option]()+    })+  }++  var old = $.fn.tooltip++  $.fn.tooltip             = Plugin+  $.fn.tooltip.Constructor = Tooltip+++  // TOOLTIP NO CONFLICT+  // ===================++  $.fn.tooltip.noConflict = function () {+    $.fn.tooltip = old+    return this+  }++}(jQuery);++/* ========================================================================+ * Bootstrap: popover.js v3.2.0+ * http://getbootstrap.com/javascript/#popovers+ * ========================================================================+ * Copyright 2011-2014 Twitter, Inc.+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)+ * ======================================================================== */++++function ($) {+  'use strict';++  // POPOVER PUBLIC CLASS DEFINITION+  // ===============================++  var Popover = function (element, options) {+    this.init('popover', element, options)+  }++  if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')++  Popover.VERSION  = '3.2.0'++  Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {+    placement: 'right',+    trigger: 'click',+    content: '',+    template: '<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'+  })+++  // NOTE: POPOVER EXTENDS tooltip.js+  // ================================++  Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)++  Popover.prototype.constructor = Popover++  Popover.prototype.getDefaults = function () {+    return Popover.DEFAULTS+  }++  Popover.prototype.setContent = function () {+    var $tip    = this.tip()+    var title   = this.getTitle()+    var content = this.getContent()++    $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)+    $tip.find('.popover-content').empty()[ // we use append for html objects to maintain js events+      this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'+    ](content)++    $tip.removeClass('fade top bottom left right in')++    // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do+    // this manually by checking the contents.+    if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()+  }++  Popover.prototype.hasContent = function () {+    return this.getTitle() || this.getContent()+  }++  Popover.prototype.getContent = function () {+    var $e = this.$element+    var o  = this.options++    return $e.attr('data-content')+      || (typeof o.content == 'function' ?+            o.content.call($e[0]) :+            o.content)+  }++  Popover.prototype.arrow = function () {+    return (this.$arrow = this.$arrow || this.tip().find('.arrow'))+  }++  Popover.prototype.tip = function () {+    if (!this.$tip) this.$tip = $(this.options.template)+    return this.$tip+  }+++  // POPOVER PLUGIN DEFINITION+  // =========================++  function Plugin(option) {+    return this.each(function () {+      var $this   = $(this)+      var data    = $this.data('bs.popover')+      var options = typeof option == 'object' && option++      if (!data && option == 'destroy') return+      if (!data) $this.data('bs.popover', (data = new Popover(this, options)))+      if (typeof option == 'string') data[option]()+    })+  }++  var old = $.fn.popover++  $.fn.popover             = Plugin+  $.fn.popover.Constructor = Popover+++  // POPOVER NO CONFLICT+  // ===================++  $.fn.popover.noConflict = function () {+    $.fn.popover = old+    return this+  }++}(jQuery);++/* ========================================================================+ * Bootstrap: scrollspy.js v3.2.0+ * http://getbootstrap.com/javascript/#scrollspy+ * ========================================================================+ * Copyright 2011-2014 Twitter, Inc.+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)+ * ======================================================================== */++++function ($) {+  'use strict';++  // SCROLLSPY CLASS DEFINITION+  // ==========================++  function ScrollSpy(element, options) {+    var process  = $.proxy(this.process, this)++    this.$body          = $('body')+    this.$scrollElement = $(element).is('body') ? $(window) : $(element)+    this.options        = $.extend({}, ScrollSpy.DEFAULTS, options)+    this.selector       = (this.options.target || '') + ' .nav li > a'+    this.offsets        = []+    this.targets        = []+    this.activeTarget   = null+    this.scrollHeight   = 0++    this.$scrollElement.on('scroll.bs.scrollspy', process)+    this.refresh()+    this.process()+  }++  ScrollSpy.VERSION  = '3.2.0'++  ScrollSpy.DEFAULTS = {+    offset: 10+  }++  ScrollSpy.prototype.getScrollHeight = function () {+    return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)+  }++  ScrollSpy.prototype.refresh = function () {+    var offsetMethod = 'offset'+    var offsetBase   = 0++    if (!$.isWindow(this.$scrollElement[0])) {+      offsetMethod = 'position'+      offsetBase   = this.$scrollElement.scrollTop()+    }++    this.offsets = []+    this.targets = []+    this.scrollHeight = this.getScrollHeight()++    var self     = this++    this.$body+      .find(this.selector)+      .map(function () {+        var $el   = $(this)+        var href  = $el.data('target') || $el.attr('href')+        var $href = /^#./.test(href) && $(href)++        return ($href+          && $href.length+          && $href.is(':visible')+          && [[$href[offsetMethod]().top + offsetBase, href]]) || null+      })+      .sort(function (a, b) { return a[0] - b[0] })+      .each(function () {+        self.offsets.push(this[0])+        self.targets.push(this[1])+      })+  }++  ScrollSpy.prototype.process = function () {+    var scrollTop    = this.$scrollElement.scrollTop() + this.options.offset+    var scrollHeight = this.getScrollHeight()+    var maxScroll    = this.options.offset + scrollHeight - this.$scrollElement.height()+    var offsets      = this.offsets+    var targets      = this.targets+    var activeTarget = this.activeTarget+    var i++    if (this.scrollHeight != scrollHeight) {+      this.refresh()+    }++    if (scrollTop >= maxScroll) {+      return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)+    }++    if (activeTarget && scrollTop <= offsets[0]) {+      return activeTarget != (i = targets[0]) && this.activate(i)+    }++    for (i = offsets.length; i--;) {+      activeTarget != targets[i]+        && scrollTop >= offsets[i]+        && (!offsets[i + 1] || scrollTop <= offsets[i + 1])+        && this.activate(targets[i])+    }+  }++  ScrollSpy.prototype.activate = function (target) {+    this.activeTarget = target++    $(this.selector)+      .parentsUntil(this.options.target, '.active')+      .removeClass('active')++    var selector = this.selector ++        '[data-target="' + target + '"],' ++        this.selector + '[href="' + target + '"]'++    var active = $(selector)+      .parents('li')+      .addClass('active')++    if (active.parent('.dropdown-menu').length) {+      active = active+        .closest('li.dropdown')+        .addClass('active')+    }++    active.trigger('activate.bs.scrollspy')+  }+++  // SCROLLSPY PLUGIN DEFINITION+  // ===========================++  function Plugin(option) {+    return this.each(function () {+      var $this   = $(this)+      var data    = $this.data('bs.scrollspy')+      var options = typeof option == 'object' && option++      if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))+      if (typeof option == 'string') data[option]()+    })+  }++  var old = $.fn.scrollspy++  $.fn.scrollspy             = Plugin+  $.fn.scrollspy.Constructor = ScrollSpy+++  // SCROLLSPY NO CONFLICT+  // =====================++  $.fn.scrollspy.noConflict = function () {+    $.fn.scrollspy = old+    return this+  }+++  // SCROLLSPY DATA-API+  // ==================++  $(window).on('load.bs.scrollspy.data-api', function () {+    $('[data-spy="scroll"]').each(function () {+      var $spy = $(this)+      Plugin.call($spy, $spy.data())+    })+  })++}(jQuery);++/* ========================================================================+ * Bootstrap: tab.js v3.2.0+ * http://getbootstrap.com/javascript/#tabs+ * ========================================================================+ * Copyright 2011-2014 Twitter, Inc.+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)+ * ======================================================================== */++++function ($) {+  'use strict';++  // TAB CLASS DEFINITION+  // ====================++  var Tab = function (element) {+    this.element = $(element)+  }++  Tab.VERSION = '3.2.0'++  Tab.prototype.show = function () {+    var $this    = this.element+    var $ul      = $this.closest('ul:not(.dropdown-menu)')+    var selector = $this.data('target')++    if (!selector) {+      selector = $this.attr('href')+      selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7+    }++    if ($this.parent('li').hasClass('active')) return++    var previous = $ul.find('.active:last a')[0]+    var e        = $.Event('show.bs.tab', {+      relatedTarget: previous+    })++    $this.trigger(e)++    if (e.isDefaultPrevented()) return++    var $target = $(selector)++    this.activate($this.closest('li'), $ul)+    this.activate($target, $target.parent(), function () {+      $this.trigger({+        type: 'shown.bs.tab',+        relatedTarget: previous+      })+    })+  }++  Tab.prototype.activate = function (element, container, callback) {+    var $active    = container.find('> .active')+    var transition = callback+      && $.support.transition+      && $active.hasClass('fade')++    function next() {+      $active+        .removeClass('active')+        .find('> .dropdown-menu > .active')+        .removeClass('active')++      element.addClass('active')++      if (transition) {+        element[0].offsetWidth // reflow for transition+        element.addClass('in')+      } else {+        element.removeClass('fade')+      }++      if (element.parent('.dropdown-menu')) {+        element.closest('li.dropdown').addClass('active')+      }++      callback && callback()+    }++    transition ?+      $active+        .one('bsTransitionEnd', next)+        .emulateTransitionEnd(150) :+      next()++    $active.removeClass('in')+  }+++  // TAB PLUGIN DEFINITION+  // =====================++  function Plugin(option) {+    return this.each(function () {+      var $this = $(this)+      var data  = $this.data('bs.tab')++      if (!data) $this.data('bs.tab', (data = new Tab(this)))+      if (typeof option == 'string') data[option]()+    })+  }++  var old = $.fn.tab++  $.fn.tab             = Plugin+  $.fn.tab.Constructor = Tab+++  // TAB NO CONFLICT+  // ===============++  $.fn.tab.noConflict = function () {+    $.fn.tab = old+    return this+  }+++  // TAB DATA-API+  // ============++  $(document).on('click.bs.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {+    e.preventDefault()+    Plugin.call($(this), 'show')+  })++}(jQuery);++/* ========================================================================+ * Bootstrap: affix.js v3.2.0+ * http://getbootstrap.com/javascript/#affix+ * ========================================================================+ * Copyright 2011-2014 Twitter, Inc.+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)+ * ======================================================================== */++++function ($) {+  'use strict';++  // AFFIX CLASS DEFINITION+  // ======================++  var Affix = function (element, options) {+    this.options = $.extend({}, Affix.DEFAULTS, options)++    this.$target = $(this.options.target)+      .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))+      .on('click.bs.affix.data-api',  $.proxy(this.checkPositionWithEventLoop, this))++    this.$element     = $(element)+    this.affixed      =+    this.unpin        =+    this.pinnedOffset = null++    this.checkPosition()+  }++  Affix.VERSION  = '3.2.0'++  Affix.RESET    = 'affix affix-top affix-bottom'++  Affix.DEFAULTS = {+    offset: 0,+    target: window+  }++  Affix.prototype.getPinnedOffset = function () {+    if (this.pinnedOffset) return this.pinnedOffset+    this.$element.removeClass(Affix.RESET).addClass('affix')+    var scrollTop = this.$target.scrollTop()+    var position  = this.$element.offset()+    return (this.pinnedOffset = position.top - scrollTop)+  }++  Affix.prototype.checkPositionWithEventLoop = function () {+    setTimeout($.proxy(this.checkPosition, this), 1)+  }++  Affix.prototype.checkPosition = function () {+    if (!this.$element.is(':visible')) return++    var scrollHeight = $(document).height()+    var scrollTop    = this.$target.scrollTop()+    var position     = this.$element.offset()+    var offset       = this.options.offset+    var offsetTop    = offset.top+    var offsetBottom = offset.bottom++    if (typeof offset != 'object')         offsetBottom = offsetTop = offset+    if (typeof offsetTop == 'function')    offsetTop    = offset.top(this.$element)+    if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)++    var affix = this.unpin   != null && (scrollTop + this.unpin <= position.top) ? false :+                offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ? 'bottom' :+                offsetTop    != null && (scrollTop <= offsetTop) ? 'top' : false++    if (this.affixed === affix) return+    if (this.unpin != null) this.$element.css('top', '')++    var affixType = 'affix' + (affix ? '-' + affix : '')+    var e         = $.Event(affixType + '.bs.affix')++    this.$element.trigger(e)++    if (e.isDefaultPrevented()) return++    this.affixed = affix+    this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null++    this.$element+      .removeClass(Affix.RESET)+      .addClass(affixType)+      .trigger($.Event(affixType.replace('affix', 'affixed')))++    if (affix == 'bottom') {+      this.$element.offset({+        top: scrollHeight - this.$element.height() - offsetBottom+      })+    }+  }+++  // AFFIX PLUGIN DEFINITION+  // =======================++  function Plugin(option) {+    return this.each(function () {+      var $this   = $(this)+      var data    = $this.data('bs.affix')+      var options = typeof option == 'object' && option++      if (!data) $this.data('bs.affix', (data = new Affix(this, options)))+      if (typeof option == 'string') data[option]()+    })+  }++  var old = $.fn.affix++  $.fn.affix             = Plugin+  $.fn.affix.Constructor = Affix+++  // AFFIX NO CONFLICT+  // =================++  $.fn.affix.noConflict = function () {+    $.fn.affix = old+    return this+  }+++  // AFFIX DATA-API+  // ==============++  $(window).on('load', function () {+    $('[data-spy="affix"]').each(function () {+      var $spy = $(this)+      var data = $spy.data()++      data.offset = data.offset || {}++      if (data.offsetBottom) data.offset.bottom = data.offsetBottom+      if (data.offsetTop)    data.offset.top    = data.offsetTop++      Plugin.call($spy, data)+    })+  })++}(jQuery);
+ static/js/bootstrap.min.js view
@@ -0,0 +1,6 @@+/*!+ * Bootstrap v3.2.0 (http://getbootstrap.com)+ * Copyright 2011-2014 Twitter, Inc.+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)+ */+if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.2.0",d.prototype.close=function(b){function c(){f.detach().trigger("closed.bs.alert").remove()}var d=a(this),e=d.attr("data-target");e||(e=d.attr("href"),e=e&&e.replace(/.*(?=#[^\s]*$)/,""));var f=a(e);b&&b.preventDefault(),f.length||(f=d.hasClass("alert")?d:d.parent()),f.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one("bsTransitionEnd",c).emulateTransitionEnd(150):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.2.0",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),d[e](null==f[b]?this.options[b]:f[b]),setTimeout(a.proxy(function(){"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}a&&this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),c.preventDefault()})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b).on("keydown.bs.carousel",a.proxy(this.keydown,this)),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,"hover"==this.options.pause&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.2.0",c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0},c.prototype.keydown=function(a){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.to=function(b){var c=this,d=this.getItemIndex(this.$active=this.$element.find(".item.active"));return b>this.$items.length-1||0>b?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){c.to(b)}):d==b?this.pause().cycle():this.slide(b>d?"next":"prev",a(this.$items[b]))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,c){var d=this.$element.find(".item.active"),e=c||d[b](),f=this.interval,g="next"==b?"left":"right",h="next"==b?"first":"last",i=this;if(!e.length){if(!this.options.wrap)return;e=this.$element.find(".item")[h]()}if(e.hasClass("active"))return this.sliding=!1;var j=e[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:g});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,f&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(e)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:g});return a.support.transition&&this.$element.hasClass("slide")?(e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),d.one("bsTransitionEnd",function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(1e3*d.css("transition-duration").slice(0,-1))):(d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger(m)),f&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this},a(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}}),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.collapse"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b);!e&&f.toggle&&"show"==b&&(b=!b),e||d.data("bs.collapse",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.transitioning=null,this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};c.VERSION="3.2.0",c.DEFAULTS={toggle:!0},c.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},c.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var c=a.Event("show.bs.collapse");if(this.$element.trigger(c),!c.isDefaultPrevented()){var d=this.$parent&&this.$parent.find("> .panel > .in");if(d&&d.length){var e=d.data("bs.collapse");if(e&&e.transitioning)return;b.call(d,"hide"),e||d.data("bs.collapse",null)}var f=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[f](0),this.transitioning=1;var g=function(){this.$element.removeClass("collapsing").addClass("collapse in")[f](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return g.call(this);var h=a.camelCase(["scroll",f].join("-"));this.$element.one("bsTransitionEnd",a.proxy(g,this)).emulateTransitionEnd(350)[f](this.$element[0][h])}}},c.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"),this.transitioning=1;var d=function(){this.transitioning=0,this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(d,this)).emulateTransitionEnd(350):d.call(this)}}},c.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};var d=a.fn.collapse;a.fn.collapse=b,a.fn.collapse.Constructor=c,a.fn.collapse.noConflict=function(){return a.fn.collapse=d,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(c){var d,e=a(this),f=e.attr("data-target")||c.preventDefault()||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""),g=a(f),h=g.data("bs.collapse"),i=h?"toggle":e.data(),j=e.attr("data-parent"),k=j&&a(j);h&&h.transitioning||(k&&k.find('[data-toggle="collapse"][data-parent="'+j+'"]').not(e).addClass("collapsed"),e[g.hasClass("in")?"addClass":"removeClass"]("collapsed")),b.call(g,i)})}(jQuery),+function(a){"use strict";function b(b){b&&3===b.which||(a(e).remove(),a(f).each(function(){var d=c(a(this)),e={relatedTarget:this};d.hasClass("open")&&(d.trigger(b=a.Event("hide.bs.dropdown",e)),b.isDefaultPrevented()||d.removeClass("open").trigger("hidden.bs.dropdown",e))}))}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.2.0",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click",b);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus"),f.toggleClass("open").trigger("shown.bs.dropdown",h)}return!1}},g.prototype.keydown=function(b){if(/(38|40|27)/.test(b.keyCode)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled")){var e=c(d),g=e.hasClass("open");if(!g||g&&27==b.keyCode)return 27==b.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.divider):visible a",i=e.find('[role="menu"]'+h+', [role="listbox"]'+h);if(i.length){var j=i.index(i.filter(":focus"));38==b.keyCode&&j>0&&j--,40==b.keyCode&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",b).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f+', [role="menu"], [role="listbox"]',g.prototype.keydown)}(jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$backdrop=this.isShown=null,this.scrollbarWidth=0,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.2.0",c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var c=this,d=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(d),this.isShown||d.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.$body.addClass("modal-open"),this.setScrollbar(),this.escape(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.backdrop(function(){var d=a.support.transition&&c.$element.hasClass("fade");c.$element.parent().length||c.$element.appendTo(c.$body),c.$element.show().scrollTop(0),d&&c.$element[0].offsetWidth,c.$element.addClass("in").attr("aria-hidden",!1),c.enforceFocus();var e=a.Event("shown.bs.modal",{relatedTarget:b});d?c.$element.find(".modal-dialog").one("bsTransitionEnd",function(){c.$element.trigger("focus").trigger(e)}).emulateTransitionEnd(300):c.$element.trigger("focus").trigger(e)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.$body.removeClass("modal-open"),this.resetScrollbar(),this.escape(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(300):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keyup.dismiss.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var c=this,d=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var e=a.support.transition&&d;if(this.$backdrop=a('<div class="modal-backdrop '+d+'" />').appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus.call(this.$element[0]):this.hide.call(this))},this)),e&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;e?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(150):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var f=function(){c.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",f).emulateTransitionEnd(150):f()}else b&&b()},c.prototype.checkScrollbar=function(){document.body.clientWidth>=window.innerWidth||(this.scrollbarWidth=this.scrollbarWidth||this.measureScrollbar())},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.scrollbarWidth&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right","")},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b;(e||"destroy"!=b)&&(e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",a,b)};c.VERSION="3.2.0",c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(this.options.viewport.selector||this.options.viewport);for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show()},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var c=a.contains(document.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!c)return;var d=this,e=this.tip(),f=this.getUID(this.type);this.setContent(),e.attr("id",f),this.$element.attr("aria-describedby",f),this.options.animation&&e.addClass("fade");var g="function"==typeof this.options.placement?this.options.placement.call(this,e[0],this.$element[0]):this.options.placement,h=/\s?auto?\s?/i,i=h.test(g);i&&(g=g.replace(h,"")||"top"),e.detach().css({top:0,left:0,display:"block"}).addClass(g).data("bs."+this.type,this),this.options.container?e.appendTo(this.options.container):e.insertAfter(this.$element);var j=this.getPosition(),k=e[0].offsetWidth,l=e[0].offsetHeight;if(i){var m=g,n=this.$element.parent(),o=this.getPosition(n);g="bottom"==g&&j.top+j.height+l-o.scroll>o.height?"top":"top"==g&&j.top-o.scroll-l<0?"bottom":"right"==g&&j.right+k>o.width?"left":"left"==g&&j.left-k<o.left?"right":g,e.removeClass(m).addClass(g)}var p=this.getCalculatedOffset(g,j,k,l);this.applyPlacement(p,g);var q=function(){d.$element.trigger("shown.bs."+d.type),d.hoverState=null};a.support.transition&&this.$tip.hasClass("fade")?e.one("bsTransitionEnd",q).emulateTransitionEnd(150):q()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top=b.top+g,b.left=b.left+h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=k.left?2*k.left-e+i:2*k.top-f+j,m=k.left?"left":"top",n=k.left?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(l,d[0][n],m)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c,a?50*(1-a/b)+"%":"")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(){function b(){"in"!=c.hoverState&&d.detach(),c.$element.trigger("hidden.bs."+c.type)}var c=this,d=this.tip(),e=a.Event("hide.bs."+this.type);return this.$element.removeAttr("aria-describedby"),this.$element.trigger(e),e.isDefaultPrevented()?void 0:(d.removeClass("in"),a.support.transition&&this.$tip.hasClass("fade")?d.one("bsTransitionEnd",b).emulateTransitionEnd(150):b(),this.hoverState=null,this)},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName;return a.extend({},"function"==typeof c.getBoundingClientRect?c.getBoundingClientRect():null,{scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop(),width:d?a(window).width():b.outerWidth(),height:d?a(window).height():b.outerHeight()},d?{top:0,left:0}:b.offset())},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.width&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.validate=function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){clearTimeout(this.timeout),this.hide().$element.off("."+this.type).removeData("bs."+this.type)};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;(e||"destroy"!=b)&&(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.2.0",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").empty()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},c.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){var e=a.proxy(this.process,this);this.$body=a("body"),this.$scrollElement=a(a(c).is("body")?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",e),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.2.0",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b="offset",c=0;a.isWindow(this.$scrollElement[0])||(b="position",c=this.$scrollElement.scrollTop()),this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight();var d=this;this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[b]().top+c,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){d.offsets.push(this[0]),d.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<=e[0])return g!=(a=f[0])&&this.activate(a);for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(!e[a+1]||b<=e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,a(this.selector).parentsUntil(this.options.target,".active").removeClass("active");var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.2.0",c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a")[0],f=a.Event("show.bs.tab",{relatedTarget:e});if(b.trigger(f),!f.isDefaultPrevented()){var g=a(d);this.activate(b.closest("li"),c),this.activate(g,g.parent(),function(){b.trigger({type:"shown.bs.tab",relatedTarget:e})})}}},c.prototype.activate=function(b,c,d){function e(){f.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),b.addClass("active"),g?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var f=c.find("> .active"),g=d&&a.support.transition&&f.hasClass("fade");g?f.one("bsTransitionEnd",e).emulateTransitionEnd(150):e(),f.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this},a(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(c){c.preventDefault(),b.call(a(this),"show")})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=this.unpin=this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.2.0",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=a(document).height(),d=this.$target.scrollTop(),e=this.$element.offset(),f=this.options.offset,g=f.top,h=f.bottom;"object"!=typeof f&&(h=g=f),"function"==typeof g&&(g=f.top(this.$element)),"function"==typeof h&&(h=f.bottom(this.$element));var i=null!=this.unpin&&d+this.unpin<=e.top?!1:null!=h&&e.top+this.$element.height()>=b-h?"bottom":null!=g&&g>=d?"top":!1;if(this.affixed!==i){null!=this.unpin&&this.$element.css("top","");var j="affix"+(i?"-"+i:""),k=a.Event(j+".bs.affix");this.$element.trigger(k),k.isDefaultPrevented()||(this.affixed=i,this.unpin="bottom"==i?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(j).trigger(a.Event(j.replace("affix","affixed"))),"bottom"==i&&this.$element.offset({top:b-this.$element.height()-h}))}}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},d.offsetBottom&&(d.offset.bottom=d.offsetBottom),d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery);
+ static/js/excanvas.js view
@@ -0,0 +1,1427 @@+// Copyright 2006 Google Inc.+//+// Licensed under the Apache License, Version 2.0 (the "License");+// you may not use this file except in compliance with the License.+// You may obtain a copy of the License at+//+//   http://www.apache.org/licenses/LICENSE-2.0+//+// Unless required by applicable law or agreed to in writing, software+// distributed under the License is distributed on an "AS IS" BASIS,+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.+// See the License for the specific language governing permissions and+// limitations under the License.+++// Known Issues:+//+// * Patterns only support repeat.+// * Radial gradient are not implemented. The VML version of these look very+//   different from the canvas one.+// * Clipping paths are not implemented.+// * Coordsize. The width and height attribute have higher priority than the+//   width and height style values which isn't correct.+// * Painting mode isn't implemented.+// * Canvas width/height should is using content-box by default. IE in+//   Quirks mode will draw the canvas using border-box. Either change your+//   doctype to HTML5+//   (http://www.whatwg.org/specs/web-apps/current-work/#the-doctype)+//   or use Box Sizing Behavior from WebFX+//   (http://webfx.eae.net/dhtml/boxsizing/boxsizing.html)+// * Non uniform scaling does not correctly scale strokes.+// * Filling very large shapes (above 5000 points) is buggy.+// * Optimize. There is always room for speed improvements.++// Only add this code if we do not already have a canvas implementation+if (!document.createElement('canvas').getContext) {++(function() {++  // alias some functions to make (compiled) code shorter+  var m = Math;+  var mr = m.round;+  var ms = m.sin;+  var mc = m.cos;+  var abs = m.abs;+  var sqrt = m.sqrt;++  // this is used for sub pixel precision+  var Z = 10;+  var Z2 = Z / 2;++  /**+   * This funtion is assigned to the <canvas> elements as element.getContext().+   * @this {HTMLElement}+   * @return {CanvasRenderingContext2D_}+   */+  function getContext() {+    return this.context_ ||+        (this.context_ = new CanvasRenderingContext2D_(this));+  }++  var slice = Array.prototype.slice;++  /**+   * Binds a function to an object. The returned function will always use the+   * passed in {@code obj} as {@code this}.+   *+   * Example:+   *+   *   g = bind(f, obj, a, b)+   *   g(c, d) // will do f.call(obj, a, b, c, d)+   *+   * @param {Function} f The function to bind the object to+   * @param {Object} obj The object that should act as this when the function+   *     is called+   * @param {*} var_args Rest arguments that will be used as the initial+   *     arguments when the function is called+   * @return {Function} A new function that has bound this+   */+  function bind(f, obj, var_args) {+    var a = slice.call(arguments, 2);+    return function() {+      return f.apply(obj, a.concat(slice.call(arguments)));+    };+  }++  function encodeHtmlAttribute(s) {+    return String(s).replace(/&/g, '&amp;').replace(/"/g, '&quot;');+  }++  function addNamespacesAndStylesheet(doc) {+    // create xmlns+    if (!doc.namespaces['g_vml_']) {+      doc.namespaces.add('g_vml_', 'urn:schemas-microsoft-com:vml',+                         '#default#VML');++    }+    if (!doc.namespaces['g_o_']) {+      doc.namespaces.add('g_o_', 'urn:schemas-microsoft-com:office:office',+                         '#default#VML');+    }++    // Setup default CSS.  Only add one style sheet per document+    if (!doc.styleSheets['ex_canvas_']) {+      var ss = doc.createStyleSheet();+      ss.owningElement.id = 'ex_canvas_';+      ss.cssText = 'canvas{display:inline-block;overflow:hidden;' ++          // default size is 300x150 in Gecko and Opera+          'text-align:left;width:300px;height:150px}';+    }+  }++  // Add namespaces and stylesheet at startup.+  addNamespacesAndStylesheet(document);++  var G_vmlCanvasManager_ = {+    init: function(opt_doc) {+      if (/MSIE/.test(navigator.userAgent) && !window.opera) {+        var doc = opt_doc || document;+        // Create a dummy element so that IE will allow canvas elements to be+        // recognized.+        doc.createElement('canvas');+        doc.attachEvent('onreadystatechange', bind(this.init_, this, doc));+      }+    },++    init_: function(doc) {+      // find all canvas elements+      var els = doc.getElementsByTagName('canvas');+      for (var i = 0; i < els.length; i++) {+        this.initElement(els[i]);+      }+    },++    /**+     * Public initializes a canvas element so that it can be used as canvas+     * element from now on. This is called automatically before the page is+     * loaded but if you are creating elements using createElement you need to+     * make sure this is called on the element.+     * @param {HTMLElement} el The canvas element to initialize.+     * @return {HTMLElement} the element that was created.+     */+    initElement: function(el) {+      if (!el.getContext) {+        el.getContext = getContext;++        // Add namespaces and stylesheet to document of the element.+        addNamespacesAndStylesheet(el.ownerDocument);++        // Remove fallback content. There is no way to hide text nodes so we+        // just remove all childNodes. We could hide all elements and remove+        // text nodes but who really cares about the fallback content.+        el.innerHTML = '';++        // do not use inline function because that will leak memory+        el.attachEvent('onpropertychange', onPropertyChange);+        el.attachEvent('onresize', onResize);++        var attrs = el.attributes;+        if (attrs.width && attrs.width.specified) {+          // TODO: use runtimeStyle and coordsize+          // el.getContext().setWidth_(attrs.width.nodeValue);+          el.style.width = attrs.width.nodeValue + 'px';+        } else {+          el.width = el.clientWidth;+        }+        if (attrs.height && attrs.height.specified) {+          // TODO: use runtimeStyle and coordsize+          // el.getContext().setHeight_(attrs.height.nodeValue);+          el.style.height = attrs.height.nodeValue + 'px';+        } else {+          el.height = el.clientHeight;+        }+        //el.getContext().setCoordsize_()+      }+      return el;+    }+  };++  function onPropertyChange(e) {+    var el = e.srcElement;++    switch (e.propertyName) {+      case 'width':+        el.getContext().clearRect();+        el.style.width = el.attributes.width.nodeValue + 'px';+        // In IE8 this does not trigger onresize.+        el.firstChild.style.width =  el.clientWidth + 'px';+        break;+      case 'height':+        el.getContext().clearRect();+        el.style.height = el.attributes.height.nodeValue + 'px';+        el.firstChild.style.height = el.clientHeight + 'px';+        break;+    }+  }++  function onResize(e) {+    var el = e.srcElement;+    if (el.firstChild) {+      el.firstChild.style.width =  el.clientWidth + 'px';+      el.firstChild.style.height = el.clientHeight + 'px';+    }+  }++  G_vmlCanvasManager_.init();++  // precompute "00" to "FF"+  var decToHex = [];+  for (var i = 0; i < 16; i++) {+    for (var j = 0; j < 16; j++) {+      decToHex[i * 16 + j] = i.toString(16) + j.toString(16);+    }+  }++  function createMatrixIdentity() {+    return [+      [1, 0, 0],+      [0, 1, 0],+      [0, 0, 1]+    ];+  }++  function matrixMultiply(m1, m2) {+    var result = createMatrixIdentity();++    for (var x = 0; x < 3; x++) {+      for (var y = 0; y < 3; y++) {+        var sum = 0;++        for (var z = 0; z < 3; z++) {+          sum += m1[x][z] * m2[z][y];+        }++        result[x][y] = sum;+      }+    }+    return result;+  }++  function copyState(o1, o2) {+    o2.fillStyle     = o1.fillStyle;+    o2.lineCap       = o1.lineCap;+    o2.lineJoin      = o1.lineJoin;+    o2.lineWidth     = o1.lineWidth;+    o2.miterLimit    = o1.miterLimit;+    o2.shadowBlur    = o1.shadowBlur;+    o2.shadowColor   = o1.shadowColor;+    o2.shadowOffsetX = o1.shadowOffsetX;+    o2.shadowOffsetY = o1.shadowOffsetY;+    o2.strokeStyle   = o1.strokeStyle;+    o2.globalAlpha   = o1.globalAlpha;+    o2.font          = o1.font;+    o2.textAlign     = o1.textAlign;+    o2.textBaseline  = o1.textBaseline;+    o2.arcScaleX_    = o1.arcScaleX_;+    o2.arcScaleY_    = o1.arcScaleY_;+    o2.lineScale_    = o1.lineScale_;+  }++  var colorData = {+    aliceblue: '#F0F8FF',+    antiquewhite: '#FAEBD7',+    aquamarine: '#7FFFD4',+    azure: '#F0FFFF',+    beige: '#F5F5DC',+    bisque: '#FFE4C4',+    black: '#000000',+    blanchedalmond: '#FFEBCD',+    blueviolet: '#8A2BE2',+    brown: '#A52A2A',+    burlywood: '#DEB887',+    cadetblue: '#5F9EA0',+    chartreuse: '#7FFF00',+    chocolate: '#D2691E',+    coral: '#FF7F50',+    cornflowerblue: '#6495ED',+    cornsilk: '#FFF8DC',+    crimson: '#DC143C',+    cyan: '#00FFFF',+    darkblue: '#00008B',+    darkcyan: '#008B8B',+    darkgoldenrod: '#B8860B',+    darkgray: '#A9A9A9',+    darkgreen: '#006400',+    darkgrey: '#A9A9A9',+    darkkhaki: '#BDB76B',+    darkmagenta: '#8B008B',+    darkolivegreen: '#556B2F',+    darkorange: '#FF8C00',+    darkorchid: '#9932CC',+    darkred: '#8B0000',+    darksalmon: '#E9967A',+    darkseagreen: '#8FBC8F',+    darkslateblue: '#483D8B',+    darkslategray: '#2F4F4F',+    darkslategrey: '#2F4F4F',+    darkturquoise: '#00CED1',+    darkviolet: '#9400D3',+    deeppink: '#FF1493',+    deepskyblue: '#00BFFF',+    dimgray: '#696969',+    dimgrey: '#696969',+    dodgerblue: '#1E90FF',+    firebrick: '#B22222',+    floralwhite: '#FFFAF0',+    forestgreen: '#228B22',+    gainsboro: '#DCDCDC',+    ghostwhite: '#F8F8FF',+    gold: '#FFD700',+    goldenrod: '#DAA520',+    grey: '#808080',+    greenyellow: '#ADFF2F',+    honeydew: '#F0FFF0',+    hotpink: '#FF69B4',+    indianred: '#CD5C5C',+    indigo: '#4B0082',+    ivory: '#FFFFF0',+    khaki: '#F0E68C',+    lavender: '#E6E6FA',+    lavenderblush: '#FFF0F5',+    lawngreen: '#7CFC00',+    lemonchiffon: '#FFFACD',+    lightblue: '#ADD8E6',+    lightcoral: '#F08080',+    lightcyan: '#E0FFFF',+    lightgoldenrodyellow: '#FAFAD2',+    lightgreen: '#90EE90',+    lightgrey: '#D3D3D3',+    lightpink: '#FFB6C1',+    lightsalmon: '#FFA07A',+    lightseagreen: '#20B2AA',+    lightskyblue: '#87CEFA',+    lightslategray: '#778899',+    lightslategrey: '#778899',+    lightsteelblue: '#B0C4DE',+    lightyellow: '#FFFFE0',+    limegreen: '#32CD32',+    linen: '#FAF0E6',+    magenta: '#FF00FF',+    mediumaquamarine: '#66CDAA',+    mediumblue: '#0000CD',+    mediumorchid: '#BA55D3',+    mediumpurple: '#9370DB',+    mediumseagreen: '#3CB371',+    mediumslateblue: '#7B68EE',+    mediumspringgreen: '#00FA9A',+    mediumturquoise: '#48D1CC',+    mediumvioletred: '#C71585',+    midnightblue: '#191970',+    mintcream: '#F5FFFA',+    mistyrose: '#FFE4E1',+    moccasin: '#FFE4B5',+    navajowhite: '#FFDEAD',+    oldlace: '#FDF5E6',+    olivedrab: '#6B8E23',+    orange: '#FFA500',+    orangered: '#FF4500',+    orchid: '#DA70D6',+    palegoldenrod: '#EEE8AA',+    palegreen: '#98FB98',+    paleturquoise: '#AFEEEE',+    palevioletred: '#DB7093',+    papayawhip: '#FFEFD5',+    peachpuff: '#FFDAB9',+    peru: '#CD853F',+    pink: '#FFC0CB',+    plum: '#DDA0DD',+    powderblue: '#B0E0E6',+    rosybrown: '#BC8F8F',+    royalblue: '#4169E1',+    saddlebrown: '#8B4513',+    salmon: '#FA8072',+    sandybrown: '#F4A460',+    seagreen: '#2E8B57',+    seashell: '#FFF5EE',+    sienna: '#A0522D',+    skyblue: '#87CEEB',+    slateblue: '#6A5ACD',+    slategray: '#708090',+    slategrey: '#708090',+    snow: '#FFFAFA',+    springgreen: '#00FF7F',+    steelblue: '#4682B4',+    tan: '#D2B48C',+    thistle: '#D8BFD8',+    tomato: '#FF6347',+    turquoise: '#40E0D0',+    violet: '#EE82EE',+    wheat: '#F5DEB3',+    whitesmoke: '#F5F5F5',+    yellowgreen: '#9ACD32'+  };+++  function getRgbHslContent(styleString) {+    var start = styleString.indexOf('(', 3);+    var end = styleString.indexOf(')', start + 1);+    var parts = styleString.substring(start + 1, end).split(',');+    // add alpha if needed+    if (parts.length == 4 && styleString.substr(3, 1) == 'a') {+      alpha = Number(parts[3]);+    } else {+      parts[3] = 1;+    }+    return parts;+  }++  function percent(s) {+    return parseFloat(s) / 100;+  }++  function clamp(v, min, max) {+    return Math.min(max, Math.max(min, v));+  }++  function hslToRgb(parts){+    var r, g, b;+    h = parseFloat(parts[0]) / 360 % 360;+    if (h < 0)+      h++;+    s = clamp(percent(parts[1]), 0, 1);+    l = clamp(percent(parts[2]), 0, 1);+    if (s == 0) {+      r = g = b = l; // achromatic+    } else {+      var q = l < 0.5 ? l * (1 + s) : l + s - l * s;+      var p = 2 * l - q;+      r = hueToRgb(p, q, h + 1 / 3);+      g = hueToRgb(p, q, h);+      b = hueToRgb(p, q, h - 1 / 3);+    }++    return '#' + decToHex[Math.floor(r * 255)] ++        decToHex[Math.floor(g * 255)] ++        decToHex[Math.floor(b * 255)];+  }++  function hueToRgb(m1, m2, h) {+    if (h < 0)+      h++;+    if (h > 1)+      h--;++    if (6 * h < 1)+      return m1 + (m2 - m1) * 6 * h;+    else if (2 * h < 1)+      return m2;+    else if (3 * h < 2)+      return m1 + (m2 - m1) * (2 / 3 - h) * 6;+    else+      return m1;+  }++  function processStyle(styleString) {+    var str, alpha = 1;++    styleString = String(styleString);+    if (styleString.charAt(0) == '#') {+      str = styleString;+    } else if (/^rgb/.test(styleString)) {+      var parts = getRgbHslContent(styleString);+      var str = '#', n;+      for (var i = 0; i < 3; i++) {+        if (parts[i].indexOf('%') != -1) {+          n = Math.floor(percent(parts[i]) * 255);+        } else {+          n = Number(parts[i]);+        }+        str += decToHex[clamp(n, 0, 255)];+      }+      alpha = parts[3];+    } else if (/^hsl/.test(styleString)) {+      var parts = getRgbHslContent(styleString);+      str = hslToRgb(parts);+      alpha = parts[3];+    } else {+      str = colorData[styleString] || styleString;+    }+    return {color: str, alpha: alpha};+  }++  var DEFAULT_STYLE = {+    style: 'normal',+    variant: 'normal',+    weight: 'normal',+    size: 10,+    family: 'sans-serif'+  };++  // Internal text style cache+  var fontStyleCache = {};++  function processFontStyle(styleString) {+    if (fontStyleCache[styleString]) {+      return fontStyleCache[styleString];+    }++    var el = document.createElement('div');+    var style = el.style;+    try {+      style.font = styleString;+    } catch (ex) {+      // Ignore failures to set to invalid font.+    }++    return fontStyleCache[styleString] = {+      style: style.fontStyle || DEFAULT_STYLE.style,+      variant: style.fontVariant || DEFAULT_STYLE.variant,+      weight: style.fontWeight || DEFAULT_STYLE.weight,+      size: style.fontSize || DEFAULT_STYLE.size,+      family: style.fontFamily || DEFAULT_STYLE.family+    };+  }++  function getComputedStyle(style, element) {+    var computedStyle = {};++    for (var p in style) {+      computedStyle[p] = style[p];+    }++    // Compute the size+    var canvasFontSize = parseFloat(element.currentStyle.fontSize),+        fontSize = parseFloat(style.size);++    if (typeof style.size == 'number') {+      computedStyle.size = style.size;+    } else if (style.size.indexOf('px') != -1) {+      computedStyle.size = fontSize;+    } else if (style.size.indexOf('em') != -1) {+      computedStyle.size = canvasFontSize * fontSize;+    } else if(style.size.indexOf('%') != -1) {+      computedStyle.size = (canvasFontSize / 100) * fontSize;+    } else if (style.size.indexOf('pt') != -1) {+      computedStyle.size = fontSize / .75;+    } else {+      computedStyle.size = canvasFontSize;+    }++    // Different scaling between normal text and VML text. This was found using+    // trial and error to get the same size as non VML text.+    computedStyle.size *= 0.981;++    return computedStyle;+  }++  function buildStyle(style) {+    return style.style + ' ' + style.variant + ' ' + style.weight + ' ' ++        style.size + 'px ' + style.family;+  }++  function processLineCap(lineCap) {+    switch (lineCap) {+      case 'butt':+        return 'flat';+      case 'round':+        return 'round';+      case 'square':+      default:+        return 'square';+    }+  }++  /**+   * This class implements CanvasRenderingContext2D interface as described by+   * the WHATWG.+   * @param {HTMLElement} surfaceElement The element that the 2D context should+   * be associated with+   */+  function CanvasRenderingContext2D_(surfaceElement) {+    this.m_ = createMatrixIdentity();++    this.mStack_ = [];+    this.aStack_ = [];+    this.currentPath_ = [];++    // Canvas context properties+    this.strokeStyle = '#000';+    this.fillStyle = '#000';++    this.lineWidth = 1;+    this.lineJoin = 'miter';+    this.lineCap = 'butt';+    this.miterLimit = Z * 1;+    this.globalAlpha = 1;+    this.font = '10px sans-serif';+    this.textAlign = 'left';+    this.textBaseline = 'alphabetic';+    this.canvas = surfaceElement;++    var el = surfaceElement.ownerDocument.createElement('div');+    el.style.width =  surfaceElement.clientWidth + 'px';+    el.style.height = surfaceElement.clientHeight + 'px';+    el.style.overflow = 'hidden';+    el.style.position = 'absolute';+    surfaceElement.appendChild(el);++    this.element_ = el;+    this.arcScaleX_ = 1;+    this.arcScaleY_ = 1;+    this.lineScale_ = 1;+  }++  var contextPrototype = CanvasRenderingContext2D_.prototype;+  contextPrototype.clearRect = function() {+    if (this.textMeasureEl_) {+      this.textMeasureEl_.removeNode(true);+      this.textMeasureEl_ = null;+    }+    this.element_.innerHTML = '';+  };++  contextPrototype.beginPath = function() {+    // TODO: Branch current matrix so that save/restore has no effect+    //       as per safari docs.+    this.currentPath_ = [];+  };++  contextPrototype.moveTo = function(aX, aY) {+    var p = this.getCoords_(aX, aY);+    this.currentPath_.push({type: 'moveTo', x: p.x, y: p.y});+    this.currentX_ = p.x;+    this.currentY_ = p.y;+  };++  contextPrototype.lineTo = function(aX, aY) {+    var p = this.getCoords_(aX, aY);+    this.currentPath_.push({type: 'lineTo', x: p.x, y: p.y});++    this.currentX_ = p.x;+    this.currentY_ = p.y;+  };++  contextPrototype.bezierCurveTo = function(aCP1x, aCP1y,+                                            aCP2x, aCP2y,+                                            aX, aY) {+    var p = this.getCoords_(aX, aY);+    var cp1 = this.getCoords_(aCP1x, aCP1y);+    var cp2 = this.getCoords_(aCP2x, aCP2y);+    bezierCurveTo(this, cp1, cp2, p);+  };++  // Helper function that takes the already fixed cordinates.+  function bezierCurveTo(self, cp1, cp2, p) {+    self.currentPath_.push({+      type: 'bezierCurveTo',+      cp1x: cp1.x,+      cp1y: cp1.y,+      cp2x: cp2.x,+      cp2y: cp2.y,+      x: p.x,+      y: p.y+    });+    self.currentX_ = p.x;+    self.currentY_ = p.y;+  }++  contextPrototype.quadraticCurveTo = function(aCPx, aCPy, aX, aY) {+    // the following is lifted almost directly from+    // http://developer.mozilla.org/en/docs/Canvas_tutorial:Drawing_shapes++    var cp = this.getCoords_(aCPx, aCPy);+    var p = this.getCoords_(aX, aY);++    var cp1 = {+      x: this.currentX_ + 2.0 / 3.0 * (cp.x - this.currentX_),+      y: this.currentY_ + 2.0 / 3.0 * (cp.y - this.currentY_)+    };+    var cp2 = {+      x: cp1.x + (p.x - this.currentX_) / 3.0,+      y: cp1.y + (p.y - this.currentY_) / 3.0+    };++    bezierCurveTo(this, cp1, cp2, p);+  };++  contextPrototype.arc = function(aX, aY, aRadius,+                                  aStartAngle, aEndAngle, aClockwise) {+    aRadius *= Z;+    var arcType = aClockwise ? 'at' : 'wa';++    var xStart = aX + mc(aStartAngle) * aRadius - Z2;+    var yStart = aY + ms(aStartAngle) * aRadius - Z2;++    var xEnd = aX + mc(aEndAngle) * aRadius - Z2;+    var yEnd = aY + ms(aEndAngle) * aRadius - Z2;++    // IE won't render arches drawn counter clockwise if xStart == xEnd.+    if (xStart == xEnd && !aClockwise) {+      xStart += 0.125; // Offset xStart by 1/80 of a pixel. Use something+                       // that can be represented in binary+    }++    var p = this.getCoords_(aX, aY);+    var pStart = this.getCoords_(xStart, yStart);+    var pEnd = this.getCoords_(xEnd, yEnd);++    this.currentPath_.push({type: arcType,+                           x: p.x,+                           y: p.y,+                           radius: aRadius,+                           xStart: pStart.x,+                           yStart: pStart.y,+                           xEnd: pEnd.x,+                           yEnd: pEnd.y});++  };++  contextPrototype.rect = function(aX, aY, aWidth, aHeight) {+    this.moveTo(aX, aY);+    this.lineTo(aX + aWidth, aY);+    this.lineTo(aX + aWidth, aY + aHeight);+    this.lineTo(aX, aY + aHeight);+    this.closePath();+  };++  contextPrototype.strokeRect = function(aX, aY, aWidth, aHeight) {+    var oldPath = this.currentPath_;+    this.beginPath();++    this.moveTo(aX, aY);+    this.lineTo(aX + aWidth, aY);+    this.lineTo(aX + aWidth, aY + aHeight);+    this.lineTo(aX, aY + aHeight);+    this.closePath();+    this.stroke();++    this.currentPath_ = oldPath;+  };++  contextPrototype.fillRect = function(aX, aY, aWidth, aHeight) {+    var oldPath = this.currentPath_;+    this.beginPath();++    this.moveTo(aX, aY);+    this.lineTo(aX + aWidth, aY);+    this.lineTo(aX + aWidth, aY + aHeight);+    this.lineTo(aX, aY + aHeight);+    this.closePath();+    this.fill();++    this.currentPath_ = oldPath;+  };++  contextPrototype.createLinearGradient = function(aX0, aY0, aX1, aY1) {+    var gradient = new CanvasGradient_('gradient');+    gradient.x0_ = aX0;+    gradient.y0_ = aY0;+    gradient.x1_ = aX1;+    gradient.y1_ = aY1;+    return gradient;+  };++  contextPrototype.createRadialGradient = function(aX0, aY0, aR0,+                                                   aX1, aY1, aR1) {+    var gradient = new CanvasGradient_('gradientradial');+    gradient.x0_ = aX0;+    gradient.y0_ = aY0;+    gradient.r0_ = aR0;+    gradient.x1_ = aX1;+    gradient.y1_ = aY1;+    gradient.r1_ = aR1;+    return gradient;+  };++  contextPrototype.drawImage = function(image, var_args) {+    var dx, dy, dw, dh, sx, sy, sw, sh;++    // to find the original width we overide the width and height+    var oldRuntimeWidth = image.runtimeStyle.width;+    var oldRuntimeHeight = image.runtimeStyle.height;+    image.runtimeStyle.width = 'auto';+    image.runtimeStyle.height = 'auto';++    // get the original size+    var w = image.width;+    var h = image.height;++    // and remove overides+    image.runtimeStyle.width = oldRuntimeWidth;+    image.runtimeStyle.height = oldRuntimeHeight;++    if (arguments.length == 3) {+      dx = arguments[1];+      dy = arguments[2];+      sx = sy = 0;+      sw = dw = w;+      sh = dh = h;+    } else if (arguments.length == 5) {+      dx = arguments[1];+      dy = arguments[2];+      dw = arguments[3];+      dh = arguments[4];+      sx = sy = 0;+      sw = w;+      sh = h;+    } else if (arguments.length == 9) {+      sx = arguments[1];+      sy = arguments[2];+      sw = arguments[3];+      sh = arguments[4];+      dx = arguments[5];+      dy = arguments[6];+      dw = arguments[7];+      dh = arguments[8];+    } else {+      throw Error('Invalid number of arguments');+    }++    var d = this.getCoords_(dx, dy);++    var w2 = sw / 2;+    var h2 = sh / 2;++    var vmlStr = [];++    var W = 10;+    var H = 10;++    // For some reason that I've now forgotten, using divs didn't work+    vmlStr.push(' <g_vml_:group',+                ' coordsize="', Z * W, ',', Z * H, '"',+                ' coordorigin="0,0"' ,+                ' style="width:', W, 'px;height:', H, 'px;position:absolute;');++    // If filters are necessary (rotation exists), create them+    // filters are bog-slow, so only create them if abbsolutely necessary+    // The following check doesn't account for skews (which don't exist+    // in the canvas spec (yet) anyway.++    if (this.m_[0][0] != 1 || this.m_[0][1] ||+        this.m_[1][1] != 1 || this.m_[1][0]) {+      var filter = [];++      // Note the 12/21 reversal+      filter.push('M11=', this.m_[0][0], ',',+                  'M12=', this.m_[1][0], ',',+                  'M21=', this.m_[0][1], ',',+                  'M22=', this.m_[1][1], ',',+                  'Dx=', mr(d.x / Z), ',',+                  'Dy=', mr(d.y / Z), '');++      // Bounding box calculation (need to minimize displayed area so that+      // filters don't waste time on unused pixels.+      var max = d;+      var c2 = this.getCoords_(dx + dw, dy);+      var c3 = this.getCoords_(dx, dy + dh);+      var c4 = this.getCoords_(dx + dw, dy + dh);++      max.x = m.max(max.x, c2.x, c3.x, c4.x);+      max.y = m.max(max.y, c2.y, c3.y, c4.y);++      vmlStr.push('padding:0 ', mr(max.x / Z), 'px ', mr(max.y / Z),+                  'px 0;filter:progid:DXImageTransform.Microsoft.Matrix(',+                  filter.join(''), ", sizingmethod='clip');");++    } else {+      vmlStr.push('top:', mr(d.y / Z), 'px;left:', mr(d.x / Z), 'px;');+    }++    vmlStr.push(' ">' ,+                '<g_vml_:image src="', image.src, '"',+                ' style="width:', Z * dw, 'px;',+                ' height:', Z * dh, 'px"',+                ' cropleft="', sx / w, '"',+                ' croptop="', sy / h, '"',+                ' cropright="', (w - sx - sw) / w, '"',+                ' cropbottom="', (h - sy - sh) / h, '"',+                ' />',+                '</g_vml_:group>');++    this.element_.insertAdjacentHTML('BeforeEnd', vmlStr.join(''));+  };++  contextPrototype.stroke = function(aFill) {+    var W = 10;+    var H = 10;+    // Divide the shape into chunks if it's too long because IE has a limit+    // somewhere for how long a VML shape can be. This simple division does+    // not work with fills, only strokes, unfortunately.+    var chunkSize = 5000;++    var min = {x: null, y: null};+    var max = {x: null, y: null};++    for (var j = 0; j < this.currentPath_.length; j += chunkSize) {+      var lineStr = [];+      var lineOpen = false;++      lineStr.push('<g_vml_:shape',+                   ' filled="', !!aFill, '"',+                   ' style="position:absolute;width:', W, 'px;height:', H, 'px;"',+                   ' coordorigin="0,0"',+                   ' coordsize="', Z * W, ',', Z * H, '"',+                   ' stroked="', !aFill, '"',+                   ' path="');++      var newSeq = false;++      for (var i = j; i < Math.min(j + chunkSize, this.currentPath_.length); i++) {+        if (i % chunkSize == 0 && i > 0) { // move into position for next chunk+          lineStr.push(' m ', mr(this.currentPath_[i-1].x), ',', mr(this.currentPath_[i-1].y));+        }++        var p = this.currentPath_[i];+        var c;++        switch (p.type) {+          case 'moveTo':+            c = p;+            lineStr.push(' m ', mr(p.x), ',', mr(p.y));+            break;+          case 'lineTo':+            lineStr.push(' l ', mr(p.x), ',', mr(p.y));+            break;+          case 'close':+            lineStr.push(' x ');+            p = null;+            break;+          case 'bezierCurveTo':+            lineStr.push(' c ',+                         mr(p.cp1x), ',', mr(p.cp1y), ',',+                         mr(p.cp2x), ',', mr(p.cp2y), ',',+                         mr(p.x), ',', mr(p.y));+            break;+          case 'at':+          case 'wa':+            lineStr.push(' ', p.type, ' ',+                         mr(p.x - this.arcScaleX_ * p.radius), ',',+                         mr(p.y - this.arcScaleY_ * p.radius), ' ',+                         mr(p.x + this.arcScaleX_ * p.radius), ',',+                         mr(p.y + this.arcScaleY_ * p.radius), ' ',+                         mr(p.xStart), ',', mr(p.yStart), ' ',+                         mr(p.xEnd), ',', mr(p.yEnd));+            break;+        }+  +  +        // TODO: Following is broken for curves due to+        //       move to proper paths.+  +        // Figure out dimensions so we can do gradient fills+        // properly+        if (p) {+          if (min.x == null || p.x < min.x) {+            min.x = p.x;+          }+          if (max.x == null || p.x > max.x) {+            max.x = p.x;+          }+          if (min.y == null || p.y < min.y) {+            min.y = p.y;+          }+          if (max.y == null || p.y > max.y) {+            max.y = p.y;+          }+        }+      }+      lineStr.push(' ">');+  +      if (!aFill) {+        appendStroke(this, lineStr);+      } else {+        appendFill(this, lineStr, min, max);+      }+  +      lineStr.push('</g_vml_:shape>');+  +      this.element_.insertAdjacentHTML('beforeEnd', lineStr.join(''));+    }+  };++  function appendStroke(ctx, lineStr) {+    var a = processStyle(ctx.strokeStyle);+    var color = a.color;+    var opacity = a.alpha * ctx.globalAlpha;+    var lineWidth = ctx.lineScale_ * ctx.lineWidth;++    // VML cannot correctly render a line if the width is less than 1px.+    // In that case, we dilute the color to make the line look thinner.+    if (lineWidth < 1) {+      opacity *= lineWidth;+    }++    lineStr.push(+      '<g_vml_:stroke',+      ' opacity="', opacity, '"',+      ' joinstyle="', ctx.lineJoin, '"',+      ' miterlimit="', ctx.miterLimit, '"',+      ' endcap="', processLineCap(ctx.lineCap), '"',+      ' weight="', lineWidth, 'px"',+      ' color="', color, '" />'+    );+  }++  function appendFill(ctx, lineStr, min, max) {+    var fillStyle = ctx.fillStyle;+    var arcScaleX = ctx.arcScaleX_;+    var arcScaleY = ctx.arcScaleY_;+    var width = max.x - min.x;+    var height = max.y - min.y;+    if (fillStyle instanceof CanvasGradient_) {+      // TODO: Gradients transformed with the transformation matrix.+      var angle = 0;+      var focus = {x: 0, y: 0};++      // additional offset+      var shift = 0;+      // scale factor for offset+      var expansion = 1;++      if (fillStyle.type_ == 'gradient') {+        var x0 = fillStyle.x0_ / arcScaleX;+        var y0 = fillStyle.y0_ / arcScaleY;+        var x1 = fillStyle.x1_ / arcScaleX;+        var y1 = fillStyle.y1_ / arcScaleY;+        var p0 = ctx.getCoords_(x0, y0);+        var p1 = ctx.getCoords_(x1, y1);+        var dx = p1.x - p0.x;+        var dy = p1.y - p0.y;+        angle = Math.atan2(dx, dy) * 180 / Math.PI;++        // The angle should be a non-negative number.+        if (angle < 0) {+          angle += 360;+        }++        // Very small angles produce an unexpected result because they are+        // converted to a scientific notation string.+        if (angle < 1e-6) {+          angle = 0;+        }+      } else {+        var p0 = ctx.getCoords_(fillStyle.x0_, fillStyle.y0_);+        focus = {+          x: (p0.x - min.x) / width,+          y: (p0.y - min.y) / height+        };++        width  /= arcScaleX * Z;+        height /= arcScaleY * Z;+        var dimension = m.max(width, height);+        shift = 2 * fillStyle.r0_ / dimension;+        expansion = 2 * fillStyle.r1_ / dimension - shift;+      }++      // We need to sort the color stops in ascending order by offset,+      // otherwise IE won't interpret it correctly.+      var stops = fillStyle.colors_;+      stops.sort(function(cs1, cs2) {+        return cs1.offset - cs2.offset;+      });++      var length = stops.length;+      var color1 = stops[0].color;+      var color2 = stops[length - 1].color;+      var opacity1 = stops[0].alpha * ctx.globalAlpha;+      var opacity2 = stops[length - 1].alpha * ctx.globalAlpha;++      var colors = [];+      for (var i = 0; i < length; i++) {+        var stop = stops[i];+        colors.push(stop.offset * expansion + shift + ' ' + stop.color);+      }++      // When colors attribute is used, the meanings of opacity and o:opacity2+      // are reversed.+      lineStr.push('<g_vml_:fill type="', fillStyle.type_, '"',+                   ' method="none" focus="100%"',+                   ' color="', color1, '"',+                   ' color2="', color2, '"',+                   ' colors="', colors.join(','), '"',+                   ' opacity="', opacity2, '"',+                   ' g_o_:opacity2="', opacity1, '"',+                   ' angle="', angle, '"',+                   ' focusposition="', focus.x, ',', focus.y, '" />');+    } else if (fillStyle instanceof CanvasPattern_) {+      if (width && height) {+        var deltaLeft = -min.x;+        var deltaTop = -min.y;+        lineStr.push('<g_vml_:fill',+                     ' position="',+                     deltaLeft / width * arcScaleX * arcScaleX, ',',+                     deltaTop / height * arcScaleY * arcScaleY, '"',+                     ' type="tile"',+                     // TODO: Figure out the correct size to fit the scale.+                     //' size="', w, 'px ', h, 'px"',+                     ' src="', fillStyle.src_, '" />');+       }+    } else {+      var a = processStyle(ctx.fillStyle);+      var color = a.color;+      var opacity = a.alpha * ctx.globalAlpha;+      lineStr.push('<g_vml_:fill color="', color, '" opacity="', opacity,+                   '" />');+    }+  }++  contextPrototype.fill = function() {+    this.stroke(true);+  };++  contextPrototype.closePath = function() {+    this.currentPath_.push({type: 'close'});+  };++  /**+   * @private+   */+  contextPrototype.getCoords_ = function(aX, aY) {+    var m = this.m_;+    return {+      x: Z * (aX * m[0][0] + aY * m[1][0] + m[2][0]) - Z2,+      y: Z * (aX * m[0][1] + aY * m[1][1] + m[2][1]) - Z2+    };+  };++  contextPrototype.save = function() {+    var o = {};+    copyState(this, o);+    this.aStack_.push(o);+    this.mStack_.push(this.m_);+    this.m_ = matrixMultiply(createMatrixIdentity(), this.m_);+  };++  contextPrototype.restore = function() {+    if (this.aStack_.length) {+      copyState(this.aStack_.pop(), this);+      this.m_ = this.mStack_.pop();+    }+  };++  function matrixIsFinite(m) {+    return isFinite(m[0][0]) && isFinite(m[0][1]) &&+        isFinite(m[1][0]) && isFinite(m[1][1]) &&+        isFinite(m[2][0]) && isFinite(m[2][1]);+  }++  function setM(ctx, m, updateLineScale) {+    if (!matrixIsFinite(m)) {+      return;+    }+    ctx.m_ = m;++    if (updateLineScale) {+      // Get the line scale.+      // Determinant of this.m_ means how much the area is enlarged by the+      // transformation. So its square root can be used as a scale factor+      // for width.+      var det = m[0][0] * m[1][1] - m[0][1] * m[1][0];+      ctx.lineScale_ = sqrt(abs(det));+    }+  }++  contextPrototype.translate = function(aX, aY) {+    var m1 = [+      [1,  0,  0],+      [0,  1,  0],+      [aX, aY, 1]+    ];++    setM(this, matrixMultiply(m1, this.m_), false);+  };++  contextPrototype.rotate = function(aRot) {+    var c = mc(aRot);+    var s = ms(aRot);++    var m1 = [+      [c,  s, 0],+      [-s, c, 0],+      [0,  0, 1]+    ];++    setM(this, matrixMultiply(m1, this.m_), false);+  };++  contextPrototype.scale = function(aX, aY) {+    this.arcScaleX_ *= aX;+    this.arcScaleY_ *= aY;+    var m1 = [+      [aX, 0,  0],+      [0,  aY, 0],+      [0,  0,  1]+    ];++    setM(this, matrixMultiply(m1, this.m_), true);+  };++  contextPrototype.transform = function(m11, m12, m21, m22, dx, dy) {+    var m1 = [+      [m11, m12, 0],+      [m21, m22, 0],+      [dx,  dy,  1]+    ];++    setM(this, matrixMultiply(m1, this.m_), true);+  };++  contextPrototype.setTransform = function(m11, m12, m21, m22, dx, dy) {+    var m = [+      [m11, m12, 0],+      [m21, m22, 0],+      [dx,  dy,  1]+    ];++    setM(this, m, true);+  };++  /**+   * The text drawing function.+   * The maxWidth argument isn't taken in account, since no browser supports+   * it yet.+   */+  contextPrototype.drawText_ = function(text, x, y, maxWidth, stroke) {+    var m = this.m_,+        delta = 1000,+        left = 0,+        right = delta,+        offset = {x: 0, y: 0},+        lineStr = [];++    var fontStyle = getComputedStyle(processFontStyle(this.font),+                                     this.element_);++    var fontStyleString = buildStyle(fontStyle);++    var elementStyle = this.element_.currentStyle;+    var textAlign = this.textAlign.toLowerCase();+    switch (textAlign) {+      case 'left':+      case 'center':+      case 'right':+        break;+      case 'end':+        textAlign = elementStyle.direction == 'ltr' ? 'right' : 'left';+        break;+      case 'start':+        textAlign = elementStyle.direction == 'rtl' ? 'right' : 'left';+        break;+      default:+        textAlign = 'left';+    }++    // 1.75 is an arbitrary number, as there is no info about the text baseline+    switch (this.textBaseline) {+      case 'hanging':+      case 'top':+        offset.y = fontStyle.size / 1.75;+        break;+      case 'middle':+        break;+      default:+      case null:+      case 'alphabetic':+      case 'ideographic':+      case 'bottom':+        offset.y = -fontStyle.size / 2.25;+        break;+    }++    switch(textAlign) {+      case 'right':+        left = delta;+        right = 0.05;+        break;+      case 'center':+        left = right = delta / 2;+        break;+    }++    var d = this.getCoords_(x + offset.x, y + offset.y);++    lineStr.push('<g_vml_:line from="', -left ,' 0" to="', right ,' 0.05" ',+                 ' coordsize="100 100" coordorigin="0 0"',+                 ' filled="', !stroke, '" stroked="', !!stroke,+                 '" style="position:absolute;width:1px;height:1px;">');++    if (stroke) {+      appendStroke(this, lineStr);+    } else {+      // TODO: Fix the min and max params.+      appendFill(this, lineStr, {x: -left, y: 0},+                 {x: right, y: fontStyle.size});+    }++    var skewM = m[0][0].toFixed(3) + ',' + m[1][0].toFixed(3) + ',' ++                m[0][1].toFixed(3) + ',' + m[1][1].toFixed(3) + ',0,0';++    var skewOffset = mr(d.x / Z) + ',' + mr(d.y / Z);++    lineStr.push('<g_vml_:skew on="t" matrix="', skewM ,'" ',+                 ' offset="', skewOffset, '" origin="', left ,' 0" />',+                 '<g_vml_:path textpathok="true" />',+                 '<g_vml_:textpath on="true" string="',+                 encodeHtmlAttribute(text),+                 '" style="v-text-align:', textAlign,+                 ';font:', encodeHtmlAttribute(fontStyleString),+                 '" /></g_vml_:line>');++    this.element_.insertAdjacentHTML('beforeEnd', lineStr.join(''));+  };++  contextPrototype.fillText = function(text, x, y, maxWidth) {+    this.drawText_(text, x, y, maxWidth, false);+  };++  contextPrototype.strokeText = function(text, x, y, maxWidth) {+    this.drawText_(text, x, y, maxWidth, true);+  };++  contextPrototype.measureText = function(text) {+    if (!this.textMeasureEl_) {+      var s = '<span style="position:absolute;' ++          'top:-20000px;left:0;padding:0;margin:0;border:none;' ++          'white-space:pre;"></span>';+      this.element_.insertAdjacentHTML('beforeEnd', s);+      this.textMeasureEl_ = this.element_.lastChild;+    }+    var doc = this.element_.ownerDocument;+    this.textMeasureEl_.innerHTML = '';+    this.textMeasureEl_.style.font = this.font;+    // Don't use innerHTML or innerText because they allow markup/whitespace.+    this.textMeasureEl_.appendChild(doc.createTextNode(text));+    return {width: this.textMeasureEl_.offsetWidth};+  };++  /******** STUBS ********/+  contextPrototype.clip = function() {+    // TODO: Implement+  };++  contextPrototype.arcTo = function() {+    // TODO: Implement+  };++  contextPrototype.createPattern = function(image, repetition) {+    return new CanvasPattern_(image, repetition);+  };++  // Gradient / Pattern Stubs+  function CanvasGradient_(aType) {+    this.type_ = aType;+    this.x0_ = 0;+    this.y0_ = 0;+    this.r0_ = 0;+    this.x1_ = 0;+    this.y1_ = 0;+    this.r1_ = 0;+    this.colors_ = [];+  }++  CanvasGradient_.prototype.addColorStop = function(aOffset, aColor) {+    aColor = processStyle(aColor);+    this.colors_.push({offset: aOffset,+                       color: aColor.color,+                       alpha: aColor.alpha});+  };++  function CanvasPattern_(image, repetition) {+    assertImageIsValid(image);+    switch (repetition) {+      case 'repeat':+      case null:+      case '':+        this.repetition_ = 'repeat';+        break+      case 'repeat-x':+      case 'repeat-y':+      case 'no-repeat':+        this.repetition_ = repetition;+        break;+      default:+        throwException('SYNTAX_ERR');+    }++    this.src_ = image.src;+    this.width_ = image.width;+    this.height_ = image.height;+  }++  function throwException(s) {+    throw new DOMException_(s);+  }++  function assertImageIsValid(img) {+    if (!img || img.nodeType != 1 || img.tagName != 'IMG') {+      throwException('TYPE_MISMATCH_ERR');+    }+    if (img.readyState != 'complete') {+      throwException('INVALID_STATE_ERR');+    }+  }++  function DOMException_(s) {+    this.code = this[s];+    this.message = s +': DOM Exception ' + this.code;+  }+  var p = DOMException_.prototype = new Error;+  p.INDEX_SIZE_ERR = 1;+  p.DOMSTRING_SIZE_ERR = 2;+  p.HIERARCHY_REQUEST_ERR = 3;+  p.WRONG_DOCUMENT_ERR = 4;+  p.INVALID_CHARACTER_ERR = 5;+  p.NO_DATA_ALLOWED_ERR = 6;+  p.NO_MODIFICATION_ALLOWED_ERR = 7;+  p.NOT_FOUND_ERR = 8;+  p.NOT_SUPPORTED_ERR = 9;+  p.INUSE_ATTRIBUTE_ERR = 10;+  p.INVALID_STATE_ERR = 11;+  p.SYNTAX_ERR = 12;+  p.INVALID_MODIFICATION_ERR = 13;+  p.NAMESPACE_ERR = 14;+  p.INVALID_ACCESS_ERR = 15;+  p.VALIDATION_ERR = 16;+  p.TYPE_MISMATCH_ERR = 17;++  // set up externs+  G_vmlCanvasManager = G_vmlCanvasManager_;+  CanvasRenderingContext2D = CanvasRenderingContext2D_;+  CanvasGradient = CanvasGradient_;+  CanvasPattern = CanvasPattern_;+  DOMException = DOMException_;+})();++} // if
+ static/js/excanvas.min.js view
@@ -0,0 +1,1 @@+if(!document.createElement("canvas").getContext){(function(){var z=Math;var K=z.round;var J=z.sin;var U=z.cos;var b=z.abs;var k=z.sqrt;var D=10;var F=D/2;function T(){return this.context_||(this.context_=new W(this))}var O=Array.prototype.slice;function G(i,j,m){var Z=O.call(arguments,2);return function(){return i.apply(j,Z.concat(O.call(arguments)))}}function AD(Z){return String(Z).replace(/&/g,"&amp;").replace(/"/g,"&quot;")}function r(i){if(!i.namespaces.g_vml_){i.namespaces.add("g_vml_","urn:schemas-microsoft-com:vml","#default#VML")}if(!i.namespaces.g_o_){i.namespaces.add("g_o_","urn:schemas-microsoft-com:office:office","#default#VML")}if(!i.styleSheets.ex_canvas_){var Z=i.createStyleSheet();Z.owningElement.id="ex_canvas_";Z.cssText="canvas{display:inline-block;overflow:hidden;text-align:left;width:300px;height:150px}"}}r(document);var E={init:function(Z){if(/MSIE/.test(navigator.userAgent)&&!window.opera){var i=Z||document;i.createElement("canvas");i.attachEvent("onreadystatechange",G(this.init_,this,i))}},init_:function(m){var j=m.getElementsByTagName("canvas");for(var Z=0;Z<j.length;Z++){this.initElement(j[Z])}},initElement:function(i){if(!i.getContext){i.getContext=T;r(i.ownerDocument);i.innerHTML="";i.attachEvent("onpropertychange",S);i.attachEvent("onresize",w);var Z=i.attributes;if(Z.width&&Z.width.specified){i.style.width=Z.width.nodeValue+"px"}else{i.width=i.clientWidth}if(Z.height&&Z.height.specified){i.style.height=Z.height.nodeValue+"px"}else{i.height=i.clientHeight}}return i}};function S(i){var Z=i.srcElement;switch(i.propertyName){case"width":Z.getContext().clearRect();Z.style.width=Z.attributes.width.nodeValue+"px";Z.firstChild.style.width=Z.clientWidth+"px";break;case"height":Z.getContext().clearRect();Z.style.height=Z.attributes.height.nodeValue+"px";Z.firstChild.style.height=Z.clientHeight+"px";break}}function w(i){var Z=i.srcElement;if(Z.firstChild){Z.firstChild.style.width=Z.clientWidth+"px";Z.firstChild.style.height=Z.clientHeight+"px"}}E.init();var I=[];for(var AC=0;AC<16;AC++){for(var AB=0;AB<16;AB++){I[AC*16+AB]=AC.toString(16)+AB.toString(16)}}function V(){return[[1,0,0],[0,1,0],[0,0,1]]}function d(m,j){var i=V();for(var Z=0;Z<3;Z++){for(var AF=0;AF<3;AF++){var p=0;for(var AE=0;AE<3;AE++){p+=m[Z][AE]*j[AE][AF]}i[Z][AF]=p}}return i}function Q(i,Z){Z.fillStyle=i.fillStyle;Z.lineCap=i.lineCap;Z.lineJoin=i.lineJoin;Z.lineWidth=i.lineWidth;Z.miterLimit=i.miterLimit;Z.shadowBlur=i.shadowBlur;Z.shadowColor=i.shadowColor;Z.shadowOffsetX=i.shadowOffsetX;Z.shadowOffsetY=i.shadowOffsetY;Z.strokeStyle=i.strokeStyle;Z.globalAlpha=i.globalAlpha;Z.font=i.font;Z.textAlign=i.textAlign;Z.textBaseline=i.textBaseline;Z.arcScaleX_=i.arcScaleX_;Z.arcScaleY_=i.arcScaleY_;Z.lineScale_=i.lineScale_}var B={aliceblue:"#F0F8FF",antiquewhite:"#FAEBD7",aquamarine:"#7FFFD4",azure:"#F0FFFF",beige:"#F5F5DC",bisque:"#FFE4C4",black:"#000000",blanchedalmond:"#FFEBCD",blueviolet:"#8A2BE2",brown:"#A52A2A",burlywood:"#DEB887",cadetblue:"#5F9EA0",chartreuse:"#7FFF00",chocolate:"#D2691E",coral:"#FF7F50",cornflowerblue:"#6495ED",cornsilk:"#FFF8DC",crimson:"#DC143C",cyan:"#00FFFF",darkblue:"#00008B",darkcyan:"#008B8B",darkgoldenrod:"#B8860B",darkgray:"#A9A9A9",darkgreen:"#006400",darkgrey:"#A9A9A9",darkkhaki:"#BDB76B",darkmagenta:"#8B008B",darkolivegreen:"#556B2F",darkorange:"#FF8C00",darkorchid:"#9932CC",darkred:"#8B0000",darksalmon:"#E9967A",darkseagreen:"#8FBC8F",darkslateblue:"#483D8B",darkslategray:"#2F4F4F",darkslategrey:"#2F4F4F",darkturquoise:"#00CED1",darkviolet:"#9400D3",deeppink:"#FF1493",deepskyblue:"#00BFFF",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1E90FF",firebrick:"#B22222",floralwhite:"#FFFAF0",forestgreen:"#228B22",gainsboro:"#DCDCDC",ghostwhite:"#F8F8FF",gold:"#FFD700",goldenrod:"#DAA520",grey:"#808080",greenyellow:"#ADFF2F",honeydew:"#F0FFF0",hotpink:"#FF69B4",indianred:"#CD5C5C",indigo:"#4B0082",ivory:"#FFFFF0",khaki:"#F0E68C",lavender:"#E6E6FA",lavenderblush:"#FFF0F5",lawngreen:"#7CFC00",lemonchiffon:"#FFFACD",lightblue:"#ADD8E6",lightcoral:"#F08080",lightcyan:"#E0FFFF",lightgoldenrodyellow:"#FAFAD2",lightgreen:"#90EE90",lightgrey:"#D3D3D3",lightpink:"#FFB6C1",lightsalmon:"#FFA07A",lightseagreen:"#20B2AA",lightskyblue:"#87CEFA",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#B0C4DE",lightyellow:"#FFFFE0",limegreen:"#32CD32",linen:"#FAF0E6",magenta:"#FF00FF",mediumaquamarine:"#66CDAA",mediumblue:"#0000CD",mediumorchid:"#BA55D3",mediumpurple:"#9370DB",mediumseagreen:"#3CB371",mediumslateblue:"#7B68EE",mediumspringgreen:"#00FA9A",mediumturquoise:"#48D1CC",mediumvioletred:"#C71585",midnightblue:"#191970",mintcream:"#F5FFFA",mistyrose:"#FFE4E1",moccasin:"#FFE4B5",navajowhite:"#FFDEAD",oldlace:"#FDF5E6",olivedrab:"#6B8E23",orange:"#FFA500",orangered:"#FF4500",orchid:"#DA70D6",palegoldenrod:"#EEE8AA",palegreen:"#98FB98",paleturquoise:"#AFEEEE",palevioletred:"#DB7093",papayawhip:"#FFEFD5",peachpuff:"#FFDAB9",peru:"#CD853F",pink:"#FFC0CB",plum:"#DDA0DD",powderblue:"#B0E0E6",rosybrown:"#BC8F8F",royalblue:"#4169E1",saddlebrown:"#8B4513",salmon:"#FA8072",sandybrown:"#F4A460",seagreen:"#2E8B57",seashell:"#FFF5EE",sienna:"#A0522D",skyblue:"#87CEEB",slateblue:"#6A5ACD",slategray:"#708090",slategrey:"#708090",snow:"#FFFAFA",springgreen:"#00FF7F",steelblue:"#4682B4",tan:"#D2B48C",thistle:"#D8BFD8",tomato:"#FF6347",turquoise:"#40E0D0",violet:"#EE82EE",wheat:"#F5DEB3",whitesmoke:"#F5F5F5",yellowgreen:"#9ACD32"};function g(i){var m=i.indexOf("(",3);var Z=i.indexOf(")",m+1);var j=i.substring(m+1,Z).split(",");if(j.length==4&&i.substr(3,1)=="a"){alpha=Number(j[3])}else{j[3]=1}return j}function C(Z){return parseFloat(Z)/100}function N(i,j,Z){return Math.min(Z,Math.max(j,i))}function c(AF){var j,i,Z;h=parseFloat(AF[0])/360%360;if(h<0){h++}s=N(C(AF[1]),0,1);l=N(C(AF[2]),0,1);if(s==0){j=i=Z=l}else{var m=l<0.5?l*(1+s):l+s-l*s;var AE=2*l-m;j=A(AE,m,h+1/3);i=A(AE,m,h);Z=A(AE,m,h-1/3)}return"#"+I[Math.floor(j*255)]+I[Math.floor(i*255)]+I[Math.floor(Z*255)]}function A(i,Z,j){if(j<0){j++}if(j>1){j--}if(6*j<1){return i+(Z-i)*6*j}else{if(2*j<1){return Z}else{if(3*j<2){return i+(Z-i)*(2/3-j)*6}else{return i}}}}function Y(Z){var AE,p=1;Z=String(Z);if(Z.charAt(0)=="#"){AE=Z}else{if(/^rgb/.test(Z)){var m=g(Z);var AE="#",AF;for(var j=0;j<3;j++){if(m[j].indexOf("%")!=-1){AF=Math.floor(C(m[j])*255)}else{AF=Number(m[j])}AE+=I[N(AF,0,255)]}p=m[3]}else{if(/^hsl/.test(Z)){var m=g(Z);AE=c(m);p=m[3]}else{AE=B[Z]||Z}}}return{color:AE,alpha:p}}var L={style:"normal",variant:"normal",weight:"normal",size:10,family:"sans-serif"};var f={};function X(Z){if(f[Z]){return f[Z]}var m=document.createElement("div");var j=m.style;try{j.font=Z}catch(i){}return f[Z]={style:j.fontStyle||L.style,variant:j.fontVariant||L.variant,weight:j.fontWeight||L.weight,size:j.fontSize||L.size,family:j.fontFamily||L.family}}function P(j,i){var Z={};for(var AF in j){Z[AF]=j[AF]}var AE=parseFloat(i.currentStyle.fontSize),m=parseFloat(j.size);if(typeof j.size=="number"){Z.size=j.size}else{if(j.size.indexOf("px")!=-1){Z.size=m}else{if(j.size.indexOf("em")!=-1){Z.size=AE*m}else{if(j.size.indexOf("%")!=-1){Z.size=(AE/100)*m}else{if(j.size.indexOf("pt")!=-1){Z.size=m/0.75}else{Z.size=AE}}}}}Z.size*=0.981;return Z}function AA(Z){return Z.style+" "+Z.variant+" "+Z.weight+" "+Z.size+"px "+Z.family}function t(Z){switch(Z){case"butt":return"flat";case"round":return"round";case"square":default:return"square"}}function W(i){this.m_=V();this.mStack_=[];this.aStack_=[];this.currentPath_=[];this.strokeStyle="#000";this.fillStyle="#000";this.lineWidth=1;this.lineJoin="miter";this.lineCap="butt";this.miterLimit=D*1;this.globalAlpha=1;this.font="10px sans-serif";this.textAlign="left";this.textBaseline="alphabetic";this.canvas=i;var Z=i.ownerDocument.createElement("div");Z.style.width=i.clientWidth+"px";Z.style.height=i.clientHeight+"px";Z.style.overflow="hidden";Z.style.position="absolute";i.appendChild(Z);this.element_=Z;this.arcScaleX_=1;this.arcScaleY_=1;this.lineScale_=1}var M=W.prototype;M.clearRect=function(){if(this.textMeasureEl_){this.textMeasureEl_.removeNode(true);this.textMeasureEl_=null}this.element_.innerHTML=""};M.beginPath=function(){this.currentPath_=[]};M.moveTo=function(i,Z){var j=this.getCoords_(i,Z);this.currentPath_.push({type:"moveTo",x:j.x,y:j.y});this.currentX_=j.x;this.currentY_=j.y};M.lineTo=function(i,Z){var j=this.getCoords_(i,Z);this.currentPath_.push({type:"lineTo",x:j.x,y:j.y});this.currentX_=j.x;this.currentY_=j.y};M.bezierCurveTo=function(j,i,AI,AH,AG,AE){var Z=this.getCoords_(AG,AE);var AF=this.getCoords_(j,i);var m=this.getCoords_(AI,AH);e(this,AF,m,Z)};function e(Z,m,j,i){Z.currentPath_.push({type:"bezierCurveTo",cp1x:m.x,cp1y:m.y,cp2x:j.x,cp2y:j.y,x:i.x,y:i.y});Z.currentX_=i.x;Z.currentY_=i.y}M.quadraticCurveTo=function(AG,j,i,Z){var AF=this.getCoords_(AG,j);var AE=this.getCoords_(i,Z);var AH={x:this.currentX_+2/3*(AF.x-this.currentX_),y:this.currentY_+2/3*(AF.y-this.currentY_)};var m={x:AH.x+(AE.x-this.currentX_)/3,y:AH.y+(AE.y-this.currentY_)/3};e(this,AH,m,AE)};M.arc=function(AJ,AH,AI,AE,i,j){AI*=D;var AN=j?"at":"wa";var AK=AJ+U(AE)*AI-F;var AM=AH+J(AE)*AI-F;var Z=AJ+U(i)*AI-F;var AL=AH+J(i)*AI-F;if(AK==Z&&!j){AK+=0.125}var m=this.getCoords_(AJ,AH);var AG=this.getCoords_(AK,AM);var AF=this.getCoords_(Z,AL);this.currentPath_.push({type:AN,x:m.x,y:m.y,radius:AI,xStart:AG.x,yStart:AG.y,xEnd:AF.x,yEnd:AF.y})};M.rect=function(j,i,Z,m){this.moveTo(j,i);this.lineTo(j+Z,i);this.lineTo(j+Z,i+m);this.lineTo(j,i+m);this.closePath()};M.strokeRect=function(j,i,Z,m){var p=this.currentPath_;this.beginPath();this.moveTo(j,i);this.lineTo(j+Z,i);this.lineTo(j+Z,i+m);this.lineTo(j,i+m);this.closePath();this.stroke();this.currentPath_=p};M.fillRect=function(j,i,Z,m){var p=this.currentPath_;this.beginPath();this.moveTo(j,i);this.lineTo(j+Z,i);this.lineTo(j+Z,i+m);this.lineTo(j,i+m);this.closePath();this.fill();this.currentPath_=p};M.createLinearGradient=function(i,m,Z,j){var p=new v("gradient");p.x0_=i;p.y0_=m;p.x1_=Z;p.y1_=j;return p};M.createRadialGradient=function(m,AE,j,i,p,Z){var AF=new v("gradientradial");AF.x0_=m;AF.y0_=AE;AF.r0_=j;AF.x1_=i;AF.y1_=p;AF.r1_=Z;return AF};M.drawImage=function(AO,j){var AH,AF,AJ,AV,AM,AK,AQ,AX;var AI=AO.runtimeStyle.width;var AN=AO.runtimeStyle.height;AO.runtimeStyle.width="auto";AO.runtimeStyle.height="auto";var AG=AO.width;var AT=AO.height;AO.runtimeStyle.width=AI;AO.runtimeStyle.height=AN;if(arguments.length==3){AH=arguments[1];AF=arguments[2];AM=AK=0;AQ=AJ=AG;AX=AV=AT}else{if(arguments.length==5){AH=arguments[1];AF=arguments[2];AJ=arguments[3];AV=arguments[4];AM=AK=0;AQ=AG;AX=AT}else{if(arguments.length==9){AM=arguments[1];AK=arguments[2];AQ=arguments[3];AX=arguments[4];AH=arguments[5];AF=arguments[6];AJ=arguments[7];AV=arguments[8]}else{throw Error("Invalid number of arguments")}}}var AW=this.getCoords_(AH,AF);var m=AQ/2;var i=AX/2;var AU=[];var Z=10;var AE=10;AU.push(" <g_vml_:group",' coordsize="',D*Z,",",D*AE,'"',' coordorigin="0,0"',' style="width:',Z,"px;height:",AE,"px;position:absolute;");if(this.m_[0][0]!=1||this.m_[0][1]||this.m_[1][1]!=1||this.m_[1][0]){var p=[];p.push("M11=",this.m_[0][0],",","M12=",this.m_[1][0],",","M21=",this.m_[0][1],",","M22=",this.m_[1][1],",","Dx=",K(AW.x/D),",","Dy=",K(AW.y/D),"");var AS=AW;var AR=this.getCoords_(AH+AJ,AF);var AP=this.getCoords_(AH,AF+AV);var AL=this.getCoords_(AH+AJ,AF+AV);AS.x=z.max(AS.x,AR.x,AP.x,AL.x);AS.y=z.max(AS.y,AR.y,AP.y,AL.y);AU.push("padding:0 ",K(AS.x/D),"px ",K(AS.y/D),"px 0;filter:progid:DXImageTransform.Microsoft.Matrix(",p.join(""),", sizingmethod='clip');")}else{AU.push("top:",K(AW.y/D),"px;left:",K(AW.x/D),"px;")}AU.push(' ">','<g_vml_:image src="',AO.src,'"',' style="width:',D*AJ,"px;"," height:",D*AV,'px"',' cropleft="',AM/AG,'"',' croptop="',AK/AT,'"',' cropright="',(AG-AM-AQ)/AG,'"',' cropbottom="',(AT-AK-AX)/AT,'"'," />","</g_vml_:group>");this.element_.insertAdjacentHTML("BeforeEnd",AU.join(""))};M.stroke=function(AM){var m=10;var AN=10;var AE=5000;var AG={x:null,y:null};var AL={x:null,y:null};for(var AH=0;AH<this.currentPath_.length;AH+=AE){var AK=[];var AF=false;AK.push("<g_vml_:shape",' filled="',!!AM,'"',' style="position:absolute;width:',m,"px;height:",AN,'px;"',' coordorigin="0,0"',' coordsize="',D*m,",",D*AN,'"',' stroked="',!AM,'"',' path="');var AO=false;for(var AI=AH;AI<Math.min(AH+AE,this.currentPath_.length);AI++){if(AI%AE==0&&AI>0){AK.push(" m ",K(this.currentPath_[AI-1].x),",",K(this.currentPath_[AI-1].y))}var Z=this.currentPath_[AI];var AJ;switch(Z.type){case"moveTo":AJ=Z;AK.push(" m ",K(Z.x),",",K(Z.y));break;case"lineTo":AK.push(" l ",K(Z.x),",",K(Z.y));break;case"close":AK.push(" x ");Z=null;break;case"bezierCurveTo":AK.push(" c ",K(Z.cp1x),",",K(Z.cp1y),",",K(Z.cp2x),",",K(Z.cp2y),",",K(Z.x),",",K(Z.y));break;case"at":case"wa":AK.push(" ",Z.type," ",K(Z.x-this.arcScaleX_*Z.radius),",",K(Z.y-this.arcScaleY_*Z.radius)," ",K(Z.x+this.arcScaleX_*Z.radius),",",K(Z.y+this.arcScaleY_*Z.radius)," ",K(Z.xStart),",",K(Z.yStart)," ",K(Z.xEnd),",",K(Z.yEnd));break}if(Z){if(AG.x==null||Z.x<AG.x){AG.x=Z.x}if(AL.x==null||Z.x>AL.x){AL.x=Z.x}if(AG.y==null||Z.y<AG.y){AG.y=Z.y}if(AL.y==null||Z.y>AL.y){AL.y=Z.y}}}AK.push(' ">');if(!AM){R(this,AK)}else{a(this,AK,AG,AL)}AK.push("</g_vml_:shape>");this.element_.insertAdjacentHTML("beforeEnd",AK.join(""))}};function R(j,AE){var i=Y(j.strokeStyle);var m=i.color;var p=i.alpha*j.globalAlpha;var Z=j.lineScale_*j.lineWidth;if(Z<1){p*=Z}AE.push("<g_vml_:stroke",' opacity="',p,'"',' joinstyle="',j.lineJoin,'"',' miterlimit="',j.miterLimit,'"',' endcap="',t(j.lineCap),'"',' weight="',Z,'px"',' color="',m,'" />')}function a(AO,AG,Ah,AP){var AH=AO.fillStyle;var AY=AO.arcScaleX_;var AX=AO.arcScaleY_;var Z=AP.x-Ah.x;var m=AP.y-Ah.y;if(AH instanceof v){var AL=0;var Ac={x:0,y:0};var AU=0;var AK=1;if(AH.type_=="gradient"){var AJ=AH.x0_/AY;var j=AH.y0_/AX;var AI=AH.x1_/AY;var Aj=AH.y1_/AX;var Ag=AO.getCoords_(AJ,j);var Af=AO.getCoords_(AI,Aj);var AE=Af.x-Ag.x;var p=Af.y-Ag.y;AL=Math.atan2(AE,p)*180/Math.PI;if(AL<0){AL+=360}if(AL<0.000001){AL=0}}else{var Ag=AO.getCoords_(AH.x0_,AH.y0_);Ac={x:(Ag.x-Ah.x)/Z,y:(Ag.y-Ah.y)/m};Z/=AY*D;m/=AX*D;var Aa=z.max(Z,m);AU=2*AH.r0_/Aa;AK=2*AH.r1_/Aa-AU}var AS=AH.colors_;AS.sort(function(Ak,i){return Ak.offset-i.offset});var AN=AS.length;var AR=AS[0].color;var AQ=AS[AN-1].color;var AW=AS[0].alpha*AO.globalAlpha;var AV=AS[AN-1].alpha*AO.globalAlpha;var Ab=[];for(var Ae=0;Ae<AN;Ae++){var AM=AS[Ae];Ab.push(AM.offset*AK+AU+" "+AM.color)}AG.push('<g_vml_:fill type="',AH.type_,'"',' method="none" focus="100%"',' color="',AR,'"',' color2="',AQ,'"',' colors="',Ab.join(","),'"',' opacity="',AV,'"',' g_o_:opacity2="',AW,'"',' angle="',AL,'"',' focusposition="',Ac.x,",",Ac.y,'" />')}else{if(AH instanceof u){if(Z&&m){var AF=-Ah.x;var AZ=-Ah.y;AG.push("<g_vml_:fill",' position="',AF/Z*AY*AY,",",AZ/m*AX*AX,'"',' type="tile"',' src="',AH.src_,'" />')}}else{var Ai=Y(AO.fillStyle);var AT=Ai.color;var Ad=Ai.alpha*AO.globalAlpha;AG.push('<g_vml_:fill color="',AT,'" opacity="',Ad,'" />')}}}M.fill=function(){this.stroke(true)};M.closePath=function(){this.currentPath_.push({type:"close"})};M.getCoords_=function(j,i){var Z=this.m_;return{x:D*(j*Z[0][0]+i*Z[1][0]+Z[2][0])-F,y:D*(j*Z[0][1]+i*Z[1][1]+Z[2][1])-F}};M.save=function(){var Z={};Q(this,Z);this.aStack_.push(Z);this.mStack_.push(this.m_);this.m_=d(V(),this.m_)};M.restore=function(){if(this.aStack_.length){Q(this.aStack_.pop(),this);this.m_=this.mStack_.pop()}};function H(Z){return isFinite(Z[0][0])&&isFinite(Z[0][1])&&isFinite(Z[1][0])&&isFinite(Z[1][1])&&isFinite(Z[2][0])&&isFinite(Z[2][1])}function y(i,Z,j){if(!H(Z)){return }i.m_=Z;if(j){var p=Z[0][0]*Z[1][1]-Z[0][1]*Z[1][0];i.lineScale_=k(b(p))}}M.translate=function(j,i){var Z=[[1,0,0],[0,1,0],[j,i,1]];y(this,d(Z,this.m_),false)};M.rotate=function(i){var m=U(i);var j=J(i);var Z=[[m,j,0],[-j,m,0],[0,0,1]];y(this,d(Z,this.m_),false)};M.scale=function(j,i){this.arcScaleX_*=j;this.arcScaleY_*=i;var Z=[[j,0,0],[0,i,0],[0,0,1]];y(this,d(Z,this.m_),true)};M.transform=function(p,m,AF,AE,i,Z){var j=[[p,m,0],[AF,AE,0],[i,Z,1]];y(this,d(j,this.m_),true)};M.setTransform=function(AE,p,AG,AF,j,i){var Z=[[AE,p,0],[AG,AF,0],[j,i,1]];y(this,Z,true)};M.drawText_=function(AK,AI,AH,AN,AG){var AM=this.m_,AQ=1000,i=0,AP=AQ,AF={x:0,y:0},AE=[];var Z=P(X(this.font),this.element_);var j=AA(Z);var AR=this.element_.currentStyle;var p=this.textAlign.toLowerCase();switch(p){case"left":case"center":case"right":break;case"end":p=AR.direction=="ltr"?"right":"left";break;case"start":p=AR.direction=="rtl"?"right":"left";break;default:p="left"}switch(this.textBaseline){case"hanging":case"top":AF.y=Z.size/1.75;break;case"middle":break;default:case null:case"alphabetic":case"ideographic":case"bottom":AF.y=-Z.size/2.25;break}switch(p){case"right":i=AQ;AP=0.05;break;case"center":i=AP=AQ/2;break}var AO=this.getCoords_(AI+AF.x,AH+AF.y);AE.push('<g_vml_:line from="',-i,' 0" to="',AP,' 0.05" ',' coordsize="100 100" coordorigin="0 0"',' filled="',!AG,'" stroked="',!!AG,'" style="position:absolute;width:1px;height:1px;">');if(AG){R(this,AE)}else{a(this,AE,{x:-i,y:0},{x:AP,y:Z.size})}var AL=AM[0][0].toFixed(3)+","+AM[1][0].toFixed(3)+","+AM[0][1].toFixed(3)+","+AM[1][1].toFixed(3)+",0,0";var AJ=K(AO.x/D)+","+K(AO.y/D);AE.push('<g_vml_:skew on="t" matrix="',AL,'" ',' offset="',AJ,'" origin="',i,' 0" />','<g_vml_:path textpathok="true" />','<g_vml_:textpath on="true" string="',AD(AK),'" style="v-text-align:',p,";font:",AD(j),'" /></g_vml_:line>');this.element_.insertAdjacentHTML("beforeEnd",AE.join(""))};M.fillText=function(j,Z,m,i){this.drawText_(j,Z,m,i,false)};M.strokeText=function(j,Z,m,i){this.drawText_(j,Z,m,i,true)};M.measureText=function(j){if(!this.textMeasureEl_){var Z='<span style="position:absolute;top:-20000px;left:0;padding:0;margin:0;border:none;white-space:pre;"></span>';this.element_.insertAdjacentHTML("beforeEnd",Z);this.textMeasureEl_=this.element_.lastChild}var i=this.element_.ownerDocument;this.textMeasureEl_.innerHTML="";this.textMeasureEl_.style.font=this.font;this.textMeasureEl_.appendChild(i.createTextNode(j));return{width:this.textMeasureEl_.offsetWidth}};M.clip=function(){};M.arcTo=function(){};M.createPattern=function(i,Z){return new u(i,Z)};function v(Z){this.type_=Z;this.x0_=0;this.y0_=0;this.r0_=0;this.x1_=0;this.y1_=0;this.r1_=0;this.colors_=[]}v.prototype.addColorStop=function(i,Z){Z=Y(Z);this.colors_.push({offset:i,color:Z.color,alpha:Z.alpha})};function u(i,Z){q(i);switch(Z){case"repeat":case null:case"":this.repetition_="repeat";break;case"repeat-x":case"repeat-y":case"no-repeat":this.repetition_=Z;break;default:n("SYNTAX_ERR")}this.src_=i.src;this.width_=i.width;this.height_=i.height}function n(Z){throw new o(Z)}function q(Z){if(!Z||Z.nodeType!=1||Z.tagName!="IMG"){n("TYPE_MISMATCH_ERR")}if(Z.readyState!="complete"){n("INVALID_STATE_ERR")}}function o(Z){this.code=this[Z];this.message=Z+": DOM Exception "+this.code}var x=o.prototype=new Error;x.INDEX_SIZE_ERR=1;x.DOMSTRING_SIZE_ERR=2;x.HIERARCHY_REQUEST_ERR=3;x.WRONG_DOCUMENT_ERR=4;x.INVALID_CHARACTER_ERR=5;x.NO_DATA_ALLOWED_ERR=6;x.NO_MODIFICATION_ALLOWED_ERR=7;x.NOT_FOUND_ERR=8;x.NOT_SUPPORTED_ERR=9;x.INUSE_ATTRIBUTE_ERR=10;x.INVALID_STATE_ERR=11;x.SYNTAX_ERR=12;x.INVALID_MODIFICATION_ERR=13;x.NAMESPACE_ERR=14;x.INVALID_ACCESS_ERR=15;x.VALIDATION_ERR=16;x.TYPE_MISMATCH_ERR=17;G_vmlCanvasManager=E;CanvasRenderingContext2D=W;CanvasGradient=v;CanvasPattern=u;DOMException=o})()};
+ static/js/jquery.colorhelpers.js view
@@ -0,0 +1,180 @@+/* Plugin for jQuery for working with colors.+ * + * Version 1.1.+ * + * Inspiration from jQuery color animation plugin by John Resig.+ *+ * Released under the MIT license by Ole Laursen, October 2009.+ *+ * Examples:+ *+ *   $.color.parse("#fff").scale('rgb', 0.25).add('a', -0.5).toString()+ *   var c = $.color.extract($("#mydiv"), 'background-color');+ *   console.log(c.r, c.g, c.b, c.a);+ *   $.color.make(100, 50, 25, 0.4).toString() // returns "rgba(100,50,25,0.4)"+ *+ * Note that .scale() and .add() return the same modified object+ * instead of making a new one.+ *+ * V. 1.1: Fix error handling so e.g. parsing an empty string does+ * produce a color rather than just crashing.+ */ ++(function($) {+    $.color = {};++    // construct color object with some convenient chainable helpers+    $.color.make = function (r, g, b, a) {+        var o = {};+        o.r = r || 0;+        o.g = g || 0;+        o.b = b || 0;+        o.a = a != null ? a : 1;++        o.add = function (c, d) {+            for (var i = 0; i < c.length; ++i)+                o[c.charAt(i)] += d;+            return o.normalize();+        };+        +        o.scale = function (c, f) {+            for (var i = 0; i < c.length; ++i)+                o[c.charAt(i)] *= f;+            return o.normalize();+        };+        +        o.toString = function () {+            if (o.a >= 1.0) {+                return "rgb("+[o.r, o.g, o.b].join(",")+")";+            } else {+                return "rgba("+[o.r, o.g, o.b, o.a].join(",")+")";+            }+        };++        o.normalize = function () {+            function clamp(min, value, max) {+                return value < min ? min: (value > max ? max: value);+            }+            +            o.r = clamp(0, parseInt(o.r), 255);+            o.g = clamp(0, parseInt(o.g), 255);+            o.b = clamp(0, parseInt(o.b), 255);+            o.a = clamp(0, o.a, 1);+            return o;+        };++        o.clone = function () {+            return $.color.make(o.r, o.b, o.g, o.a);+        };++        return o.normalize();+    }++    // extract CSS color property from element, going up in the DOM+    // if it's "transparent"+    $.color.extract = function (elem, css) {+        var c;++        do {+            c = elem.css(css).toLowerCase();+            // keep going until we find an element that has color, or+            // we hit the body or root (have no parent)+            if (c != '' && c != 'transparent')+                break;+            elem = elem.parent();+        } while (elem.length && !$.nodeName(elem.get(0), "body"));++        // catch Safari's way of signalling transparent+        if (c == "rgba(0, 0, 0, 0)")+            c = "transparent";+        +        return $.color.parse(c);+    }+    +    // parse CSS color string (like "rgb(10, 32, 43)" or "#fff"),+    // returns color object, if parsing failed, you get black (0, 0,+    // 0) out+    $.color.parse = function (str) {+        var res, m = $.color.make;++        // Look for rgb(num,num,num)+        if (res = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(str))+            return m(parseInt(res[1], 10), parseInt(res[2], 10), parseInt(res[3], 10));+        +        // Look for rgba(num,num,num,num)+        if (res = /rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(str))+            return m(parseInt(res[1], 10), parseInt(res[2], 10), parseInt(res[3], 10), parseFloat(res[4]));+            +        // Look for rgb(num%,num%,num%)+        if (res = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(str))+            return m(parseFloat(res[1])*2.55, parseFloat(res[2])*2.55, parseFloat(res[3])*2.55);++        // Look for rgba(num%,num%,num%,num)+        if (res = /rgba\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(str))+            return m(parseFloat(res[1])*2.55, parseFloat(res[2])*2.55, parseFloat(res[3])*2.55, parseFloat(res[4]));+        +        // Look for #a0b1c2+        if (res = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(str))+            return m(parseInt(res[1], 16), parseInt(res[2], 16), parseInt(res[3], 16));++        // Look for #fff+        if (res = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(str))+            return m(parseInt(res[1]+res[1], 16), parseInt(res[2]+res[2], 16), parseInt(res[3]+res[3], 16));++        // Otherwise, we're most likely dealing with a named color+        var name = $.trim(str).toLowerCase();+        if (name == "transparent")+            return m(255, 255, 255, 0);+        else {+            // default to black+            res = lookupColors[name] || [0, 0, 0];+            return m(res[0], res[1], res[2]);+        }+    }+    +    var lookupColors = {+        aqua:[0,255,255],+        azure:[240,255,255],+        beige:[245,245,220],+        black:[0,0,0],+        blue:[0,0,255],+        brown:[165,42,42],+        cyan:[0,255,255],+        darkblue:[0,0,139],+        darkcyan:[0,139,139],+        darkgrey:[169,169,169],+        darkgreen:[0,100,0],+        darkkhaki:[189,183,107],+        darkmagenta:[139,0,139],+        darkolivegreen:[85,107,47],+        darkorange:[255,140,0],+        darkorchid:[153,50,204],+        darkred:[139,0,0],+        darksalmon:[233,150,122],+        darkviolet:[148,0,211],+        fuchsia:[255,0,255],+        gold:[255,215,0],+        green:[0,128,0],+        indigo:[75,0,130],+        khaki:[240,230,140],+        lightblue:[173,216,230],+        lightcyan:[224,255,255],+        lightgreen:[144,238,144],+        lightgrey:[211,211,211],+        lightpink:[255,182,193],+        lightyellow:[255,255,224],+        lime:[0,255,0],+        magenta:[255,0,255],+        maroon:[128,0,0],+        navy:[0,0,128],+        olive:[128,128,0],+        orange:[255,165,0],+        pink:[255,192,203],+        purple:[128,0,128],+        violet:[128,0,128],+        red:[255,0,0],+        silver:[192,192,192],+        white:[255,255,255],+        yellow:[255,255,0]+    };+})(jQuery);
+ static/js/jquery.colorhelpers.min.js view
@@ -0,0 +1,1 @@+(function($){$.color={};$.color.make=function(r,g,b,a){var o={};o.r=r||0;o.g=g||0;o.b=b||0;o.a=a!=null?a:1;o.add=function(c,d){for(var i=0;i<c.length;++i)o[c.charAt(i)]+=d;return o.normalize()};o.scale=function(c,f){for(var i=0;i<c.length;++i)o[c.charAt(i)]*=f;return o.normalize()};o.toString=function(){if(o.a>=1){return"rgb("+[o.r,o.g,o.b].join(",")+")"}else{return"rgba("+[o.r,o.g,o.b,o.a].join(",")+")"}};o.normalize=function(){function clamp(min,value,max){return value<min?min:value>max?max:value}o.r=clamp(0,parseInt(o.r),255);o.g=clamp(0,parseInt(o.g),255);o.b=clamp(0,parseInt(o.b),255);o.a=clamp(0,o.a,1);return o};o.clone=function(){return $.color.make(o.r,o.b,o.g,o.a)};return o.normalize()};$.color.extract=function(elem,css){var c;do{c=elem.css(css).toLowerCase();if(c!=""&&c!="transparent")break;elem=elem.parent()}while(elem.length&&!$.nodeName(elem.get(0),"body"));if(c=="rgba(0, 0, 0, 0)")c="transparent";return $.color.parse(c)};$.color.parse=function(str){var res,m=$.color.make;if(res=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(str))return m(parseInt(res[1],10),parseInt(res[2],10),parseInt(res[3],10));if(res=/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(str))return m(parseInt(res[1],10),parseInt(res[2],10),parseInt(res[3],10),parseFloat(res[4]));if(res=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(str))return m(parseFloat(res[1])*2.55,parseFloat(res[2])*2.55,parseFloat(res[3])*2.55);if(res=/rgba\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(str))return m(parseFloat(res[1])*2.55,parseFloat(res[2])*2.55,parseFloat(res[3])*2.55,parseFloat(res[4]));if(res=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(str))return m(parseInt(res[1],16),parseInt(res[2],16),parseInt(res[3],16));if(res=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(str))return m(parseInt(res[1]+res[1],16),parseInt(res[2]+res[2],16),parseInt(res[3]+res[3],16));var name=$.trim(str).toLowerCase();if(name=="transparent")return m(255,255,255,0);else{res=lookupColors[name]||[0,0,0];return m(res[0],res[1],res[2])}};var lookupColors={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0]}})(jQuery);
+ static/js/jquery.cookie.js view
@@ -0,0 +1,117 @@+/*!+ * jQuery Cookie Plugin v1.4.1+ * https://github.com/carhartl/jquery-cookie+ *+ * Copyright 2013 Klaus Hartl+ * Released under the MIT license+ */+(function (factory) {+	if (typeof define === 'function' && define.amd) {+		// AMD+		define(['jquery'], factory);+	} else if (typeof exports === 'object') {+		// CommonJS+		factory(require('jquery'));+	} else {+		// Browser globals+		factory(jQuery);+	}+}(function ($) {++	var pluses = /\+/g;++	function encode(s) {+		return config.raw ? s : encodeURIComponent(s);+	}++	function decode(s) {+		return config.raw ? s : decodeURIComponent(s);+	}++	function stringifyCookieValue(value) {+		return encode(config.json ? JSON.stringify(value) : String(value));+	}++	function parseCookieValue(s) {+		if (s.indexOf('"') === 0) {+			// This is a quoted cookie as according to RFC2068, unescape...+			s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\');+		}++		try {+			// Replace server-side written pluses with spaces.+			// If we can't decode the cookie, ignore it, it's unusable.+			// If we can't parse the cookie, ignore it, it's unusable.+			s = decodeURIComponent(s.replace(pluses, ' '));+			return config.json ? JSON.parse(s) : s;+		} catch(e) {}+	}++	function read(s, converter) {+		var value = config.raw ? s : parseCookieValue(s);+		return $.isFunction(converter) ? converter(value) : value;+	}++	var config = $.cookie = function (key, value, options) {++		// Write++		if (value !== undefined && !$.isFunction(value)) {+			options = $.extend({}, config.defaults, options);++			if (typeof options.expires === 'number') {+				var days = options.expires, t = options.expires = new Date();+				t.setTime(+t + days * 864e+5);+			}++			return (document.cookie = [+				encode(key), '=', stringifyCookieValue(value),+				options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE+				options.path    ? '; path=' + options.path : '',+				options.domain  ? '; domain=' + options.domain : '',+				options.secure  ? '; secure' : ''+			].join(''));+		}++		// Read++		var result = key ? undefined : {};++		// To prevent the for loop in the first place assign an empty array+		// in case there are no cookies at all. Also prevents odd result when+		// calling $.cookie().+		var cookies = document.cookie ? document.cookie.split('; ') : [];++		for (var i = 0, l = cookies.length; i < l; i++) {+			var parts = cookies[i].split('=');+			var name = decode(parts.shift());+			var cookie = parts.join('=');++			if (key && key === name) {+				// If second argument (value) is a function it's a converter...+				result = read(cookie, value);+				break;+			}++			// Prevent storing a cookie that we couldn't decode.+			if (!key && (cookie = read(cookie)) !== undefined) {+				result[name] = cookie;+			}+		}++		return result;+	};++	config.defaults = {};++	$.removeCookie = function (key, options) {+		if ($.cookie(key) === undefined) {+			return false;+		}++		// Must not alter options, thus extending a fresh object...+		$.cookie(key, '', $.extend({}, options, { expires: -1 }));+		return !$.cookie(key);+	};++}));
+ static/js/jquery.flot.canvas.js view
@@ -0,0 +1,345 @@+/* Flot plugin for drawing all elements of a plot on the canvas.++Copyright (c) 2007-2014 IOLA and Ole Laursen.+Licensed under the MIT license.++Flot normally produces certain elements, like axis labels and the legend, using+HTML elements. This permits greater interactivity and customization, and often+looks better, due to cross-browser canvas text inconsistencies and limitations.++It can also be desirable to render the plot entirely in canvas, particularly+if the goal is to save it as an image, or if Flot is being used in a context+where the HTML DOM does not exist, as is the case within Node.js. This plugin+switches out Flot's standard drawing operations for canvas-only replacements.++Currently the plugin supports only axis labels, but it will eventually allow+every element of the plot to be rendered directly to canvas.++The plugin supports these options:++{+    canvas: boolean+}++The "canvas" option controls whether full canvas drawing is enabled, making it+possible to toggle on and off. This is useful when a plot uses HTML text in the+browser, but needs to redraw with canvas text when exporting as an image.++*/++(function($) {++	var options = {+		canvas: true+	};++	var render, getTextInfo, addText;++	// Cache the prototype hasOwnProperty for faster access++	var hasOwnProperty = Object.prototype.hasOwnProperty;++	function init(plot, classes) {++		var Canvas = classes.Canvas;++		// We only want to replace the functions once; the second time around+		// we would just get our new function back.  This whole replacing of+		// prototype functions is a disaster, and needs to be changed ASAP.++		if (render == null) {+			getTextInfo = Canvas.prototype.getTextInfo,+			addText = Canvas.prototype.addText,+			render = Canvas.prototype.render;+		}++		// Finishes rendering the canvas, including overlaid text++		Canvas.prototype.render = function() {++			if (!plot.getOptions().canvas) {+				return render.call(this);+			}++			var context = this.context,+				cache = this._textCache;++			// For each text layer, render elements marked as active++			context.save();+			context.textBaseline = "middle";++			for (var layerKey in cache) {+				if (hasOwnProperty.call(cache, layerKey)) {+					var layerCache = cache[layerKey];+					for (var styleKey in layerCache) {+						if (hasOwnProperty.call(layerCache, styleKey)) {+							var styleCache = layerCache[styleKey],+								updateStyles = true;+							for (var key in styleCache) {+								if (hasOwnProperty.call(styleCache, key)) {++									var info = styleCache[key],+										positions = info.positions,+										lines = info.lines;++									// Since every element at this level of the cache have the+									// same font and fill styles, we can just change them once+									// using the values from the first element.++									if (updateStyles) {+										context.fillStyle = info.font.color;+										context.font = info.font.definition;+										updateStyles = false;+									}++									for (var i = 0, position; position = positions[i]; i++) {+										if (position.active) {+											for (var j = 0, line; line = position.lines[j]; j++) {+												context.fillText(lines[j].text, line[0], line[1]);+											}+										} else {+											positions.splice(i--, 1);+										}+									}++									if (positions.length == 0) {+										delete styleCache[key];+									}+								}+							}+						}+					}+				}+			}++			context.restore();+		};++		// Creates (if necessary) and returns a text info object.+		//+		// When the canvas option is set, the object looks like this:+		//+		// {+		//     width: Width of the text's bounding box.+		//     height: Height of the text's bounding box.+		//     positions: Array of positions at which this text is drawn.+		//     lines: [{+		//         height: Height of this line.+		//         widths: Width of this line.+		//         text: Text on this line.+		//     }],+		//     font: {+		//         definition: Canvas font property string.+		//         color: Color of the text.+		//     },+		// }+		//+		// The positions array contains objects that look like this:+		//+		// {+		//     active: Flag indicating whether the text should be visible.+		//     lines: Array of [x, y] coordinates at which to draw the line.+		//     x: X coordinate at which to draw the text.+		//     y: Y coordinate at which to draw the text.+		// }++		Canvas.prototype.getTextInfo = function(layer, text, font, angle, width) {++			if (!plot.getOptions().canvas) {+				return getTextInfo.call(this, layer, text, font, angle, width);+			}++			var textStyle, layerCache, styleCache, info;++			// Cast the value to a string, in case we were given a number++			text = "" + text;++			// If the font is a font-spec object, generate a CSS definition++			if (typeof font === "object") {+				textStyle = font.style + " " + font.variant + " " + font.weight + " " + font.size + "px " + font.family;+			} else {+				textStyle = font;+			}++			// Retrieve (or create) the cache for the text's layer and styles++			layerCache = this._textCache[layer];++			if (layerCache == null) {+				layerCache = this._textCache[layer] = {};+			}++			styleCache = layerCache[textStyle];++			if (styleCache == null) {+				styleCache = layerCache[textStyle] = {};+			}++			info = styleCache[text];++			if (info == null) {++				var context = this.context;++				// If the font was provided as CSS, create a div with those+				// classes and examine it to generate a canvas font spec.++				if (typeof font !== "object") {++					var element = $("<div>&nbsp;</div>")+						.css("position", "absolute")+						.addClass(typeof font === "string" ? font : null)+						.appendTo(this.getTextLayer(layer));++					font = {+						lineHeight: element.height(),+						style: element.css("font-style"),+						variant: element.css("font-variant"),+						weight: element.css("font-weight"),+						family: element.css("font-family"),+						color: element.css("color")+					};++					// Setting line-height to 1, without units, sets it equal+					// to the font-size, even if the font-size is abstract,+					// like 'smaller'.  This enables us to read the real size+					// via the element's height, working around browsers that+					// return the literal 'smaller' value.++					font.size = element.css("line-height", 1).height();++					element.remove();+				}++				textStyle = font.style + " " + font.variant + " " + font.weight + " " + font.size + "px " + font.family;++				// Create a new info object, initializing the dimensions to+				// zero so we can count them up line-by-line.++				info = styleCache[text] = {+					width: 0,+					height: 0,+					positions: [],+					lines: [],+					font: {+						definition: textStyle,+						color: font.color+					}+				};++				context.save();+				context.font = textStyle;++				// Canvas can't handle multi-line strings; break on various+				// newlines, including HTML brs, to build a list of lines.+				// Note that we could split directly on regexps, but IE < 9 is+				// broken; revisit when we drop IE 7/8 support.++				var lines = (text + "").replace(/<br ?\/?>|\r\n|\r/g, "\n").split("\n");++				for (var i = 0; i < lines.length; ++i) {++					var lineText = lines[i],+						measured = context.measureText(lineText);++					info.width = Math.max(measured.width, info.width);+					info.height += font.lineHeight;++					info.lines.push({+						text: lineText,+						width: measured.width,+						height: font.lineHeight+					});+				}++				context.restore();+			}++			return info;+		};++		// Adds a text string to the canvas text overlay.++		Canvas.prototype.addText = function(layer, x, y, text, font, angle, width, halign, valign) {++			if (!plot.getOptions().canvas) {+				return addText.call(this, layer, x, y, text, font, angle, width, halign, valign);+			}++			var info = this.getTextInfo(layer, text, font, angle, width),+				positions = info.positions,+				lines = info.lines;++			// Text is drawn with baseline 'middle', which we need to account+			// for by adding half a line's height to the y position.++			y += info.height / lines.length / 2;++			// Tweak the initial y-position to match vertical alignment++			if (valign == "middle") {+				y = Math.round(y - info.height / 2);+			} else if (valign == "bottom") {+				y = Math.round(y - info.height);+			} else {+				y = Math.round(y);+			}++			// FIXME: LEGACY BROWSER FIX+			// AFFECTS: Opera < 12.00++			// Offset the y coordinate, since Opera is off pretty+			// consistently compared to the other browsers.++			if (!!(window.opera && window.opera.version().split(".")[0] < 12)) {+				y -= 2;+			}++			// Determine whether this text already exists at this position.+			// If so, mark it for inclusion in the next render pass.++			for (var i = 0, position; position = positions[i]; i++) {+				if (position.x == x && position.y == y) {+					position.active = true;+					return;+				}+			}++			// If the text doesn't exist at this position, create a new entry++			position = {+				active: true,+				lines: [],+				x: x,+				y: y+			};++			positions.push(position);++			// Fill in the x & y positions of each line, adjusting them+			// individually for horizontal alignment.++			for (var i = 0, line; line = lines[i]; i++) {+				if (halign == "center") {+					position.lines.push([Math.round(x - line.width / 2), y]);+				} else if (halign == "right") {+					position.lines.push([Math.round(x - line.width), y]);+				} else {+					position.lines.push([Math.round(x), y]);+				}+				y += line.height;+			}+		};+	}++	$.plot.plugins.push({+		init: init,+		options: options,+		name: "canvas",+		version: "1.0"+	});++})(jQuery);
+ static/js/jquery.flot.canvas.min.js view
@@ -0,0 +1,7 @@+/* Javascript plotting library for jQuery, version 0.8.3.++Copyright (c) 2007-2014 IOLA and Ole Laursen.+Licensed under the MIT license.++*/+(function($){var options={canvas:true};var render,getTextInfo,addText;var hasOwnProperty=Object.prototype.hasOwnProperty;function init(plot,classes){var Canvas=classes.Canvas;if(render==null){getTextInfo=Canvas.prototype.getTextInfo,addText=Canvas.prototype.addText,render=Canvas.prototype.render}Canvas.prototype.render=function(){if(!plot.getOptions().canvas){return render.call(this)}var context=this.context,cache=this._textCache;context.save();context.textBaseline="middle";for(var layerKey in cache){if(hasOwnProperty.call(cache,layerKey)){var layerCache=cache[layerKey];for(var styleKey in layerCache){if(hasOwnProperty.call(layerCache,styleKey)){var styleCache=layerCache[styleKey],updateStyles=true;for(var key in styleCache){if(hasOwnProperty.call(styleCache,key)){var info=styleCache[key],positions=info.positions,lines=info.lines;if(updateStyles){context.fillStyle=info.font.color;context.font=info.font.definition;updateStyles=false}for(var i=0,position;position=positions[i];i++){if(position.active){for(var j=0,line;line=position.lines[j];j++){context.fillText(lines[j].text,line[0],line[1])}}else{positions.splice(i--,1)}}if(positions.length==0){delete styleCache[key]}}}}}}}context.restore()};Canvas.prototype.getTextInfo=function(layer,text,font,angle,width){if(!plot.getOptions().canvas){return getTextInfo.call(this,layer,text,font,angle,width)}var textStyle,layerCache,styleCache,info;text=""+text;if(typeof font==="object"){textStyle=font.style+" "+font.variant+" "+font.weight+" "+font.size+"px "+font.family}else{textStyle=font}layerCache=this._textCache[layer];if(layerCache==null){layerCache=this._textCache[layer]={}}styleCache=layerCache[textStyle];if(styleCache==null){styleCache=layerCache[textStyle]={}}info=styleCache[text];if(info==null){var context=this.context;if(typeof font!=="object"){var element=$("<div>&nbsp;</div>").css("position","absolute").addClass(typeof font==="string"?font:null).appendTo(this.getTextLayer(layer));font={lineHeight:element.height(),style:element.css("font-style"),variant:element.css("font-variant"),weight:element.css("font-weight"),family:element.css("font-family"),color:element.css("color")};font.size=element.css("line-height",1).height();element.remove()}textStyle=font.style+" "+font.variant+" "+font.weight+" "+font.size+"px "+font.family;info=styleCache[text]={width:0,height:0,positions:[],lines:[],font:{definition:textStyle,color:font.color}};context.save();context.font=textStyle;var lines=(text+"").replace(/<br ?\/?>|\r\n|\r/g,"\n").split("\n");for(var i=0;i<lines.length;++i){var lineText=lines[i],measured=context.measureText(lineText);info.width=Math.max(measured.width,info.width);info.height+=font.lineHeight;info.lines.push({text:lineText,width:measured.width,height:font.lineHeight})}context.restore()}return info};Canvas.prototype.addText=function(layer,x,y,text,font,angle,width,halign,valign){if(!plot.getOptions().canvas){return addText.call(this,layer,x,y,text,font,angle,width,halign,valign)}var info=this.getTextInfo(layer,text,font,angle,width),positions=info.positions,lines=info.lines;y+=info.height/lines.length/2;if(valign=="middle"){y=Math.round(y-info.height/2)}else if(valign=="bottom"){y=Math.round(y-info.height)}else{y=Math.round(y)}if(!!(window.opera&&window.opera.version().split(".")[0]<12)){y-=2}for(var i=0,position;position=positions[i];i++){if(position.x==x&&position.y==y){position.active=true;return}}position={active:true,lines:[],x:x,y:y};positions.push(position);for(var i=0,line;line=lines[i];i++){if(halign=="center"){position.lines.push([Math.round(x-line.width/2),y])}else if(halign=="right"){position.lines.push([Math.round(x-line.width),y])}else{position.lines.push([Math.round(x),y])}y+=line.height}}}$.plot.plugins.push({init:init,options:options,name:"canvas",version:"1.0"})})(jQuery);
+ static/js/jquery.flot.categories.js view
@@ -0,0 +1,190 @@+/* Flot plugin for plotting textual data or categories.++Copyright (c) 2007-2014 IOLA and Ole Laursen.+Licensed under the MIT license.++Consider a dataset like [["February", 34], ["March", 20], ...]. This plugin+allows you to plot such a dataset directly.++To enable it, you must specify mode: "categories" on the axis with the textual+labels, e.g.++	$.plot("#placeholder", data, { xaxis: { mode: "categories" } });++By default, the labels are ordered as they are met in the data series. If you+need a different ordering, you can specify "categories" on the axis options+and list the categories there:++	xaxis: {+		mode: "categories",+		categories: ["February", "March", "April"]+	}++If you need to customize the distances between the categories, you can specify+"categories" as an object mapping labels to values++	xaxis: {+		mode: "categories",+		categories: { "February": 1, "March": 3, "April": 4 }+	}++If you don't specify all categories, the remaining categories will be numbered+from the max value plus 1 (with a spacing of 1 between each).++Internally, the plugin works by transforming the input data through an auto-+generated mapping where the first category becomes 0, the second 1, etc.+Hence, a point like ["February", 34] becomes [0, 34] internally in Flot (this+is visible in hover and click events that return numbers rather than the+category labels). The plugin also overrides the tick generator to spit out the+categories as ticks instead of the values.++If you need to map a value back to its label, the mapping is always accessible+as "categories" on the axis object, e.g. plot.getAxes().xaxis.categories.++*/++(function ($) {+    var options = {+        xaxis: {+            categories: null+        },+        yaxis: {+            categories: null+        }+    };+    +    function processRawData(plot, series, data, datapoints) {+        // if categories are enabled, we need to disable+        // auto-transformation to numbers so the strings are intact+        // for later processing++        var xCategories = series.xaxis.options.mode == "categories",+            yCategories = series.yaxis.options.mode == "categories";+        +        if (!(xCategories || yCategories))+            return;++        var format = datapoints.format;++        if (!format) {+            // FIXME: auto-detection should really not be defined here+            var s = series;+            format = [];+            format.push({ x: true, number: true, required: true });+            format.push({ y: true, number: true, required: true });++            if (s.bars.show || (s.lines.show && s.lines.fill)) {+                var autoscale = !!((s.bars.show && s.bars.zero) || (s.lines.show && s.lines.zero));+                format.push({ y: true, number: true, required: false, defaultValue: 0, autoscale: autoscale });+                if (s.bars.horizontal) {+                    delete format[format.length - 1].y;+                    format[format.length - 1].x = true;+                }+            }+            +            datapoints.format = format;+        }++        for (var m = 0; m < format.length; ++m) {+            if (format[m].x && xCategories)+                format[m].number = false;+            +            if (format[m].y && yCategories)+                format[m].number = false;+        }+    }++    function getNextIndex(categories) {+        var index = -1;+        +        for (var v in categories)+            if (categories[v] > index)+                index = categories[v];++        return index + 1;+    }++    function categoriesTickGenerator(axis) {+        var res = [];+        for (var label in axis.categories) {+            var v = axis.categories[label];+            if (v >= axis.min && v <= axis.max)+                res.push([v, label]);+        }++        res.sort(function (a, b) { return a[0] - b[0]; });++        return res;+    }+    +    function setupCategoriesForAxis(series, axis, datapoints) {+        if (series[axis].options.mode != "categories")+            return;+        +        if (!series[axis].categories) {+            // parse options+            var c = {}, o = series[axis].options.categories || {};+            if ($.isArray(o)) {+                for (var i = 0; i < o.length; ++i)+                    c[o[i]] = i;+            }+            else {+                for (var v in o)+                    c[v] = o[v];+            }+            +            series[axis].categories = c;+        }++        // fix ticks+        if (!series[axis].options.ticks)+            series[axis].options.ticks = categoriesTickGenerator;++        transformPointsOnAxis(datapoints, axis, series[axis].categories);+    }+    +    function transformPointsOnAxis(datapoints, axis, categories) {+        // go through the points, transforming them+        var points = datapoints.points,+            ps = datapoints.pointsize,+            format = datapoints.format,+            formatColumn = axis.charAt(0),+            index = getNextIndex(categories);++        for (var i = 0; i < points.length; i += ps) {+            if (points[i] == null)+                continue;+            +            for (var m = 0; m < ps; ++m) {+                var val = points[i + m];++                if (val == null || !format[m][formatColumn])+                    continue;++                if (!(val in categories)) {+                    categories[val] = index;+                    ++index;+                }+                +                points[i + m] = categories[val];+            }+        }+    }++    function processDatapoints(plot, series, datapoints) {+        setupCategoriesForAxis(series, "xaxis", datapoints);+        setupCategoriesForAxis(series, "yaxis", datapoints);+    }++    function init(plot) {+        plot.hooks.processRawData.push(processRawData);+        plot.hooks.processDatapoints.push(processDatapoints);+    }+    +    $.plot.plugins.push({+        init: init,+        options: options,+        name: 'categories',+        version: '1.0'+    });+})(jQuery);
+ static/js/jquery.flot.categories.min.js view
@@ -0,0 +1,7 @@+/* Javascript plotting library for jQuery, version 0.8.3.++Copyright (c) 2007-2014 IOLA and Ole Laursen.+Licensed under the MIT license.++*/+(function($){var options={xaxis:{categories:null},yaxis:{categories:null}};function processRawData(plot,series,data,datapoints){var xCategories=series.xaxis.options.mode=="categories",yCategories=series.yaxis.options.mode=="categories";if(!(xCategories||yCategories))return;var format=datapoints.format;if(!format){var s=series;format=[];format.push({x:true,number:true,required:true});format.push({y:true,number:true,required:true});if(s.bars.show||s.lines.show&&s.lines.fill){var autoscale=!!(s.bars.show&&s.bars.zero||s.lines.show&&s.lines.zero);format.push({y:true,number:true,required:false,defaultValue:0,autoscale:autoscale});if(s.bars.horizontal){delete format[format.length-1].y;format[format.length-1].x=true}}datapoints.format=format}for(var m=0;m<format.length;++m){if(format[m].x&&xCategories)format[m].number=false;if(format[m].y&&yCategories)format[m].number=false}}function getNextIndex(categories){var index=-1;for(var v in categories)if(categories[v]>index)index=categories[v];return index+1}function categoriesTickGenerator(axis){var res=[];for(var label in axis.categories){var v=axis.categories[label];if(v>=axis.min&&v<=axis.max)res.push([v,label])}res.sort(function(a,b){return a[0]-b[0]});return res}function setupCategoriesForAxis(series,axis,datapoints){if(series[axis].options.mode!="categories")return;if(!series[axis].categories){var c={},o=series[axis].options.categories||{};if($.isArray(o)){for(var i=0;i<o.length;++i)c[o[i]]=i}else{for(var v in o)c[v]=o[v]}series[axis].categories=c}if(!series[axis].options.ticks)series[axis].options.ticks=categoriesTickGenerator;transformPointsOnAxis(datapoints,axis,series[axis].categories)}function transformPointsOnAxis(datapoints,axis,categories){var points=datapoints.points,ps=datapoints.pointsize,format=datapoints.format,formatColumn=axis.charAt(0),index=getNextIndex(categories);for(var i=0;i<points.length;i+=ps){if(points[i]==null)continue;for(var m=0;m<ps;++m){var val=points[i+m];if(val==null||!format[m][formatColumn])continue;if(!(val in categories)){categories[val]=index;++index}points[i+m]=categories[val]}}}function processDatapoints(plot,series,datapoints){setupCategoriesForAxis(series,"xaxis",datapoints);setupCategoriesForAxis(series,"yaxis",datapoints)}function init(plot){plot.hooks.processRawData.push(processRawData);plot.hooks.processDatapoints.push(processDatapoints)}$.plot.plugins.push({init:init,options:options,name:"categories",version:"1.0"})})(jQuery);
+ static/js/jquery.flot.crosshair.js view
@@ -0,0 +1,176 @@+/* Flot plugin for showing crosshairs when the mouse hovers over the plot.++Copyright (c) 2007-2014 IOLA and Ole Laursen.+Licensed under the MIT license.++The plugin supports these options:++	crosshair: {+		mode: null or "x" or "y" or "xy"+		color: color+		lineWidth: number+	}++Set the mode to one of "x", "y" or "xy". The "x" mode enables a vertical+crosshair that lets you trace the values on the x axis, "y" enables a+horizontal crosshair and "xy" enables them both. "color" is the color of the+crosshair (default is "rgba(170, 0, 0, 0.80)"), "lineWidth" is the width of+the drawn lines (default is 1).++The plugin also adds four public methods:++  - setCrosshair( pos )++    Set the position of the crosshair. Note that this is cleared if the user+    moves the mouse. "pos" is in coordinates of the plot and should be on the+    form { x: xpos, y: ypos } (you can use x2/x3/... if you're using multiple+    axes), which is coincidentally the same format as what you get from a+    "plothover" event. If "pos" is null, the crosshair is cleared.++  - clearCrosshair()++    Clear the crosshair.++  - lockCrosshair(pos)++    Cause the crosshair to lock to the current location, no longer updating if+    the user moves the mouse. Optionally supply a position (passed on to+    setCrosshair()) to move it to.++    Example usage:++	var myFlot = $.plot( $("#graph"), ..., { crosshair: { mode: "x" } } };+	$("#graph").bind( "plothover", function ( evt, position, item ) {+		if ( item ) {+			// Lock the crosshair to the data point being hovered+			myFlot.lockCrosshair({+				x: item.datapoint[ 0 ],+				y: item.datapoint[ 1 ]+			});+		} else {+			// Return normal crosshair operation+			myFlot.unlockCrosshair();+		}+	});++  - unlockCrosshair()++    Free the crosshair to move again after locking it.+*/++(function ($) {+    var options = {+        crosshair: {+            mode: null, // one of null, "x", "y" or "xy",+            color: "rgba(170, 0, 0, 0.80)",+            lineWidth: 1+        }+    };+    +    function init(plot) {+        // position of crosshair in pixels+        var crosshair = { x: -1, y: -1, locked: false };++        plot.setCrosshair = function setCrosshair(pos) {+            if (!pos)+                crosshair.x = -1;+            else {+                var o = plot.p2c(pos);+                crosshair.x = Math.max(0, Math.min(o.left, plot.width()));+                crosshair.y = Math.max(0, Math.min(o.top, plot.height()));+            }+            +            plot.triggerRedrawOverlay();+        };+        +        plot.clearCrosshair = plot.setCrosshair; // passes null for pos+        +        plot.lockCrosshair = function lockCrosshair(pos) {+            if (pos)+                plot.setCrosshair(pos);+            crosshair.locked = true;+        };++        plot.unlockCrosshair = function unlockCrosshair() {+            crosshair.locked = false;+        };++        function onMouseOut(e) {+            if (crosshair.locked)+                return;++            if (crosshair.x != -1) {+                crosshair.x = -1;+                plot.triggerRedrawOverlay();+            }+        }++        function onMouseMove(e) {+            if (crosshair.locked)+                return;+                +            if (plot.getSelection && plot.getSelection()) {+                crosshair.x = -1; // hide the crosshair while selecting+                return;+            }+                +            var offset = plot.offset();+            crosshair.x = Math.max(0, Math.min(e.pageX - offset.left, plot.width()));+            crosshair.y = Math.max(0, Math.min(e.pageY - offset.top, plot.height()));+            plot.triggerRedrawOverlay();+        }+        +        plot.hooks.bindEvents.push(function (plot, eventHolder) {+            if (!plot.getOptions().crosshair.mode)+                return;++            eventHolder.mouseout(onMouseOut);+            eventHolder.mousemove(onMouseMove);+        });++        plot.hooks.drawOverlay.push(function (plot, ctx) {+            var c = plot.getOptions().crosshair;+            if (!c.mode)+                return;++            var plotOffset = plot.getPlotOffset();+            +            ctx.save();+            ctx.translate(plotOffset.left, plotOffset.top);++            if (crosshair.x != -1) {+                var adj = plot.getOptions().crosshair.lineWidth % 2 ? 0.5 : 0;++                ctx.strokeStyle = c.color;+                ctx.lineWidth = c.lineWidth;+                ctx.lineJoin = "round";++                ctx.beginPath();+                if (c.mode.indexOf("x") != -1) {+                    var drawX = Math.floor(crosshair.x) + adj;+                    ctx.moveTo(drawX, 0);+                    ctx.lineTo(drawX, plot.height());+                }+                if (c.mode.indexOf("y") != -1) {+                    var drawY = Math.floor(crosshair.y) + adj;+                    ctx.moveTo(0, drawY);+                    ctx.lineTo(plot.width(), drawY);+                }+                ctx.stroke();+            }+            ctx.restore();+        });++        plot.hooks.shutdown.push(function (plot, eventHolder) {+            eventHolder.unbind("mouseout", onMouseOut);+            eventHolder.unbind("mousemove", onMouseMove);+        });+    }+    +    $.plot.plugins.push({+        init: init,+        options: options,+        name: 'crosshair',+        version: '1.0'+    });+})(jQuery);
+ static/js/jquery.flot.crosshair.min.js view
@@ -0,0 +1,7 @@+/* Javascript plotting library for jQuery, version 0.8.3.++Copyright (c) 2007-2014 IOLA and Ole Laursen.+Licensed under the MIT license.++*/+(function($){var options={crosshair:{mode:null,color:"rgba(170, 0, 0, 0.80)",lineWidth:1}};function init(plot){var crosshair={x:-1,y:-1,locked:false};plot.setCrosshair=function setCrosshair(pos){if(!pos)crosshair.x=-1;else{var o=plot.p2c(pos);crosshair.x=Math.max(0,Math.min(o.left,plot.width()));crosshair.y=Math.max(0,Math.min(o.top,plot.height()))}plot.triggerRedrawOverlay()};plot.clearCrosshair=plot.setCrosshair;plot.lockCrosshair=function lockCrosshair(pos){if(pos)plot.setCrosshair(pos);crosshair.locked=true};plot.unlockCrosshair=function unlockCrosshair(){crosshair.locked=false};function onMouseOut(e){if(crosshair.locked)return;if(crosshair.x!=-1){crosshair.x=-1;plot.triggerRedrawOverlay()}}function onMouseMove(e){if(crosshair.locked)return;if(plot.getSelection&&plot.getSelection()){crosshair.x=-1;return}var offset=plot.offset();crosshair.x=Math.max(0,Math.min(e.pageX-offset.left,plot.width()));crosshair.y=Math.max(0,Math.min(e.pageY-offset.top,plot.height()));plot.triggerRedrawOverlay()}plot.hooks.bindEvents.push(function(plot,eventHolder){if(!plot.getOptions().crosshair.mode)return;eventHolder.mouseout(onMouseOut);eventHolder.mousemove(onMouseMove)});plot.hooks.drawOverlay.push(function(plot,ctx){var c=plot.getOptions().crosshair;if(!c.mode)return;var plotOffset=plot.getPlotOffset();ctx.save();ctx.translate(plotOffset.left,plotOffset.top);if(crosshair.x!=-1){var adj=plot.getOptions().crosshair.lineWidth%2?.5:0;ctx.strokeStyle=c.color;ctx.lineWidth=c.lineWidth;ctx.lineJoin="round";ctx.beginPath();if(c.mode.indexOf("x")!=-1){var drawX=Math.floor(crosshair.x)+adj;ctx.moveTo(drawX,0);ctx.lineTo(drawX,plot.height())}if(c.mode.indexOf("y")!=-1){var drawY=Math.floor(crosshair.y)+adj;ctx.moveTo(0,drawY);ctx.lineTo(plot.width(),drawY)}ctx.stroke()}ctx.restore()});plot.hooks.shutdown.push(function(plot,eventHolder){eventHolder.unbind("mouseout",onMouseOut);eventHolder.unbind("mousemove",onMouseMove)})}$.plot.plugins.push({init:init,options:options,name:"crosshair",version:"1.0"})})(jQuery);
+ static/js/jquery.flot.errorbars.js view
@@ -0,0 +1,353 @@+/* Flot plugin for plotting error bars.++Copyright (c) 2007-2014 IOLA and Ole Laursen.+Licensed under the MIT license.++Error bars are used to show standard deviation and other statistical+properties in a plot.++* Created by Rui Pereira  -  rui (dot) pereira (at) gmail (dot) com++This plugin allows you to plot error-bars over points. Set "errorbars" inside+the points series to the axis name over which there will be error values in+your data array (*even* if you do not intend to plot them later, by setting+"show: null" on xerr/yerr).++The plugin supports these options:++	series: {+		points: {+			errorbars: "x" or "y" or "xy",+			xerr: {+				show: null/false or true,+				asymmetric: null/false or true,+				upperCap: null or "-" or function,+				lowerCap: null or "-" or function,+				color: null or color,+				radius: null or number+			},+			yerr: { same options as xerr }+		}+	}++Each data point array is expected to be of the type:++	"x"  [ x, y, xerr ]+	"y"  [ x, y, yerr ]+	"xy" [ x, y, xerr, yerr ]++Where xerr becomes xerr_lower,xerr_upper for the asymmetric error case, and+equivalently for yerr. Eg., a datapoint for the "xy" case with symmetric+error-bars on X and asymmetric on Y would be:++	[ x, y, xerr, yerr_lower, yerr_upper ]++By default no end caps are drawn. Setting upperCap and/or lowerCap to "-" will+draw a small cap perpendicular to the error bar. They can also be set to a+user-defined drawing function, with (ctx, x, y, radius) as parameters, as eg.++	function drawSemiCircle( ctx, x, y, radius ) {+		ctx.beginPath();+		ctx.arc( x, y, radius, 0, Math.PI, false );+		ctx.moveTo( x - radius, y );+		ctx.lineTo( x + radius, y );+		ctx.stroke();+	}++Color and radius both default to the same ones of the points series if not+set. The independent radius parameter on xerr/yerr is useful for the case when+we may want to add error-bars to a line, without showing the interconnecting+points (with radius: 0), and still showing end caps on the error-bars.+shadowSize and lineWidth are derived as well from the points series.++*/++(function ($) {+    var options = {+        series: {+            points: {+                errorbars: null, //should be 'x', 'y' or 'xy'+                xerr: { err: 'x', show: null, asymmetric: null, upperCap: null, lowerCap: null, color: null, radius: null},+                yerr: { err: 'y', show: null, asymmetric: null, upperCap: null, lowerCap: null, color: null, radius: null}+            }+        }+    };++    function processRawData(plot, series, data, datapoints){+        if (!series.points.errorbars)+            return;++        // x,y values+        var format = [+            { x: true, number: true, required: true },+            { y: true, number: true, required: true }+        ];++        var errors = series.points.errorbars;+        // error bars - first X then Y+        if (errors == 'x' || errors == 'xy') {+            // lower / upper error+            if (series.points.xerr.asymmetric) {+                format.push({ x: true, number: true, required: true });+                format.push({ x: true, number: true, required: true });+            } else+                format.push({ x: true, number: true, required: true });+        }+        if (errors == 'y' || errors == 'xy') {+            // lower / upper error+            if (series.points.yerr.asymmetric) {+                format.push({ y: true, number: true, required: true });+                format.push({ y: true, number: true, required: true });+            } else+                format.push({ y: true, number: true, required: true });+        }+        datapoints.format = format;+    }++    function parseErrors(series, i){++        var points = series.datapoints.points;++        // read errors from points array+        var exl = null,+                exu = null,+                eyl = null,+                eyu = null;+        var xerr = series.points.xerr,+                yerr = series.points.yerr;++        var eb = series.points.errorbars;+        // error bars - first X+        if (eb == 'x' || eb == 'xy') {+            if (xerr.asymmetric) {+                exl = points[i + 2];+                exu = points[i + 3];+                if (eb == 'xy')+                    if (yerr.asymmetric){+                        eyl = points[i + 4];+                        eyu = points[i + 5];+                    } else eyl = points[i + 4];+            } else {+                exl = points[i + 2];+                if (eb == 'xy')+                    if (yerr.asymmetric) {+                        eyl = points[i + 3];+                        eyu = points[i + 4];+                    } else eyl = points[i + 3];+            }+        // only Y+        } else if (eb == 'y')+            if (yerr.asymmetric) {+                eyl = points[i + 2];+                eyu = points[i + 3];+            } else eyl = points[i + 2];++        // symmetric errors?+        if (exu == null) exu = exl;+        if (eyu == null) eyu = eyl;++        var errRanges = [exl, exu, eyl, eyu];+        // nullify if not showing+        if (!xerr.show){+            errRanges[0] = null;+            errRanges[1] = null;+        }+        if (!yerr.show){+            errRanges[2] = null;+            errRanges[3] = null;+        }+        return errRanges;+    }++    function drawSeriesErrors(plot, ctx, s){++        var points = s.datapoints.points,+                ps = s.datapoints.pointsize,+                ax = [s.xaxis, s.yaxis],+                radius = s.points.radius,+                err = [s.points.xerr, s.points.yerr];++        //sanity check, in case some inverted axis hack is applied to flot+        var invertX = false;+        if (ax[0].p2c(ax[0].max) < ax[0].p2c(ax[0].min)) {+            invertX = true;+            var tmp = err[0].lowerCap;+            err[0].lowerCap = err[0].upperCap;+            err[0].upperCap = tmp;+        }++        var invertY = false;+        if (ax[1].p2c(ax[1].min) < ax[1].p2c(ax[1].max)) {+            invertY = true;+            var tmp = err[1].lowerCap;+            err[1].lowerCap = err[1].upperCap;+            err[1].upperCap = tmp;+        }++        for (var i = 0; i < s.datapoints.points.length; i += ps) {++            //parse+            var errRanges = parseErrors(s, i);++            //cycle xerr & yerr+            for (var e = 0; e < err.length; e++){++                var minmax = [ax[e].min, ax[e].max];++                //draw this error?+                if (errRanges[e * err.length]){++                    //data coordinates+                    var x = points[i],+                        y = points[i + 1];++                    //errorbar ranges+                    var upper = [x, y][e] + errRanges[e * err.length + 1],+                        lower = [x, y][e] - errRanges[e * err.length];++                    //points outside of the canvas+                    if (err[e].err == 'x')+                        if (y > ax[1].max || y < ax[1].min || upper < ax[0].min || lower > ax[0].max)+                            continue;+                    if (err[e].err == 'y')+                        if (x > ax[0].max || x < ax[0].min || upper < ax[1].min || lower > ax[1].max)+                            continue;++                    // prevent errorbars getting out of the canvas+                    var drawUpper = true,+                        drawLower = true;++                    if (upper > minmax[1]) {+                        drawUpper = false;+                        upper = minmax[1];+                    }+                    if (lower < minmax[0]) {+                        drawLower = false;+                        lower = minmax[0];+                    }++                    //sanity check, in case some inverted axis hack is applied to flot+                    if ((err[e].err == 'x' && invertX) || (err[e].err == 'y' && invertY)) {+                        //swap coordinates+                        var tmp = lower;+                        lower = upper;+                        upper = tmp;+                        tmp = drawLower;+                        drawLower = drawUpper;+                        drawUpper = tmp;+                        tmp = minmax[0];+                        minmax[0] = minmax[1];+                        minmax[1] = tmp;+                    }++                    // convert to pixels+                    x = ax[0].p2c(x),+                        y = ax[1].p2c(y),+                        upper = ax[e].p2c(upper);+                    lower = ax[e].p2c(lower);+                    minmax[0] = ax[e].p2c(minmax[0]);+                    minmax[1] = ax[e].p2c(minmax[1]);++                    //same style as points by default+                    var lw = err[e].lineWidth ? err[e].lineWidth : s.points.lineWidth,+                        sw = s.points.shadowSize != null ? s.points.shadowSize : s.shadowSize;++                    //shadow as for points+                    if (lw > 0 && sw > 0) {+                        var w = sw / 2;+                        ctx.lineWidth = w;+                        ctx.strokeStyle = "rgba(0,0,0,0.1)";+                        drawError(ctx, err[e], x, y, upper, lower, drawUpper, drawLower, radius, w + w/2, minmax);++                        ctx.strokeStyle = "rgba(0,0,0,0.2)";+                        drawError(ctx, err[e], x, y, upper, lower, drawUpper, drawLower, radius, w/2, minmax);+                    }++                    ctx.strokeStyle = err[e].color? err[e].color: s.color;+                    ctx.lineWidth = lw;+                    //draw it+                    drawError(ctx, err[e], x, y, upper, lower, drawUpper, drawLower, radius, 0, minmax);+                }+            }+        }+    }++    function drawError(ctx,err,x,y,upper,lower,drawUpper,drawLower,radius,offset,minmax){++        //shadow offset+        y += offset;+        upper += offset;+        lower += offset;++        // error bar - avoid plotting over circles+        if (err.err == 'x'){+            if (upper > x + radius) drawPath(ctx, [[upper,y],[Math.max(x + radius,minmax[0]),y]]);+            else drawUpper = false;+            if (lower < x - radius) drawPath(ctx, [[Math.min(x - radius,minmax[1]),y],[lower,y]] );+            else drawLower = false;+        }+        else {+            if (upper < y - radius) drawPath(ctx, [[x,upper],[x,Math.min(y - radius,minmax[0])]] );+            else drawUpper = false;+            if (lower > y + radius) drawPath(ctx, [[x,Math.max(y + radius,minmax[1])],[x,lower]] );+            else drawLower = false;+        }++        //internal radius value in errorbar, allows to plot radius 0 points and still keep proper sized caps+        //this is a way to get errorbars on lines without visible connecting dots+        radius = err.radius != null? err.radius: radius;++        // upper cap+        if (drawUpper) {+            if (err.upperCap == '-'){+                if (err.err=='x') drawPath(ctx, [[upper,y - radius],[upper,y + radius]] );+                else drawPath(ctx, [[x - radius,upper],[x + radius,upper]] );+            } else if ($.isFunction(err.upperCap)){+                if (err.err=='x') err.upperCap(ctx, upper, y, radius);+                else err.upperCap(ctx, x, upper, radius);+            }+        }+        // lower cap+        if (drawLower) {+            if (err.lowerCap == '-'){+                if (err.err=='x') drawPath(ctx, [[lower,y - radius],[lower,y + radius]] );+                else drawPath(ctx, [[x - radius,lower],[x + radius,lower]] );+            } else if ($.isFunction(err.lowerCap)){+                if (err.err=='x') err.lowerCap(ctx, lower, y, radius);+                else err.lowerCap(ctx, x, lower, radius);+            }+        }+    }++    function drawPath(ctx, pts){+        ctx.beginPath();+        ctx.moveTo(pts[0][0], pts[0][1]);+        for (var p=1; p < pts.length; p++)+            ctx.lineTo(pts[p][0], pts[p][1]);+        ctx.stroke();+    }++    function draw(plot, ctx){+        var plotOffset = plot.getPlotOffset();++        ctx.save();+        ctx.translate(plotOffset.left, plotOffset.top);+        $.each(plot.getData(), function (i, s) {+            if (s.points.errorbars && (s.points.xerr.show || s.points.yerr.show))+                drawSeriesErrors(plot, ctx, s);+        });+        ctx.restore();+    }++    function init(plot) {+        plot.hooks.processRawData.push(processRawData);+        plot.hooks.draw.push(draw);+    }++    $.plot.plugins.push({+                init: init,+                options: options,+                name: 'errorbars',+                version: '1.0'+            });+})(jQuery);
+ static/js/jquery.flot.errorbars.min.js view
@@ -0,0 +1,7 @@+/* Javascript plotting library for jQuery, version 0.8.3.++Copyright (c) 2007-2014 IOLA and Ole Laursen.+Licensed under the MIT license.++*/+(function($){var options={series:{points:{errorbars:null,xerr:{err:"x",show:null,asymmetric:null,upperCap:null,lowerCap:null,color:null,radius:null},yerr:{err:"y",show:null,asymmetric:null,upperCap:null,lowerCap:null,color:null,radius:null}}}};function processRawData(plot,series,data,datapoints){if(!series.points.errorbars)return;var format=[{x:true,number:true,required:true},{y:true,number:true,required:true}];var errors=series.points.errorbars;if(errors=="x"||errors=="xy"){if(series.points.xerr.asymmetric){format.push({x:true,number:true,required:true});format.push({x:true,number:true,required:true})}else format.push({x:true,number:true,required:true})}if(errors=="y"||errors=="xy"){if(series.points.yerr.asymmetric){format.push({y:true,number:true,required:true});format.push({y:true,number:true,required:true})}else format.push({y:true,number:true,required:true})}datapoints.format=format}function parseErrors(series,i){var points=series.datapoints.points;var exl=null,exu=null,eyl=null,eyu=null;var xerr=series.points.xerr,yerr=series.points.yerr;var eb=series.points.errorbars;if(eb=="x"||eb=="xy"){if(xerr.asymmetric){exl=points[i+2];exu=points[i+3];if(eb=="xy")if(yerr.asymmetric){eyl=points[i+4];eyu=points[i+5]}else eyl=points[i+4]}else{exl=points[i+2];if(eb=="xy")if(yerr.asymmetric){eyl=points[i+3];eyu=points[i+4]}else eyl=points[i+3]}}else if(eb=="y")if(yerr.asymmetric){eyl=points[i+2];eyu=points[i+3]}else eyl=points[i+2];if(exu==null)exu=exl;if(eyu==null)eyu=eyl;var errRanges=[exl,exu,eyl,eyu];if(!xerr.show){errRanges[0]=null;errRanges[1]=null}if(!yerr.show){errRanges[2]=null;errRanges[3]=null}return errRanges}function drawSeriesErrors(plot,ctx,s){var points=s.datapoints.points,ps=s.datapoints.pointsize,ax=[s.xaxis,s.yaxis],radius=s.points.radius,err=[s.points.xerr,s.points.yerr];var invertX=false;if(ax[0].p2c(ax[0].max)<ax[0].p2c(ax[0].min)){invertX=true;var tmp=err[0].lowerCap;err[0].lowerCap=err[0].upperCap;err[0].upperCap=tmp}var invertY=false;if(ax[1].p2c(ax[1].min)<ax[1].p2c(ax[1].max)){invertY=true;var tmp=err[1].lowerCap;err[1].lowerCap=err[1].upperCap;err[1].upperCap=tmp}for(var i=0;i<s.datapoints.points.length;i+=ps){var errRanges=parseErrors(s,i);for(var e=0;e<err.length;e++){var minmax=[ax[e].min,ax[e].max];if(errRanges[e*err.length]){var x=points[i],y=points[i+1];var upper=[x,y][e]+errRanges[e*err.length+1],lower=[x,y][e]-errRanges[e*err.length];if(err[e].err=="x")if(y>ax[1].max||y<ax[1].min||upper<ax[0].min||lower>ax[0].max)continue;if(err[e].err=="y")if(x>ax[0].max||x<ax[0].min||upper<ax[1].min||lower>ax[1].max)continue;var drawUpper=true,drawLower=true;if(upper>minmax[1]){drawUpper=false;upper=minmax[1]}if(lower<minmax[0]){drawLower=false;lower=minmax[0]}if(err[e].err=="x"&&invertX||err[e].err=="y"&&invertY){var tmp=lower;lower=upper;upper=tmp;tmp=drawLower;drawLower=drawUpper;drawUpper=tmp;tmp=minmax[0];minmax[0]=minmax[1];minmax[1]=tmp}x=ax[0].p2c(x),y=ax[1].p2c(y),upper=ax[e].p2c(upper);lower=ax[e].p2c(lower);minmax[0]=ax[e].p2c(minmax[0]);minmax[1]=ax[e].p2c(minmax[1]);var lw=err[e].lineWidth?err[e].lineWidth:s.points.lineWidth,sw=s.points.shadowSize!=null?s.points.shadowSize:s.shadowSize;if(lw>0&&sw>0){var w=sw/2;ctx.lineWidth=w;ctx.strokeStyle="rgba(0,0,0,0.1)";drawError(ctx,err[e],x,y,upper,lower,drawUpper,drawLower,radius,w+w/2,minmax);ctx.strokeStyle="rgba(0,0,0,0.2)";drawError(ctx,err[e],x,y,upper,lower,drawUpper,drawLower,radius,w/2,minmax)}ctx.strokeStyle=err[e].color?err[e].color:s.color;ctx.lineWidth=lw;drawError(ctx,err[e],x,y,upper,lower,drawUpper,drawLower,radius,0,minmax)}}}}function drawError(ctx,err,x,y,upper,lower,drawUpper,drawLower,radius,offset,minmax){y+=offset;upper+=offset;lower+=offset;if(err.err=="x"){if(upper>x+radius)drawPath(ctx,[[upper,y],[Math.max(x+radius,minmax[0]),y]]);else drawUpper=false;if(lower<x-radius)drawPath(ctx,[[Math.min(x-radius,minmax[1]),y],[lower,y]]);else drawLower=false}else{if(upper<y-radius)drawPath(ctx,[[x,upper],[x,Math.min(y-radius,minmax[0])]]);else drawUpper=false;if(lower>y+radius)drawPath(ctx,[[x,Math.max(y+radius,minmax[1])],[x,lower]]);else drawLower=false}radius=err.radius!=null?err.radius:radius;if(drawUpper){if(err.upperCap=="-"){if(err.err=="x")drawPath(ctx,[[upper,y-radius],[upper,y+radius]]);else drawPath(ctx,[[x-radius,upper],[x+radius,upper]])}else if($.isFunction(err.upperCap)){if(err.err=="x")err.upperCap(ctx,upper,y,radius);else err.upperCap(ctx,x,upper,radius)}}if(drawLower){if(err.lowerCap=="-"){if(err.err=="x")drawPath(ctx,[[lower,y-radius],[lower,y+radius]]);else drawPath(ctx,[[x-radius,lower],[x+radius,lower]])}else if($.isFunction(err.lowerCap)){if(err.err=="x")err.lowerCap(ctx,lower,y,radius);else err.lowerCap(ctx,x,lower,radius)}}}function drawPath(ctx,pts){ctx.beginPath();ctx.moveTo(pts[0][0],pts[0][1]);for(var p=1;p<pts.length;p++)ctx.lineTo(pts[p][0],pts[p][1]);ctx.stroke()}function draw(plot,ctx){var plotOffset=plot.getPlotOffset();ctx.save();ctx.translate(plotOffset.left,plotOffset.top);$.each(plot.getData(),function(i,s){if(s.points.errorbars&&(s.points.xerr.show||s.points.yerr.show))drawSeriesErrors(plot,ctx,s)});ctx.restore()}function init(plot){plot.hooks.processRawData.push(processRawData);plot.hooks.draw.push(draw)}$.plot.plugins.push({init:init,options:options,name:"errorbars",version:"1.0"})})(jQuery);
+ static/js/jquery.flot.fillbetween.js view
@@ -0,0 +1,226 @@+/* Flot plugin for computing bottoms for filled line and bar charts.++Copyright (c) 2007-2014 IOLA and Ole Laursen.+Licensed under the MIT license.++The case: you've got two series that you want to fill the area between. In Flot+terms, you need to use one as the fill bottom of the other. You can specify the+bottom of each data point as the third coordinate manually, or you can use this+plugin to compute it for you.++In order to name the other series, you need to give it an id, like this:++	var dataset = [+		{ data: [ ... ], id: "foo" } ,         // use default bottom+		{ data: [ ... ], fillBetween: "foo" }, // use first dataset as bottom+	];++	$.plot($("#placeholder"), dataset, { lines: { show: true, fill: true }});++As a convenience, if the id given is a number that doesn't appear as an id in+the series, it is interpreted as the index in the array instead (so fillBetween:+0 can also mean the first series).++Internally, the plugin modifies the datapoints in each series. For line series,+extra data points might be inserted through interpolation. Note that at points+where the bottom line is not defined (due to a null point or start/end of line),+the current line will show a gap too. The algorithm comes from the+jquery.flot.stack.js plugin, possibly some code could be shared.++*/++(function ( $ ) {++	var options = {+		series: {+			fillBetween: null	// or number+		}+	};++	function init( plot ) {++		function findBottomSeries( s, allseries ) {++			var i;++			for ( i = 0; i < allseries.length; ++i ) {+				if ( allseries[ i ].id === s.fillBetween ) {+					return allseries[ i ];+				}+			}++			if ( typeof s.fillBetween === "number" ) {+				if ( s.fillBetween < 0 || s.fillBetween >= allseries.length ) {+					return null;+				}+				return allseries[ s.fillBetween ];+			}++			return null;+		}++		function computeFillBottoms( plot, s, datapoints ) {++			if ( s.fillBetween == null ) {+				return;+			}++			var other = findBottomSeries( s, plot.getData() );++			if ( !other ) {+				return;+			}++			var ps = datapoints.pointsize,+				points = datapoints.points,+				otherps = other.datapoints.pointsize,+				otherpoints = other.datapoints.points,+				newpoints = [],+				px, py, intery, qx, qy, bottom,+				withlines = s.lines.show,+				withbottom = ps > 2 && datapoints.format[2].y,+				withsteps = withlines && s.lines.steps,+				fromgap = true,+				i = 0,+				j = 0,+				l, m;++			while ( true ) {++				if ( i >= points.length ) {+					break;+				}++				l = newpoints.length;++				if ( points[ i ] == null ) {++					// copy gaps++					for ( m = 0; m < ps; ++m ) {+						newpoints.push( points[ i + m ] );+					}++					i += ps;++				} else if ( j >= otherpoints.length ) {++					// for lines, we can't use the rest of the points++					if ( !withlines ) {+						for ( m = 0; m < ps; ++m ) {+							newpoints.push( points[ i + m ] );+						}+					}++					i += ps;++				} else if ( otherpoints[ j ] == null ) {++					// oops, got a gap++					for ( m = 0; m < ps; ++m ) {+						newpoints.push( null );+					}++					fromgap = true;+					j += otherps;++				} else {++					// cases where we actually got two points++					px = points[ i ];+					py = points[ i + 1 ];+					qx = otherpoints[ j ];+					qy = otherpoints[ j + 1 ];+					bottom = 0;++					if ( px === qx ) {++						for ( m = 0; m < ps; ++m ) {+							newpoints.push( points[ i + m ] );+						}++						//newpoints[ l + 1 ] += qy;+						bottom = qy;++						i += ps;+						j += otherps;++					} else if ( px > qx ) {++						// we got past point below, might need to+						// insert interpolated extra point++						if ( withlines && i > 0 && points[ i - ps ] != null ) {+							intery = py + ( points[ i - ps + 1 ] - py ) * ( qx - px ) / ( points[ i - ps ] - px );+							newpoints.push( qx );+							newpoints.push( intery );+							for ( m = 2; m < ps; ++m ) {+								newpoints.push( points[ i + m ] );+							}+							bottom = qy;+						}++						j += otherps;++					} else { // px < qx++						// if we come from a gap, we just skip this point++						if ( fromgap && withlines ) {+							i += ps;+							continue;+						}++						for ( m = 0; m < ps; ++m ) {+							newpoints.push( points[ i + m ] );+						}++						// we might be able to interpolate a point below,+						// this can give us a better y++						if ( withlines && j > 0 && otherpoints[ j - otherps ] != null ) {+							bottom = qy + ( otherpoints[ j - otherps + 1 ] - qy ) * ( px - qx ) / ( otherpoints[ j - otherps ] - qx );+						}++						//newpoints[l + 1] += bottom;++						i += ps;+					}++					fromgap = false;++					if ( l !== newpoints.length && withbottom ) {+						newpoints[ l + 2 ] = bottom;+					}+				}++				// maintain the line steps invariant++				if ( withsteps && l !== newpoints.length && l > 0 &&+					newpoints[ l ] !== null &&+					newpoints[ l ] !== newpoints[ l - ps ] &&+					newpoints[ l + 1 ] !== newpoints[ l - ps + 1 ] ) {+					for (m = 0; m < ps; ++m) {+						newpoints[ l + ps + m ] = newpoints[ l + m ];+					}+					newpoints[ l + 1 ] = newpoints[ l - ps + 1 ];+				}+			}++			datapoints.points = newpoints;+		}++		plot.hooks.processDatapoints.push( computeFillBottoms );+	}++	$.plot.plugins.push({+		init: init,+		options: options,+		name: "fillbetween",+		version: "1.0"+	});++})(jQuery);
+ static/js/jquery.flot.fillbetween.min.js view
@@ -0,0 +1,7 @@+/* Javascript plotting library for jQuery, version 0.8.3.++Copyright (c) 2007-2014 IOLA and Ole Laursen.+Licensed under the MIT license.++*/+(function($){var options={series:{fillBetween:null}};function init(plot){function findBottomSeries(s,allseries){var i;for(i=0;i<allseries.length;++i){if(allseries[i].id===s.fillBetween){return allseries[i]}}if(typeof s.fillBetween==="number"){if(s.fillBetween<0||s.fillBetween>=allseries.length){return null}return allseries[s.fillBetween]}return null}function computeFillBottoms(plot,s,datapoints){if(s.fillBetween==null){return}var other=findBottomSeries(s,plot.getData());if(!other){return}var ps=datapoints.pointsize,points=datapoints.points,otherps=other.datapoints.pointsize,otherpoints=other.datapoints.points,newpoints=[],px,py,intery,qx,qy,bottom,withlines=s.lines.show,withbottom=ps>2&&datapoints.format[2].y,withsteps=withlines&&s.lines.steps,fromgap=true,i=0,j=0,l,m;while(true){if(i>=points.length){break}l=newpoints.length;if(points[i]==null){for(m=0;m<ps;++m){newpoints.push(points[i+m])}i+=ps}else if(j>=otherpoints.length){if(!withlines){for(m=0;m<ps;++m){newpoints.push(points[i+m])}}i+=ps}else if(otherpoints[j]==null){for(m=0;m<ps;++m){newpoints.push(null)}fromgap=true;j+=otherps}else{px=points[i];py=points[i+1];qx=otherpoints[j];qy=otherpoints[j+1];bottom=0;if(px===qx){for(m=0;m<ps;++m){newpoints.push(points[i+m])}bottom=qy;i+=ps;j+=otherps}else if(px>qx){if(withlines&&i>0&&points[i-ps]!=null){intery=py+(points[i-ps+1]-py)*(qx-px)/(points[i-ps]-px);newpoints.push(qx);newpoints.push(intery);for(m=2;m<ps;++m){newpoints.push(points[i+m])}bottom=qy}j+=otherps}else{if(fromgap&&withlines){i+=ps;continue}for(m=0;m<ps;++m){newpoints.push(points[i+m])}if(withlines&&j>0&&otherpoints[j-otherps]!=null){bottom=qy+(otherpoints[j-otherps+1]-qy)*(px-qx)/(otherpoints[j-otherps]-qx)}i+=ps}fromgap=false;if(l!==newpoints.length&&withbottom){newpoints[l+2]=bottom}}if(withsteps&&l!==newpoints.length&&l>0&&newpoints[l]!==null&&newpoints[l]!==newpoints[l-ps]&&newpoints[l+1]!==newpoints[l-ps+1]){for(m=0;m<ps;++m){newpoints[l+ps+m]=newpoints[l+m]}newpoints[l+1]=newpoints[l-ps+1]}}datapoints.points=newpoints}plot.hooks.processDatapoints.push(computeFillBottoms)}$.plot.plugins.push({init:init,options:options,name:"fillbetween",version:"1.0"})})(jQuery);
+ static/js/jquery.flot.image.js view
@@ -0,0 +1,241 @@+/* Flot plugin for plotting images.++Copyright (c) 2007-2014 IOLA and Ole Laursen.+Licensed under the MIT license.++The data syntax is [ [ image, x1, y1, x2, y2 ], ... ] where (x1, y1) and+(x2, y2) are where you intend the two opposite corners of the image to end up+in the plot. Image must be a fully loaded Javascript image (you can make one+with new Image()). If the image is not complete, it's skipped when plotting.++There are two helpers included for retrieving images. The easiest work the way+that you put in URLs instead of images in the data, like this:++	[ "myimage.png", 0, 0, 10, 10 ]++Then call $.plot.image.loadData( data, options, callback ) where data and+options are the same as you pass in to $.plot. This loads the images, replaces+the URLs in the data with the corresponding images and calls "callback" when+all images are loaded (or failed loading). In the callback, you can then call+$.plot with the data set. See the included example.++A more low-level helper, $.plot.image.load(urls, callback) is also included.+Given a list of URLs, it calls callback with an object mapping from URL to+Image object when all images are loaded or have failed loading.++The plugin supports these options:++	series: {+		images: {+			show: boolean+			anchor: "corner" or "center"+			alpha: [ 0, 1 ]+		}+	}++They can be specified for a specific series:++	$.plot( $("#placeholder"), [{+		data: [ ... ],+		images: { ... }+	])++Note that because the data format is different from usual data points, you+can't use images with anything else in a specific data series.++Setting "anchor" to "center" causes the pixels in the image to be anchored at+the corner pixel centers inside of at the pixel corners, effectively letting+half a pixel stick out to each side in the plot.++A possible future direction could be support for tiling for large images (like+Google Maps).++*/++(function ($) {+    var options = {+        series: {+            images: {+                show: false,+                alpha: 1,+                anchor: "corner" // or "center"+            }+        }+    };++    $.plot.image = {};++    $.plot.image.loadDataImages = function (series, options, callback) {+        var urls = [], points = [];++        var defaultShow = options.series.images.show;+        +        $.each(series, function (i, s) {+            if (!(defaultShow || s.images.show))+                return;+            +            if (s.data)+                s = s.data;++            $.each(s, function (i, p) {+                if (typeof p[0] == "string") {+                    urls.push(p[0]);+                    points.push(p);+                }+            });+        });++        $.plot.image.load(urls, function (loadedImages) {+            $.each(points, function (i, p) {+                var url = p[0];+                if (loadedImages[url])+                    p[0] = loadedImages[url];+            });++            callback();+        });+    }+    +    $.plot.image.load = function (urls, callback) {+        var missing = urls.length, loaded = {};+        if (missing == 0)+            callback({});++        $.each(urls, function (i, url) {+            var handler = function () {+                --missing;+                +                loaded[url] = this;+                +                if (missing == 0)+                    callback(loaded);+            };++            $('<img />').load(handler).error(handler).attr('src', url);+        });+    };+    +    function drawSeries(plot, ctx, series) {+        var plotOffset = plot.getPlotOffset();+        +        if (!series.images || !series.images.show)+            return;+        +        var points = series.datapoints.points,+            ps = series.datapoints.pointsize;+        +        for (var i = 0; i < points.length; i += ps) {+            var img = points[i],+                x1 = points[i + 1], y1 = points[i + 2],+                x2 = points[i + 3], y2 = points[i + 4],+                xaxis = series.xaxis, yaxis = series.yaxis,+                tmp;++            // actually we should check img.complete, but it+            // appears to be a somewhat unreliable indicator in+            // IE6 (false even after load event)+            if (!img || img.width <= 0 || img.height <= 0)+                continue;++            if (x1 > x2) {+                tmp = x2;+                x2 = x1;+                x1 = tmp;+            }+            if (y1 > y2) {+                tmp = y2;+                y2 = y1;+                y1 = tmp;+            }+            +            // if the anchor is at the center of the pixel, expand the +            // image by 1/2 pixel in each direction+            if (series.images.anchor == "center") {+                tmp = 0.5 * (x2-x1) / (img.width - 1);+                x1 -= tmp;+                x2 += tmp;+                tmp = 0.5 * (y2-y1) / (img.height - 1);+                y1 -= tmp;+                y2 += tmp;+            }+            +            // clip+            if (x1 == x2 || y1 == y2 ||+                x1 >= xaxis.max || x2 <= xaxis.min ||+                y1 >= yaxis.max || y2 <= yaxis.min)+                continue;++            var sx1 = 0, sy1 = 0, sx2 = img.width, sy2 = img.height;+            if (x1 < xaxis.min) {+                sx1 += (sx2 - sx1) * (xaxis.min - x1) / (x2 - x1);+                x1 = xaxis.min;+            }++            if (x2 > xaxis.max) {+                sx2 += (sx2 - sx1) * (xaxis.max - x2) / (x2 - x1);+                x2 = xaxis.max;+            }++            if (y1 < yaxis.min) {+                sy2 += (sy1 - sy2) * (yaxis.min - y1) / (y2 - y1);+                y1 = yaxis.min;+            }++            if (y2 > yaxis.max) {+                sy1 += (sy1 - sy2) * (yaxis.max - y2) / (y2 - y1);+                y2 = yaxis.max;+            }+            +            x1 = xaxis.p2c(x1);+            x2 = xaxis.p2c(x2);+            y1 = yaxis.p2c(y1);+            y2 = yaxis.p2c(y2);+            +            // the transformation may have swapped us+            if (x1 > x2) {+                tmp = x2;+                x2 = x1;+                x1 = tmp;+            }+            if (y1 > y2) {+                tmp = y2;+                y2 = y1;+                y1 = tmp;+            }++            tmp = ctx.globalAlpha;+            ctx.globalAlpha *= series.images.alpha;+            ctx.drawImage(img,+                          sx1, sy1, sx2 - sx1, sy2 - sy1,+                          x1 + plotOffset.left, y1 + plotOffset.top,+                          x2 - x1, y2 - y1);+            ctx.globalAlpha = tmp;+        }+    }++    function processRawData(plot, series, data, datapoints) {+        if (!series.images.show)+            return;++        // format is Image, x1, y1, x2, y2 (opposite corners)+        datapoints.format = [+            { required: true },+            { x: true, number: true, required: true },+            { y: true, number: true, required: true },+            { x: true, number: true, required: true },+            { y: true, number: true, required: true }+        ];+    }+    +    function init(plot) {+        plot.hooks.processRawData.push(processRawData);+        plot.hooks.drawSeries.push(drawSeries);+    }+    +    $.plot.plugins.push({+        init: init,+        options: options,+        name: 'image',+        version: '1.1'+    });+})(jQuery);
+ static/js/jquery.flot.image.min.js view
@@ -0,0 +1,7 @@+/* Javascript plotting library for jQuery, version 0.8.3.++Copyright (c) 2007-2014 IOLA and Ole Laursen.+Licensed under the MIT license.++*/+(function($){var options={series:{images:{show:false,alpha:1,anchor:"corner"}}};$.plot.image={};$.plot.image.loadDataImages=function(series,options,callback){var urls=[],points=[];var defaultShow=options.series.images.show;$.each(series,function(i,s){if(!(defaultShow||s.images.show))return;if(s.data)s=s.data;$.each(s,function(i,p){if(typeof p[0]=="string"){urls.push(p[0]);points.push(p)}})});$.plot.image.load(urls,function(loadedImages){$.each(points,function(i,p){var url=p[0];if(loadedImages[url])p[0]=loadedImages[url]});callback()})};$.plot.image.load=function(urls,callback){var missing=urls.length,loaded={};if(missing==0)callback({});$.each(urls,function(i,url){var handler=function(){--missing;loaded[url]=this;if(missing==0)callback(loaded)};$("<img />").load(handler).error(handler).attr("src",url)})};function drawSeries(plot,ctx,series){var plotOffset=plot.getPlotOffset();if(!series.images||!series.images.show)return;var points=series.datapoints.points,ps=series.datapoints.pointsize;for(var i=0;i<points.length;i+=ps){var img=points[i],x1=points[i+1],y1=points[i+2],x2=points[i+3],y2=points[i+4],xaxis=series.xaxis,yaxis=series.yaxis,tmp;if(!img||img.width<=0||img.height<=0)continue;if(x1>x2){tmp=x2;x2=x1;x1=tmp}if(y1>y2){tmp=y2;y2=y1;y1=tmp}if(series.images.anchor=="center"){tmp=.5*(x2-x1)/(img.width-1);x1-=tmp;x2+=tmp;tmp=.5*(y2-y1)/(img.height-1);y1-=tmp;y2+=tmp}if(x1==x2||y1==y2||x1>=xaxis.max||x2<=xaxis.min||y1>=yaxis.max||y2<=yaxis.min)continue;var sx1=0,sy1=0,sx2=img.width,sy2=img.height;if(x1<xaxis.min){sx1+=(sx2-sx1)*(xaxis.min-x1)/(x2-x1);x1=xaxis.min}if(x2>xaxis.max){sx2+=(sx2-sx1)*(xaxis.max-x2)/(x2-x1);x2=xaxis.max}if(y1<yaxis.min){sy2+=(sy1-sy2)*(yaxis.min-y1)/(y2-y1);y1=yaxis.min}if(y2>yaxis.max){sy1+=(sy1-sy2)*(yaxis.max-y2)/(y2-y1);y2=yaxis.max}x1=xaxis.p2c(x1);x2=xaxis.p2c(x2);y1=yaxis.p2c(y1);y2=yaxis.p2c(y2);if(x1>x2){tmp=x2;x2=x1;x1=tmp}if(y1>y2){tmp=y2;y2=y1;y1=tmp}tmp=ctx.globalAlpha;ctx.globalAlpha*=series.images.alpha;ctx.drawImage(img,sx1,sy1,sx2-sx1,sy2-sy1,x1+plotOffset.left,y1+plotOffset.top,x2-x1,y2-y1);ctx.globalAlpha=tmp}}function processRawData(plot,series,data,datapoints){if(!series.images.show)return;datapoints.format=[{required:true},{x:true,number:true,required:true},{y:true,number:true,required:true},{x:true,number:true,required:true},{y:true,number:true,required:true}]}function init(plot){plot.hooks.processRawData.push(processRawData);plot.hooks.drawSeries.push(drawSeries)}$.plot.plugins.push({init:init,options:options,name:"image",version:"1.1"})})(jQuery);
+ static/js/jquery.flot.js view
@@ -0,0 +1,3168 @@+/* Javascript plotting library for jQuery, version 0.8.3.++Copyright (c) 2007-2014 IOLA and Ole Laursen.+Licensed under the MIT license.++*/++// first an inline dependency, jquery.colorhelpers.js, we inline it here+// for convenience++/* Plugin for jQuery for working with colors.+ *+ * Version 1.1.+ *+ * Inspiration from jQuery color animation plugin by John Resig.+ *+ * Released under the MIT license by Ole Laursen, October 2009.+ *+ * Examples:+ *+ *   $.color.parse("#fff").scale('rgb', 0.25).add('a', -0.5).toString()+ *   var c = $.color.extract($("#mydiv"), 'background-color');+ *   console.log(c.r, c.g, c.b, c.a);+ *   $.color.make(100, 50, 25, 0.4).toString() // returns "rgba(100,50,25,0.4)"+ *+ * Note that .scale() and .add() return the same modified object+ * instead of making a new one.+ *+ * V. 1.1: Fix error handling so e.g. parsing an empty string does+ * produce a color rather than just crashing.+ */+(function($){$.color={};$.color.make=function(r,g,b,a){var o={};o.r=r||0;o.g=g||0;o.b=b||0;o.a=a!=null?a:1;o.add=function(c,d){for(var i=0;i<c.length;++i)o[c.charAt(i)]+=d;return o.normalize()};o.scale=function(c,f){for(var i=0;i<c.length;++i)o[c.charAt(i)]*=f;return o.normalize()};o.toString=function(){if(o.a>=1){return"rgb("+[o.r,o.g,o.b].join(",")+")"}else{return"rgba("+[o.r,o.g,o.b,o.a].join(",")+")"}};o.normalize=function(){function clamp(min,value,max){return value<min?min:value>max?max:value}o.r=clamp(0,parseInt(o.r),255);o.g=clamp(0,parseInt(o.g),255);o.b=clamp(0,parseInt(o.b),255);o.a=clamp(0,o.a,1);return o};o.clone=function(){return $.color.make(o.r,o.b,o.g,o.a)};return o.normalize()};$.color.extract=function(elem,css){var c;do{c=elem.css(css).toLowerCase();if(c!=""&&c!="transparent")break;elem=elem.parent()}while(elem.length&&!$.nodeName(elem.get(0),"body"));if(c=="rgba(0, 0, 0, 0)")c="transparent";return $.color.parse(c)};$.color.parse=function(str){var res,m=$.color.make;if(res=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(str))return m(parseInt(res[1],10),parseInt(res[2],10),parseInt(res[3],10));if(res=/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(str))return m(parseInt(res[1],10),parseInt(res[2],10),parseInt(res[3],10),parseFloat(res[4]));if(res=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(str))return m(parseFloat(res[1])*2.55,parseFloat(res[2])*2.55,parseFloat(res[3])*2.55);if(res=/rgba\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(str))return m(parseFloat(res[1])*2.55,parseFloat(res[2])*2.55,parseFloat(res[3])*2.55,parseFloat(res[4]));if(res=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(str))return m(parseInt(res[1],16),parseInt(res[2],16),parseInt(res[3],16));if(res=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(str))return m(parseInt(res[1]+res[1],16),parseInt(res[2]+res[2],16),parseInt(res[3]+res[3],16));var name=$.trim(str).toLowerCase();if(name=="transparent")return m(255,255,255,0);else{res=lookupColors[name]||[0,0,0];return m(res[0],res[1],res[2])}};var lookupColors={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0]}})(jQuery);++// the actual Flot code+(function($) {++	// Cache the prototype hasOwnProperty for faster access++	var hasOwnProperty = Object.prototype.hasOwnProperty;++    // A shim to provide 'detach' to jQuery versions prior to 1.4.  Using a DOM+    // operation produces the same effect as detach, i.e. removing the element+    // without touching its jQuery data.++    // Do not merge this into Flot 0.9, since it requires jQuery 1.4.4+.++    if (!$.fn.detach) {+        $.fn.detach = function() {+            return this.each(function() {+                if (this.parentNode) {+                    this.parentNode.removeChild( this );+                }+            });+        };+    }++	///////////////////////////////////////////////////////////////////////////+	// The Canvas object is a wrapper around an HTML5 <canvas> tag.+	//+	// @constructor+	// @param {string} cls List of classes to apply to the canvas.+	// @param {element} container Element onto which to append the canvas.+	//+	// Requiring a container is a little iffy, but unfortunately canvas+	// operations don't work unless the canvas is attached to the DOM.++	function Canvas(cls, container) {++		var element = container.children("." + cls)[0];++		if (element == null) {++			element = document.createElement("canvas");+			element.className = cls;++			$(element).css({ direction: "ltr", position: "absolute", left: 0, top: 0 })+				.appendTo(container);++			// If HTML5 Canvas isn't available, fall back to [Ex|Flash]canvas++			if (!element.getContext) {+				if (window.G_vmlCanvasManager) {+					element = window.G_vmlCanvasManager.initElement(element);+				} else {+					throw new Error("Canvas is not available. If you're using IE with a fall-back such as Excanvas, then there's either a mistake in your conditional include, or the page has no DOCTYPE and is rendering in Quirks Mode.");+				}+			}+		}++		this.element = element;++		var context = this.context = element.getContext("2d");++		// Determine the screen's ratio of physical to device-independent+		// pixels.  This is the ratio between the canvas width that the browser+		// advertises and the number of pixels actually present in that space.++		// The iPhone 4, for example, has a device-independent width of 320px,+		// but its screen is actually 640px wide.  It therefore has a pixel+		// ratio of 2, while most normal devices have a ratio of 1.++		var devicePixelRatio = window.devicePixelRatio || 1,+			backingStoreRatio =+				context.webkitBackingStorePixelRatio ||+				context.mozBackingStorePixelRatio ||+				context.msBackingStorePixelRatio ||+				context.oBackingStorePixelRatio ||+				context.backingStorePixelRatio || 1;++		this.pixelRatio = devicePixelRatio / backingStoreRatio;++		// Size the canvas to match the internal dimensions of its container++		this.resize(container.width(), container.height());++		// Collection of HTML div layers for text overlaid onto the canvas++		this.textContainer = null;+		this.text = {};++		// Cache of text fragments and metrics, so we can avoid expensively+		// re-calculating them when the plot is re-rendered in a loop.++		this._textCache = {};+	}++	// Resizes the canvas to the given dimensions.+	//+	// @param {number} width New width of the canvas, in pixels.+	// @param {number} width New height of the canvas, in pixels.++	Canvas.prototype.resize = function(width, height) {++		if (width <= 0 || height <= 0) {+			throw new Error("Invalid dimensions for plot, width = " + width + ", height = " + height);+		}++		var element = this.element,+			context = this.context,+			pixelRatio = this.pixelRatio;++		// Resize the canvas, increasing its density based on the display's+		// pixel ratio; basically giving it more pixels without increasing the+		// size of its element, to take advantage of the fact that retina+		// displays have that many more pixels in the same advertised space.++		// Resizing should reset the state (excanvas seems to be buggy though)++		if (this.width != width) {+			element.width = width * pixelRatio;+			element.style.width = width + "px";+			this.width = width;+		}++		if (this.height != height) {+			element.height = height * pixelRatio;+			element.style.height = height + "px";+			this.height = height;+		}++		// Save the context, so we can reset in case we get replotted.  The+		// restore ensure that we're really back at the initial state, and+		// should be safe even if we haven't saved the initial state yet.++		context.restore();+		context.save();++		// Scale the coordinate space to match the display density; so even though we+		// may have twice as many pixels, we still want lines and other drawing to+		// appear at the same size; the extra pixels will just make them crisper.++		context.scale(pixelRatio, pixelRatio);+	};++	// Clears the entire canvas area, not including any overlaid HTML text++	Canvas.prototype.clear = function() {+		this.context.clearRect(0, 0, this.width, this.height);+	};++	// Finishes rendering the canvas, including managing the text overlay.++	Canvas.prototype.render = function() {++		var cache = this._textCache;++		// For each text layer, add elements marked as active that haven't+		// already been rendered, and remove those that are no longer active.++		for (var layerKey in cache) {+			if (hasOwnProperty.call(cache, layerKey)) {++				var layer = this.getTextLayer(layerKey),+					layerCache = cache[layerKey];++				layer.hide();++				for (var styleKey in layerCache) {+					if (hasOwnProperty.call(layerCache, styleKey)) {+						var styleCache = layerCache[styleKey];+						for (var key in styleCache) {+							if (hasOwnProperty.call(styleCache, key)) {++								var positions = styleCache[key].positions;++								for (var i = 0, position; position = positions[i]; i++) {+									if (position.active) {+										if (!position.rendered) {+											layer.append(position.element);+											position.rendered = true;+										}+									} else {+										positions.splice(i--, 1);+										if (position.rendered) {+											position.element.detach();+										}+									}+								}++								if (positions.length == 0) {+									delete styleCache[key];+								}+							}+						}+					}+				}++				layer.show();+			}+		}+	};++	// Creates (if necessary) and returns the text overlay container.+	//+	// @param {string} classes String of space-separated CSS classes used to+	//     uniquely identify the text layer.+	// @return {object} The jQuery-wrapped text-layer div.++	Canvas.prototype.getTextLayer = function(classes) {++		var layer = this.text[classes];++		// Create the text layer if it doesn't exist++		if (layer == null) {++			// Create the text layer container, if it doesn't exist++			if (this.textContainer == null) {+				this.textContainer = $("<div class='flot-text'></div>")+					.css({+						position: "absolute",+						top: 0,+						left: 0,+						bottom: 0,+						right: 0,+						'font-size': "smaller",+						color: "#545454"+					})+					.insertAfter(this.element);+			}++			layer = this.text[classes] = $("<div></div>")+				.addClass(classes)+				.css({+					position: "absolute",+					top: 0,+					left: 0,+					bottom: 0,+					right: 0+				})+				.appendTo(this.textContainer);+		}++		return layer;+	};++	// Creates (if necessary) and returns a text info object.+	//+	// The object looks like this:+	//+	// {+	//     width: Width of the text's wrapper div.+	//     height: Height of the text's wrapper div.+	//     element: The jQuery-wrapped HTML div containing the text.+	//     positions: Array of positions at which this text is drawn.+	// }+	//+	// The positions array contains objects that look like this:+	//+	// {+	//     active: Flag indicating whether the text should be visible.+	//     rendered: Flag indicating whether the text is currently visible.+	//     element: The jQuery-wrapped HTML div containing the text.+	//     x: X coordinate at which to draw the text.+	//     y: Y coordinate at which to draw the text.+	// }+	//+	// Each position after the first receives a clone of the original element.+	//+	// The idea is that that the width, height, and general 'identity' of the+	// text is constant no matter where it is placed; the placements are a+	// secondary property.+	//+	// Canvas maintains a cache of recently-used text info objects; getTextInfo+	// either returns the cached element or creates a new entry.+	//+	// @param {string} layer A string of space-separated CSS classes uniquely+	//     identifying the layer containing this text.+	// @param {string} text Text string to retrieve info for.+	// @param {(string|object)=} font Either a string of space-separated CSS+	//     classes or a font-spec object, defining the text's font and style.+	// @param {number=} angle Angle at which to rotate the text, in degrees.+	//     Angle is currently unused, it will be implemented in the future.+	// @param {number=} width Maximum width of the text before it wraps.+	// @return {object} a text info object.++	Canvas.prototype.getTextInfo = function(layer, text, font, angle, width) {++		var textStyle, layerCache, styleCache, info;++		// Cast the value to a string, in case we were given a number or such++		text = "" + text;++		// If the font is a font-spec object, generate a CSS font definition++		if (typeof font === "object") {+			textStyle = font.style + " " + font.variant + " " + font.weight + " " + font.size + "px/" + font.lineHeight + "px " + font.family;+		} else {+			textStyle = font;+		}++		// Retrieve (or create) the cache for the text's layer and styles++		layerCache = this._textCache[layer];++		if (layerCache == null) {+			layerCache = this._textCache[layer] = {};+		}++		styleCache = layerCache[textStyle];++		if (styleCache == null) {+			styleCache = layerCache[textStyle] = {};+		}++		info = styleCache[text];++		// If we can't find a matching element in our cache, create a new one++		if (info == null) {++			var element = $("<div></div>").html(text)+				.css({+					position: "absolute",+					'max-width': width,+					top: -9999+				})+				.appendTo(this.getTextLayer(layer));++			if (typeof font === "object") {+				element.css({+					font: textStyle,+					color: font.color+				});+			} else if (typeof font === "string") {+				element.addClass(font);+			}++			info = styleCache[text] = {+				width: element.outerWidth(true),+				height: element.outerHeight(true),+				element: element,+				positions: []+			};++			element.detach();+		}++		return info;+	};++	// Adds a text string to the canvas text overlay.+	//+	// The text isn't drawn immediately; it is marked as rendering, which will+	// result in its addition to the canvas on the next render pass.+	//+	// @param {string} layer A string of space-separated CSS classes uniquely+	//     identifying the layer containing this text.+	// @param {number} x X coordinate at which to draw the text.+	// @param {number} y Y coordinate at which to draw the text.+	// @param {string} text Text string to draw.+	// @param {(string|object)=} font Either a string of space-separated CSS+	//     classes or a font-spec object, defining the text's font and style.+	// @param {number=} angle Angle at which to rotate the text, in degrees.+	//     Angle is currently unused, it will be implemented in the future.+	// @param {number=} width Maximum width of the text before it wraps.+	// @param {string=} halign Horizontal alignment of the text; either "left",+	//     "center" or "right".+	// @param {string=} valign Vertical alignment of the text; either "top",+	//     "middle" or "bottom".++	Canvas.prototype.addText = function(layer, x, y, text, font, angle, width, halign, valign) {++		var info = this.getTextInfo(layer, text, font, angle, width),+			positions = info.positions;++		// Tweak the div's position to match the text's alignment++		if (halign == "center") {+			x -= info.width / 2;+		} else if (halign == "right") {+			x -= info.width;+		}++		if (valign == "middle") {+			y -= info.height / 2;+		} else if (valign == "bottom") {+			y -= info.height;+		}++		// Determine whether this text already exists at this position.+		// If so, mark it for inclusion in the next render pass.++		for (var i = 0, position; position = positions[i]; i++) {+			if (position.x == x && position.y == y) {+				position.active = true;+				return;+			}+		}++		// If the text doesn't exist at this position, create a new entry++		// For the very first position we'll re-use the original element,+		// while for subsequent ones we'll clone it.++		position = {+			active: true,+			rendered: false,+			element: positions.length ? info.element.clone() : info.element,+			x: x,+			y: y+		};++		positions.push(position);++		// Move the element to its final position within the container++		position.element.css({+			top: Math.round(y),+			left: Math.round(x),+			'text-align': halign	// In case the text wraps+		});+	};++	// Removes one or more text strings from the canvas text overlay.+	//+	// If no parameters are given, all text within the layer is removed.+	//+	// Note that the text is not immediately removed; it is simply marked as+	// inactive, which will result in its removal on the next render pass.+	// This avoids the performance penalty for 'clear and redraw' behavior,+	// where we potentially get rid of all text on a layer, but will likely+	// add back most or all of it later, as when redrawing axes, for example.+	//+	// @param {string} layer A string of space-separated CSS classes uniquely+	//     identifying the layer containing this text.+	// @param {number=} x X coordinate of the text.+	// @param {number=} y Y coordinate of the text.+	// @param {string=} text Text string to remove.+	// @param {(string|object)=} font Either a string of space-separated CSS+	//     classes or a font-spec object, defining the text's font and style.+	// @param {number=} angle Angle at which the text is rotated, in degrees.+	//     Angle is currently unused, it will be implemented in the future.++	Canvas.prototype.removeText = function(layer, x, y, text, font, angle) {+		if (text == null) {+			var layerCache = this._textCache[layer];+			if (layerCache != null) {+				for (var styleKey in layerCache) {+					if (hasOwnProperty.call(layerCache, styleKey)) {+						var styleCache = layerCache[styleKey];+						for (var key in styleCache) {+							if (hasOwnProperty.call(styleCache, key)) {+								var positions = styleCache[key].positions;+								for (var i = 0, position; position = positions[i]; i++) {+									position.active = false;+								}+							}+						}+					}+				}+			}+		} else {+			var positions = this.getTextInfo(layer, text, font, angle).positions;+			for (var i = 0, position; position = positions[i]; i++) {+				if (position.x == x && position.y == y) {+					position.active = false;+				}+			}+		}+	};++	///////////////////////////////////////////////////////////////////////////+	// The top-level container for the entire plot.++    function Plot(placeholder, data_, options_, plugins) {+        // data is on the form:+        //   [ series1, series2 ... ]+        // where series is either just the data as [ [x1, y1], [x2, y2], ... ]+        // or { data: [ [x1, y1], [x2, y2], ... ], label: "some label", ... }++        var series = [],+            options = {+                // the color theme used for graphs+                colors: ["#edc240", "#afd8f8", "#cb4b4b", "#4da74d", "#9440ed"],+                legend: {+                    show: true,+                    noColumns: 1, // number of colums in legend table+                    labelFormatter: null, // fn: string -> string+                    labelBoxBorderColor: "#ccc", // border color for the little label boxes+                    container: null, // container (as jQuery object) to put legend in, null means default on top of graph+                    position: "ne", // position of default legend container within plot+                    margin: 5, // distance from grid edge to default legend container within plot+                    backgroundColor: null, // null means auto-detect+                    backgroundOpacity: 0.85, // set to 0 to avoid background+                    sorted: null    // default to no legend sorting+                },+                xaxis: {+                    show: null, // null = auto-detect, true = always, false = never+                    position: "bottom", // or "top"+                    mode: null, // null or "time"+                    font: null, // null (derived from CSS in placeholder) or object like { size: 11, lineHeight: 13, style: "italic", weight: "bold", family: "sans-serif", variant: "small-caps" }+                    color: null, // base color, labels, ticks+                    tickColor: null, // possibly different color of ticks, e.g. "rgba(0,0,0,0.15)"+                    transform: null, // null or f: number -> number to transform axis+                    inverseTransform: null, // if transform is set, this should be the inverse function+                    min: null, // min. value to show, null means set automatically+                    max: null, // max. value to show, null means set automatically+                    autoscaleMargin: null, // margin in % to add if auto-setting min/max+                    ticks: null, // either [1, 3] or [[1, "a"], 3] or (fn: axis info -> ticks) or app. number of ticks for auto-ticks+                    tickFormatter: null, // fn: number -> string+                    labelWidth: null, // size of tick labels in pixels+                    labelHeight: null,+                    reserveSpace: null, // whether to reserve space even if axis isn't shown+                    tickLength: null, // size in pixels of ticks, or "full" for whole line+                    alignTicksWithAxis: null, // axis number or null for no sync+                    tickDecimals: null, // no. of decimals, null means auto+                    tickSize: null, // number or [number, "unit"]+                    minTickSize: null // number or [number, "unit"]+                },+                yaxis: {+                    autoscaleMargin: 0.02,+                    position: "left" // or "right"+                },+                xaxes: [],+                yaxes: [],+                series: {+                    points: {+                        show: false,+                        radius: 3,+                        lineWidth: 2, // in pixels+                        fill: true,+                        fillColor: "#ffffff",+                        symbol: "circle" // or callback+                    },+                    lines: {+                        // we don't put in show: false so we can see+                        // whether lines were actively disabled+                        lineWidth: 2, // in pixels+                        fill: false,+                        fillColor: null,+                        steps: false+                        // Omit 'zero', so we can later default its value to+                        // match that of the 'fill' option.+                    },+                    bars: {+                        show: false,+                        lineWidth: 2, // in pixels+                        barWidth: 1, // in units of the x axis+                        fill: true,+                        fillColor: null,+                        align: "left", // "left", "right", or "center"+                        horizontal: false,+                        zero: true+                    },+                    shadowSize: 3,+                    highlightColor: null+                },+                grid: {+                    show: true,+                    aboveData: false,+                    color: "#545454", // primary color used for outline and labels+                    backgroundColor: null, // null for transparent, else color+                    borderColor: null, // set if different from the grid color+                    tickColor: null, // color for the ticks, e.g. "rgba(0,0,0,0.15)"+                    margin: 0, // distance from the canvas edge to the grid+                    labelMargin: 5, // in pixels+                    axisMargin: 8, // in pixels+                    borderWidth: 2, // in pixels+                    minBorderMargin: null, // in pixels, null means taken from points radius+                    markings: null, // array of ranges or fn: axes -> array of ranges+                    markingsColor: "#f4f4f4",+                    markingsLineWidth: 2,+                    // interactive stuff+                    clickable: false,+                    hoverable: false,+                    autoHighlight: true, // highlight in case mouse is near+                    mouseActiveRadius: 10 // how far the mouse can be away to activate an item+                },+                interaction: {+                    redrawOverlayInterval: 1000/60 // time between updates, -1 means in same flow+                },+                hooks: {}+            },+        surface = null,     // the canvas for the plot itself+        overlay = null,     // canvas for interactive stuff on top of plot+        eventHolder = null, // jQuery object that events should be bound to+        ctx = null, octx = null,+        xaxes = [], yaxes = [],+        plotOffset = { left: 0, right: 0, top: 0, bottom: 0},+        plotWidth = 0, plotHeight = 0,+        hooks = {+            processOptions: [],+            processRawData: [],+            processDatapoints: [],+            processOffset: [],+            drawBackground: [],+            drawSeries: [],+            draw: [],+            bindEvents: [],+            drawOverlay: [],+            shutdown: []+        },+        plot = this;++        // public functions+        plot.setData = setData;+        plot.setupGrid = setupGrid;+        plot.draw = draw;+        plot.getPlaceholder = function() { return placeholder; };+        plot.getCanvas = function() { return surface.element; };+        plot.getPlotOffset = function() { return plotOffset; };+        plot.width = function () { return plotWidth; };+        plot.height = function () { return plotHeight; };+        plot.offset = function () {+            var o = eventHolder.offset();+            o.left += plotOffset.left;+            o.top += plotOffset.top;+            return o;+        };+        plot.getData = function () { return series; };+        plot.getAxes = function () {+            var res = {}, i;+            $.each(xaxes.concat(yaxes), function (_, axis) {+                if (axis)+                    res[axis.direction + (axis.n != 1 ? axis.n : "") + "axis"] = axis;+            });+            return res;+        };+        plot.getXAxes = function () { return xaxes; };+        plot.getYAxes = function () { return yaxes; };+        plot.c2p = canvasToAxisCoords;+        plot.p2c = axisToCanvasCoords;+        plot.getOptions = function () { return options; };+        plot.highlight = highlight;+        plot.unhighlight = unhighlight;+        plot.triggerRedrawOverlay = triggerRedrawOverlay;+        plot.pointOffset = function(point) {+            return {+                left: parseInt(xaxes[axisNumber(point, "x") - 1].p2c(+point.x) + plotOffset.left, 10),+                top: parseInt(yaxes[axisNumber(point, "y") - 1].p2c(+point.y) + plotOffset.top, 10)+            };+        };+        plot.shutdown = shutdown;+        plot.destroy = function () {+            shutdown();+            placeholder.removeData("plot").empty();++            series = [];+            options = null;+            surface = null;+            overlay = null;+            eventHolder = null;+            ctx = null;+            octx = null;+            xaxes = [];+            yaxes = [];+            hooks = null;+            highlights = [];+            plot = null;+        };+        plot.resize = function () {+        	var width = placeholder.width(),+        		height = placeholder.height();+            surface.resize(width, height);+            overlay.resize(width, height);+        };++        // public attributes+        plot.hooks = hooks;++        // initialize+        initPlugins(plot);+        parseOptions(options_);+        setupCanvases();+        setData(data_);+        setupGrid();+        draw();+        bindEvents();+++        function executeHooks(hook, args) {+            args = [plot].concat(args);+            for (var i = 0; i < hook.length; ++i)+                hook[i].apply(this, args);+        }++        function initPlugins() {++            // References to key classes, allowing plugins to modify them++            var classes = {+                Canvas: Canvas+            };++            for (var i = 0; i < plugins.length; ++i) {+                var p = plugins[i];+                p.init(plot, classes);+                if (p.options)+                    $.extend(true, options, p.options);+            }+        }++        function parseOptions(opts) {++            $.extend(true, options, opts);++            // $.extend merges arrays, rather than replacing them.  When less+            // colors are provided than the size of the default palette, we+            // end up with those colors plus the remaining defaults, which is+            // not expected behavior; avoid it by replacing them here.++            if (opts && opts.colors) {+            	options.colors = opts.colors;+            }++            if (options.xaxis.color == null)+                options.xaxis.color = $.color.parse(options.grid.color).scale('a', 0.22).toString();+            if (options.yaxis.color == null)+                options.yaxis.color = $.color.parse(options.grid.color).scale('a', 0.22).toString();++            if (options.xaxis.tickColor == null) // grid.tickColor for back-compatibility+                options.xaxis.tickColor = options.grid.tickColor || options.xaxis.color;+            if (options.yaxis.tickColor == null) // grid.tickColor for back-compatibility+                options.yaxis.tickColor = options.grid.tickColor || options.yaxis.color;++            if (options.grid.borderColor == null)+                options.grid.borderColor = options.grid.color;+            if (options.grid.tickColor == null)+                options.grid.tickColor = $.color.parse(options.grid.color).scale('a', 0.22).toString();++            // Fill in defaults for axis options, including any unspecified+            // font-spec fields, if a font-spec was provided.++            // If no x/y axis options were provided, create one of each anyway,+            // since the rest of the code assumes that they exist.++            var i, axisOptions, axisCount,+                fontSize = placeholder.css("font-size"),+                fontSizeDefault = fontSize ? +fontSize.replace("px", "") : 13,+                fontDefaults = {+                    style: placeholder.css("font-style"),+                    size: Math.round(0.8 * fontSizeDefault),+                    variant: placeholder.css("font-variant"),+                    weight: placeholder.css("font-weight"),+                    family: placeholder.css("font-family")+                };++            axisCount = options.xaxes.length || 1;+            for (i = 0; i < axisCount; ++i) {++                axisOptions = options.xaxes[i];+                if (axisOptions && !axisOptions.tickColor) {+                    axisOptions.tickColor = axisOptions.color;+                }++                axisOptions = $.extend(true, {}, options.xaxis, axisOptions);+                options.xaxes[i] = axisOptions;++                if (axisOptions.font) {+                    axisOptions.font = $.extend({}, fontDefaults, axisOptions.font);+                    if (!axisOptions.font.color) {+                        axisOptions.font.color = axisOptions.color;+                    }+                    if (!axisOptions.font.lineHeight) {+                        axisOptions.font.lineHeight = Math.round(axisOptions.font.size * 1.15);+                    }+                }+            }++            axisCount = options.yaxes.length || 1;+            for (i = 0; i < axisCount; ++i) {++                axisOptions = options.yaxes[i];+                if (axisOptions && !axisOptions.tickColor) {+                    axisOptions.tickColor = axisOptions.color;+                }++                axisOptions = $.extend(true, {}, options.yaxis, axisOptions);+                options.yaxes[i] = axisOptions;++                if (axisOptions.font) {+                    axisOptions.font = $.extend({}, fontDefaults, axisOptions.font);+                    if (!axisOptions.font.color) {+                        axisOptions.font.color = axisOptions.color;+                    }+                    if (!axisOptions.font.lineHeight) {+                        axisOptions.font.lineHeight = Math.round(axisOptions.font.size * 1.15);+                    }+                }+            }++            // backwards compatibility, to be removed in future+            if (options.xaxis.noTicks && options.xaxis.ticks == null)+                options.xaxis.ticks = options.xaxis.noTicks;+            if (options.yaxis.noTicks && options.yaxis.ticks == null)+                options.yaxis.ticks = options.yaxis.noTicks;+            if (options.x2axis) {+                options.xaxes[1] = $.extend(true, {}, options.xaxis, options.x2axis);+                options.xaxes[1].position = "top";+                // Override the inherit to allow the axis to auto-scale+                if (options.x2axis.min == null) {+                    options.xaxes[1].min = null;+                }+                if (options.x2axis.max == null) {+                    options.xaxes[1].max = null;+                }+            }+            if (options.y2axis) {+                options.yaxes[1] = $.extend(true, {}, options.yaxis, options.y2axis);+                options.yaxes[1].position = "right";+                // Override the inherit to allow the axis to auto-scale+                if (options.y2axis.min == null) {+                    options.yaxes[1].min = null;+                }+                if (options.y2axis.max == null) {+                    options.yaxes[1].max = null;+                }+            }+            if (options.grid.coloredAreas)+                options.grid.markings = options.grid.coloredAreas;+            if (options.grid.coloredAreasColor)+                options.grid.markingsColor = options.grid.coloredAreasColor;+            if (options.lines)+                $.extend(true, options.series.lines, options.lines);+            if (options.points)+                $.extend(true, options.series.points, options.points);+            if (options.bars)+                $.extend(true, options.series.bars, options.bars);+            if (options.shadowSize != null)+                options.series.shadowSize = options.shadowSize;+            if (options.highlightColor != null)+                options.series.highlightColor = options.highlightColor;++            // save options on axes for future reference+            for (i = 0; i < options.xaxes.length; ++i)+                getOrCreateAxis(xaxes, i + 1).options = options.xaxes[i];+            for (i = 0; i < options.yaxes.length; ++i)+                getOrCreateAxis(yaxes, i + 1).options = options.yaxes[i];++            // add hooks from options+            for (var n in hooks)+                if (options.hooks[n] && options.hooks[n].length)+                    hooks[n] = hooks[n].concat(options.hooks[n]);++            executeHooks(hooks.processOptions, [options]);+        }++        function setData(d) {+            series = parseData(d);+            fillInSeriesOptions();+            processData();+        }++        function parseData(d) {+            var res = [];+            for (var i = 0; i < d.length; ++i) {+                var s = $.extend(true, {}, options.series);++                if (d[i].data != null) {+                    s.data = d[i].data; // move the data instead of deep-copy+                    delete d[i].data;++                    $.extend(true, s, d[i]);++                    d[i].data = s.data;+                }+                else+                    s.data = d[i];+                res.push(s);+            }++            return res;+        }++        function axisNumber(obj, coord) {+            var a = obj[coord + "axis"];+            if (typeof a == "object") // if we got a real axis, extract number+                a = a.n;+            if (typeof a != "number")+                a = 1; // default to first axis+            return a;+        }++        function allAxes() {+            // return flat array without annoying null entries+            return $.grep(xaxes.concat(yaxes), function (a) { return a; });+        }++        function canvasToAxisCoords(pos) {+            // return an object with x/y corresponding to all used axes+            var res = {}, i, axis;+            for (i = 0; i < xaxes.length; ++i) {+                axis = xaxes[i];+                if (axis && axis.used)+                    res["x" + axis.n] = axis.c2p(pos.left);+            }++            for (i = 0; i < yaxes.length; ++i) {+                axis = yaxes[i];+                if (axis && axis.used)+                    res["y" + axis.n] = axis.c2p(pos.top);+            }++            if (res.x1 !== undefined)+                res.x = res.x1;+            if (res.y1 !== undefined)+                res.y = res.y1;++            return res;+        }++        function axisToCanvasCoords(pos) {+            // get canvas coords from the first pair of x/y found in pos+            var res = {}, i, axis, key;++            for (i = 0; i < xaxes.length; ++i) {+                axis = xaxes[i];+                if (axis && axis.used) {+                    key = "x" + axis.n;+                    if (pos[key] == null && axis.n == 1)+                        key = "x";++                    if (pos[key] != null) {+                        res.left = axis.p2c(pos[key]);+                        break;+                    }+                }+            }++            for (i = 0; i < yaxes.length; ++i) {+                axis = yaxes[i];+                if (axis && axis.used) {+                    key = "y" + axis.n;+                    if (pos[key] == null && axis.n == 1)+                        key = "y";++                    if (pos[key] != null) {+                        res.top = axis.p2c(pos[key]);+                        break;+                    }+                }+            }++            return res;+        }++        function getOrCreateAxis(axes, number) {+            if (!axes[number - 1])+                axes[number - 1] = {+                    n: number, // save the number for future reference+                    direction: axes == xaxes ? "x" : "y",+                    options: $.extend(true, {}, axes == xaxes ? options.xaxis : options.yaxis)+                };++            return axes[number - 1];+        }++        function fillInSeriesOptions() {++            var neededColors = series.length, maxIndex = -1, i;++            // Subtract the number of series that already have fixed colors or+            // color indexes from the number that we still need to generate.++            for (i = 0; i < series.length; ++i) {+                var sc = series[i].color;+                if (sc != null) {+                    neededColors--;+                    if (typeof sc == "number" && sc > maxIndex) {+                        maxIndex = sc;+                    }+                }+            }++            // If any of the series have fixed color indexes, then we need to+            // generate at least as many colors as the highest index.++            if (neededColors <= maxIndex) {+                neededColors = maxIndex + 1;+            }++            // Generate all the colors, using first the option colors and then+            // variations on those colors once they're exhausted.++            var c, colors = [], colorPool = options.colors,+                colorPoolSize = colorPool.length, variation = 0;++            for (i = 0; i < neededColors; i++) {++                c = $.color.parse(colorPool[i % colorPoolSize] || "#666");++                // Each time we exhaust the colors in the pool we adjust+                // a scaling factor used to produce more variations on+                // those colors. The factor alternates negative/positive+                // to produce lighter/darker colors.++                // Reset the variation after every few cycles, or else+                // it will end up producing only white or black colors.++                if (i % colorPoolSize == 0 && i) {+                    if (variation >= 0) {+                        if (variation < 0.5) {+                            variation = -variation - 0.2;+                        } else variation = 0;+                    } else variation = -variation;+                }++                colors[i] = c.scale('rgb', 1 + variation);+            }++            // Finalize the series options, filling in their colors++            var colori = 0, s;+            for (i = 0; i < series.length; ++i) {+                s = series[i];++                // assign colors+                if (s.color == null) {+                    s.color = colors[colori].toString();+                    ++colori;+                }+                else if (typeof s.color == "number")+                    s.color = colors[s.color].toString();++                // turn on lines automatically in case nothing is set+                if (s.lines.show == null) {+                    var v, show = true;+                    for (v in s)+                        if (s[v] && s[v].show) {+                            show = false;+                            break;+                        }+                    if (show)+                        s.lines.show = true;+                }++                // If nothing was provided for lines.zero, default it to match+                // lines.fill, since areas by default should extend to zero.++                if (s.lines.zero == null) {+                    s.lines.zero = !!s.lines.fill;+                }++                // setup axes+                s.xaxis = getOrCreateAxis(xaxes, axisNumber(s, "x"));+                s.yaxis = getOrCreateAxis(yaxes, axisNumber(s, "y"));+            }+        }++        function processData() {+            var topSentry = Number.POSITIVE_INFINITY,+                bottomSentry = Number.NEGATIVE_INFINITY,+                fakeInfinity = Number.MAX_VALUE,+                i, j, k, m, length,+                s, points, ps, x, y, axis, val, f, p,+                data, format;++            function updateAxis(axis, min, max) {+                if (min < axis.datamin && min != -fakeInfinity)+                    axis.datamin = min;+                if (max > axis.datamax && max != fakeInfinity)+                    axis.datamax = max;+            }++            $.each(allAxes(), function (_, axis) {+                // init axis+                axis.datamin = topSentry;+                axis.datamax = bottomSentry;+                axis.used = false;+            });++            for (i = 0; i < series.length; ++i) {+                s = series[i];+                s.datapoints = { points: [] };++                executeHooks(hooks.processRawData, [ s, s.data, s.datapoints ]);+            }++            // first pass: clean and copy data+            for (i = 0; i < series.length; ++i) {+                s = series[i];++                data = s.data;+                format = s.datapoints.format;++                if (!format) {+                    format = [];+                    // find out how to copy+                    format.push({ x: true, number: true, required: true });+                    format.push({ y: true, number: true, required: true });++                    if (s.bars.show || (s.lines.show && s.lines.fill)) {+                        var autoscale = !!((s.bars.show && s.bars.zero) || (s.lines.show && s.lines.zero));+                        format.push({ y: true, number: true, required: false, defaultValue: 0, autoscale: autoscale });+                        if (s.bars.horizontal) {+                            delete format[format.length - 1].y;+                            format[format.length - 1].x = true;+                        }+                    }++                    s.datapoints.format = format;+                }++                if (s.datapoints.pointsize != null)+                    continue; // already filled in++                s.datapoints.pointsize = format.length;++                ps = s.datapoints.pointsize;+                points = s.datapoints.points;++                var insertSteps = s.lines.show && s.lines.steps;+                s.xaxis.used = s.yaxis.used = true;++                for (j = k = 0; j < data.length; ++j, k += ps) {+                    p = data[j];++                    var nullify = p == null;+                    if (!nullify) {+                        for (m = 0; m < ps; ++m) {+                            val = p[m];+                            f = format[m];++                            if (f) {+                                if (f.number && val != null) {+                                    val = +val; // convert to number+                                    if (isNaN(val))+                                        val = null;+                                    else if (val == Infinity)+                                        val = fakeInfinity;+                                    else if (val == -Infinity)+                                        val = -fakeInfinity;+                                }++                                if (val == null) {+                                    if (f.required)+                                        nullify = true;++                                    if (f.defaultValue != null)+                                        val = f.defaultValue;+                                }+                            }++                            points[k + m] = val;+                        }+                    }++                    if (nullify) {+                        for (m = 0; m < ps; ++m) {+                            val = points[k + m];+                            if (val != null) {+                                f = format[m];+                                // extract min/max info+                                if (f.autoscale !== false) {+                                    if (f.x) {+                                        updateAxis(s.xaxis, val, val);+                                    }+                                    if (f.y) {+                                        updateAxis(s.yaxis, val, val);+                                    }+                                }+                            }+                            points[k + m] = null;+                        }+                    }+                    else {+                        // a little bit of line specific stuff that+                        // perhaps shouldn't be here, but lacking+                        // better means...+                        if (insertSteps && k > 0+                            && points[k - ps] != null+                            && points[k - ps] != points[k]+                            && points[k - ps + 1] != points[k + 1]) {+                            // copy the point to make room for a middle point+                            for (m = 0; m < ps; ++m)+                                points[k + ps + m] = points[k + m];++                            // middle point has same y+                            points[k + 1] = points[k - ps + 1];++                            // we've added a point, better reflect that+                            k += ps;+                        }+                    }+                }+            }++            // give the hooks a chance to run+            for (i = 0; i < series.length; ++i) {+                s = series[i];++                executeHooks(hooks.processDatapoints, [ s, s.datapoints]);+            }++            // second pass: find datamax/datamin for auto-scaling+            for (i = 0; i < series.length; ++i) {+                s = series[i];+                points = s.datapoints.points;+                ps = s.datapoints.pointsize;+                format = s.datapoints.format;++                var xmin = topSentry, ymin = topSentry,+                    xmax = bottomSentry, ymax = bottomSentry;++                for (j = 0; j < points.length; j += ps) {+                    if (points[j] == null)+                        continue;++                    for (m = 0; m < ps; ++m) {+                        val = points[j + m];+                        f = format[m];+                        if (!f || f.autoscale === false || val == fakeInfinity || val == -fakeInfinity)+                            continue;++                        if (f.x) {+                            if (val < xmin)+                                xmin = val;+                            if (val > xmax)+                                xmax = val;+                        }+                        if (f.y) {+                            if (val < ymin)+                                ymin = val;+                            if (val > ymax)+                                ymax = val;+                        }+                    }+                }++                if (s.bars.show) {+                    // make sure we got room for the bar on the dancing floor+                    var delta;++                    switch (s.bars.align) {+                        case "left":+                            delta = 0;+                            break;+                        case "right":+                            delta = -s.bars.barWidth;+                            break;+                        default:+                            delta = -s.bars.barWidth / 2;+                    }++                    if (s.bars.horizontal) {+                        ymin += delta;+                        ymax += delta + s.bars.barWidth;+                    }+                    else {+                        xmin += delta;+                        xmax += delta + s.bars.barWidth;+                    }+                }++                updateAxis(s.xaxis, xmin, xmax);+                updateAxis(s.yaxis, ymin, ymax);+            }++            $.each(allAxes(), function (_, axis) {+                if (axis.datamin == topSentry)+                    axis.datamin = null;+                if (axis.datamax == bottomSentry)+                    axis.datamax = null;+            });+        }++        function setupCanvases() {++            // Make sure the placeholder is clear of everything except canvases+            // from a previous plot in this container that we'll try to re-use.++            placeholder.css("padding", 0) // padding messes up the positioning+                .children().filter(function(){+                    return !$(this).hasClass("flot-overlay") && !$(this).hasClass('flot-base');+                }).remove();++            if (placeholder.css("position") == 'static')+                placeholder.css("position", "relative"); // for positioning labels and overlay++            surface = new Canvas("flot-base", placeholder);+            overlay = new Canvas("flot-overlay", placeholder); // overlay canvas for interactive features++            ctx = surface.context;+            octx = overlay.context;++            // define which element we're listening for events on+            eventHolder = $(overlay.element).unbind();++            // If we're re-using a plot object, shut down the old one++            var existing = placeholder.data("plot");++            if (existing) {+                existing.shutdown();+                overlay.clear();+            }++            // save in case we get replotted+            placeholder.data("plot", plot);+        }++        function bindEvents() {+            // bind events+            if (options.grid.hoverable) {+                eventHolder.mousemove(onMouseMove);++                // Use bind, rather than .mouseleave, because we officially+                // still support jQuery 1.2.6, which doesn't define a shortcut+                // for mouseenter or mouseleave.  This was a bug/oversight that+                // was fixed somewhere around 1.3.x.  We can return to using+                // .mouseleave when we drop support for 1.2.6.++                eventHolder.bind("mouseleave", onMouseLeave);+            }++            if (options.grid.clickable)+                eventHolder.click(onClick);++            executeHooks(hooks.bindEvents, [eventHolder]);+        }++        function shutdown() {+            if (redrawTimeout)+                clearTimeout(redrawTimeout);++            eventHolder.unbind("mousemove", onMouseMove);+            eventHolder.unbind("mouseleave", onMouseLeave);+            eventHolder.unbind("click", onClick);++            executeHooks(hooks.shutdown, [eventHolder]);+        }++        function setTransformationHelpers(axis) {+            // set helper functions on the axis, assumes plot area+            // has been computed already++            function identity(x) { return x; }++            var s, m, t = axis.options.transform || identity,+                it = axis.options.inverseTransform;++            // precompute how much the axis is scaling a point+            // in canvas space+            if (axis.direction == "x") {+                s = axis.scale = plotWidth / Math.abs(t(axis.max) - t(axis.min));+                m = Math.min(t(axis.max), t(axis.min));+            }+            else {+                s = axis.scale = plotHeight / Math.abs(t(axis.max) - t(axis.min));+                s = -s;+                m = Math.max(t(axis.max), t(axis.min));+            }++            // data point to canvas coordinate+            if (t == identity) // slight optimization+                axis.p2c = function (p) { return (p - m) * s; };+            else+                axis.p2c = function (p) { return (t(p) - m) * s; };+            // canvas coordinate to data point+            if (!it)+                axis.c2p = function (c) { return m + c / s; };+            else+                axis.c2p = function (c) { return it(m + c / s); };+        }++        function measureTickLabels(axis) {++            var opts = axis.options,+                ticks = axis.ticks || [],+                labelWidth = opts.labelWidth || 0,+                labelHeight = opts.labelHeight || 0,+                maxWidth = labelWidth || (axis.direction == "x" ? Math.floor(surface.width / (ticks.length || 1)) : null),+                legacyStyles = axis.direction + "Axis " + axis.direction + axis.n + "Axis",+                layer = "flot-" + axis.direction + "-axis flot-" + axis.direction + axis.n + "-axis " + legacyStyles,+                font = opts.font || "flot-tick-label tickLabel";++            for (var i = 0; i < ticks.length; ++i) {++                var t = ticks[i];++                if (!t.label)+                    continue;++                var info = surface.getTextInfo(layer, t.label, font, null, maxWidth);++                labelWidth = Math.max(labelWidth, info.width);+                labelHeight = Math.max(labelHeight, info.height);+            }++            axis.labelWidth = opts.labelWidth || labelWidth;+            axis.labelHeight = opts.labelHeight || labelHeight;+        }++        function allocateAxisBoxFirstPhase(axis) {+            // find the bounding box of the axis by looking at label+            // widths/heights and ticks, make room by diminishing the+            // plotOffset; this first phase only looks at one+            // dimension per axis, the other dimension depends on the+            // other axes so will have to wait++            var lw = axis.labelWidth,+                lh = axis.labelHeight,+                pos = axis.options.position,+                isXAxis = axis.direction === "x",+                tickLength = axis.options.tickLength,+                axisMargin = options.grid.axisMargin,+                padding = options.grid.labelMargin,+                innermost = true,+                outermost = true,+                first = true,+                found = false;++            // Determine the axis's position in its direction and on its side++            $.each(isXAxis ? xaxes : yaxes, function(i, a) {+                if (a && (a.show || a.reserveSpace)) {+                    if (a === axis) {+                        found = true;+                    } else if (a.options.position === pos) {+                        if (found) {+                            outermost = false;+                        } else {+                            innermost = false;+                        }+                    }+                    if (!found) {+                        first = false;+                    }+                }+            });++            // The outermost axis on each side has no margin++            if (outermost) {+                axisMargin = 0;+            }++            // The ticks for the first axis in each direction stretch across++            if (tickLength == null) {+                tickLength = first ? "full" : 5;+            }++            if (!isNaN(+tickLength))+                padding += +tickLength;++            if (isXAxis) {+                lh += padding;++                if (pos == "bottom") {+                    plotOffset.bottom += lh + axisMargin;+                    axis.box = { top: surface.height - plotOffset.bottom, height: lh };+                }+                else {+                    axis.box = { top: plotOffset.top + axisMargin, height: lh };+                    plotOffset.top += lh + axisMargin;+                }+            }+            else {+                lw += padding;++                if (pos == "left") {+                    axis.box = { left: plotOffset.left + axisMargin, width: lw };+                    plotOffset.left += lw + axisMargin;+                }+                else {+                    plotOffset.right += lw + axisMargin;+                    axis.box = { left: surface.width - plotOffset.right, width: lw };+                }+            }++             // save for future reference+            axis.position = pos;+            axis.tickLength = tickLength;+            axis.box.padding = padding;+            axis.innermost = innermost;+        }++        function allocateAxisBoxSecondPhase(axis) {+            // now that all axis boxes have been placed in one+            // dimension, we can set the remaining dimension coordinates+            if (axis.direction == "x") {+                axis.box.left = plotOffset.left - axis.labelWidth / 2;+                axis.box.width = surface.width - plotOffset.left - plotOffset.right + axis.labelWidth;+            }+            else {+                axis.box.top = plotOffset.top - axis.labelHeight / 2;+                axis.box.height = surface.height - plotOffset.bottom - plotOffset.top + axis.labelHeight;+            }+        }++        function adjustLayoutForThingsStickingOut() {+            // possibly adjust plot offset to ensure everything stays+            // inside the canvas and isn't clipped off++            var minMargin = options.grid.minBorderMargin,+                axis, i;++            // check stuff from the plot (FIXME: this should just read+            // a value from the series, otherwise it's impossible to+            // customize)+            if (minMargin == null) {+                minMargin = 0;+                for (i = 0; i < series.length; ++i)+                    minMargin = Math.max(minMargin, 2 * (series[i].points.radius + series[i].points.lineWidth/2));+            }++            var margins = {+                left: minMargin,+                right: minMargin,+                top: minMargin,+                bottom: minMargin+            };++            // check axis labels, note we don't check the actual+            // labels but instead use the overall width/height to not+            // jump as much around with replots+            $.each(allAxes(), function (_, axis) {+                if (axis.reserveSpace && axis.ticks && axis.ticks.length) {+                    if (axis.direction === "x") {+                        margins.left = Math.max(margins.left, axis.labelWidth / 2);+                        margins.right = Math.max(margins.right, axis.labelWidth / 2);+                    } else {+                        margins.bottom = Math.max(margins.bottom, axis.labelHeight / 2);+                        margins.top = Math.max(margins.top, axis.labelHeight / 2);+                    }+                }+            });++            plotOffset.left = Math.ceil(Math.max(margins.left, plotOffset.left));+            plotOffset.right = Math.ceil(Math.max(margins.right, plotOffset.right));+            plotOffset.top = Math.ceil(Math.max(margins.top, plotOffset.top));+            plotOffset.bottom = Math.ceil(Math.max(margins.bottom, plotOffset.bottom));+        }++        function setupGrid() {+            var i, axes = allAxes(), showGrid = options.grid.show;++            // Initialize the plot's offset from the edge of the canvas++            for (var a in plotOffset) {+                var margin = options.grid.margin || 0;+                plotOffset[a] = typeof margin == "number" ? margin : margin[a] || 0;+            }++            executeHooks(hooks.processOffset, [plotOffset]);++            // If the grid is visible, add its border width to the offset++            for (var a in plotOffset) {+                if(typeof(options.grid.borderWidth) == "object") {+                    plotOffset[a] += showGrid ? options.grid.borderWidth[a] : 0;+                }+                else {+                    plotOffset[a] += showGrid ? options.grid.borderWidth : 0;+                }+            }++            $.each(axes, function (_, axis) {+                var axisOpts = axis.options;+                axis.show = axisOpts.show == null ? axis.used : axisOpts.show;+                axis.reserveSpace = axisOpts.reserveSpace == null ? axis.show : axisOpts.reserveSpace;+                setRange(axis);+            });++            if (showGrid) {++                var allocatedAxes = $.grep(axes, function (axis) {+                    return axis.show || axis.reserveSpace;+                });++                $.each(allocatedAxes, function (_, axis) {+                    // make the ticks+                    setupTickGeneration(axis);+                    setTicks(axis);+                    snapRangeToTicks(axis, axis.ticks);+                    // find labelWidth/Height for axis+                    measureTickLabels(axis);+                });++                // with all dimensions calculated, we can compute the+                // axis bounding boxes, start from the outside+                // (reverse order)+                for (i = allocatedAxes.length - 1; i >= 0; --i)+                    allocateAxisBoxFirstPhase(allocatedAxes[i]);++                // make sure we've got enough space for things that+                // might stick out+                adjustLayoutForThingsStickingOut();++                $.each(allocatedAxes, function (_, axis) {+                    allocateAxisBoxSecondPhase(axis);+                });+            }++            plotWidth = surface.width - plotOffset.left - plotOffset.right;+            plotHeight = surface.height - plotOffset.bottom - plotOffset.top;++            // now we got the proper plot dimensions, we can compute the scaling+            $.each(axes, function (_, axis) {+                setTransformationHelpers(axis);+            });++            if (showGrid) {+                drawAxisLabels();+            }++            insertLegend();+        }++        function setRange(axis) {+            var opts = axis.options,+                min = +(opts.min != null ? opts.min : axis.datamin),+                max = +(opts.max != null ? opts.max : axis.datamax),+                delta = max - min;++            if (delta == 0.0) {+                // degenerate case+                var widen = max == 0 ? 1 : 0.01;++                if (opts.min == null)+                    min -= widen;+                // always widen max if we couldn't widen min to ensure we+                // don't fall into min == max which doesn't work+                if (opts.max == null || opts.min != null)+                    max += widen;+            }+            else {+                // consider autoscaling+                var margin = opts.autoscaleMargin;+                if (margin != null) {+                    if (opts.min == null) {+                        min -= delta * margin;+                        // make sure we don't go below zero if all values+                        // are positive+                        if (min < 0 && axis.datamin != null && axis.datamin >= 0)+                            min = 0;+                    }+                    if (opts.max == null) {+                        max += delta * margin;+                        if (max > 0 && axis.datamax != null && axis.datamax <= 0)+                            max = 0;+                    }+                }+            }+            axis.min = min;+            axis.max = max;+        }++        function setupTickGeneration(axis) {+            var opts = axis.options;++            // estimate number of ticks+            var noTicks;+            if (typeof opts.ticks == "number" && opts.ticks > 0)+                noTicks = opts.ticks;+            else+                // heuristic based on the model a*sqrt(x) fitted to+                // some data points that seemed reasonable+                noTicks = 0.3 * Math.sqrt(axis.direction == "x" ? surface.width : surface.height);++            var delta = (axis.max - axis.min) / noTicks,+                dec = -Math.floor(Math.log(delta) / Math.LN10),+                maxDec = opts.tickDecimals;++            if (maxDec != null && dec > maxDec) {+                dec = maxDec;+            }++            var magn = Math.pow(10, -dec),+                norm = delta / magn, // norm is between 1.0 and 10.0+                size;++            if (norm < 1.5) {+                size = 1;+            } else if (norm < 3) {+                size = 2;+                // special case for 2.5, requires an extra decimal+                if (norm > 2.25 && (maxDec == null || dec + 1 <= maxDec)) {+                    size = 2.5;+                    ++dec;+                }+            } else if (norm < 7.5) {+                size = 5;+            } else {+                size = 10;+            }++            size *= magn;++            if (opts.minTickSize != null && size < opts.minTickSize) {+                size = opts.minTickSize;+            }++            axis.delta = delta;+            axis.tickDecimals = Math.max(0, maxDec != null ? maxDec : dec);+            axis.tickSize = opts.tickSize || size;++            // Time mode was moved to a plug-in in 0.8, and since so many people use it+            // we'll add an especially friendly reminder to make sure they included it.++            if (opts.mode == "time" && !axis.tickGenerator) {+                throw new Error("Time mode requires the flot.time plugin.");+            }++            // Flot supports base-10 axes; any other mode else is handled by a plug-in,+            // like flot.time.js.++            if (!axis.tickGenerator) {++                axis.tickGenerator = function (axis) {++                    var ticks = [],+                        start = floorInBase(axis.min, axis.tickSize),+                        i = 0,+                        v = Number.NaN,+                        prev;++                    do {+                        prev = v;+                        v = start + i * axis.tickSize;+                        ticks.push(v);+                        ++i;+                    } while (v < axis.max && v != prev);+                    return ticks;+                };++				axis.tickFormatter = function (value, axis) {++					var factor = axis.tickDecimals ? Math.pow(10, axis.tickDecimals) : 1;+					var formatted = "" + Math.round(value * factor) / factor;++					// If tickDecimals was specified, ensure that we have exactly that+					// much precision; otherwise default to the value's own precision.++					if (axis.tickDecimals != null) {+						var decimal = formatted.indexOf(".");+						var precision = decimal == -1 ? 0 : formatted.length - decimal - 1;+						if (precision < axis.tickDecimals) {+							return (precision ? formatted : formatted + ".") + ("" + factor).substr(1, axis.tickDecimals - precision);+						}+					}++                    return formatted;+                };+            }++            if ($.isFunction(opts.tickFormatter))+                axis.tickFormatter = function (v, axis) { return "" + opts.tickFormatter(v, axis); };++            if (opts.alignTicksWithAxis != null) {+                var otherAxis = (axis.direction == "x" ? xaxes : yaxes)[opts.alignTicksWithAxis - 1];+                if (otherAxis && otherAxis.used && otherAxis != axis) {+                    // consider snapping min/max to outermost nice ticks+                    var niceTicks = axis.tickGenerator(axis);+                    if (niceTicks.length > 0) {+                        if (opts.min == null)+                            axis.min = Math.min(axis.min, niceTicks[0]);+                        if (opts.max == null && niceTicks.length > 1)+                            axis.max = Math.max(axis.max, niceTicks[niceTicks.length - 1]);+                    }++                    axis.tickGenerator = function (axis) {+                        // copy ticks, scaled to this axis+                        var ticks = [], v, i;+                        for (i = 0; i < otherAxis.ticks.length; ++i) {+                            v = (otherAxis.ticks[i].v - otherAxis.min) / (otherAxis.max - otherAxis.min);+                            v = axis.min + v * (axis.max - axis.min);+                            ticks.push(v);+                        }+                        return ticks;+                    };++                    // we might need an extra decimal since forced+                    // ticks don't necessarily fit naturally+                    if (!axis.mode && opts.tickDecimals == null) {+                        var extraDec = Math.max(0, -Math.floor(Math.log(axis.delta) / Math.LN10) + 1),+                            ts = axis.tickGenerator(axis);++                        // only proceed if the tick interval rounded+                        // with an extra decimal doesn't give us a+                        // zero at end+                        if (!(ts.length > 1 && /\..*0$/.test((ts[1] - ts[0]).toFixed(extraDec))))+                            axis.tickDecimals = extraDec;+                    }+                }+            }+        }++        function setTicks(axis) {+            var oticks = axis.options.ticks, ticks = [];+            if (oticks == null || (typeof oticks == "number" && oticks > 0))+                ticks = axis.tickGenerator(axis);+            else if (oticks) {+                if ($.isFunction(oticks))+                    // generate the ticks+                    ticks = oticks(axis);+                else+                    ticks = oticks;+            }++            // clean up/labelify the supplied ticks, copy them over+            var i, v;+            axis.ticks = [];+            for (i = 0; i < ticks.length; ++i) {+                var label = null;+                var t = ticks[i];+                if (typeof t == "object") {+                    v = +t[0];+                    if (t.length > 1)+                        label = t[1];+                }+                else+                    v = +t;+                if (label == null)+                    label = axis.tickFormatter(v, axis);+                if (!isNaN(v))+                    axis.ticks.push({ v: v, label: label });+            }+        }++        function snapRangeToTicks(axis, ticks) {+            if (axis.options.autoscaleMargin && ticks.length > 0) {+                // snap to ticks+                if (axis.options.min == null)+                    axis.min = Math.min(axis.min, ticks[0].v);+                if (axis.options.max == null && ticks.length > 1)+                    axis.max = Math.max(axis.max, ticks[ticks.length - 1].v);+            }+        }++        function draw() {++            surface.clear();++            executeHooks(hooks.drawBackground, [ctx]);++            var grid = options.grid;++            // draw background, if any+            if (grid.show && grid.backgroundColor)+                drawBackground();++            if (grid.show && !grid.aboveData) {+                drawGrid();+            }++            for (var i = 0; i < series.length; ++i) {+                executeHooks(hooks.drawSeries, [ctx, series[i]]);+                drawSeries(series[i]);+            }++            executeHooks(hooks.draw, [ctx]);++            if (grid.show && grid.aboveData) {+                drawGrid();+            }++            surface.render();++            // A draw implies that either the axes or data have changed, so we+            // should probably update the overlay highlights as well.++            triggerRedrawOverlay();+        }++        function extractRange(ranges, coord) {+            var axis, from, to, key, axes = allAxes();++            for (var i = 0; i < axes.length; ++i) {+                axis = axes[i];+                if (axis.direction == coord) {+                    key = coord + axis.n + "axis";+                    if (!ranges[key] && axis.n == 1)+                        key = coord + "axis"; // support x1axis as xaxis+                    if (ranges[key]) {+                        from = ranges[key].from;+                        to = ranges[key].to;+                        break;+                    }+                }+            }++            // backwards-compat stuff - to be removed in future+            if (!ranges[key]) {+                axis = coord == "x" ? xaxes[0] : yaxes[0];+                from = ranges[coord + "1"];+                to = ranges[coord + "2"];+            }++            // auto-reverse as an added bonus+            if (from != null && to != null && from > to) {+                var tmp = from;+                from = to;+                to = tmp;+            }++            return { from: from, to: to, axis: axis };+        }++        function drawBackground() {+            ctx.save();+            ctx.translate(plotOffset.left, plotOffset.top);++            ctx.fillStyle = getColorOrGradient(options.grid.backgroundColor, plotHeight, 0, "rgba(255, 255, 255, 0)");+            ctx.fillRect(0, 0, plotWidth, plotHeight);+            ctx.restore();+        }++        function drawGrid() {+            var i, axes, bw, bc;++            ctx.save();+            ctx.translate(plotOffset.left, plotOffset.top);++            // draw markings+            var markings = options.grid.markings;+            if (markings) {+                if ($.isFunction(markings)) {+                    axes = plot.getAxes();+                    // xmin etc. is backwards compatibility, to be+                    // removed in the future+                    axes.xmin = axes.xaxis.min;+                    axes.xmax = axes.xaxis.max;+                    axes.ymin = axes.yaxis.min;+                    axes.ymax = axes.yaxis.max;++                    markings = markings(axes);+                }++                for (i = 0; i < markings.length; ++i) {+                    var m = markings[i],+                        xrange = extractRange(m, "x"),+                        yrange = extractRange(m, "y");++                    // fill in missing+                    if (xrange.from == null)+                        xrange.from = xrange.axis.min;+                    if (xrange.to == null)+                        xrange.to = xrange.axis.max;+                    if (yrange.from == null)+                        yrange.from = yrange.axis.min;+                    if (yrange.to == null)+                        yrange.to = yrange.axis.max;++                    // clip+                    if (xrange.to < xrange.axis.min || xrange.from > xrange.axis.max ||+                        yrange.to < yrange.axis.min || yrange.from > yrange.axis.max)+                        continue;++                    xrange.from = Math.max(xrange.from, xrange.axis.min);+                    xrange.to = Math.min(xrange.to, xrange.axis.max);+                    yrange.from = Math.max(yrange.from, yrange.axis.min);+                    yrange.to = Math.min(yrange.to, yrange.axis.max);++                    var xequal = xrange.from === xrange.to,+                        yequal = yrange.from === yrange.to;++                    if (xequal && yequal) {+                        continue;+                    }++                    // then draw+                    xrange.from = Math.floor(xrange.axis.p2c(xrange.from));+                    xrange.to = Math.floor(xrange.axis.p2c(xrange.to));+                    yrange.from = Math.floor(yrange.axis.p2c(yrange.from));+                    yrange.to = Math.floor(yrange.axis.p2c(yrange.to));++                    if (xequal || yequal) {+                        var lineWidth = m.lineWidth || options.grid.markingsLineWidth,+                            subPixel = lineWidth % 2 ? 0.5 : 0;+                        ctx.beginPath();+                        ctx.strokeStyle = m.color || options.grid.markingsColor;+                        ctx.lineWidth = lineWidth;+                        if (xequal) {+                            ctx.moveTo(xrange.to + subPixel, yrange.from);+                            ctx.lineTo(xrange.to + subPixel, yrange.to);+                        } else {+                            ctx.moveTo(xrange.from, yrange.to + subPixel);+                            ctx.lineTo(xrange.to, yrange.to + subPixel);                            +                        }+                        ctx.stroke();+                    } else {+                        ctx.fillStyle = m.color || options.grid.markingsColor;+                        ctx.fillRect(xrange.from, yrange.to,+                                     xrange.to - xrange.from,+                                     yrange.from - yrange.to);+                    }+                }+            }++            // draw the ticks+            axes = allAxes();+            bw = options.grid.borderWidth;++            for (var j = 0; j < axes.length; ++j) {+                var axis = axes[j], box = axis.box,+                    t = axis.tickLength, x, y, xoff, yoff;+                if (!axis.show || axis.ticks.length == 0)+                    continue;++                ctx.lineWidth = 1;++                // find the edges+                if (axis.direction == "x") {+                    x = 0;+                    if (t == "full")+                        y = (axis.position == "top" ? 0 : plotHeight);+                    else+                        y = box.top - plotOffset.top + (axis.position == "top" ? box.height : 0);+                }+                else {+                    y = 0;+                    if (t == "full")+                        x = (axis.position == "left" ? 0 : plotWidth);+                    else+                        x = box.left - plotOffset.left + (axis.position == "left" ? box.width : 0);+                }++                // draw tick bar+                if (!axis.innermost) {+                    ctx.strokeStyle = axis.options.color;+                    ctx.beginPath();+                    xoff = yoff = 0;+                    if (axis.direction == "x")+                        xoff = plotWidth + 1;+                    else+                        yoff = plotHeight + 1;++                    if (ctx.lineWidth == 1) {+                        if (axis.direction == "x") {+                            y = Math.floor(y) + 0.5;+                        } else {+                            x = Math.floor(x) + 0.5;+                        }+                    }++                    ctx.moveTo(x, y);+                    ctx.lineTo(x + xoff, y + yoff);+                    ctx.stroke();+                }++                // draw ticks++                ctx.strokeStyle = axis.options.tickColor;++                ctx.beginPath();+                for (i = 0; i < axis.ticks.length; ++i) {+                    var v = axis.ticks[i].v;++                    xoff = yoff = 0;++                    if (isNaN(v) || v < axis.min || v > axis.max+                        // skip those lying on the axes if we got a border+                        || (t == "full"+                            && ((typeof bw == "object" && bw[axis.position] > 0) || bw > 0)+                            && (v == axis.min || v == axis.max)))+                        continue;++                    if (axis.direction == "x") {+                        x = axis.p2c(v);+                        yoff = t == "full" ? -plotHeight : t;++                        if (axis.position == "top")+                            yoff = -yoff;+                    }+                    else {+                        y = axis.p2c(v);+                        xoff = t == "full" ? -plotWidth : t;++                        if (axis.position == "left")+                            xoff = -xoff;+                    }++                    if (ctx.lineWidth == 1) {+                        if (axis.direction == "x")+                            x = Math.floor(x) + 0.5;+                        else+                            y = Math.floor(y) + 0.5;+                    }++                    ctx.moveTo(x, y);+                    ctx.lineTo(x + xoff, y + yoff);+                }++                ctx.stroke();+            }+++            // draw border+            if (bw) {+                // If either borderWidth or borderColor is an object, then draw the border+                // line by line instead of as one rectangle+                bc = options.grid.borderColor;+                if(typeof bw == "object" || typeof bc == "object") {+                    if (typeof bw !== "object") {+                        bw = {top: bw, right: bw, bottom: bw, left: bw};+                    }+                    if (typeof bc !== "object") {+                        bc = {top: bc, right: bc, bottom: bc, left: bc};+                    }++                    if (bw.top > 0) {+                        ctx.strokeStyle = bc.top;+                        ctx.lineWidth = bw.top;+                        ctx.beginPath();+                        ctx.moveTo(0 - bw.left, 0 - bw.top/2);+                        ctx.lineTo(plotWidth, 0 - bw.top/2);+                        ctx.stroke();+                    }++                    if (bw.right > 0) {+                        ctx.strokeStyle = bc.right;+                        ctx.lineWidth = bw.right;+                        ctx.beginPath();+                        ctx.moveTo(plotWidth + bw.right / 2, 0 - bw.top);+                        ctx.lineTo(plotWidth + bw.right / 2, plotHeight);+                        ctx.stroke();+                    }++                    if (bw.bottom > 0) {+                        ctx.strokeStyle = bc.bottom;+                        ctx.lineWidth = bw.bottom;+                        ctx.beginPath();+                        ctx.moveTo(plotWidth + bw.right, plotHeight + bw.bottom / 2);+                        ctx.lineTo(0, plotHeight + bw.bottom / 2);+                        ctx.stroke();+                    }++                    if (bw.left > 0) {+                        ctx.strokeStyle = bc.left;+                        ctx.lineWidth = bw.left;+                        ctx.beginPath();+                        ctx.moveTo(0 - bw.left/2, plotHeight + bw.bottom);+                        ctx.lineTo(0- bw.left/2, 0);+                        ctx.stroke();+                    }+                }+                else {+                    ctx.lineWidth = bw;+                    ctx.strokeStyle = options.grid.borderColor;+                    ctx.strokeRect(-bw/2, -bw/2, plotWidth + bw, plotHeight + bw);+                }+            }++            ctx.restore();+        }++        function drawAxisLabels() {++            $.each(allAxes(), function (_, axis) {+                var box = axis.box,+                    legacyStyles = axis.direction + "Axis " + axis.direction + axis.n + "Axis",+                    layer = "flot-" + axis.direction + "-axis flot-" + axis.direction + axis.n + "-axis " + legacyStyles,+                    font = axis.options.font || "flot-tick-label tickLabel",+                    tick, x, y, halign, valign;++                // Remove text before checking for axis.show and ticks.length;+                // otherwise plugins, like flot-tickrotor, that draw their own+                // tick labels will end up with both theirs and the defaults.++                surface.removeText(layer);++                if (!axis.show || axis.ticks.length == 0)+                    return;++                for (var i = 0; i < axis.ticks.length; ++i) {++                    tick = axis.ticks[i];+                    if (!tick.label || tick.v < axis.min || tick.v > axis.max)+                        continue;++                    if (axis.direction == "x") {+                        halign = "center";+                        x = plotOffset.left + axis.p2c(tick.v);+                        if (axis.position == "bottom") {+                            y = box.top + box.padding;+                        } else {+                            y = box.top + box.height - box.padding;+                            valign = "bottom";+                        }+                    } else {+                        valign = "middle";+                        y = plotOffset.top + axis.p2c(tick.v);+                        if (axis.position == "left") {+                            x = box.left + box.width - box.padding;+                            halign = "right";+                        } else {+                            x = box.left + box.padding;+                        }+                    }++                    surface.addText(layer, x, y, tick.label, font, null, null, halign, valign);+                }+            });+        }++        function drawSeries(series) {+            if (series.lines.show)+                drawSeriesLines(series);+            if (series.bars.show)+                drawSeriesBars(series);+            if (series.points.show)+                drawSeriesPoints(series);+        }++        function drawSeriesLines(series) {+            function plotLine(datapoints, xoffset, yoffset, axisx, axisy) {+                var points = datapoints.points,+                    ps = datapoints.pointsize,+                    prevx = null, prevy = null;++                ctx.beginPath();+                for (var i = ps; i < points.length; i += ps) {+                    var x1 = points[i - ps], y1 = points[i - ps + 1],+                        x2 = points[i], y2 = points[i + 1];++                    if (x1 == null || x2 == null)+                        continue;++                    // clip with ymin+                    if (y1 <= y2 && y1 < axisy.min) {+                        if (y2 < axisy.min)+                            continue;   // line segment is outside+                        // compute new intersection point+                        x1 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;+                        y1 = axisy.min;+                    }+                    else if (y2 <= y1 && y2 < axisy.min) {+                        if (y1 < axisy.min)+                            continue;+                        x2 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;+                        y2 = axisy.min;+                    }++                    // clip with ymax+                    if (y1 >= y2 && y1 > axisy.max) {+                        if (y2 > axisy.max)+                            continue;+                        x1 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;+                        y1 = axisy.max;+                    }+                    else if (y2 >= y1 && y2 > axisy.max) {+                        if (y1 > axisy.max)+                            continue;+                        x2 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;+                        y2 = axisy.max;+                    }++                    // clip with xmin+                    if (x1 <= x2 && x1 < axisx.min) {+                        if (x2 < axisx.min)+                            continue;+                        y1 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;+                        x1 = axisx.min;+                    }+                    else if (x2 <= x1 && x2 < axisx.min) {+                        if (x1 < axisx.min)+                            continue;+                        y2 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;+                        x2 = axisx.min;+                    }++                    // clip with xmax+                    if (x1 >= x2 && x1 > axisx.max) {+                        if (x2 > axisx.max)+                            continue;+                        y1 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;+                        x1 = axisx.max;+                    }+                    else if (x2 >= x1 && x2 > axisx.max) {+                        if (x1 > axisx.max)+                            continue;+                        y2 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;+                        x2 = axisx.max;+                    }++                    if (x1 != prevx || y1 != prevy)+                        ctx.moveTo(axisx.p2c(x1) + xoffset, axisy.p2c(y1) + yoffset);++                    prevx = x2;+                    prevy = y2;+                    ctx.lineTo(axisx.p2c(x2) + xoffset, axisy.p2c(y2) + yoffset);+                }+                ctx.stroke();+            }++            function plotLineArea(datapoints, axisx, axisy) {+                var points = datapoints.points,+                    ps = datapoints.pointsize,+                    bottom = Math.min(Math.max(0, axisy.min), axisy.max),+                    i = 0, top, areaOpen = false,+                    ypos = 1, segmentStart = 0, segmentEnd = 0;++                // we process each segment in two turns, first forward+                // direction to sketch out top, then once we hit the+                // end we go backwards to sketch the bottom+                while (true) {+                    if (ps > 0 && i > points.length + ps)+                        break;++                    i += ps; // ps is negative if going backwards++                    var x1 = points[i - ps],+                        y1 = points[i - ps + ypos],+                        x2 = points[i], y2 = points[i + ypos];++                    if (areaOpen) {+                        if (ps > 0 && x1 != null && x2 == null) {+                            // at turning point+                            segmentEnd = i;+                            ps = -ps;+                            ypos = 2;+                            continue;+                        }++                        if (ps < 0 && i == segmentStart + ps) {+                            // done with the reverse sweep+                            ctx.fill();+                            areaOpen = false;+                            ps = -ps;+                            ypos = 1;+                            i = segmentStart = segmentEnd + ps;+                            continue;+                        }+                    }++                    if (x1 == null || x2 == null)+                        continue;++                    // clip x values++                    // clip with xmin+                    if (x1 <= x2 && x1 < axisx.min) {+                        if (x2 < axisx.min)+                            continue;+                        y1 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;+                        x1 = axisx.min;+                    }+                    else if (x2 <= x1 && x2 < axisx.min) {+                        if (x1 < axisx.min)+                            continue;+                        y2 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;+                        x2 = axisx.min;+                    }++                    // clip with xmax+                    if (x1 >= x2 && x1 > axisx.max) {+                        if (x2 > axisx.max)+                            continue;+                        y1 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;+                        x1 = axisx.max;+                    }+                    else if (x2 >= x1 && x2 > axisx.max) {+                        if (x1 > axisx.max)+                            continue;+                        y2 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;+                        x2 = axisx.max;+                    }++                    if (!areaOpen) {+                        // open area+                        ctx.beginPath();+                        ctx.moveTo(axisx.p2c(x1), axisy.p2c(bottom));+                        areaOpen = true;+                    }++                    // now first check the case where both is outside+                    if (y1 >= axisy.max && y2 >= axisy.max) {+                        ctx.lineTo(axisx.p2c(x1), axisy.p2c(axisy.max));+                        ctx.lineTo(axisx.p2c(x2), axisy.p2c(axisy.max));+                        continue;+                    }+                    else if (y1 <= axisy.min && y2 <= axisy.min) {+                        ctx.lineTo(axisx.p2c(x1), axisy.p2c(axisy.min));+                        ctx.lineTo(axisx.p2c(x2), axisy.p2c(axisy.min));+                        continue;+                    }++                    // else it's a bit more complicated, there might+                    // be a flat maxed out rectangle first, then a+                    // triangular cutout or reverse; to find these+                    // keep track of the current x values+                    var x1old = x1, x2old = x2;++                    // clip the y values, without shortcutting, we+                    // go through all cases in turn++                    // clip with ymin+                    if (y1 <= y2 && y1 < axisy.min && y2 >= axisy.min) {+                        x1 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;+                        y1 = axisy.min;+                    }+                    else if (y2 <= y1 && y2 < axisy.min && y1 >= axisy.min) {+                        x2 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;+                        y2 = axisy.min;+                    }++                    // clip with ymax+                    if (y1 >= y2 && y1 > axisy.max && y2 <= axisy.max) {+                        x1 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;+                        y1 = axisy.max;+                    }+                    else if (y2 >= y1 && y2 > axisy.max && y1 <= axisy.max) {+                        x2 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;+                        y2 = axisy.max;+                    }++                    // if the x value was changed we got a rectangle+                    // to fill+                    if (x1 != x1old) {+                        ctx.lineTo(axisx.p2c(x1old), axisy.p2c(y1));+                        // it goes to (x1, y1), but we fill that below+                    }++                    // fill triangular section, this sometimes result+                    // in redundant points if (x1, y1) hasn't changed+                    // from previous line to, but we just ignore that+                    ctx.lineTo(axisx.p2c(x1), axisy.p2c(y1));+                    ctx.lineTo(axisx.p2c(x2), axisy.p2c(y2));++                    // fill the other rectangle if it's there+                    if (x2 != x2old) {+                        ctx.lineTo(axisx.p2c(x2), axisy.p2c(y2));+                        ctx.lineTo(axisx.p2c(x2old), axisy.p2c(y2));+                    }+                }+            }++            ctx.save();+            ctx.translate(plotOffset.left, plotOffset.top);+            ctx.lineJoin = "round";++            var lw = series.lines.lineWidth,+                sw = series.shadowSize;+            // FIXME: consider another form of shadow when filling is turned on+            if (lw > 0 && sw > 0) {+                // draw shadow as a thick and thin line with transparency+                ctx.lineWidth = sw;+                ctx.strokeStyle = "rgba(0,0,0,0.1)";+                // position shadow at angle from the mid of line+                var angle = Math.PI/18;+                plotLine(series.datapoints, Math.sin(angle) * (lw/2 + sw/2), Math.cos(angle) * (lw/2 + sw/2), series.xaxis, series.yaxis);+                ctx.lineWidth = sw/2;+                plotLine(series.datapoints, Math.sin(angle) * (lw/2 + sw/4), Math.cos(angle) * (lw/2 + sw/4), series.xaxis, series.yaxis);+            }++            ctx.lineWidth = lw;+            ctx.strokeStyle = series.color;+            var fillStyle = getFillStyle(series.lines, series.color, 0, plotHeight);+            if (fillStyle) {+                ctx.fillStyle = fillStyle;+                plotLineArea(series.datapoints, series.xaxis, series.yaxis);+            }++            if (lw > 0)+                plotLine(series.datapoints, 0, 0, series.xaxis, series.yaxis);+            ctx.restore();+        }++        function drawSeriesPoints(series) {+            function plotPoints(datapoints, radius, fillStyle, offset, shadow, axisx, axisy, symbol) {+                var points = datapoints.points, ps = datapoints.pointsize;++                for (var i = 0; i < points.length; i += ps) {+                    var x = points[i], y = points[i + 1];+                    if (x == null || x < axisx.min || x > axisx.max || y < axisy.min || y > axisy.max)+                        continue;++                    ctx.beginPath();+                    x = axisx.p2c(x);+                    y = axisy.p2c(y) + offset;+                    if (symbol == "circle")+                        ctx.arc(x, y, radius, 0, shadow ? Math.PI : Math.PI * 2, false);+                    else+                        symbol(ctx, x, y, radius, shadow);+                    ctx.closePath();++                    if (fillStyle) {+                        ctx.fillStyle = fillStyle;+                        ctx.fill();+                    }+                    ctx.stroke();+                }+            }++            ctx.save();+            ctx.translate(plotOffset.left, plotOffset.top);++            var lw = series.points.lineWidth,+                sw = series.shadowSize,+                radius = series.points.radius,+                symbol = series.points.symbol;++            // If the user sets the line width to 0, we change it to a very +            // small value. A line width of 0 seems to force the default of 1.+            // Doing the conditional here allows the shadow setting to still be +            // optional even with a lineWidth of 0.++            if( lw == 0 )+                lw = 0.0001;++            if (lw > 0 && sw > 0) {+                // draw shadow in two steps+                var w = sw / 2;+                ctx.lineWidth = w;+                ctx.strokeStyle = "rgba(0,0,0,0.1)";+                plotPoints(series.datapoints, radius, null, w + w/2, true,+                           series.xaxis, series.yaxis, symbol);++                ctx.strokeStyle = "rgba(0,0,0,0.2)";+                plotPoints(series.datapoints, radius, null, w/2, true,+                           series.xaxis, series.yaxis, symbol);+            }++            ctx.lineWidth = lw;+            ctx.strokeStyle = series.color;+            plotPoints(series.datapoints, radius,+                       getFillStyle(series.points, series.color), 0, false,+                       series.xaxis, series.yaxis, symbol);+            ctx.restore();+        }++        function drawBar(x, y, b, barLeft, barRight, fillStyleCallback, axisx, axisy, c, horizontal, lineWidth) {+            var left, right, bottom, top,+                drawLeft, drawRight, drawTop, drawBottom,+                tmp;++            // in horizontal mode, we start the bar from the left+            // instead of from the bottom so it appears to be+            // horizontal rather than vertical+            if (horizontal) {+                drawBottom = drawRight = drawTop = true;+                drawLeft = false;+                left = b;+                right = x;+                top = y + barLeft;+                bottom = y + barRight;++                // account for negative bars+                if (right < left) {+                    tmp = right;+                    right = left;+                    left = tmp;+                    drawLeft = true;+                    drawRight = false;+                }+            }+            else {+                drawLeft = drawRight = drawTop = true;+                drawBottom = false;+                left = x + barLeft;+                right = x + barRight;+                bottom = b;+                top = y;++                // account for negative bars+                if (top < bottom) {+                    tmp = top;+                    top = bottom;+                    bottom = tmp;+                    drawBottom = true;+                    drawTop = false;+                }+            }++            // clip+            if (right < axisx.min || left > axisx.max ||+                top < axisy.min || bottom > axisy.max)+                return;++            if (left < axisx.min) {+                left = axisx.min;+                drawLeft = false;+            }++            if (right > axisx.max) {+                right = axisx.max;+                drawRight = false;+            }++            if (bottom < axisy.min) {+                bottom = axisy.min;+                drawBottom = false;+            }++            if (top > axisy.max) {+                top = axisy.max;+                drawTop = false;+            }++            left = axisx.p2c(left);+            bottom = axisy.p2c(bottom);+            right = axisx.p2c(right);+            top = axisy.p2c(top);++            // fill the bar+            if (fillStyleCallback) {+                c.fillStyle = fillStyleCallback(bottom, top);+                c.fillRect(left, top, right - left, bottom - top)+            }++            // draw outline+            if (lineWidth > 0 && (drawLeft || drawRight || drawTop || drawBottom)) {+                c.beginPath();++                // FIXME: inline moveTo is buggy with excanvas+                c.moveTo(left, bottom);+                if (drawLeft)+                    c.lineTo(left, top);+                else+                    c.moveTo(left, top);+                if (drawTop)+                    c.lineTo(right, top);+                else+                    c.moveTo(right, top);+                if (drawRight)+                    c.lineTo(right, bottom);+                else+                    c.moveTo(right, bottom);+                if (drawBottom)+                    c.lineTo(left, bottom);+                else+                    c.moveTo(left, bottom);+                c.stroke();+            }+        }++        function drawSeriesBars(series) {+            function plotBars(datapoints, barLeft, barRight, fillStyleCallback, axisx, axisy) {+                var points = datapoints.points, ps = datapoints.pointsize;++                for (var i = 0; i < points.length; i += ps) {+                    if (points[i] == null)+                        continue;+                    drawBar(points[i], points[i + 1], points[i + 2], barLeft, barRight, fillStyleCallback, axisx, axisy, ctx, series.bars.horizontal, series.bars.lineWidth);+                }+            }++            ctx.save();+            ctx.translate(plotOffset.left, plotOffset.top);++            // FIXME: figure out a way to add shadows (for instance along the right edge)+            ctx.lineWidth = series.bars.lineWidth;+            ctx.strokeStyle = series.color;++            var barLeft;++            switch (series.bars.align) {+                case "left":+                    barLeft = 0;+                    break;+                case "right":+                    barLeft = -series.bars.barWidth;+                    break;+                default:+                    barLeft = -series.bars.barWidth / 2;+            }++            var fillStyleCallback = series.bars.fill ? function (bottom, top) { return getFillStyle(series.bars, series.color, bottom, top); } : null;+            plotBars(series.datapoints, barLeft, barLeft + series.bars.barWidth, fillStyleCallback, series.xaxis, series.yaxis);+            ctx.restore();+        }++        function getFillStyle(filloptions, seriesColor, bottom, top) {+            var fill = filloptions.fill;+            if (!fill)+                return null;++            if (filloptions.fillColor)+                return getColorOrGradient(filloptions.fillColor, bottom, top, seriesColor);++            var c = $.color.parse(seriesColor);+            c.a = typeof fill == "number" ? fill : 0.4;+            c.normalize();+            return c.toString();+        }++        function insertLegend() {++            if (options.legend.container != null) {+                $(options.legend.container).html("");+            } else {+                placeholder.find(".legend").remove();+            }++            if (!options.legend.show) {+                return;+            }++            var fragments = [], entries = [], rowStarted = false,+                lf = options.legend.labelFormatter, s, label;++            // Build a list of legend entries, with each having a label and a color++            for (var i = 0; i < series.length; ++i) {+                s = series[i];+                if (s.label) {+                    label = lf ? lf(s.label, s) : s.label;+                    if (label) {+                        entries.push({+                            label: label,+                            color: s.color+                        });+                    }+                }+            }++            // Sort the legend using either the default or a custom comparator++            if (options.legend.sorted) {+                if ($.isFunction(options.legend.sorted)) {+                    entries.sort(options.legend.sorted);+                } else if (options.legend.sorted == "reverse") {+                	entries.reverse();+                } else {+                    var ascending = options.legend.sorted != "descending";+                    entries.sort(function(a, b) {+                        return a.label == b.label ? 0 : (+                            (a.label < b.label) != ascending ? 1 : -1   // Logical XOR+                        );+                    });+                }+            }++            // Generate markup for the list of entries, in their final order++            for (var i = 0; i < entries.length; ++i) {++                var entry = entries[i];++                if (i % options.legend.noColumns == 0) {+                    if (rowStarted)+                        fragments.push('</tr>');+                    fragments.push('<tr>');+                    rowStarted = true;+                }++                fragments.push(+                    '<td class="legendColorBox"><div style="border:1px solid ' + options.legend.labelBoxBorderColor + ';padding:1px"><div style="width:4px;height:0;border:5px solid ' + entry.color + ';overflow:hidden"></div></div></td>' ++                    '<td class="legendLabel">' + entry.label + '</td>'+                );+            }++            if (rowStarted)+                fragments.push('</tr>');++            if (fragments.length == 0)+                return;++            var table = '<table style="font-size:smaller;color:' + options.grid.color + '">' + fragments.join("") + '</table>';+            if (options.legend.container != null)+                $(options.legend.container).html(table);+            else {+                var pos = "",+                    p = options.legend.position,+                    m = options.legend.margin;+                if (m[0] == null)+                    m = [m, m];+                if (p.charAt(0) == "n")+                    pos += 'top:' + (m[1] + plotOffset.top) + 'px;';+                else if (p.charAt(0) == "s")+                    pos += 'bottom:' + (m[1] + plotOffset.bottom) + 'px;';+                if (p.charAt(1) == "e")+                    pos += 'right:' + (m[0] + plotOffset.right) + 'px;';+                else if (p.charAt(1) == "w")+                    pos += 'left:' + (m[0] + plotOffset.left) + 'px;';+                var legend = $('<div class="legend">' + table.replace('style="', 'style="position:absolute;' + pos +';') + '</div>').appendTo(placeholder);+                if (options.legend.backgroundOpacity != 0.0) {+                    // put in the transparent background+                    // separately to avoid blended labels and+                    // label boxes+                    var c = options.legend.backgroundColor;+                    if (c == null) {+                        c = options.grid.backgroundColor;+                        if (c && typeof c == "string")+                            c = $.color.parse(c);+                        else+                            c = $.color.extract(legend, 'background-color');+                        c.a = 1;+                        c = c.toString();+                    }+                    var div = legend.children();+                    $('<div style="position:absolute;width:' + div.width() + 'px;height:' + div.height() + 'px;' + pos +'background-color:' + c + ';"> </div>').prependTo(legend).css('opacity', options.legend.backgroundOpacity);+                }+            }+        }+++        // interactive features++        var highlights = [],+            redrawTimeout = null;++        // returns the data item the mouse is over, or null if none is found+        function findNearbyItem(mouseX, mouseY, seriesFilter) {+            var maxDistance = options.grid.mouseActiveRadius,+                smallestDistance = maxDistance * maxDistance + 1,+                item = null, foundPoint = false, i, j, ps;++            for (i = series.length - 1; i >= 0; --i) {+                if (!seriesFilter(series[i]))+                    continue;++                var s = series[i],+                    axisx = s.xaxis,+                    axisy = s.yaxis,+                    points = s.datapoints.points,+                    mx = axisx.c2p(mouseX), // precompute some stuff to make the loop faster+                    my = axisy.c2p(mouseY),+                    maxx = maxDistance / axisx.scale,+                    maxy = maxDistance / axisy.scale;++                ps = s.datapoints.pointsize;+                // with inverse transforms, we can't use the maxx/maxy+                // optimization, sadly+                if (axisx.options.inverseTransform)+                    maxx = Number.MAX_VALUE;+                if (axisy.options.inverseTransform)+                    maxy = Number.MAX_VALUE;++                if (s.lines.show || s.points.show) {+                    for (j = 0; j < points.length; j += ps) {+                        var x = points[j], y = points[j + 1];+                        if (x == null)+                            continue;++                        // For points and lines, the cursor must be within a+                        // certain distance to the data point+                        if (x - mx > maxx || x - mx < -maxx ||+                            y - my > maxy || y - my < -maxy)+                            continue;++                        // We have to calculate distances in pixels, not in+                        // data units, because the scales of the axes may be different+                        var dx = Math.abs(axisx.p2c(x) - mouseX),+                            dy = Math.abs(axisy.p2c(y) - mouseY),+                            dist = dx * dx + dy * dy; // we save the sqrt++                        // use <= to ensure last point takes precedence+                        // (last generally means on top of)+                        if (dist < smallestDistance) {+                            smallestDistance = dist;+                            item = [i, j / ps];+                        }+                    }+                }++                if (s.bars.show && !item) { // no other point can be nearby++                    var barLeft, barRight;++                    switch (s.bars.align) {+                        case "left":+                            barLeft = 0;+                            break;+                        case "right":+                            barLeft = -s.bars.barWidth;+                            break;+                        default:+                            barLeft = -s.bars.barWidth / 2;+                    }++                    barRight = barLeft + s.bars.barWidth;++                    for (j = 0; j < points.length; j += ps) {+                        var x = points[j], y = points[j + 1], b = points[j + 2];+                        if (x == null)+                            continue;++                        // for a bar graph, the cursor must be inside the bar+                        if (series[i].bars.horizontal ?+                            (mx <= Math.max(b, x) && mx >= Math.min(b, x) &&+                             my >= y + barLeft && my <= y + barRight) :+                            (mx >= x + barLeft && mx <= x + barRight &&+                             my >= Math.min(b, y) && my <= Math.max(b, y)))+                                item = [i, j / ps];+                    }+                }+            }++            if (item) {+                i = item[0];+                j = item[1];+                ps = series[i].datapoints.pointsize;++                return { datapoint: series[i].datapoints.points.slice(j * ps, (j + 1) * ps),+                         dataIndex: j,+                         series: series[i],+                         seriesIndex: i };+            }++            return null;+        }++        function onMouseMove(e) {+            if (options.grid.hoverable)+                triggerClickHoverEvent("plothover", e,+                                       function (s) { return s["hoverable"] != false; });+        }++        function onMouseLeave(e) {+            if (options.grid.hoverable)+                triggerClickHoverEvent("plothover", e,+                                       function (s) { return false; });+        }++        function onClick(e) {+            triggerClickHoverEvent("plotclick", e,+                                   function (s) { return s["clickable"] != false; });+        }++        // trigger click or hover event (they send the same parameters+        // so we share their code)+        function triggerClickHoverEvent(eventname, event, seriesFilter) {+            var offset = eventHolder.offset(),+                canvasX = event.pageX - offset.left - plotOffset.left,+                canvasY = event.pageY - offset.top - plotOffset.top,+            pos = canvasToAxisCoords({ left: canvasX, top: canvasY });++            pos.pageX = event.pageX;+            pos.pageY = event.pageY;++            var item = findNearbyItem(canvasX, canvasY, seriesFilter);++            if (item) {+                // fill in mouse pos for any listeners out there+                item.pageX = parseInt(item.series.xaxis.p2c(item.datapoint[0]) + offset.left + plotOffset.left, 10);+                item.pageY = parseInt(item.series.yaxis.p2c(item.datapoint[1]) + offset.top + plotOffset.top, 10);+            }++            if (options.grid.autoHighlight) {+                // clear auto-highlights+                for (var i = 0; i < highlights.length; ++i) {+                    var h = highlights[i];+                    if (h.auto == eventname &&+                        !(item && h.series == item.series &&+                          h.point[0] == item.datapoint[0] &&+                          h.point[1] == item.datapoint[1]))+                        unhighlight(h.series, h.point);+                }++                if (item)+                    highlight(item.series, item.datapoint, eventname);+            }++            placeholder.trigger(eventname, [ pos, item ]);+        }++        function triggerRedrawOverlay() {+            var t = options.interaction.redrawOverlayInterval;+            if (t == -1) {      // skip event queue+                drawOverlay();+                return;+            }++            if (!redrawTimeout)+                redrawTimeout = setTimeout(drawOverlay, t);+        }++        function drawOverlay() {+            redrawTimeout = null;++            // draw highlights+            octx.save();+            overlay.clear();+            octx.translate(plotOffset.left, plotOffset.top);++            var i, hi;+            for (i = 0; i < highlights.length; ++i) {+                hi = highlights[i];++                if (hi.series.bars.show)+                    drawBarHighlight(hi.series, hi.point);+                else+                    drawPointHighlight(hi.series, hi.point);+            }+            octx.restore();++            executeHooks(hooks.drawOverlay, [octx]);+        }++        function highlight(s, point, auto) {+            if (typeof s == "number")+                s = series[s];++            if (typeof point == "number") {+                var ps = s.datapoints.pointsize;+                point = s.datapoints.points.slice(ps * point, ps * (point + 1));+            }++            var i = indexOfHighlight(s, point);+            if (i == -1) {+                highlights.push({ series: s, point: point, auto: auto });++                triggerRedrawOverlay();+            }+            else if (!auto)+                highlights[i].auto = false;+        }++        function unhighlight(s, point) {+            if (s == null && point == null) {+                highlights = [];+                triggerRedrawOverlay();+                return;+            }++            if (typeof s == "number")+                s = series[s];++            if (typeof point == "number") {+                var ps = s.datapoints.pointsize;+                point = s.datapoints.points.slice(ps * point, ps * (point + 1));+            }++            var i = indexOfHighlight(s, point);+            if (i != -1) {+                highlights.splice(i, 1);++                triggerRedrawOverlay();+            }+        }++        function indexOfHighlight(s, p) {+            for (var i = 0; i < highlights.length; ++i) {+                var h = highlights[i];+                if (h.series == s && h.point[0] == p[0]+                    && h.point[1] == p[1])+                    return i;+            }+            return -1;+        }++        function drawPointHighlight(series, point) {+            var x = point[0], y = point[1],+                axisx = series.xaxis, axisy = series.yaxis,+                highlightColor = (typeof series.highlightColor === "string") ? series.highlightColor : $.color.parse(series.color).scale('a', 0.5).toString();++            if (x < axisx.min || x > axisx.max || y < axisy.min || y > axisy.max)+                return;++            var pointRadius = series.points.radius + series.points.lineWidth / 2;+            octx.lineWidth = pointRadius;+            octx.strokeStyle = highlightColor;+            var radius = 1.5 * pointRadius;+            x = axisx.p2c(x);+            y = axisy.p2c(y);++            octx.beginPath();+            if (series.points.symbol == "circle")+                octx.arc(x, y, radius, 0, 2 * Math.PI, false);+            else+                series.points.symbol(octx, x, y, radius, false);+            octx.closePath();+            octx.stroke();+        }++        function drawBarHighlight(series, point) {+            var highlightColor = (typeof series.highlightColor === "string") ? series.highlightColor : $.color.parse(series.color).scale('a', 0.5).toString(),+                fillStyle = highlightColor,+                barLeft;++            switch (series.bars.align) {+                case "left":+                    barLeft = 0;+                    break;+                case "right":+                    barLeft = -series.bars.barWidth;+                    break;+                default:+                    barLeft = -series.bars.barWidth / 2;+            }++            octx.lineWidth = series.bars.lineWidth;+            octx.strokeStyle = highlightColor;++            drawBar(point[0], point[1], point[2] || 0, barLeft, barLeft + series.bars.barWidth,+                    function () { return fillStyle; }, series.xaxis, series.yaxis, octx, series.bars.horizontal, series.bars.lineWidth);+        }++        function getColorOrGradient(spec, bottom, top, defaultColor) {+            if (typeof spec == "string")+                return spec;+            else {+                // assume this is a gradient spec; IE currently only+                // supports a simple vertical gradient properly, so that's+                // what we support too+                var gradient = ctx.createLinearGradient(0, top, 0, bottom);++                for (var i = 0, l = spec.colors.length; i < l; ++i) {+                    var c = spec.colors[i];+                    if (typeof c != "string") {+                        var co = $.color.parse(defaultColor);+                        if (c.brightness != null)+                            co = co.scale('rgb', c.brightness);+                        if (c.opacity != null)+                            co.a *= c.opacity;+                        c = co.toString();+                    }+                    gradient.addColorStop(i / (l - 1), c);+                }++                return gradient;+            }+        }+    }++    // Add the plot function to the top level of the jQuery object++    $.plot = function(placeholder, data, options) {+        //var t0 = new Date();+        var plot = new Plot($(placeholder), data, options, $.plot.plugins);+        //(window.console ? console.log : alert)("time used (msecs): " + ((new Date()).getTime() - t0.getTime()));+        return plot;+    };++    $.plot.version = "0.8.3";++    $.plot.plugins = [];++    // Also add the plot function as a chainable property++    $.fn.plot = function(data, options) {+        return this.each(function() {+            $.plot(this, data, options);+        });+    };++    // round to nearby lower multiple of base+    function floorInBase(n, base) {+        return base * Math.floor(n / base);+    }++})(jQuery);
+ static/js/jquery.flot.min.js view
@@ -0,0 +1,8 @@+/* Javascript plotting library for jQuery, version 0.8.3.++Copyright (c) 2007-2014 IOLA and Ole Laursen.+Licensed under the MIT license.++*/+(function($){$.color={};$.color.make=function(r,g,b,a){var o={};o.r=r||0;o.g=g||0;o.b=b||0;o.a=a!=null?a:1;o.add=function(c,d){for(var i=0;i<c.length;++i)o[c.charAt(i)]+=d;return o.normalize()};o.scale=function(c,f){for(var i=0;i<c.length;++i)o[c.charAt(i)]*=f;return o.normalize()};o.toString=function(){if(o.a>=1){return"rgb("+[o.r,o.g,o.b].join(",")+")"}else{return"rgba("+[o.r,o.g,o.b,o.a].join(",")+")"}};o.normalize=function(){function clamp(min,value,max){return value<min?min:value>max?max:value}o.r=clamp(0,parseInt(o.r),255);o.g=clamp(0,parseInt(o.g),255);o.b=clamp(0,parseInt(o.b),255);o.a=clamp(0,o.a,1);return o};o.clone=function(){return $.color.make(o.r,o.b,o.g,o.a)};return o.normalize()};$.color.extract=function(elem,css){var c;do{c=elem.css(css).toLowerCase();if(c!=""&&c!="transparent")break;elem=elem.parent()}while(elem.length&&!$.nodeName(elem.get(0),"body"));if(c=="rgba(0, 0, 0, 0)")c="transparent";return $.color.parse(c)};$.color.parse=function(str){var res,m=$.color.make;if(res=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(str))return m(parseInt(res[1],10),parseInt(res[2],10),parseInt(res[3],10));if(res=/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(str))return m(parseInt(res[1],10),parseInt(res[2],10),parseInt(res[3],10),parseFloat(res[4]));if(res=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(str))return m(parseFloat(res[1])*2.55,parseFloat(res[2])*2.55,parseFloat(res[3])*2.55);if(res=/rgba\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(str))return m(parseFloat(res[1])*2.55,parseFloat(res[2])*2.55,parseFloat(res[3])*2.55,parseFloat(res[4]));if(res=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(str))return m(parseInt(res[1],16),parseInt(res[2],16),parseInt(res[3],16));if(res=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(str))return m(parseInt(res[1]+res[1],16),parseInt(res[2]+res[2],16),parseInt(res[3]+res[3],16));var name=$.trim(str).toLowerCase();if(name=="transparent")return m(255,255,255,0);else{res=lookupColors[name]||[0,0,0];return m(res[0],res[1],res[2])}};var lookupColors={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0]}})(jQuery);(function($){var hasOwnProperty=Object.prototype.hasOwnProperty;if(!$.fn.detach){$.fn.detach=function(){return this.each(function(){if(this.parentNode){this.parentNode.removeChild(this)}})}}function Canvas(cls,container){var element=container.children("."+cls)[0];if(element==null){element=document.createElement("canvas");element.className=cls;$(element).css({direction:"ltr",position:"absolute",left:0,top:0}).appendTo(container);if(!element.getContext){if(window.G_vmlCanvasManager){element=window.G_vmlCanvasManager.initElement(element)}else{throw new Error("Canvas is not available. If you're using IE with a fall-back such as Excanvas, then there's either a mistake in your conditional include, or the page has no DOCTYPE and is rendering in Quirks Mode.")}}}this.element=element;var context=this.context=element.getContext("2d");var devicePixelRatio=window.devicePixelRatio||1,backingStoreRatio=context.webkitBackingStorePixelRatio||context.mozBackingStorePixelRatio||context.msBackingStorePixelRatio||context.oBackingStorePixelRatio||context.backingStorePixelRatio||1;this.pixelRatio=devicePixelRatio/backingStoreRatio;this.resize(container.width(),container.height());this.textContainer=null;this.text={};this._textCache={}}Canvas.prototype.resize=function(width,height){if(width<=0||height<=0){throw new Error("Invalid dimensions for plot, width = "+width+", height = "+height)}var element=this.element,context=this.context,pixelRatio=this.pixelRatio;if(this.width!=width){element.width=width*pixelRatio;element.style.width=width+"px";this.width=width}if(this.height!=height){element.height=height*pixelRatio;element.style.height=height+"px";this.height=height}context.restore();context.save();context.scale(pixelRatio,pixelRatio)};Canvas.prototype.clear=function(){this.context.clearRect(0,0,this.width,this.height)};Canvas.prototype.render=function(){var cache=this._textCache;for(var layerKey in cache){if(hasOwnProperty.call(cache,layerKey)){var layer=this.getTextLayer(layerKey),layerCache=cache[layerKey];layer.hide();for(var styleKey in layerCache){if(hasOwnProperty.call(layerCache,styleKey)){var styleCache=layerCache[styleKey];for(var key in styleCache){if(hasOwnProperty.call(styleCache,key)){var positions=styleCache[key].positions;for(var i=0,position;position=positions[i];i++){if(position.active){if(!position.rendered){layer.append(position.element);position.rendered=true}}else{positions.splice(i--,1);if(position.rendered){position.element.detach()}}}if(positions.length==0){delete styleCache[key]}}}}}layer.show()}}};Canvas.prototype.getTextLayer=function(classes){var layer=this.text[classes];if(layer==null){if(this.textContainer==null){this.textContainer=$("<div class='flot-text'></div>").css({position:"absolute",top:0,left:0,bottom:0,right:0,"font-size":"smaller",color:"#545454"}).insertAfter(this.element)}layer=this.text[classes]=$("<div></div>").addClass(classes).css({position:"absolute",top:0,left:0,bottom:0,right:0}).appendTo(this.textContainer)}return layer};Canvas.prototype.getTextInfo=function(layer,text,font,angle,width){var textStyle,layerCache,styleCache,info;text=""+text;if(typeof font==="object"){textStyle=font.style+" "+font.variant+" "+font.weight+" "+font.size+"px/"+font.lineHeight+"px "+font.family}else{textStyle=font}layerCache=this._textCache[layer];if(layerCache==null){layerCache=this._textCache[layer]={}}styleCache=layerCache[textStyle];if(styleCache==null){styleCache=layerCache[textStyle]={}}info=styleCache[text];if(info==null){var element=$("<div></div>").html(text).css({position:"absolute","max-width":width,top:-9999}).appendTo(this.getTextLayer(layer));if(typeof font==="object"){element.css({font:textStyle,color:font.color})}else if(typeof font==="string"){element.addClass(font)}info=styleCache[text]={width:element.outerWidth(true),height:element.outerHeight(true),element:element,positions:[]};element.detach()}return info};Canvas.prototype.addText=function(layer,x,y,text,font,angle,width,halign,valign){var info=this.getTextInfo(layer,text,font,angle,width),positions=info.positions;if(halign=="center"){x-=info.width/2}else if(halign=="right"){x-=info.width}if(valign=="middle"){y-=info.height/2}else if(valign=="bottom"){y-=info.height}for(var i=0,position;position=positions[i];i++){if(position.x==x&&position.y==y){position.active=true;return}}position={active:true,rendered:false,element:positions.length?info.element.clone():info.element,x:x,y:y};positions.push(position);position.element.css({top:Math.round(y),left:Math.round(x),"text-align":halign})};Canvas.prototype.removeText=function(layer,x,y,text,font,angle){if(text==null){var layerCache=this._textCache[layer];if(layerCache!=null){for(var styleKey in layerCache){if(hasOwnProperty.call(layerCache,styleKey)){var styleCache=layerCache[styleKey];for(var key in styleCache){if(hasOwnProperty.call(styleCache,key)){var positions=styleCache[key].positions;for(var i=0,position;position=positions[i];i++){position.active=false}}}}}}}else{var positions=this.getTextInfo(layer,text,font,angle).positions;for(var i=0,position;position=positions[i];i++){if(position.x==x&&position.y==y){position.active=false}}}};function Plot(placeholder,data_,options_,plugins){var series=[],options={colors:["#edc240","#afd8f8","#cb4b4b","#4da74d","#9440ed"],legend:{show:true,noColumns:1,labelFormatter:null,labelBoxBorderColor:"#ccc",container:null,position:"ne",margin:5,backgroundColor:null,backgroundOpacity:.85,sorted:null},xaxis:{show:null,position:"bottom",mode:null,font:null,color:null,tickColor:null,transform:null,inverseTransform:null,min:null,max:null,autoscaleMargin:null,ticks:null,tickFormatter:null,labelWidth:null,labelHeight:null,reserveSpace:null,tickLength:null,alignTicksWithAxis:null,tickDecimals:null,tickSize:null,minTickSize:null},yaxis:{autoscaleMargin:.02,position:"left"},xaxes:[],yaxes:[],series:{points:{show:false,radius:3,lineWidth:2,fill:true,fillColor:"#ffffff",symbol:"circle"},lines:{lineWidth:2,fill:false,fillColor:null,steps:false},bars:{show:false,lineWidth:2,barWidth:1,fill:true,fillColor:null,align:"left",horizontal:false,zero:true},shadowSize:3,highlightColor:null},grid:{show:true,aboveData:false,color:"#545454",backgroundColor:null,borderColor:null,tickColor:null,margin:0,labelMargin:5,axisMargin:8,borderWidth:2,minBorderMargin:null,markings:null,markingsColor:"#f4f4f4",markingsLineWidth:2,clickable:false,hoverable:false,autoHighlight:true,mouseActiveRadius:10},interaction:{redrawOverlayInterval:1e3/60},hooks:{}},surface=null,overlay=null,eventHolder=null,ctx=null,octx=null,xaxes=[],yaxes=[],plotOffset={left:0,right:0,top:0,bottom:0},plotWidth=0,plotHeight=0,hooks={processOptions:[],processRawData:[],processDatapoints:[],processOffset:[],drawBackground:[],drawSeries:[],draw:[],bindEvents:[],drawOverlay:[],shutdown:[]},plot=this;plot.setData=setData;plot.setupGrid=setupGrid;plot.draw=draw;plot.getPlaceholder=function(){return placeholder};plot.getCanvas=function(){return surface.element};plot.getPlotOffset=function(){return plotOffset};plot.width=function(){return plotWidth};plot.height=function(){return plotHeight};plot.offset=function(){var o=eventHolder.offset();o.left+=plotOffset.left;o.top+=plotOffset.top;return o};plot.getData=function(){return series};plot.getAxes=function(){var res={},i;$.each(xaxes.concat(yaxes),function(_,axis){if(axis)res[axis.direction+(axis.n!=1?axis.n:"")+"axis"]=axis});return res};plot.getXAxes=function(){return xaxes};plot.getYAxes=function(){return yaxes};plot.c2p=canvasToAxisCoords;plot.p2c=axisToCanvasCoords;plot.getOptions=function(){return options};plot.highlight=highlight;plot.unhighlight=unhighlight;plot.triggerRedrawOverlay=triggerRedrawOverlay;plot.pointOffset=function(point){return{left:parseInt(xaxes[axisNumber(point,"x")-1].p2c(+point.x)+plotOffset.left,10),top:parseInt(yaxes[axisNumber(point,"y")-1].p2c(+point.y)+plotOffset.top,10)}};plot.shutdown=shutdown;plot.destroy=function(){shutdown();placeholder.removeData("plot").empty();series=[];options=null;surface=null;overlay=null;eventHolder=null;ctx=null;octx=null;xaxes=[];yaxes=[];hooks=null;highlights=[];plot=null};plot.resize=function(){var width=placeholder.width(),height=placeholder.height();surface.resize(width,height);overlay.resize(width,height)};plot.hooks=hooks;initPlugins(plot);parseOptions(options_);setupCanvases();setData(data_);setupGrid();draw();bindEvents();function executeHooks(hook,args){args=[plot].concat(args);for(var i=0;i<hook.length;++i)hook[i].apply(this,args)}function initPlugins(){var classes={Canvas:Canvas};for(var i=0;i<plugins.length;++i){var p=plugins[i];p.init(plot,classes);if(p.options)$.extend(true,options,p.options)}}function parseOptions(opts){$.extend(true,options,opts);if(opts&&opts.colors){options.colors=opts.colors}if(options.xaxis.color==null)options.xaxis.color=$.color.parse(options.grid.color).scale("a",.22).toString();if(options.yaxis.color==null)options.yaxis.color=$.color.parse(options.grid.color).scale("a",.22).toString();if(options.xaxis.tickColor==null)options.xaxis.tickColor=options.grid.tickColor||options.xaxis.color;if(options.yaxis.tickColor==null)options.yaxis.tickColor=options.grid.tickColor||options.yaxis.color;if(options.grid.borderColor==null)options.grid.borderColor=options.grid.color;if(options.grid.tickColor==null)options.grid.tickColor=$.color.parse(options.grid.color).scale("a",.22).toString();var i,axisOptions,axisCount,fontSize=placeholder.css("font-size"),fontSizeDefault=fontSize?+fontSize.replace("px",""):13,fontDefaults={style:placeholder.css("font-style"),size:Math.round(.8*fontSizeDefault),variant:placeholder.css("font-variant"),weight:placeholder.css("font-weight"),family:placeholder.css("font-family")};axisCount=options.xaxes.length||1;for(i=0;i<axisCount;++i){axisOptions=options.xaxes[i];if(axisOptions&&!axisOptions.tickColor){axisOptions.tickColor=axisOptions.color}axisOptions=$.extend(true,{},options.xaxis,axisOptions);options.xaxes[i]=axisOptions;if(axisOptions.font){axisOptions.font=$.extend({},fontDefaults,axisOptions.font);if(!axisOptions.font.color){axisOptions.font.color=axisOptions.color}if(!axisOptions.font.lineHeight){axisOptions.font.lineHeight=Math.round(axisOptions.font.size*1.15)}}}axisCount=options.yaxes.length||1;for(i=0;i<axisCount;++i){axisOptions=options.yaxes[i];if(axisOptions&&!axisOptions.tickColor){axisOptions.tickColor=axisOptions.color}axisOptions=$.extend(true,{},options.yaxis,axisOptions);options.yaxes[i]=axisOptions;if(axisOptions.font){axisOptions.font=$.extend({},fontDefaults,axisOptions.font);if(!axisOptions.font.color){axisOptions.font.color=axisOptions.color}if(!axisOptions.font.lineHeight){axisOptions.font.lineHeight=Math.round(axisOptions.font.size*1.15)}}}if(options.xaxis.noTicks&&options.xaxis.ticks==null)options.xaxis.ticks=options.xaxis.noTicks;if(options.yaxis.noTicks&&options.yaxis.ticks==null)options.yaxis.ticks=options.yaxis.noTicks;if(options.x2axis){options.xaxes[1]=$.extend(true,{},options.xaxis,options.x2axis);options.xaxes[1].position="top";if(options.x2axis.min==null){options.xaxes[1].min=null}if(options.x2axis.max==null){options.xaxes[1].max=null}}if(options.y2axis){options.yaxes[1]=$.extend(true,{},options.yaxis,options.y2axis);options.yaxes[1].position="right";if(options.y2axis.min==null){options.yaxes[1].min=null}if(options.y2axis.max==null){options.yaxes[1].max=null}}if(options.grid.coloredAreas)options.grid.markings=options.grid.coloredAreas;if(options.grid.coloredAreasColor)options.grid.markingsColor=options.grid.coloredAreasColor;if(options.lines)$.extend(true,options.series.lines,options.lines);if(options.points)$.extend(true,options.series.points,options.points);if(options.bars)$.extend(true,options.series.bars,options.bars);if(options.shadowSize!=null)options.series.shadowSize=options.shadowSize;if(options.highlightColor!=null)options.series.highlightColor=options.highlightColor;for(i=0;i<options.xaxes.length;++i)getOrCreateAxis(xaxes,i+1).options=options.xaxes[i];for(i=0;i<options.yaxes.length;++i)getOrCreateAxis(yaxes,i+1).options=options.yaxes[i];for(var n in hooks)if(options.hooks[n]&&options.hooks[n].length)hooks[n]=hooks[n].concat(options.hooks[n]);executeHooks(hooks.processOptions,[options])}function setData(d){series=parseData(d);fillInSeriesOptions();processData()}function parseData(d){var res=[];for(var i=0;i<d.length;++i){var s=$.extend(true,{},options.series);if(d[i].data!=null){s.data=d[i].data;delete d[i].data;$.extend(true,s,d[i]);d[i].data=s.data}else s.data=d[i];res.push(s)}return res}function axisNumber(obj,coord){var a=obj[coord+"axis"];if(typeof a=="object")a=a.n;if(typeof a!="number")a=1;return a}function allAxes(){return $.grep(xaxes.concat(yaxes),function(a){return a})}function canvasToAxisCoords(pos){var res={},i,axis;for(i=0;i<xaxes.length;++i){axis=xaxes[i];if(axis&&axis.used)res["x"+axis.n]=axis.c2p(pos.left)}for(i=0;i<yaxes.length;++i){axis=yaxes[i];if(axis&&axis.used)res["y"+axis.n]=axis.c2p(pos.top)}if(res.x1!==undefined)res.x=res.x1;if(res.y1!==undefined)res.y=res.y1;return res}function axisToCanvasCoords(pos){var res={},i,axis,key;for(i=0;i<xaxes.length;++i){axis=xaxes[i];if(axis&&axis.used){key="x"+axis.n;if(pos[key]==null&&axis.n==1)key="x";if(pos[key]!=null){res.left=axis.p2c(pos[key]);break}}}for(i=0;i<yaxes.length;++i){axis=yaxes[i];if(axis&&axis.used){key="y"+axis.n;if(pos[key]==null&&axis.n==1)key="y";if(pos[key]!=null){res.top=axis.p2c(pos[key]);break}}}return res}function getOrCreateAxis(axes,number){if(!axes[number-1])axes[number-1]={n:number,direction:axes==xaxes?"x":"y",options:$.extend(true,{},axes==xaxes?options.xaxis:options.yaxis)};return axes[number-1]}function fillInSeriesOptions(){var neededColors=series.length,maxIndex=-1,i;for(i=0;i<series.length;++i){var sc=series[i].color;if(sc!=null){neededColors--;if(typeof sc=="number"&&sc>maxIndex){maxIndex=sc}}}if(neededColors<=maxIndex){neededColors=maxIndex+1}var c,colors=[],colorPool=options.colors,colorPoolSize=colorPool.length,variation=0;for(i=0;i<neededColors;i++){c=$.color.parse(colorPool[i%colorPoolSize]||"#666");if(i%colorPoolSize==0&&i){if(variation>=0){if(variation<.5){variation=-variation-.2}else variation=0}else variation=-variation}colors[i]=c.scale("rgb",1+variation)}var colori=0,s;for(i=0;i<series.length;++i){s=series[i];if(s.color==null){s.color=colors[colori].toString();++colori}else if(typeof s.color=="number")s.color=colors[s.color].toString();if(s.lines.show==null){var v,show=true;for(v in s)if(s[v]&&s[v].show){show=false;break}if(show)s.lines.show=true}if(s.lines.zero==null){s.lines.zero=!!s.lines.fill}s.xaxis=getOrCreateAxis(xaxes,axisNumber(s,"x"));s.yaxis=getOrCreateAxis(yaxes,axisNumber(s,"y"))}}function processData(){var topSentry=Number.POSITIVE_INFINITY,bottomSentry=Number.NEGATIVE_INFINITY,fakeInfinity=Number.MAX_VALUE,i,j,k,m,length,s,points,ps,x,y,axis,val,f,p,data,format;function updateAxis(axis,min,max){if(min<axis.datamin&&min!=-fakeInfinity)axis.datamin=min;if(max>axis.datamax&&max!=fakeInfinity)axis.datamax=max}$.each(allAxes(),function(_,axis){axis.datamin=topSentry;axis.datamax=bottomSentry;axis.used=false});for(i=0;i<series.length;++i){s=series[i];s.datapoints={points:[]};executeHooks(hooks.processRawData,[s,s.data,s.datapoints])}for(i=0;i<series.length;++i){s=series[i];data=s.data;format=s.datapoints.format;if(!format){format=[];format.push({x:true,number:true,required:true});format.push({y:true,number:true,required:true});if(s.bars.show||s.lines.show&&s.lines.fill){var autoscale=!!(s.bars.show&&s.bars.zero||s.lines.show&&s.lines.zero);format.push({y:true,number:true,required:false,defaultValue:0,autoscale:autoscale});if(s.bars.horizontal){delete format[format.length-1].y;format[format.length-1].x=true}}s.datapoints.format=format}if(s.datapoints.pointsize!=null)continue;s.datapoints.pointsize=format.length;ps=s.datapoints.pointsize;points=s.datapoints.points;var insertSteps=s.lines.show&&s.lines.steps;s.xaxis.used=s.yaxis.used=true;for(j=k=0;j<data.length;++j,k+=ps){p=data[j];var nullify=p==null;if(!nullify){for(m=0;m<ps;++m){val=p[m];f=format[m];if(f){if(f.number&&val!=null){val=+val;if(isNaN(val))val=null;else if(val==Infinity)val=fakeInfinity;else if(val==-Infinity)val=-fakeInfinity}if(val==null){if(f.required)nullify=true;if(f.defaultValue!=null)val=f.defaultValue}}points[k+m]=val}}if(nullify){for(m=0;m<ps;++m){val=points[k+m];if(val!=null){f=format[m];if(f.autoscale!==false){if(f.x){updateAxis(s.xaxis,val,val)}if(f.y){updateAxis(s.yaxis,val,val)}}}points[k+m]=null}}else{if(insertSteps&&k>0&&points[k-ps]!=null&&points[k-ps]!=points[k]&&points[k-ps+1]!=points[k+1]){for(m=0;m<ps;++m)points[k+ps+m]=points[k+m];points[k+1]=points[k-ps+1];k+=ps}}}}for(i=0;i<series.length;++i){s=series[i];executeHooks(hooks.processDatapoints,[s,s.datapoints])}for(i=0;i<series.length;++i){s=series[i];points=s.datapoints.points;ps=s.datapoints.pointsize;format=s.datapoints.format;var xmin=topSentry,ymin=topSentry,xmax=bottomSentry,ymax=bottomSentry;for(j=0;j<points.length;j+=ps){if(points[j]==null)continue;for(m=0;m<ps;++m){val=points[j+m];f=format[m];if(!f||f.autoscale===false||val==fakeInfinity||val==-fakeInfinity)continue;if(f.x){if(val<xmin)xmin=val;if(val>xmax)xmax=val}if(f.y){if(val<ymin)ymin=val;if(val>ymax)ymax=val}}}if(s.bars.show){var delta;switch(s.bars.align){case"left":delta=0;break;case"right":delta=-s.bars.barWidth;break;default:delta=-s.bars.barWidth/2}if(s.bars.horizontal){ymin+=delta;ymax+=delta+s.bars.barWidth}else{xmin+=delta;xmax+=delta+s.bars.barWidth}}updateAxis(s.xaxis,xmin,xmax);updateAxis(s.yaxis,ymin,ymax)}$.each(allAxes(),function(_,axis){if(axis.datamin==topSentry)axis.datamin=null;if(axis.datamax==bottomSentry)axis.datamax=null})}function setupCanvases(){placeholder.css("padding",0).children().filter(function(){return!$(this).hasClass("flot-overlay")&&!$(this).hasClass("flot-base")}).remove();if(placeholder.css("position")=="static")placeholder.css("position","relative");surface=new Canvas("flot-base",placeholder);overlay=new Canvas("flot-overlay",placeholder);ctx=surface.context;octx=overlay.context;eventHolder=$(overlay.element).unbind();var existing=placeholder.data("plot");if(existing){existing.shutdown();overlay.clear()}placeholder.data("plot",plot)}function bindEvents(){if(options.grid.hoverable){eventHolder.mousemove(onMouseMove);eventHolder.bind("mouseleave",onMouseLeave)}if(options.grid.clickable)eventHolder.click(onClick);executeHooks(hooks.bindEvents,[eventHolder])}function shutdown(){if(redrawTimeout)clearTimeout(redrawTimeout);eventHolder.unbind("mousemove",onMouseMove);eventHolder.unbind("mouseleave",onMouseLeave);eventHolder.unbind("click",onClick);executeHooks(hooks.shutdown,[eventHolder])}function setTransformationHelpers(axis){function identity(x){return x}var s,m,t=axis.options.transform||identity,it=axis.options.inverseTransform;if(axis.direction=="x"){s=axis.scale=plotWidth/Math.abs(t(axis.max)-t(axis.min));m=Math.min(t(axis.max),t(axis.min))}else{s=axis.scale=plotHeight/Math.abs(t(axis.max)-t(axis.min));s=-s;m=Math.max(t(axis.max),t(axis.min))}if(t==identity)axis.p2c=function(p){return(p-m)*s};else axis.p2c=function(p){return(t(p)-m)*s};if(!it)axis.c2p=function(c){return m+c/s};else axis.c2p=function(c){return it(m+c/s)}}function measureTickLabels(axis){var opts=axis.options,ticks=axis.ticks||[],labelWidth=opts.labelWidth||0,labelHeight=opts.labelHeight||0,maxWidth=labelWidth||(axis.direction=="x"?Math.floor(surface.width/(ticks.length||1)):null),legacyStyles=axis.direction+"Axis "+axis.direction+axis.n+"Axis",layer="flot-"+axis.direction+"-axis flot-"+axis.direction+axis.n+"-axis "+legacyStyles,font=opts.font||"flot-tick-label tickLabel";for(var i=0;i<ticks.length;++i){var t=ticks[i];if(!t.label)continue;var info=surface.getTextInfo(layer,t.label,font,null,maxWidth);labelWidth=Math.max(labelWidth,info.width);labelHeight=Math.max(labelHeight,info.height)}axis.labelWidth=opts.labelWidth||labelWidth;axis.labelHeight=opts.labelHeight||labelHeight}function allocateAxisBoxFirstPhase(axis){var lw=axis.labelWidth,lh=axis.labelHeight,pos=axis.options.position,isXAxis=axis.direction==="x",tickLength=axis.options.tickLength,axisMargin=options.grid.axisMargin,padding=options.grid.labelMargin,innermost=true,outermost=true,first=true,found=false;$.each(isXAxis?xaxes:yaxes,function(i,a){if(a&&(a.show||a.reserveSpace)){if(a===axis){found=true}else if(a.options.position===pos){if(found){outermost=false}else{innermost=false}}if(!found){first=false}}});if(outermost){axisMargin=0}if(tickLength==null){tickLength=first?"full":5}if(!isNaN(+tickLength))padding+=+tickLength;if(isXAxis){lh+=padding;if(pos=="bottom"){plotOffset.bottom+=lh+axisMargin;axis.box={top:surface.height-plotOffset.bottom,height:lh}}else{axis.box={top:plotOffset.top+axisMargin,height:lh};plotOffset.top+=lh+axisMargin}}else{lw+=padding;if(pos=="left"){axis.box={left:plotOffset.left+axisMargin,width:lw};plotOffset.left+=lw+axisMargin}else{plotOffset.right+=lw+axisMargin;axis.box={left:surface.width-plotOffset.right,width:lw}}}axis.position=pos;axis.tickLength=tickLength;axis.box.padding=padding;axis.innermost=innermost}function allocateAxisBoxSecondPhase(axis){if(axis.direction=="x"){axis.box.left=plotOffset.left-axis.labelWidth/2;axis.box.width=surface.width-plotOffset.left-plotOffset.right+axis.labelWidth}else{axis.box.top=plotOffset.top-axis.labelHeight/2;axis.box.height=surface.height-plotOffset.bottom-plotOffset.top+axis.labelHeight}}function adjustLayoutForThingsStickingOut(){var minMargin=options.grid.minBorderMargin,axis,i;if(minMargin==null){minMargin=0;for(i=0;i<series.length;++i)minMargin=Math.max(minMargin,2*(series[i].points.radius+series[i].points.lineWidth/2))}var margins={left:minMargin,right:minMargin,top:minMargin,bottom:minMargin};$.each(allAxes(),function(_,axis){if(axis.reserveSpace&&axis.ticks&&axis.ticks.length){if(axis.direction==="x"){margins.left=Math.max(margins.left,axis.labelWidth/2);margins.right=Math.max(margins.right,axis.labelWidth/2)}else{margins.bottom=Math.max(margins.bottom,axis.labelHeight/2);margins.top=Math.max(margins.top,axis.labelHeight/2)}}});plotOffset.left=Math.ceil(Math.max(margins.left,plotOffset.left));plotOffset.right=Math.ceil(Math.max(margins.right,plotOffset.right));plotOffset.top=Math.ceil(Math.max(margins.top,plotOffset.top));plotOffset.bottom=Math.ceil(Math.max(margins.bottom,plotOffset.bottom))}function setupGrid(){var i,axes=allAxes(),showGrid=options.grid.show;for(var a in plotOffset){var margin=options.grid.margin||0;plotOffset[a]=typeof margin=="number"?margin:margin[a]||0}executeHooks(hooks.processOffset,[plotOffset]);for(var a in plotOffset){if(typeof options.grid.borderWidth=="object"){plotOffset[a]+=showGrid?options.grid.borderWidth[a]:0}else{plotOffset[a]+=showGrid?options.grid.borderWidth:0}}$.each(axes,function(_,axis){var axisOpts=axis.options;axis.show=axisOpts.show==null?axis.used:axisOpts.show;axis.reserveSpace=axisOpts.reserveSpace==null?axis.show:axisOpts.reserveSpace;setRange(axis)});if(showGrid){var allocatedAxes=$.grep(axes,function(axis){return axis.show||axis.reserveSpace});$.each(allocatedAxes,function(_,axis){setupTickGeneration(axis);setTicks(axis);snapRangeToTicks(axis,axis.ticks);measureTickLabels(axis)});for(i=allocatedAxes.length-1;i>=0;--i)allocateAxisBoxFirstPhase(allocatedAxes[i]);adjustLayoutForThingsStickingOut();$.each(allocatedAxes,function(_,axis){allocateAxisBoxSecondPhase(axis)})}plotWidth=surface.width-plotOffset.left-plotOffset.right;plotHeight=surface.height-plotOffset.bottom-plotOffset.top;$.each(axes,function(_,axis){setTransformationHelpers(axis)});if(showGrid){drawAxisLabels()}insertLegend()}function setRange(axis){var opts=axis.options,min=+(opts.min!=null?opts.min:axis.datamin),max=+(opts.max!=null?opts.max:axis.datamax),delta=max-min;if(delta==0){var widen=max==0?1:.01;if(opts.min==null)min-=widen;if(opts.max==null||opts.min!=null)max+=widen}else{var margin=opts.autoscaleMargin;if(margin!=null){if(opts.min==null){min-=delta*margin;if(min<0&&axis.datamin!=null&&axis.datamin>=0)min=0}if(opts.max==null){max+=delta*margin;if(max>0&&axis.datamax!=null&&axis.datamax<=0)max=0}}}axis.min=min;axis.max=max}function setupTickGeneration(axis){var opts=axis.options;var noTicks;if(typeof opts.ticks=="number"&&opts.ticks>0)noTicks=opts.ticks;else noTicks=.3*Math.sqrt(axis.direction=="x"?surface.width:surface.height);var delta=(axis.max-axis.min)/noTicks,dec=-Math.floor(Math.log(delta)/Math.LN10),maxDec=opts.tickDecimals;if(maxDec!=null&&dec>maxDec){dec=maxDec}var magn=Math.pow(10,-dec),norm=delta/magn,size;if(norm<1.5){size=1}else if(norm<3){size=2;if(norm>2.25&&(maxDec==null||dec+1<=maxDec)){size=2.5;++dec}}else if(norm<7.5){size=5}else{size=10}size*=magn;if(opts.minTickSize!=null&&size<opts.minTickSize){size=opts.minTickSize}axis.delta=delta;axis.tickDecimals=Math.max(0,maxDec!=null?maxDec:dec);axis.tickSize=opts.tickSize||size;if(opts.mode=="time"&&!axis.tickGenerator){throw new Error("Time mode requires the flot.time plugin.")}if(!axis.tickGenerator){axis.tickGenerator=function(axis){var ticks=[],start=floorInBase(axis.min,axis.tickSize),i=0,v=Number.NaN,prev;do{prev=v;v=start+i*axis.tickSize;ticks.push(v);++i}while(v<axis.max&&v!=prev);return ticks};axis.tickFormatter=function(value,axis){var factor=axis.tickDecimals?Math.pow(10,axis.tickDecimals):1;var formatted=""+Math.round(value*factor)/factor;if(axis.tickDecimals!=null){var decimal=formatted.indexOf(".");var precision=decimal==-1?0:formatted.length-decimal-1;if(precision<axis.tickDecimals){return(precision?formatted:formatted+".")+(""+factor).substr(1,axis.tickDecimals-precision)}}return formatted}}if($.isFunction(opts.tickFormatter))axis.tickFormatter=function(v,axis){return""+opts.tickFormatter(v,axis)};if(opts.alignTicksWithAxis!=null){var otherAxis=(axis.direction=="x"?xaxes:yaxes)[opts.alignTicksWithAxis-1];if(otherAxis&&otherAxis.used&&otherAxis!=axis){var niceTicks=axis.tickGenerator(axis);if(niceTicks.length>0){if(opts.min==null)axis.min=Math.min(axis.min,niceTicks[0]);if(opts.max==null&&niceTicks.length>1)axis.max=Math.max(axis.max,niceTicks[niceTicks.length-1])}axis.tickGenerator=function(axis){var ticks=[],v,i;for(i=0;i<otherAxis.ticks.length;++i){v=(otherAxis.ticks[i].v-otherAxis.min)/(otherAxis.max-otherAxis.min);v=axis.min+v*(axis.max-axis.min);ticks.push(v)}return ticks};if(!axis.mode&&opts.tickDecimals==null){var extraDec=Math.max(0,-Math.floor(Math.log(axis.delta)/Math.LN10)+1),ts=axis.tickGenerator(axis);if(!(ts.length>1&&/\..*0$/.test((ts[1]-ts[0]).toFixed(extraDec))))axis.tickDecimals=extraDec}}}}function setTicks(axis){var oticks=axis.options.ticks,ticks=[];if(oticks==null||typeof oticks=="number"&&oticks>0)ticks=axis.tickGenerator(axis);else if(oticks){if($.isFunction(oticks))ticks=oticks(axis);else ticks=oticks}var i,v;axis.ticks=[];for(i=0;i<ticks.length;++i){var label=null;var t=ticks[i];if(typeof t=="object"){v=+t[0];if(t.length>1)label=t[1]}else v=+t;if(label==null)label=axis.tickFormatter(v,axis);if(!isNaN(v))axis.ticks.push({v:v,label:label})}}function snapRangeToTicks(axis,ticks){if(axis.options.autoscaleMargin&&ticks.length>0){if(axis.options.min==null)axis.min=Math.min(axis.min,ticks[0].v);if(axis.options.max==null&&ticks.length>1)axis.max=Math.max(axis.max,ticks[ticks.length-1].v)}}function draw(){surface.clear();executeHooks(hooks.drawBackground,[ctx]);var grid=options.grid;if(grid.show&&grid.backgroundColor)drawBackground();if(grid.show&&!grid.aboveData){drawGrid()}for(var i=0;i<series.length;++i){executeHooks(hooks.drawSeries,[ctx,series[i]]);drawSeries(series[i])}executeHooks(hooks.draw,[ctx]);if(grid.show&&grid.aboveData){drawGrid()}surface.render();triggerRedrawOverlay()}function extractRange(ranges,coord){var axis,from,to,key,axes=allAxes();for(var i=0;i<axes.length;++i){axis=axes[i];if(axis.direction==coord){key=coord+axis.n+"axis";if(!ranges[key]&&axis.n==1)key=coord+"axis";if(ranges[key]){from=ranges[key].from;to=ranges[key].to;break}}}if(!ranges[key]){axis=coord=="x"?xaxes[0]:yaxes[0];from=ranges[coord+"1"];to=ranges[coord+"2"]}if(from!=null&&to!=null&&from>to){var tmp=from;from=to;to=tmp}return{from:from,to:to,axis:axis}}function drawBackground(){ctx.save();ctx.translate(plotOffset.left,plotOffset.top);ctx.fillStyle=getColorOrGradient(options.grid.backgroundColor,plotHeight,0,"rgba(255, 255, 255, 0)");ctx.fillRect(0,0,plotWidth,plotHeight);ctx.restore()}function drawGrid(){var i,axes,bw,bc;ctx.save();ctx.translate(plotOffset.left,plotOffset.top);var markings=options.grid.markings;if(markings){if($.isFunction(markings)){axes=plot.getAxes();axes.xmin=axes.xaxis.min;axes.xmax=axes.xaxis.max;axes.ymin=axes.yaxis.min;axes.ymax=axes.yaxis.max;markings=markings(axes)}for(i=0;i<markings.length;++i){var m=markings[i],xrange=extractRange(m,"x"),yrange=extractRange(m,"y");if(xrange.from==null)xrange.from=xrange.axis.min;if(xrange.to==null)xrange.to=xrange.axis.max;+if(yrange.from==null)yrange.from=yrange.axis.min;if(yrange.to==null)yrange.to=yrange.axis.max;if(xrange.to<xrange.axis.min||xrange.from>xrange.axis.max||yrange.to<yrange.axis.min||yrange.from>yrange.axis.max)continue;xrange.from=Math.max(xrange.from,xrange.axis.min);xrange.to=Math.min(xrange.to,xrange.axis.max);yrange.from=Math.max(yrange.from,yrange.axis.min);yrange.to=Math.min(yrange.to,yrange.axis.max);var xequal=xrange.from===xrange.to,yequal=yrange.from===yrange.to;if(xequal&&yequal){continue}xrange.from=Math.floor(xrange.axis.p2c(xrange.from));xrange.to=Math.floor(xrange.axis.p2c(xrange.to));yrange.from=Math.floor(yrange.axis.p2c(yrange.from));yrange.to=Math.floor(yrange.axis.p2c(yrange.to));if(xequal||yequal){var lineWidth=m.lineWidth||options.grid.markingsLineWidth,subPixel=lineWidth%2?.5:0;ctx.beginPath();ctx.strokeStyle=m.color||options.grid.markingsColor;ctx.lineWidth=lineWidth;if(xequal){ctx.moveTo(xrange.to+subPixel,yrange.from);ctx.lineTo(xrange.to+subPixel,yrange.to)}else{ctx.moveTo(xrange.from,yrange.to+subPixel);ctx.lineTo(xrange.to,yrange.to+subPixel)}ctx.stroke()}else{ctx.fillStyle=m.color||options.grid.markingsColor;ctx.fillRect(xrange.from,yrange.to,xrange.to-xrange.from,yrange.from-yrange.to)}}}axes=allAxes();bw=options.grid.borderWidth;for(var j=0;j<axes.length;++j){var axis=axes[j],box=axis.box,t=axis.tickLength,x,y,xoff,yoff;if(!axis.show||axis.ticks.length==0)continue;ctx.lineWidth=1;if(axis.direction=="x"){x=0;if(t=="full")y=axis.position=="top"?0:plotHeight;else y=box.top-plotOffset.top+(axis.position=="top"?box.height:0)}else{y=0;if(t=="full")x=axis.position=="left"?0:plotWidth;else x=box.left-plotOffset.left+(axis.position=="left"?box.width:0)}if(!axis.innermost){ctx.strokeStyle=axis.options.color;ctx.beginPath();xoff=yoff=0;if(axis.direction=="x")xoff=plotWidth+1;else yoff=plotHeight+1;if(ctx.lineWidth==1){if(axis.direction=="x"){y=Math.floor(y)+.5}else{x=Math.floor(x)+.5}}ctx.moveTo(x,y);ctx.lineTo(x+xoff,y+yoff);ctx.stroke()}ctx.strokeStyle=axis.options.tickColor;ctx.beginPath();for(i=0;i<axis.ticks.length;++i){var v=axis.ticks[i].v;xoff=yoff=0;if(isNaN(v)||v<axis.min||v>axis.max||t=="full"&&(typeof bw=="object"&&bw[axis.position]>0||bw>0)&&(v==axis.min||v==axis.max))continue;if(axis.direction=="x"){x=axis.p2c(v);yoff=t=="full"?-plotHeight:t;if(axis.position=="top")yoff=-yoff}else{y=axis.p2c(v);xoff=t=="full"?-plotWidth:t;if(axis.position=="left")xoff=-xoff}if(ctx.lineWidth==1){if(axis.direction=="x")x=Math.floor(x)+.5;else y=Math.floor(y)+.5}ctx.moveTo(x,y);ctx.lineTo(x+xoff,y+yoff)}ctx.stroke()}if(bw){bc=options.grid.borderColor;if(typeof bw=="object"||typeof bc=="object"){if(typeof bw!=="object"){bw={top:bw,right:bw,bottom:bw,left:bw}}if(typeof bc!=="object"){bc={top:bc,right:bc,bottom:bc,left:bc}}if(bw.top>0){ctx.strokeStyle=bc.top;ctx.lineWidth=bw.top;ctx.beginPath();ctx.moveTo(0-bw.left,0-bw.top/2);ctx.lineTo(plotWidth,0-bw.top/2);ctx.stroke()}if(bw.right>0){ctx.strokeStyle=bc.right;ctx.lineWidth=bw.right;ctx.beginPath();ctx.moveTo(plotWidth+bw.right/2,0-bw.top);ctx.lineTo(plotWidth+bw.right/2,plotHeight);ctx.stroke()}if(bw.bottom>0){ctx.strokeStyle=bc.bottom;ctx.lineWidth=bw.bottom;ctx.beginPath();ctx.moveTo(plotWidth+bw.right,plotHeight+bw.bottom/2);ctx.lineTo(0,plotHeight+bw.bottom/2);ctx.stroke()}if(bw.left>0){ctx.strokeStyle=bc.left;ctx.lineWidth=bw.left;ctx.beginPath();ctx.moveTo(0-bw.left/2,plotHeight+bw.bottom);ctx.lineTo(0-bw.left/2,0);ctx.stroke()}}else{ctx.lineWidth=bw;ctx.strokeStyle=options.grid.borderColor;ctx.strokeRect(-bw/2,-bw/2,plotWidth+bw,plotHeight+bw)}}ctx.restore()}function drawAxisLabels(){$.each(allAxes(),function(_,axis){var box=axis.box,legacyStyles=axis.direction+"Axis "+axis.direction+axis.n+"Axis",layer="flot-"+axis.direction+"-axis flot-"+axis.direction+axis.n+"-axis "+legacyStyles,font=axis.options.font||"flot-tick-label tickLabel",tick,x,y,halign,valign;surface.removeText(layer);if(!axis.show||axis.ticks.length==0)return;for(var i=0;i<axis.ticks.length;++i){tick=axis.ticks[i];if(!tick.label||tick.v<axis.min||tick.v>axis.max)continue;if(axis.direction=="x"){halign="center";x=plotOffset.left+axis.p2c(tick.v);if(axis.position=="bottom"){y=box.top+box.padding}else{y=box.top+box.height-box.padding;valign="bottom"}}else{valign="middle";y=plotOffset.top+axis.p2c(tick.v);if(axis.position=="left"){x=box.left+box.width-box.padding;halign="right"}else{x=box.left+box.padding}}surface.addText(layer,x,y,tick.label,font,null,null,halign,valign)}})}function drawSeries(series){if(series.lines.show)drawSeriesLines(series);if(series.bars.show)drawSeriesBars(series);if(series.points.show)drawSeriesPoints(series)}function drawSeriesLines(series){function plotLine(datapoints,xoffset,yoffset,axisx,axisy){var points=datapoints.points,ps=datapoints.pointsize,prevx=null,prevy=null;ctx.beginPath();for(var i=ps;i<points.length;i+=ps){var x1=points[i-ps],y1=points[i-ps+1],x2=points[i],y2=points[i+1];if(x1==null||x2==null)continue;if(y1<=y2&&y1<axisy.min){if(y2<axisy.min)continue;x1=(axisy.min-y1)/(y2-y1)*(x2-x1)+x1;y1=axisy.min}else if(y2<=y1&&y2<axisy.min){if(y1<axisy.min)continue;x2=(axisy.min-y1)/(y2-y1)*(x2-x1)+x1;y2=axisy.min}if(y1>=y2&&y1>axisy.max){if(y2>axisy.max)continue;x1=(axisy.max-y1)/(y2-y1)*(x2-x1)+x1;y1=axisy.max}else if(y2>=y1&&y2>axisy.max){if(y1>axisy.max)continue;x2=(axisy.max-y1)/(y2-y1)*(x2-x1)+x1;y2=axisy.max}if(x1<=x2&&x1<axisx.min){if(x2<axisx.min)continue;y1=(axisx.min-x1)/(x2-x1)*(y2-y1)+y1;x1=axisx.min}else if(x2<=x1&&x2<axisx.min){if(x1<axisx.min)continue;y2=(axisx.min-x1)/(x2-x1)*(y2-y1)+y1;x2=axisx.min}if(x1>=x2&&x1>axisx.max){if(x2>axisx.max)continue;y1=(axisx.max-x1)/(x2-x1)*(y2-y1)+y1;x1=axisx.max}else if(x2>=x1&&x2>axisx.max){if(x1>axisx.max)continue;y2=(axisx.max-x1)/(x2-x1)*(y2-y1)+y1;x2=axisx.max}if(x1!=prevx||y1!=prevy)ctx.moveTo(axisx.p2c(x1)+xoffset,axisy.p2c(y1)+yoffset);prevx=x2;prevy=y2;ctx.lineTo(axisx.p2c(x2)+xoffset,axisy.p2c(y2)+yoffset)}ctx.stroke()}function plotLineArea(datapoints,axisx,axisy){var points=datapoints.points,ps=datapoints.pointsize,bottom=Math.min(Math.max(0,axisy.min),axisy.max),i=0,top,areaOpen=false,ypos=1,segmentStart=0,segmentEnd=0;while(true){if(ps>0&&i>points.length+ps)break;i+=ps;var x1=points[i-ps],y1=points[i-ps+ypos],x2=points[i],y2=points[i+ypos];if(areaOpen){if(ps>0&&x1!=null&&x2==null){segmentEnd=i;ps=-ps;ypos=2;continue}if(ps<0&&i==segmentStart+ps){ctx.fill();areaOpen=false;ps=-ps;ypos=1;i=segmentStart=segmentEnd+ps;continue}}if(x1==null||x2==null)continue;if(x1<=x2&&x1<axisx.min){if(x2<axisx.min)continue;y1=(axisx.min-x1)/(x2-x1)*(y2-y1)+y1;x1=axisx.min}else if(x2<=x1&&x2<axisx.min){if(x1<axisx.min)continue;y2=(axisx.min-x1)/(x2-x1)*(y2-y1)+y1;x2=axisx.min}if(x1>=x2&&x1>axisx.max){if(x2>axisx.max)continue;y1=(axisx.max-x1)/(x2-x1)*(y2-y1)+y1;x1=axisx.max}else if(x2>=x1&&x2>axisx.max){if(x1>axisx.max)continue;y2=(axisx.max-x1)/(x2-x1)*(y2-y1)+y1;x2=axisx.max}if(!areaOpen){ctx.beginPath();ctx.moveTo(axisx.p2c(x1),axisy.p2c(bottom));areaOpen=true}if(y1>=axisy.max&&y2>=axisy.max){ctx.lineTo(axisx.p2c(x1),axisy.p2c(axisy.max));ctx.lineTo(axisx.p2c(x2),axisy.p2c(axisy.max));continue}else if(y1<=axisy.min&&y2<=axisy.min){ctx.lineTo(axisx.p2c(x1),axisy.p2c(axisy.min));ctx.lineTo(axisx.p2c(x2),axisy.p2c(axisy.min));continue}var x1old=x1,x2old=x2;if(y1<=y2&&y1<axisy.min&&y2>=axisy.min){x1=(axisy.min-y1)/(y2-y1)*(x2-x1)+x1;y1=axisy.min}else if(y2<=y1&&y2<axisy.min&&y1>=axisy.min){x2=(axisy.min-y1)/(y2-y1)*(x2-x1)+x1;y2=axisy.min}if(y1>=y2&&y1>axisy.max&&y2<=axisy.max){x1=(axisy.max-y1)/(y2-y1)*(x2-x1)+x1;y1=axisy.max}else if(y2>=y1&&y2>axisy.max&&y1<=axisy.max){x2=(axisy.max-y1)/(y2-y1)*(x2-x1)+x1;y2=axisy.max}if(x1!=x1old){ctx.lineTo(axisx.p2c(x1old),axisy.p2c(y1))}ctx.lineTo(axisx.p2c(x1),axisy.p2c(y1));ctx.lineTo(axisx.p2c(x2),axisy.p2c(y2));if(x2!=x2old){ctx.lineTo(axisx.p2c(x2),axisy.p2c(y2));ctx.lineTo(axisx.p2c(x2old),axisy.p2c(y2))}}}ctx.save();ctx.translate(plotOffset.left,plotOffset.top);ctx.lineJoin="round";var lw=series.lines.lineWidth,sw=series.shadowSize;if(lw>0&&sw>0){ctx.lineWidth=sw;ctx.strokeStyle="rgba(0,0,0,0.1)";var angle=Math.PI/18;plotLine(series.datapoints,Math.sin(angle)*(lw/2+sw/2),Math.cos(angle)*(lw/2+sw/2),series.xaxis,series.yaxis);ctx.lineWidth=sw/2;plotLine(series.datapoints,Math.sin(angle)*(lw/2+sw/4),Math.cos(angle)*(lw/2+sw/4),series.xaxis,series.yaxis)}ctx.lineWidth=lw;ctx.strokeStyle=series.color;var fillStyle=getFillStyle(series.lines,series.color,0,plotHeight);if(fillStyle){ctx.fillStyle=fillStyle;plotLineArea(series.datapoints,series.xaxis,series.yaxis)}if(lw>0)plotLine(series.datapoints,0,0,series.xaxis,series.yaxis);ctx.restore()}function drawSeriesPoints(series){function plotPoints(datapoints,radius,fillStyle,offset,shadow,axisx,axisy,symbol){var points=datapoints.points,ps=datapoints.pointsize;for(var i=0;i<points.length;i+=ps){var x=points[i],y=points[i+1];if(x==null||x<axisx.min||x>axisx.max||y<axisy.min||y>axisy.max)continue;ctx.beginPath();x=axisx.p2c(x);y=axisy.p2c(y)+offset;if(symbol=="circle")ctx.arc(x,y,radius,0,shadow?Math.PI:Math.PI*2,false);else symbol(ctx,x,y,radius,shadow);ctx.closePath();if(fillStyle){ctx.fillStyle=fillStyle;ctx.fill()}ctx.stroke()}}ctx.save();ctx.translate(plotOffset.left,plotOffset.top);var lw=series.points.lineWidth,sw=series.shadowSize,radius=series.points.radius,symbol=series.points.symbol;if(lw==0)lw=1e-4;if(lw>0&&sw>0){var w=sw/2;ctx.lineWidth=w;ctx.strokeStyle="rgba(0,0,0,0.1)";plotPoints(series.datapoints,radius,null,w+w/2,true,series.xaxis,series.yaxis,symbol);ctx.strokeStyle="rgba(0,0,0,0.2)";plotPoints(series.datapoints,radius,null,w/2,true,series.xaxis,series.yaxis,symbol)}ctx.lineWidth=lw;ctx.strokeStyle=series.color;plotPoints(series.datapoints,radius,getFillStyle(series.points,series.color),0,false,series.xaxis,series.yaxis,symbol);ctx.restore()}function drawBar(x,y,b,barLeft,barRight,fillStyleCallback,axisx,axisy,c,horizontal,lineWidth){var left,right,bottom,top,drawLeft,drawRight,drawTop,drawBottom,tmp;if(horizontal){drawBottom=drawRight=drawTop=true;drawLeft=false;left=b;right=x;top=y+barLeft;bottom=y+barRight;if(right<left){tmp=right;right=left;left=tmp;drawLeft=true;drawRight=false}}else{drawLeft=drawRight=drawTop=true;drawBottom=false;left=x+barLeft;right=x+barRight;bottom=b;top=y;if(top<bottom){tmp=top;top=bottom;bottom=tmp;drawBottom=true;drawTop=false}}if(right<axisx.min||left>axisx.max||top<axisy.min||bottom>axisy.max)return;if(left<axisx.min){left=axisx.min;drawLeft=false}if(right>axisx.max){right=axisx.max;drawRight=false}if(bottom<axisy.min){bottom=axisy.min;drawBottom=false}if(top>axisy.max){top=axisy.max;drawTop=false}left=axisx.p2c(left);bottom=axisy.p2c(bottom);right=axisx.p2c(right);top=axisy.p2c(top);if(fillStyleCallback){c.fillStyle=fillStyleCallback(bottom,top);c.fillRect(left,top,right-left,bottom-top)}if(lineWidth>0&&(drawLeft||drawRight||drawTop||drawBottom)){c.beginPath();c.moveTo(left,bottom);if(drawLeft)c.lineTo(left,top);else c.moveTo(left,top);if(drawTop)c.lineTo(right,top);else c.moveTo(right,top);if(drawRight)c.lineTo(right,bottom);else c.moveTo(right,bottom);if(drawBottom)c.lineTo(left,bottom);else c.moveTo(left,bottom);c.stroke()}}function drawSeriesBars(series){function plotBars(datapoints,barLeft,barRight,fillStyleCallback,axisx,axisy){var points=datapoints.points,ps=datapoints.pointsize;for(var i=0;i<points.length;i+=ps){if(points[i]==null)continue;drawBar(points[i],points[i+1],points[i+2],barLeft,barRight,fillStyleCallback,axisx,axisy,ctx,series.bars.horizontal,series.bars.lineWidth)}}ctx.save();ctx.translate(plotOffset.left,plotOffset.top);ctx.lineWidth=series.bars.lineWidth;ctx.strokeStyle=series.color;var barLeft;switch(series.bars.align){case"left":barLeft=0;break;case"right":barLeft=-series.bars.barWidth;break;default:barLeft=-series.bars.barWidth/2}var fillStyleCallback=series.bars.fill?function(bottom,top){return getFillStyle(series.bars,series.color,bottom,top)}:null;plotBars(series.datapoints,barLeft,barLeft+series.bars.barWidth,fillStyleCallback,series.xaxis,series.yaxis);ctx.restore()}function getFillStyle(filloptions,seriesColor,bottom,top){var fill=filloptions.fill;if(!fill)return null;if(filloptions.fillColor)return getColorOrGradient(filloptions.fillColor,bottom,top,seriesColor);var c=$.color.parse(seriesColor);c.a=typeof fill=="number"?fill:.4;c.normalize();return c.toString()}function insertLegend(){if(options.legend.container!=null){$(options.legend.container).html("")}else{placeholder.find(".legend").remove()}if(!options.legend.show){return}var fragments=[],entries=[],rowStarted=false,lf=options.legend.labelFormatter,s,label;for(var i=0;i<series.length;++i){s=series[i];if(s.label){label=lf?lf(s.label,s):s.label;if(label){entries.push({label:label,color:s.color})}}}if(options.legend.sorted){if($.isFunction(options.legend.sorted)){entries.sort(options.legend.sorted)}else if(options.legend.sorted=="reverse"){entries.reverse()}else{var ascending=options.legend.sorted!="descending";entries.sort(function(a,b){return a.label==b.label?0:a.label<b.label!=ascending?1:-1})}}for(var i=0;i<entries.length;++i){var entry=entries[i];if(i%options.legend.noColumns==0){if(rowStarted)fragments.push("</tr>");fragments.push("<tr>");rowStarted=true}fragments.push('<td class="legendColorBox"><div style="border:1px solid '+options.legend.labelBoxBorderColor+';padding:1px"><div style="width:4px;height:0;border:5px solid '+entry.color+';overflow:hidden"></div></div></td>'+'<td class="legendLabel">'+entry.label+"</td>")}if(rowStarted)fragments.push("</tr>");if(fragments.length==0)return;var table='<table style="font-size:smaller;color:'+options.grid.color+'">'+fragments.join("")+"</table>";if(options.legend.container!=null)$(options.legend.container).html(table);else{var pos="",p=options.legend.position,m=options.legend.margin;if(m[0]==null)m=[m,m];if(p.charAt(0)=="n")pos+="top:"+(m[1]+plotOffset.top)+"px;";else if(p.charAt(0)=="s")pos+="bottom:"+(m[1]+plotOffset.bottom)+"px;";if(p.charAt(1)=="e")pos+="right:"+(m[0]+plotOffset.right)+"px;";else if(p.charAt(1)=="w")pos+="left:"+(m[0]+plotOffset.left)+"px;";var legend=$('<div class="legend">'+table.replace('style="','style="position:absolute;'+pos+";")+"</div>").appendTo(placeholder);if(options.legend.backgroundOpacity!=0){var c=options.legend.backgroundColor;if(c==null){c=options.grid.backgroundColor;if(c&&typeof c=="string")c=$.color.parse(c);else c=$.color.extract(legend,"background-color");c.a=1;c=c.toString()}var div=legend.children();$('<div style="position:absolute;width:'+div.width()+"px;height:"+div.height()+"px;"+pos+"background-color:"+c+';"> </div>').prependTo(legend).css("opacity",options.legend.backgroundOpacity)}}}var highlights=[],redrawTimeout=null;function findNearbyItem(mouseX,mouseY,seriesFilter){var maxDistance=options.grid.mouseActiveRadius,smallestDistance=maxDistance*maxDistance+1,item=null,foundPoint=false,i,j,ps;for(i=series.length-1;i>=0;--i){if(!seriesFilter(series[i]))continue;var s=series[i],axisx=s.xaxis,axisy=s.yaxis,points=s.datapoints.points,mx=axisx.c2p(mouseX),my=axisy.c2p(mouseY),maxx=maxDistance/axisx.scale,maxy=maxDistance/axisy.scale;ps=s.datapoints.pointsize;if(axisx.options.inverseTransform)maxx=Number.MAX_VALUE;if(axisy.options.inverseTransform)maxy=Number.MAX_VALUE;if(s.lines.show||s.points.show){for(j=0;j<points.length;j+=ps){var x=points[j],y=points[j+1];if(x==null)continue;if(x-mx>maxx||x-mx<-maxx||y-my>maxy||y-my<-maxy)continue;var dx=Math.abs(axisx.p2c(x)-mouseX),dy=Math.abs(axisy.p2c(y)-mouseY),dist=dx*dx+dy*dy;if(dist<smallestDistance){smallestDistance=dist;item=[i,j/ps]}}}if(s.bars.show&&!item){var barLeft,barRight;switch(s.bars.align){case"left":barLeft=0;break;case"right":barLeft=-s.bars.barWidth;break;default:barLeft=-s.bars.barWidth/2}barRight=barLeft+s.bars.barWidth;for(j=0;j<points.length;j+=ps){var x=points[j],y=points[j+1],b=points[j+2];if(x==null)continue;if(series[i].bars.horizontal?mx<=Math.max(b,x)&&mx>=Math.min(b,x)&&my>=y+barLeft&&my<=y+barRight:mx>=x+barLeft&&mx<=x+barRight&&my>=Math.min(b,y)&&my<=Math.max(b,y))item=[i,j/ps]}}}if(item){i=item[0];j=item[1];ps=series[i].datapoints.pointsize;return{datapoint:series[i].datapoints.points.slice(j*ps,(j+1)*ps),dataIndex:j,series:series[i],seriesIndex:i}}return null}function onMouseMove(e){if(options.grid.hoverable)triggerClickHoverEvent("plothover",e,function(s){return s["hoverable"]!=false})}function onMouseLeave(e){if(options.grid.hoverable)triggerClickHoverEvent("plothover",e,function(s){return false})}function onClick(e){triggerClickHoverEvent("plotclick",e,function(s){return s["clickable"]!=false})}function triggerClickHoverEvent(eventname,event,seriesFilter){var offset=eventHolder.offset(),canvasX=event.pageX-offset.left-plotOffset.left,canvasY=event.pageY-offset.top-plotOffset.top,pos=canvasToAxisCoords({left:canvasX,top:canvasY});pos.pageX=event.pageX;pos.pageY=event.pageY;var item=findNearbyItem(canvasX,canvasY,seriesFilter);if(item){item.pageX=parseInt(item.series.xaxis.p2c(item.datapoint[0])+offset.left+plotOffset.left,10);item.pageY=parseInt(item.series.yaxis.p2c(item.datapoint[1])+offset.top+plotOffset.top,10)}if(options.grid.autoHighlight){for(var i=0;i<highlights.length;++i){var h=highlights[i];if(h.auto==eventname&&!(item&&h.series==item.series&&h.point[0]==item.datapoint[0]&&h.point[1]==item.datapoint[1]))unhighlight(h.series,h.point)}if(item)highlight(item.series,item.datapoint,eventname)}placeholder.trigger(eventname,[pos,item])}function triggerRedrawOverlay(){var t=options.interaction.redrawOverlayInterval;if(t==-1){drawOverlay();return}if(!redrawTimeout)redrawTimeout=setTimeout(drawOverlay,t)}function drawOverlay(){redrawTimeout=null;octx.save();overlay.clear();octx.translate(plotOffset.left,plotOffset.top);var i,hi;for(i=0;i<highlights.length;++i){hi=highlights[i];if(hi.series.bars.show)drawBarHighlight(hi.series,hi.point);else drawPointHighlight(hi.series,hi.point)}octx.restore();executeHooks(hooks.drawOverlay,[octx])}function highlight(s,point,auto){if(typeof s=="number")s=series[s];if(typeof point=="number"){var ps=s.datapoints.pointsize;point=s.datapoints.points.slice(ps*point,ps*(point+1))}var i=indexOfHighlight(s,point);if(i==-1){highlights.push({series:s,point:point,auto:auto});triggerRedrawOverlay()}else if(!auto)highlights[i].auto=false}function unhighlight(s,point){if(s==null&&point==null){highlights=[];triggerRedrawOverlay();return}if(typeof s=="number")s=series[s];if(typeof point=="number"){var ps=s.datapoints.pointsize;point=s.datapoints.points.slice(ps*point,ps*(point+1))}var i=indexOfHighlight(s,point);if(i!=-1){highlights.splice(i,1);triggerRedrawOverlay()}}function indexOfHighlight(s,p){for(var i=0;i<highlights.length;++i){var h=highlights[i];if(h.series==s&&h.point[0]==p[0]&&h.point[1]==p[1])return i}return-1}function drawPointHighlight(series,point){var x=point[0],y=point[1],axisx=series.xaxis,axisy=series.yaxis,highlightColor=typeof series.highlightColor==="string"?series.highlightColor:$.color.parse(series.color).scale("a",.5).toString();if(x<axisx.min||x>axisx.max||y<axisy.min||y>axisy.max)return;var pointRadius=series.points.radius+series.points.lineWidth/2;octx.lineWidth=pointRadius;octx.strokeStyle=highlightColor;var radius=1.5*pointRadius;x=axisx.p2c(x);y=axisy.p2c(y);octx.beginPath();if(series.points.symbol=="circle")octx.arc(x,y,radius,0,2*Math.PI,false);else series.points.symbol(octx,x,y,radius,false);octx.closePath();octx.stroke()}function drawBarHighlight(series,point){var highlightColor=typeof series.highlightColor==="string"?series.highlightColor:$.color.parse(series.color).scale("a",.5).toString(),fillStyle=highlightColor,barLeft;switch(series.bars.align){case"left":barLeft=0;break;case"right":barLeft=-series.bars.barWidth;break;default:barLeft=-series.bars.barWidth/2}octx.lineWidth=series.bars.lineWidth;octx.strokeStyle=highlightColor;drawBar(point[0],point[1],point[2]||0,barLeft,barLeft+series.bars.barWidth,function(){return fillStyle},series.xaxis,series.yaxis,octx,series.bars.horizontal,series.bars.lineWidth)}function getColorOrGradient(spec,bottom,top,defaultColor){if(typeof spec=="string")return spec;else{var gradient=ctx.createLinearGradient(0,top,0,bottom);for(var i=0,l=spec.colors.length;i<l;++i){var c=spec.colors[i];if(typeof c!="string"){var co=$.color.parse(defaultColor);if(c.brightness!=null)co=co.scale("rgb",c.brightness);if(c.opacity!=null)co.a*=c.opacity;c=co.toString()}gradient.addColorStop(i/(l-1),c)}return gradient}}}$.plot=function(placeholder,data,options){var plot=new Plot($(placeholder),data,options,$.plot.plugins);return plot};$.plot.version="0.8.3";$.plot.plugins=[];$.fn.plot=function(data,options){return this.each(function(){$.plot(this,data,options)})};function floorInBase(n,base){return base*Math.floor(n/base)}})(jQuery);
+ static/js/jquery.flot.navigate.js view
@@ -0,0 +1,346 @@+/* Flot plugin for adding the ability to pan and zoom the plot.++Copyright (c) 2007-2014 IOLA and Ole Laursen.+Licensed under the MIT license.++The default behaviour is double click and scrollwheel up/down to zoom in, drag+to pan. The plugin defines plot.zoom({ center }), plot.zoomOut() and+plot.pan( offset ) so you easily can add custom controls. It also fires+"plotpan" and "plotzoom" events, useful for synchronizing plots.++The plugin supports these options:++	zoom: {+		interactive: false+		trigger: "dblclick" // or "click" for single click+		amount: 1.5         // 2 = 200% (zoom in), 0.5 = 50% (zoom out)+	}++	pan: {+		interactive: false+		cursor: "move"      // CSS mouse cursor value used when dragging, e.g. "pointer"+		frameRate: 20+	}++	xaxis, yaxis, x2axis, y2axis: {+		zoomRange: null  // or [ number, number ] (min range, max range) or false+		panRange: null   // or [ number, number ] (min, max) or false+	}++"interactive" enables the built-in drag/click behaviour. If you enable+interactive for pan, then you'll have a basic plot that supports moving+around; the same for zoom.++"amount" specifies the default amount to zoom in (so 1.5 = 150%) relative to+the current viewport.++"cursor" is a standard CSS mouse cursor string used for visual feedback to the+user when dragging.++"frameRate" specifies the maximum number of times per second the plot will+update itself while the user is panning around on it (set to null to disable+intermediate pans, the plot will then not update until the mouse button is+released).++"zoomRange" is the interval in which zooming can happen, e.g. with zoomRange:+[1, 100] the zoom will never scale the axis so that the difference between min+and max is smaller than 1 or larger than 100. You can set either end to null+to ignore, e.g. [1, null]. If you set zoomRange to false, zooming on that axis+will be disabled.++"panRange" confines the panning to stay within a range, e.g. with panRange:+[-10, 20] panning stops at -10 in one end and at 20 in the other. Either can+be null, e.g. [-10, null]. If you set panRange to false, panning on that axis+will be disabled.++Example API usage:++	plot = $.plot(...);++	// zoom default amount in on the pixel ( 10, 20 )+	plot.zoom({ center: { left: 10, top: 20 } });++	// zoom out again+	plot.zoomOut({ center: { left: 10, top: 20 } });++	// zoom 200% in on the pixel (10, 20)+	plot.zoom({ amount: 2, center: { left: 10, top: 20 } });++	// pan 100 pixels to the left and 20 down+	plot.pan({ left: -100, top: 20 })++Here, "center" specifies where the center of the zooming should happen. Note+that this is defined in pixel space, not the space of the data points (you can+use the p2c helpers on the axes in Flot to help you convert between these).++"amount" is the amount to zoom the viewport relative to the current range, so+1 is 100% (i.e. no change), 1.5 is 150% (zoom in), 0.7 is 70% (zoom out). You+can set the default in the options.++*/++// First two dependencies, jquery.event.drag.js and+// jquery.mousewheel.js, we put them inline here to save people the+// effort of downloading them.++/*+jquery.event.drag.js ~ v1.5 ~ Copyright (c) 2008, Three Dub Media (http://threedubmedia.com)+Licensed under the MIT License ~ http://threedubmedia.googlecode.com/files/MIT-LICENSE.txt+*/+(function(a){function e(h){var k,j=this,l=h.data||{};if(l.elem)j=h.dragTarget=l.elem,h.dragProxy=d.proxy||j,h.cursorOffsetX=l.pageX-l.left,h.cursorOffsetY=l.pageY-l.top,h.offsetX=h.pageX-h.cursorOffsetX,h.offsetY=h.pageY-h.cursorOffsetY;else if(d.dragging||l.which>0&&h.which!=l.which||a(h.target).is(l.not))return;switch(h.type){case"mousedown":return a.extend(l,a(j).offset(),{elem:j,target:h.target,pageX:h.pageX,pageY:h.pageY}),b.add(document,"mousemove mouseup",e,l),i(j,!1),d.dragging=null,!1;case!d.dragging&&"mousemove":if(g(h.pageX-l.pageX)+g(h.pageY-l.pageY)<l.distance)break;h.target=l.target,k=f(h,"dragstart",j),k!==!1&&(d.dragging=j,d.proxy=h.dragProxy=a(k||j)[0]);case"mousemove":if(d.dragging){if(k=f(h,"drag",j),c.drop&&(c.drop.allowed=k!==!1,c.drop.handler(h)),k!==!1)break;h.type="mouseup"}case"mouseup":b.remove(document,"mousemove mouseup",e),d.dragging&&(c.drop&&c.drop.handler(h),f(h,"dragend",j)),i(j,!0),d.dragging=d.proxy=l.elem=!1}return!0}function f(b,c,d){b.type=c;var e=a.event.dispatch.call(d,b);return e===!1?!1:e||b.result}function g(a){return Math.pow(a,2)}function h(){return d.dragging===!1}function i(a,b){a&&(a.unselectable=b?"off":"on",a.onselectstart=function(){return b},a.style&&(a.style.MozUserSelect=b?"":"none"))}a.fn.drag=function(a,b,c){return b&&this.bind("dragstart",a),c&&this.bind("dragend",c),a?this.bind("drag",b?b:a):this.trigger("drag")};var b=a.event,c=b.special,d=c.drag={not:":input",distance:0,which:1,dragging:!1,setup:function(c){c=a.extend({distance:d.distance,which:d.which,not:d.not},c||{}),c.distance=g(c.distance),b.add(this,"mousedown",e,c),this.attachEvent&&this.attachEvent("ondragstart",h)},teardown:function(){b.remove(this,"mousedown",e),this===d.dragging&&(d.dragging=d.proxy=!1),i(this,!0),this.detachEvent&&this.detachEvent("ondragstart",h)}};c.dragstart=c.dragend={setup:function(){},teardown:function(){}}})(jQuery);++/* jquery.mousewheel.min.js+ * Copyright (c) 2011 Brandon Aaron (http://brandonaaron.net)+ * Licensed under the MIT License (LICENSE.txt).+ * Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers.+ * Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix.+ * Thanks to: Seamus Leahy for adding deltaX and deltaY+ *+ * Version: 3.0.6+ *+ * Requires: 1.2.2++ */+(function(d){function e(a){var b=a||window.event,c=[].slice.call(arguments,1),f=0,e=0,g=0,a=d.event.fix(b);a.type="mousewheel";b.wheelDelta&&(f=b.wheelDelta/120);b.detail&&(f=-b.detail/3);g=f;void 0!==b.axis&&b.axis===b.HORIZONTAL_AXIS&&(g=0,e=-1*f);void 0!==b.wheelDeltaY&&(g=b.wheelDeltaY/120);void 0!==b.wheelDeltaX&&(e=-1*b.wheelDeltaX/120);c.unshift(a,f,e,g);return(d.event.dispatch||d.event.handle).apply(this,c)}var c=["DOMMouseScroll","mousewheel"];if(d.event.fixHooks)for(var h=c.length;h;)d.event.fixHooks[c[--h]]=d.event.mouseHooks;d.event.special.mousewheel={setup:function(){if(this.addEventListener)for(var a=c.length;a;)this.addEventListener(c[--a],e,!1);else this.onmousewheel=e},teardown:function(){if(this.removeEventListener)for(var a=c.length;a;)this.removeEventListener(c[--a],e,!1);else this.onmousewheel=null}};d.fn.extend({mousewheel:function(a){return a?this.bind("mousewheel",a):this.trigger("mousewheel")},unmousewheel:function(a){return this.unbind("mousewheel",a)}})})(jQuery);+++++(function ($) {+    var options = {+        xaxis: {+            zoomRange: null, // or [number, number] (min range, max range)+            panRange: null // or [number, number] (min, max)+        },+        zoom: {+            interactive: false,+            trigger: "dblclick", // or "click" for single click+            amount: 1.5 // how much to zoom relative to current position, 2 = 200% (zoom in), 0.5 = 50% (zoom out)+        },+        pan: {+            interactive: false,+            cursor: "move",+            frameRate: 20+        }+    };++    function init(plot) {+        function onZoomClick(e, zoomOut) {+            var c = plot.offset();+            c.left = e.pageX - c.left;+            c.top = e.pageY - c.top;+            if (zoomOut)+                plot.zoomOut({ center: c });+            else+                plot.zoom({ center: c });+        }++        function onMouseWheel(e, delta) {+            e.preventDefault();+            onZoomClick(e, delta < 0);+            return false;+        }+        +        var prevCursor = 'default', prevPageX = 0, prevPageY = 0,+            panTimeout = null;++        function onDragStart(e) {+            if (e.which != 1)  // only accept left-click+                return false;+            var c = plot.getPlaceholder().css('cursor');+            if (c)+                prevCursor = c;+            plot.getPlaceholder().css('cursor', plot.getOptions().pan.cursor);+            prevPageX = e.pageX;+            prevPageY = e.pageY;+        }+        +        function onDrag(e) {+            var frameRate = plot.getOptions().pan.frameRate;+            if (panTimeout || !frameRate)+                return;++            panTimeout = setTimeout(function () {+                plot.pan({ left: prevPageX - e.pageX,+                           top: prevPageY - e.pageY });+                prevPageX = e.pageX;+                prevPageY = e.pageY;+                                                    +                panTimeout = null;+            }, 1 / frameRate * 1000);+        }++        function onDragEnd(e) {+            if (panTimeout) {+                clearTimeout(panTimeout);+                panTimeout = null;+            }+                    +            plot.getPlaceholder().css('cursor', prevCursor);+            plot.pan({ left: prevPageX - e.pageX,+                       top: prevPageY - e.pageY });+        }+        +        function bindEvents(plot, eventHolder) {+            var o = plot.getOptions();+            if (o.zoom.interactive) {+                eventHolder[o.zoom.trigger](onZoomClick);+                eventHolder.mousewheel(onMouseWheel);+            }++            if (o.pan.interactive) {+                eventHolder.bind("dragstart", { distance: 10 }, onDragStart);+                eventHolder.bind("drag", onDrag);+                eventHolder.bind("dragend", onDragEnd);+            }+        }++        plot.zoomOut = function (args) {+            if (!args)+                args = {};+            +            if (!args.amount)+                args.amount = plot.getOptions().zoom.amount;++            args.amount = 1 / args.amount;+            plot.zoom(args);+        };+        +        plot.zoom = function (args) {+            if (!args)+                args = {};+            +            var c = args.center,+                amount = args.amount || plot.getOptions().zoom.amount,+                w = plot.width(), h = plot.height();++            if (!c)+                c = { left: w / 2, top: h / 2 };+                +            var xf = c.left / w,+                yf = c.top / h,+                minmax = {+                    x: {+                        min: c.left - xf * w / amount,+                        max: c.left + (1 - xf) * w / amount+                    },+                    y: {+                        min: c.top - yf * h / amount,+                        max: c.top + (1 - yf) * h / amount+                    }+                };++            $.each(plot.getAxes(), function(_, axis) {+                var opts = axis.options,+                    min = minmax[axis.direction].min,+                    max = minmax[axis.direction].max,+                    zr = opts.zoomRange,+                    pr = opts.panRange;++                if (zr === false) // no zooming on this axis+                    return;+                    +                min = axis.c2p(min);+                max = axis.c2p(max);+                if (min > max) {+                    // make sure min < max+                    var tmp = min;+                    min = max;+                    max = tmp;+                }++                //Check that we are in panRange+                if (pr) {+                    if (pr[0] != null && min < pr[0]) {+                        min = pr[0];+                    }+                    if (pr[1] != null && max > pr[1]) {+                        max = pr[1];+                    }+                }++                var range = max - min;+                if (zr &&+                    ((zr[0] != null && range < zr[0] && amount >1) ||+                     (zr[1] != null && range > zr[1] && amount <1)))+                    return;+            +                opts.min = min;+                opts.max = max;+            });+            +            plot.setupGrid();+            plot.draw();+            +            if (!args.preventEvent)+                plot.getPlaceholder().trigger("plotzoom", [ plot, args ]);+        };++        plot.pan = function (args) {+            var delta = {+                x: +args.left,+                y: +args.top+            };++            if (isNaN(delta.x))+                delta.x = 0;+            if (isNaN(delta.y))+                delta.y = 0;++            $.each(plot.getAxes(), function (_, axis) {+                var opts = axis.options,+                    min, max, d = delta[axis.direction];++                min = axis.c2p(axis.p2c(axis.min) + d),+                max = axis.c2p(axis.p2c(axis.max) + d);++                var pr = opts.panRange;+                if (pr === false) // no panning on this axis+                    return;+                +                if (pr) {+                    // check whether we hit the wall+                    if (pr[0] != null && pr[0] > min) {+                        d = pr[0] - min;+                        min += d;+                        max += d;+                    }+                    +                    if (pr[1] != null && pr[1] < max) {+                        d = pr[1] - max;+                        min += d;+                        max += d;+                    }+                }+                +                opts.min = min;+                opts.max = max;+            });+            +            plot.setupGrid();+            plot.draw();+            +            if (!args.preventEvent)+                plot.getPlaceholder().trigger("plotpan", [ plot, args ]);+        };++        function shutdown(plot, eventHolder) {+            eventHolder.unbind(plot.getOptions().zoom.trigger, onZoomClick);+            eventHolder.unbind("mousewheel", onMouseWheel);+            eventHolder.unbind("dragstart", onDragStart);+            eventHolder.unbind("drag", onDrag);+            eventHolder.unbind("dragend", onDragEnd);+            if (panTimeout)+                clearTimeout(panTimeout);+        }+        +        plot.hooks.bindEvents.push(bindEvents);+        plot.hooks.shutdown.push(shutdown);+    }+    +    $.plot.plugins.push({+        init: init,+        options: options,+        name: 'navigate',+        version: '1.3'+    });+})(jQuery);
+ static/js/jquery.flot.navigate.min.js view
@@ -0,0 +1,7 @@+/* Javascript plotting library for jQuery, version 0.8.3.++Copyright (c) 2007-2014 IOLA and Ole Laursen.+Licensed under the MIT license.++*/+(function(a){function e(h){var k,j=this,l=h.data||{};if(l.elem)j=h.dragTarget=l.elem,h.dragProxy=d.proxy||j,h.cursorOffsetX=l.pageX-l.left,h.cursorOffsetY=l.pageY-l.top,h.offsetX=h.pageX-h.cursorOffsetX,h.offsetY=h.pageY-h.cursorOffsetY;else if(d.dragging||l.which>0&&h.which!=l.which||a(h.target).is(l.not))return;switch(h.type){case"mousedown":return a.extend(l,a(j).offset(),{elem:j,target:h.target,pageX:h.pageX,pageY:h.pageY}),b.add(document,"mousemove mouseup",e,l),i(j,!1),d.dragging=null,!1;case!d.dragging&&"mousemove":if(g(h.pageX-l.pageX)+g(h.pageY-l.pageY)<l.distance)break;h.target=l.target,k=f(h,"dragstart",j),k!==!1&&(d.dragging=j,d.proxy=h.dragProxy=a(k||j)[0]);case"mousemove":if(d.dragging){if(k=f(h,"drag",j),c.drop&&(c.drop.allowed=k!==!1,c.drop.handler(h)),k!==!1)break;h.type="mouseup"}case"mouseup":b.remove(document,"mousemove mouseup",e),d.dragging&&(c.drop&&c.drop.handler(h),f(h,"dragend",j)),i(j,!0),d.dragging=d.proxy=l.elem=!1}return!0}function f(b,c,d){b.type=c;var e=a.event.dispatch.call(d,b);return e===!1?!1:e||b.result}function g(a){return Math.pow(a,2)}function h(){return d.dragging===!1}function i(a,b){a&&(a.unselectable=b?"off":"on",a.onselectstart=function(){return b},a.style&&(a.style.MozUserSelect=b?"":"none"))}a.fn.drag=function(a,b,c){return b&&this.bind("dragstart",a),c&&this.bind("dragend",c),a?this.bind("drag",b?b:a):this.trigger("drag")};var b=a.event,c=b.special,d=c.drag={not:":input",distance:0,which:1,dragging:!1,setup:function(c){c=a.extend({distance:d.distance,which:d.which,not:d.not},c||{}),c.distance=g(c.distance),b.add(this,"mousedown",e,c),this.attachEvent&&this.attachEvent("ondragstart",h)},teardown:function(){b.remove(this,"mousedown",e),this===d.dragging&&(d.dragging=d.proxy=!1),i(this,!0),this.detachEvent&&this.detachEvent("ondragstart",h)}};c.dragstart=c.dragend={setup:function(){},teardown:function(){}}})(jQuery);(function(d){function e(a){var b=a||window.event,c=[].slice.call(arguments,1),f=0,e=0,g=0,a=d.event.fix(b);a.type="mousewheel";b.wheelDelta&&(f=b.wheelDelta/120);b.detail&&(f=-b.detail/3);g=f;void 0!==b.axis&&b.axis===b.HORIZONTAL_AXIS&&(g=0,e=-1*f);void 0!==b.wheelDeltaY&&(g=b.wheelDeltaY/120);void 0!==b.wheelDeltaX&&(e=-1*b.wheelDeltaX/120);c.unshift(a,f,e,g);return(d.event.dispatch||d.event.handle).apply(this,c)}var c=["DOMMouseScroll","mousewheel"];if(d.event.fixHooks)for(var h=c.length;h;)d.event.fixHooks[c[--h]]=d.event.mouseHooks;d.event.special.mousewheel={setup:function(){if(this.addEventListener)for(var a=c.length;a;)this.addEventListener(c[--a],e,!1);else this.onmousewheel=e},teardown:function(){if(this.removeEventListener)for(var a=c.length;a;)this.removeEventListener(c[--a],e,!1);else this.onmousewheel=null}};d.fn.extend({mousewheel:function(a){return a?this.bind("mousewheel",a):this.trigger("mousewheel")},unmousewheel:function(a){return this.unbind("mousewheel",a)}})})(jQuery);(function($){var options={xaxis:{zoomRange:null,panRange:null},zoom:{interactive:false,trigger:"dblclick",amount:1.5},pan:{interactive:false,cursor:"move",frameRate:20}};function init(plot){function onZoomClick(e,zoomOut){var c=plot.offset();c.left=e.pageX-c.left;c.top=e.pageY-c.top;if(zoomOut)plot.zoomOut({center:c});else plot.zoom({center:c})}function onMouseWheel(e,delta){e.preventDefault();onZoomClick(e,delta<0);return false}var prevCursor="default",prevPageX=0,prevPageY=0,panTimeout=null;function onDragStart(e){if(e.which!=1)return false;var c=plot.getPlaceholder().css("cursor");if(c)prevCursor=c;plot.getPlaceholder().css("cursor",plot.getOptions().pan.cursor);prevPageX=e.pageX;prevPageY=e.pageY}function onDrag(e){var frameRate=plot.getOptions().pan.frameRate;if(panTimeout||!frameRate)return;panTimeout=setTimeout(function(){plot.pan({left:prevPageX-e.pageX,top:prevPageY-e.pageY});prevPageX=e.pageX;prevPageY=e.pageY;panTimeout=null},1/frameRate*1e3)}function onDragEnd(e){if(panTimeout){clearTimeout(panTimeout);panTimeout=null}plot.getPlaceholder().css("cursor",prevCursor);plot.pan({left:prevPageX-e.pageX,top:prevPageY-e.pageY})}function bindEvents(plot,eventHolder){var o=plot.getOptions();if(o.zoom.interactive){eventHolder[o.zoom.trigger](onZoomClick);eventHolder.mousewheel(onMouseWheel)}if(o.pan.interactive){eventHolder.bind("dragstart",{distance:10},onDragStart);eventHolder.bind("drag",onDrag);eventHolder.bind("dragend",onDragEnd)}}plot.zoomOut=function(args){if(!args)args={};if(!args.amount)args.amount=plot.getOptions().zoom.amount;args.amount=1/args.amount;plot.zoom(args)};plot.zoom=function(args){if(!args)args={};var c=args.center,amount=args.amount||plot.getOptions().zoom.amount,w=plot.width(),h=plot.height();if(!c)c={left:w/2,top:h/2};var xf=c.left/w,yf=c.top/h,minmax={x:{min:c.left-xf*w/amount,max:c.left+(1-xf)*w/amount},y:{min:c.top-yf*h/amount,max:c.top+(1-yf)*h/amount}};$.each(plot.getAxes(),function(_,axis){var opts=axis.options,min=minmax[axis.direction].min,max=minmax[axis.direction].max,zr=opts.zoomRange,pr=opts.panRange;if(zr===false)return;min=axis.c2p(min);max=axis.c2p(max);if(min>max){var tmp=min;min=max;max=tmp}if(pr){if(pr[0]!=null&&min<pr[0]){min=pr[0]}if(pr[1]!=null&&max>pr[1]){max=pr[1]}}var range=max-min;if(zr&&(zr[0]!=null&&range<zr[0]&&amount>1||zr[1]!=null&&range>zr[1]&&amount<1))return;opts.min=min;opts.max=max});plot.setupGrid();plot.draw();if(!args.preventEvent)plot.getPlaceholder().trigger("plotzoom",[plot,args])};plot.pan=function(args){var delta={x:+args.left,y:+args.top};if(isNaN(delta.x))delta.x=0;if(isNaN(delta.y))delta.y=0;$.each(plot.getAxes(),function(_,axis){var opts=axis.options,min,max,d=delta[axis.direction];min=axis.c2p(axis.p2c(axis.min)+d),max=axis.c2p(axis.p2c(axis.max)+d);var pr=opts.panRange;if(pr===false)return;if(pr){if(pr[0]!=null&&pr[0]>min){d=pr[0]-min;min+=d;max+=d}if(pr[1]!=null&&pr[1]<max){d=pr[1]-max;min+=d;max+=d}}opts.min=min;opts.max=max});plot.setupGrid();plot.draw();if(!args.preventEvent)plot.getPlaceholder().trigger("plotpan",[plot,args])};function shutdown(plot,eventHolder){eventHolder.unbind(plot.getOptions().zoom.trigger,onZoomClick);eventHolder.unbind("mousewheel",onMouseWheel);eventHolder.unbind("dragstart",onDragStart);eventHolder.unbind("drag",onDrag);eventHolder.unbind("dragend",onDragEnd);if(panTimeout)clearTimeout(panTimeout)}plot.hooks.bindEvents.push(bindEvents);plot.hooks.shutdown.push(shutdown)}$.plot.plugins.push({init:init,options:options,name:"navigate",version:"1.3"})})(jQuery);
+ static/js/jquery.flot.pie.js view
@@ -0,0 +1,820 @@+/* Flot plugin for rendering pie charts.++Copyright (c) 2007-2014 IOLA and Ole Laursen.+Licensed under the MIT license.++The plugin assumes that each series has a single data value, and that each+value is a positive integer or zero.  Negative numbers don't make sense for a+pie chart, and have unpredictable results.  The values do NOT need to be+passed in as percentages; the plugin will calculate the total and per-slice+percentages internally.++* Created by Brian Medendorp++* Updated with contributions from btburnett3, Anthony Aragues and Xavi Ivars++The plugin supports these options:++	series: {+		pie: {+			show: true/false+			radius: 0-1 for percentage of fullsize, or a specified pixel length, or 'auto'+			innerRadius: 0-1 for percentage of fullsize or a specified pixel length, for creating a donut effect+			startAngle: 0-2 factor of PI used for starting angle (in radians) i.e 3/2 starts at the top, 0 and 2 have the same result+			tilt: 0-1 for percentage to tilt the pie, where 1 is no tilt, and 0 is completely flat (nothing will show)+			offset: {+				top: integer value to move the pie up or down+				left: integer value to move the pie left or right, or 'auto'+			},+			stroke: {+				color: any hexidecimal color value (other formats may or may not work, so best to stick with something like '#FFF')+				width: integer pixel width of the stroke+			},+			label: {+				show: true/false, or 'auto'+				formatter:  a user-defined function that modifies the text/style of the label text+				radius: 0-1 for percentage of fullsize, or a specified pixel length+				background: {+					color: any hexidecimal color value (other formats may or may not work, so best to stick with something like '#000')+					opacity: 0-1+				},+				threshold: 0-1 for the percentage value at which to hide labels (if they're too small)+			},+			combine: {+				threshold: 0-1 for the percentage value at which to combine slices (if they're too small)+				color: any hexidecimal color value (other formats may or may not work, so best to stick with something like '#CCC'), if null, the plugin will automatically use the color of the first slice to be combined+				label: any text value of what the combined slice should be labeled+			}+			highlight: {+				opacity: 0-1+			}+		}+	}++More detail and specific examples can be found in the included HTML file.++*/++(function($) {++	// Maximum redraw attempts when fitting labels within the plot++	var REDRAW_ATTEMPTS = 10;++	// Factor by which to shrink the pie when fitting labels within the plot++	var REDRAW_SHRINK = 0.95;++	function init(plot) {++		var canvas = null,+			target = null,+			options = null,+			maxRadius = null,+			centerLeft = null,+			centerTop = null,+			processed = false,+			ctx = null;++		// interactive variables++		var highlights = [];++		// add hook to determine if pie plugin in enabled, and then perform necessary operations++		plot.hooks.processOptions.push(function(plot, options) {+			if (options.series.pie.show) {++				options.grid.show = false;++				// set labels.show++				if (options.series.pie.label.show == "auto") {+					if (options.legend.show) {+						options.series.pie.label.show = false;+					} else {+						options.series.pie.label.show = true;+					}+				}++				// set radius++				if (options.series.pie.radius == "auto") {+					if (options.series.pie.label.show) {+						options.series.pie.radius = 3/4;+					} else {+						options.series.pie.radius = 1;+					}+				}++				// ensure sane tilt++				if (options.series.pie.tilt > 1) {+					options.series.pie.tilt = 1;+				} else if (options.series.pie.tilt < 0) {+					options.series.pie.tilt = 0;+				}+			}+		});++		plot.hooks.bindEvents.push(function(plot, eventHolder) {+			var options = plot.getOptions();+			if (options.series.pie.show) {+				if (options.grid.hoverable) {+					eventHolder.unbind("mousemove").mousemove(onMouseMove);+				}+				if (options.grid.clickable) {+					eventHolder.unbind("click").click(onClick);+				}+			}+		});++		plot.hooks.processDatapoints.push(function(plot, series, data, datapoints) {+			var options = plot.getOptions();+			if (options.series.pie.show) {+				processDatapoints(plot, series, data, datapoints);+			}+		});++		plot.hooks.drawOverlay.push(function(plot, octx) {+			var options = plot.getOptions();+			if (options.series.pie.show) {+				drawOverlay(plot, octx);+			}+		});++		plot.hooks.draw.push(function(plot, newCtx) {+			var options = plot.getOptions();+			if (options.series.pie.show) {+				draw(plot, newCtx);+			}+		});++		function processDatapoints(plot, series, datapoints) {+			if (!processed)	{+				processed = true;+				canvas = plot.getCanvas();+				target = $(canvas).parent();+				options = plot.getOptions();+				plot.setData(combine(plot.getData()));+			}+		}++		function combine(data) {++			var total = 0,+				combined = 0,+				numCombined = 0,+				color = options.series.pie.combine.color,+				newdata = [];++			// Fix up the raw data from Flot, ensuring the data is numeric++			for (var i = 0; i < data.length; ++i) {++				var value = data[i].data;++				// If the data is an array, we'll assume that it's a standard+				// Flot x-y pair, and are concerned only with the second value.++				// Note how we use the original array, rather than creating a+				// new one; this is more efficient and preserves any extra data+				// that the user may have stored in higher indexes.++				if ($.isArray(value) && value.length == 1) {+    				value = value[0];+				}++				if ($.isArray(value)) {+					// Equivalent to $.isNumeric() but compatible with jQuery < 1.7+					if (!isNaN(parseFloat(value[1])) && isFinite(value[1])) {+						value[1] = +value[1];+					} else {+						value[1] = 0;+					}+				} else if (!isNaN(parseFloat(value)) && isFinite(value)) {+					value = [1, +value];+				} else {+					value = [1, 0];+				}++				data[i].data = [value];+			}++			// Sum up all the slices, so we can calculate percentages for each++			for (var i = 0; i < data.length; ++i) {+				total += data[i].data[0][1];+			}++			// Count the number of slices with percentages below the combine+			// threshold; if it turns out to be just one, we won't combine.++			for (var i = 0; i < data.length; ++i) {+				var value = data[i].data[0][1];+				if (value / total <= options.series.pie.combine.threshold) {+					combined += value;+					numCombined++;+					if (!color) {+						color = data[i].color;+					}+				}+			}++			for (var i = 0; i < data.length; ++i) {+				var value = data[i].data[0][1];+				if (numCombined < 2 || value / total > options.series.pie.combine.threshold) {+					newdata.push(+						$.extend(data[i], {     /* extend to allow keeping all other original data values+						                           and using them e.g. in labelFormatter. */+							data: [[1, value]],+							color: data[i].color,+							label: data[i].label,+							angle: value * Math.PI * 2 / total,+							percent: value / (total / 100)+						})+					);+				}+			}++			if (numCombined > 1) {+				newdata.push({+					data: [[1, combined]],+					color: color,+					label: options.series.pie.combine.label,+					angle: combined * Math.PI * 2 / total,+					percent: combined / (total / 100)+				});+			}++			return newdata;+		}++		function draw(plot, newCtx) {++			if (!target) {+				return; // if no series were passed+			}++			var canvasWidth = plot.getPlaceholder().width(),+				canvasHeight = plot.getPlaceholder().height(),+				legendWidth = target.children().filter(".legend").children().width() || 0;++			ctx = newCtx;++			// WARNING: HACK! REWRITE THIS CODE AS SOON AS POSSIBLE!++			// When combining smaller slices into an 'other' slice, we need to+			// add a new series.  Since Flot gives plugins no way to modify the+			// list of series, the pie plugin uses a hack where the first call+			// to processDatapoints results in a call to setData with the new+			// list of series, then subsequent processDatapoints do nothing.++			// The plugin-global 'processed' flag is used to control this hack;+			// it starts out false, and is set to true after the first call to+			// processDatapoints.++			// Unfortunately this turns future setData calls into no-ops; they+			// call processDatapoints, the flag is true, and nothing happens.++			// To fix this we'll set the flag back to false here in draw, when+			// all series have been processed, so the next sequence of calls to+			// processDatapoints once again starts out with a slice-combine.+			// This is really a hack; in 0.9 we need to give plugins a proper+			// way to modify series before any processing begins.++			processed = false;++			// calculate maximum radius and center point++			maxRadius =  Math.min(canvasWidth, canvasHeight / options.series.pie.tilt) / 2;+			centerTop = canvasHeight / 2 + options.series.pie.offset.top;+			centerLeft = canvasWidth / 2;++			if (options.series.pie.offset.left == "auto") {+				if (options.legend.position.match("w")) {+					centerLeft += legendWidth / 2;+				} else {+					centerLeft -= legendWidth / 2;+				}+				if (centerLeft < maxRadius) {+					centerLeft = maxRadius;+				} else if (centerLeft > canvasWidth - maxRadius) {+					centerLeft = canvasWidth - maxRadius;+				}+			} else {+				centerLeft += options.series.pie.offset.left;+			}++			var slices = plot.getData(),+				attempts = 0;++			// Keep shrinking the pie's radius until drawPie returns true,+			// indicating that all the labels fit, or we try too many times.++			do {+				if (attempts > 0) {+					maxRadius *= REDRAW_SHRINK;+				}+				attempts += 1;+				clear();+				if (options.series.pie.tilt <= 0.8) {+					drawShadow();+				}+			} while (!drawPie() && attempts < REDRAW_ATTEMPTS)++			if (attempts >= REDRAW_ATTEMPTS) {+				clear();+				target.prepend("<div class='error'>Could not draw pie with labels contained inside canvas</div>");+			}++			if (plot.setSeries && plot.insertLegend) {+				plot.setSeries(slices);+				plot.insertLegend();+			}++			// we're actually done at this point, just defining internal functions at this point++			function clear() {+				ctx.clearRect(0, 0, canvasWidth, canvasHeight);+				target.children().filter(".pieLabel, .pieLabelBackground").remove();+			}++			function drawShadow() {++				var shadowLeft = options.series.pie.shadow.left;+				var shadowTop = options.series.pie.shadow.top;+				var edge = 10;+				var alpha = options.series.pie.shadow.alpha;+				var radius = options.series.pie.radius > 1 ? options.series.pie.radius : maxRadius * options.series.pie.radius;++				if (radius >= canvasWidth / 2 - shadowLeft || radius * options.series.pie.tilt >= canvasHeight / 2 - shadowTop || radius <= edge) {+					return;	// shadow would be outside canvas, so don't draw it+				}++				ctx.save();+				ctx.translate(shadowLeft,shadowTop);+				ctx.globalAlpha = alpha;+				ctx.fillStyle = "#000";++				// center and rotate to starting position++				ctx.translate(centerLeft,centerTop);+				ctx.scale(1, options.series.pie.tilt);++				//radius -= edge;++				for (var i = 1; i <= edge; i++) {+					ctx.beginPath();+					ctx.arc(0, 0, radius, 0, Math.PI * 2, false);+					ctx.fill();+					radius -= i;+				}++				ctx.restore();+			}++			function drawPie() {++				var startAngle = Math.PI * options.series.pie.startAngle;+				var radius = options.series.pie.radius > 1 ? options.series.pie.radius : maxRadius * options.series.pie.radius;++				// center and rotate to starting position++				ctx.save();+				ctx.translate(centerLeft,centerTop);+				ctx.scale(1, options.series.pie.tilt);+				//ctx.rotate(startAngle); // start at top; -- This doesn't work properly in Opera++				// draw slices++				ctx.save();+				var currentAngle = startAngle;+				for (var i = 0; i < slices.length; ++i) {+					slices[i].startAngle = currentAngle;+					drawSlice(slices[i].angle, slices[i].color, true);+				}+				ctx.restore();++				// draw slice outlines++				if (options.series.pie.stroke.width > 0) {+					ctx.save();+					ctx.lineWidth = options.series.pie.stroke.width;+					currentAngle = startAngle;+					for (var i = 0; i < slices.length; ++i) {+						drawSlice(slices[i].angle, options.series.pie.stroke.color, false);+					}+					ctx.restore();+				}++				// draw donut hole++				drawDonutHole(ctx);++				ctx.restore();++				// Draw the labels, returning true if they fit within the plot++				if (options.series.pie.label.show) {+					return drawLabels();+				} else return true;++				function drawSlice(angle, color, fill) {++					if (angle <= 0 || isNaN(angle)) {+						return;+					}++					if (fill) {+						ctx.fillStyle = color;+					} else {+						ctx.strokeStyle = color;+						ctx.lineJoin = "round";+					}++					ctx.beginPath();+					if (Math.abs(angle - Math.PI * 2) > 0.000000001) {+						ctx.moveTo(0, 0); // Center of the pie+					}++					//ctx.arc(0, 0, radius, 0, angle, false); // This doesn't work properly in Opera+					ctx.arc(0, 0, radius,currentAngle, currentAngle + angle / 2, false);+					ctx.arc(0, 0, radius,currentAngle + angle / 2, currentAngle + angle, false);+					ctx.closePath();+					//ctx.rotate(angle); // This doesn't work properly in Opera+					currentAngle += angle;++					if (fill) {+						ctx.fill();+					} else {+						ctx.stroke();+					}+				}++				function drawLabels() {++					var currentAngle = startAngle;+					var radius = options.series.pie.label.radius > 1 ? options.series.pie.label.radius : maxRadius * options.series.pie.label.radius;++					for (var i = 0; i < slices.length; ++i) {+						if (slices[i].percent >= options.series.pie.label.threshold * 100) {+							if (!drawLabel(slices[i], currentAngle, i)) {+								return false;+							}+						}+						currentAngle += slices[i].angle;+					}++					return true;++					function drawLabel(slice, startAngle, index) {++						if (slice.data[0][1] == 0) {+							return true;+						}++						// format label text++						var lf = options.legend.labelFormatter, text, plf = options.series.pie.label.formatter;++						if (lf) {+							text = lf(slice.label, slice);+						} else {+							text = slice.label;+						}++						if (plf) {+							text = plf(text, slice);+						}++						var halfAngle = ((startAngle + slice.angle) + startAngle) / 2;+						var x = centerLeft + Math.round(Math.cos(halfAngle) * radius);+						var y = centerTop + Math.round(Math.sin(halfAngle) * radius) * options.series.pie.tilt;++						var html = "<span class='pieLabel' id='pieLabel" + index + "' style='position:absolute;top:" + y + "px;left:" + x + "px;'>" + text + "</span>";+						target.append(html);++						var label = target.children("#pieLabel" + index);+						var labelTop = (y - label.height() / 2);+						var labelLeft = (x - label.width() / 2);++						label.css("top", labelTop);+						label.css("left", labelLeft);++						// check to make sure that the label is not outside the canvas++						if (0 - labelTop > 0 || 0 - labelLeft > 0 || canvasHeight - (labelTop + label.height()) < 0 || canvasWidth - (labelLeft + label.width()) < 0) {+							return false;+						}++						if (options.series.pie.label.background.opacity != 0) {++							// put in the transparent background separately to avoid blended labels and label boxes++							var c = options.series.pie.label.background.color;++							if (c == null) {+								c = slice.color;+							}++							var pos = "top:" + labelTop + "px;left:" + labelLeft + "px;";+							$("<div class='pieLabelBackground' style='position:absolute;width:" + label.width() + "px;height:" + label.height() + "px;" + pos + "background-color:" + c + ";'></div>")+								.css("opacity", options.series.pie.label.background.opacity)+								.insertBefore(label);+						}++						return true;+					} // end individual label function+				} // end drawLabels function+			} // end drawPie function+		} // end draw function++		// Placed here because it needs to be accessed from multiple locations++		function drawDonutHole(layer) {+			if (options.series.pie.innerRadius > 0) {++				// subtract the center++				layer.save();+				var innerRadius = options.series.pie.innerRadius > 1 ? options.series.pie.innerRadius : maxRadius * options.series.pie.innerRadius;+				layer.globalCompositeOperation = "destination-out"; // this does not work with excanvas, but it will fall back to using the stroke color+				layer.beginPath();+				layer.fillStyle = options.series.pie.stroke.color;+				layer.arc(0, 0, innerRadius, 0, Math.PI * 2, false);+				layer.fill();+				layer.closePath();+				layer.restore();++				// add inner stroke++				layer.save();+				layer.beginPath();+				layer.strokeStyle = options.series.pie.stroke.color;+				layer.arc(0, 0, innerRadius, 0, Math.PI * 2, false);+				layer.stroke();+				layer.closePath();+				layer.restore();++				// TODO: add extra shadow inside hole (with a mask) if the pie is tilted.+			}+		}++		//-- Additional Interactive related functions --++		function isPointInPoly(poly, pt) {+			for(var c = false, i = -1, l = poly.length, j = l - 1; ++i < l; j = i)+				((poly[i][1] <= pt[1] && pt[1] < poly[j][1]) || (poly[j][1] <= pt[1] && pt[1]< poly[i][1]))+				&& (pt[0] < (poly[j][0] - poly[i][0]) * (pt[1] - poly[i][1]) / (poly[j][1] - poly[i][1]) + poly[i][0])+				&& (c = !c);+			return c;+		}++		function findNearbySlice(mouseX, mouseY) {++			var slices = plot.getData(),+				options = plot.getOptions(),+				radius = options.series.pie.radius > 1 ? options.series.pie.radius : maxRadius * options.series.pie.radius,+				x, y;++			for (var i = 0; i < slices.length; ++i) {++				var s = slices[i];++				if (s.pie.show) {++					ctx.save();+					ctx.beginPath();+					ctx.moveTo(0, 0); // Center of the pie+					//ctx.scale(1, options.series.pie.tilt);	// this actually seems to break everything when here.+					ctx.arc(0, 0, radius, s.startAngle, s.startAngle + s.angle / 2, false);+					ctx.arc(0, 0, radius, s.startAngle + s.angle / 2, s.startAngle + s.angle, false);+					ctx.closePath();+					x = mouseX - centerLeft;+					y = mouseY - centerTop;++					if (ctx.isPointInPath) {+						if (ctx.isPointInPath(mouseX - centerLeft, mouseY - centerTop)) {+							ctx.restore();+							return {+								datapoint: [s.percent, s.data],+								dataIndex: 0,+								series: s,+								seriesIndex: i+							};+						}+					} else {++						// excanvas for IE doesn;t support isPointInPath, this is a workaround.++						var p1X = radius * Math.cos(s.startAngle),+							p1Y = radius * Math.sin(s.startAngle),+							p2X = radius * Math.cos(s.startAngle + s.angle / 4),+							p2Y = radius * Math.sin(s.startAngle + s.angle / 4),+							p3X = radius * Math.cos(s.startAngle + s.angle / 2),+							p3Y = radius * Math.sin(s.startAngle + s.angle / 2),+							p4X = radius * Math.cos(s.startAngle + s.angle / 1.5),+							p4Y = radius * Math.sin(s.startAngle + s.angle / 1.5),+							p5X = radius * Math.cos(s.startAngle + s.angle),+							p5Y = radius * Math.sin(s.startAngle + s.angle),+							arrPoly = [[0, 0], [p1X, p1Y], [p2X, p2Y], [p3X, p3Y], [p4X, p4Y], [p5X, p5Y]],+							arrPoint = [x, y];++						// TODO: perhaps do some mathmatical trickery here with the Y-coordinate to compensate for pie tilt?++						if (isPointInPoly(arrPoly, arrPoint)) {+							ctx.restore();+							return {+								datapoint: [s.percent, s.data],+								dataIndex: 0,+								series: s,+								seriesIndex: i+							};+						}+					}++					ctx.restore();+				}+			}++			return null;+		}++		function onMouseMove(e) {+			triggerClickHoverEvent("plothover", e);+		}++		function onClick(e) {+			triggerClickHoverEvent("plotclick", e);+		}++		// trigger click or hover event (they send the same parameters so we share their code)++		function triggerClickHoverEvent(eventname, e) {++			var offset = plot.offset();+			var canvasX = parseInt(e.pageX - offset.left);+			var canvasY =  parseInt(e.pageY - offset.top);+			var item = findNearbySlice(canvasX, canvasY);++			if (options.grid.autoHighlight) {++				// clear auto-highlights++				for (var i = 0; i < highlights.length; ++i) {+					var h = highlights[i];+					if (h.auto == eventname && !(item && h.series == item.series)) {+						unhighlight(h.series);+					}+				}+			}++			// highlight the slice++			if (item) {+				highlight(item.series, eventname);+			}++			// trigger any hover bind events++			var pos = { pageX: e.pageX, pageY: e.pageY };+			target.trigger(eventname, [pos, item]);+		}++		function highlight(s, auto) {+			//if (typeof s == "number") {+			//	s = series[s];+			//}++			var i = indexOfHighlight(s);++			if (i == -1) {+				highlights.push({ series: s, auto: auto });+				plot.triggerRedrawOverlay();+			} else if (!auto) {+				highlights[i].auto = false;+			}+		}++		function unhighlight(s) {+			if (s == null) {+				highlights = [];+				plot.triggerRedrawOverlay();+			}++			//if (typeof s == "number") {+			//	s = series[s];+			//}++			var i = indexOfHighlight(s);++			if (i != -1) {+				highlights.splice(i, 1);+				plot.triggerRedrawOverlay();+			}+		}++		function indexOfHighlight(s) {+			for (var i = 0; i < highlights.length; ++i) {+				var h = highlights[i];+				if (h.series == s)+					return i;+			}+			return -1;+		}++		function drawOverlay(plot, octx) {++			var options = plot.getOptions();++			var radius = options.series.pie.radius > 1 ? options.series.pie.radius : maxRadius * options.series.pie.radius;++			octx.save();+			octx.translate(centerLeft, centerTop);+			octx.scale(1, options.series.pie.tilt);++			for (var i = 0; i < highlights.length; ++i) {+				drawHighlight(highlights[i].series);+			}++			drawDonutHole(octx);++			octx.restore();++			function drawHighlight(series) {++				if (series.angle <= 0 || isNaN(series.angle)) {+					return;+				}++				//octx.fillStyle = parseColor(options.series.pie.highlight.color).scale(null, null, null, options.series.pie.highlight.opacity).toString();+				octx.fillStyle = "rgba(255, 255, 255, " + options.series.pie.highlight.opacity + ")"; // this is temporary until we have access to parseColor+				octx.beginPath();+				if (Math.abs(series.angle - Math.PI * 2) > 0.000000001) {+					octx.moveTo(0, 0); // Center of the pie+				}+				octx.arc(0, 0, radius, series.startAngle, series.startAngle + series.angle / 2, false);+				octx.arc(0, 0, radius, series.startAngle + series.angle / 2, series.startAngle + series.angle, false);+				octx.closePath();+				octx.fill();+			}+		}+	} // end init (plugin body)++	// define pie specific options and their default values++	var options = {+		series: {+			pie: {+				show: false,+				radius: "auto",	// actual radius of the visible pie (based on full calculated radius if <=1, or hard pixel value)+				innerRadius: 0, /* for donut */+				startAngle: 3/2,+				tilt: 1,+				shadow: {+					left: 5,	// shadow left offset+					top: 15,	// shadow top offset+					alpha: 0.02	// shadow alpha+				},+				offset: {+					top: 0,+					left: "auto"+				},+				stroke: {+					color: "#fff",+					width: 1+				},+				label: {+					show: "auto",+					formatter: function(label, slice) {+						return "<div style='font-size:x-small;text-align:center;padding:2px;color:" + slice.color + ";'>" + label + "<br/>" + Math.round(slice.percent) + "%</div>";+					},	// formatter function+					radius: 1,	// radius at which to place the labels (based on full calculated radius if <=1, or hard pixel value)+					background: {+						color: null,+						opacity: 0+					},+					threshold: 0	// percentage at which to hide the label (i.e. the slice is too narrow)+				},+				combine: {+					threshold: -1,	// percentage at which to combine little slices into one larger slice+					color: null,	// color to give the new slice (auto-generated if null)+					label: "Other"	// label to give the new slice+				},+				highlight: {+					//color: "#fff",		// will add this functionality once parseColor is available+					opacity: 0.5+				}+			}+		}+	};++	$.plot.plugins.push({+		init: init,+		options: options,+		name: "pie",+		version: "1.1"+	});++})(jQuery);
+ static/js/jquery.flot.pie.min.js view
@@ -0,0 +1,7 @@+/* Javascript plotting library for jQuery, version 0.8.3.++Copyright (c) 2007-2014 IOLA and Ole Laursen.+Licensed under the MIT license.++*/+(function($){var REDRAW_ATTEMPTS=10;var REDRAW_SHRINK=.95;function init(plot){var canvas=null,target=null,options=null,maxRadius=null,centerLeft=null,centerTop=null,processed=false,ctx=null;var highlights=[];plot.hooks.processOptions.push(function(plot,options){if(options.series.pie.show){options.grid.show=false;if(options.series.pie.label.show=="auto"){if(options.legend.show){options.series.pie.label.show=false}else{options.series.pie.label.show=true}}if(options.series.pie.radius=="auto"){if(options.series.pie.label.show){options.series.pie.radius=3/4}else{options.series.pie.radius=1}}if(options.series.pie.tilt>1){options.series.pie.tilt=1}else if(options.series.pie.tilt<0){options.series.pie.tilt=0}}});plot.hooks.bindEvents.push(function(plot,eventHolder){var options=plot.getOptions();if(options.series.pie.show){if(options.grid.hoverable){eventHolder.unbind("mousemove").mousemove(onMouseMove)}if(options.grid.clickable){eventHolder.unbind("click").click(onClick)}}});plot.hooks.processDatapoints.push(function(plot,series,data,datapoints){var options=plot.getOptions();if(options.series.pie.show){processDatapoints(plot,series,data,datapoints)}});plot.hooks.drawOverlay.push(function(plot,octx){var options=plot.getOptions();if(options.series.pie.show){drawOverlay(plot,octx)}});plot.hooks.draw.push(function(plot,newCtx){var options=plot.getOptions();if(options.series.pie.show){draw(plot,newCtx)}});function processDatapoints(plot,series,datapoints){if(!processed){processed=true;canvas=plot.getCanvas();target=$(canvas).parent();options=plot.getOptions();plot.setData(combine(plot.getData()))}}function combine(data){var total=0,combined=0,numCombined=0,color=options.series.pie.combine.color,newdata=[];for(var i=0;i<data.length;++i){var value=data[i].data;if($.isArray(value)&&value.length==1){value=value[0]}if($.isArray(value)){if(!isNaN(parseFloat(value[1]))&&isFinite(value[1])){value[1]=+value[1]}else{value[1]=0}}else if(!isNaN(parseFloat(value))&&isFinite(value)){value=[1,+value]}else{value=[1,0]}data[i].data=[value]}for(var i=0;i<data.length;++i){total+=data[i].data[0][1]}for(var i=0;i<data.length;++i){var value=data[i].data[0][1];if(value/total<=options.series.pie.combine.threshold){combined+=value;numCombined++;if(!color){color=data[i].color}}}for(var i=0;i<data.length;++i){var value=data[i].data[0][1];if(numCombined<2||value/total>options.series.pie.combine.threshold){newdata.push($.extend(data[i],{data:[[1,value]],color:data[i].color,label:data[i].label,angle:value*Math.PI*2/total,percent:value/(total/100)}))}}if(numCombined>1){newdata.push({data:[[1,combined]],color:color,label:options.series.pie.combine.label,angle:combined*Math.PI*2/total,percent:combined/(total/100)})}return newdata}function draw(plot,newCtx){if(!target){return}var canvasWidth=plot.getPlaceholder().width(),canvasHeight=plot.getPlaceholder().height(),legendWidth=target.children().filter(".legend").children().width()||0;ctx=newCtx;processed=false;maxRadius=Math.min(canvasWidth,canvasHeight/options.series.pie.tilt)/2;centerTop=canvasHeight/2+options.series.pie.offset.top;centerLeft=canvasWidth/2;if(options.series.pie.offset.left=="auto"){if(options.legend.position.match("w")){centerLeft+=legendWidth/2}else{centerLeft-=legendWidth/2}if(centerLeft<maxRadius){centerLeft=maxRadius}else if(centerLeft>canvasWidth-maxRadius){centerLeft=canvasWidth-maxRadius}}else{centerLeft+=options.series.pie.offset.left}var slices=plot.getData(),attempts=0;do{if(attempts>0){maxRadius*=REDRAW_SHRINK}attempts+=1;clear();if(options.series.pie.tilt<=.8){drawShadow()}}while(!drawPie()&&attempts<REDRAW_ATTEMPTS);if(attempts>=REDRAW_ATTEMPTS){clear();target.prepend("<div class='error'>Could not draw pie with labels contained inside canvas</div>")}if(plot.setSeries&&plot.insertLegend){plot.setSeries(slices);plot.insertLegend()}function clear(){ctx.clearRect(0,0,canvasWidth,canvasHeight);target.children().filter(".pieLabel, .pieLabelBackground").remove()}function drawShadow(){var shadowLeft=options.series.pie.shadow.left;var shadowTop=options.series.pie.shadow.top;var edge=10;var alpha=options.series.pie.shadow.alpha;var radius=options.series.pie.radius>1?options.series.pie.radius:maxRadius*options.series.pie.radius;if(radius>=canvasWidth/2-shadowLeft||radius*options.series.pie.tilt>=canvasHeight/2-shadowTop||radius<=edge){return}ctx.save();ctx.translate(shadowLeft,shadowTop);ctx.globalAlpha=alpha;ctx.fillStyle="#000";ctx.translate(centerLeft,centerTop);ctx.scale(1,options.series.pie.tilt);for(var i=1;i<=edge;i++){ctx.beginPath();ctx.arc(0,0,radius,0,Math.PI*2,false);ctx.fill();radius-=i}ctx.restore()}function drawPie(){var startAngle=Math.PI*options.series.pie.startAngle;var radius=options.series.pie.radius>1?options.series.pie.radius:maxRadius*options.series.pie.radius;ctx.save();ctx.translate(centerLeft,centerTop);ctx.scale(1,options.series.pie.tilt);ctx.save();var currentAngle=startAngle;for(var i=0;i<slices.length;++i){slices[i].startAngle=currentAngle;drawSlice(slices[i].angle,slices[i].color,true)}ctx.restore();if(options.series.pie.stroke.width>0){ctx.save();ctx.lineWidth=options.series.pie.stroke.width;currentAngle=startAngle;for(var i=0;i<slices.length;++i){drawSlice(slices[i].angle,options.series.pie.stroke.color,false)}ctx.restore()}drawDonutHole(ctx);ctx.restore();if(options.series.pie.label.show){return drawLabels()}else return true;function drawSlice(angle,color,fill){if(angle<=0||isNaN(angle)){return}if(fill){ctx.fillStyle=color}else{ctx.strokeStyle=color;ctx.lineJoin="round"}ctx.beginPath();if(Math.abs(angle-Math.PI*2)>1e-9){ctx.moveTo(0,0)}ctx.arc(0,0,radius,currentAngle,currentAngle+angle/2,false);ctx.arc(0,0,radius,currentAngle+angle/2,currentAngle+angle,false);ctx.closePath();currentAngle+=angle;if(fill){ctx.fill()}else{ctx.stroke()}}function drawLabels(){var currentAngle=startAngle;var radius=options.series.pie.label.radius>1?options.series.pie.label.radius:maxRadius*options.series.pie.label.radius;for(var i=0;i<slices.length;++i){if(slices[i].percent>=options.series.pie.label.threshold*100){if(!drawLabel(slices[i],currentAngle,i)){return false}}currentAngle+=slices[i].angle}return true;function drawLabel(slice,startAngle,index){if(slice.data[0][1]==0){return true}var lf=options.legend.labelFormatter,text,plf=options.series.pie.label.formatter;if(lf){text=lf(slice.label,slice)}else{text=slice.label}if(plf){text=plf(text,slice)}var halfAngle=(startAngle+slice.angle+startAngle)/2;var x=centerLeft+Math.round(Math.cos(halfAngle)*radius);var y=centerTop+Math.round(Math.sin(halfAngle)*radius)*options.series.pie.tilt;var html="<span class='pieLabel' id='pieLabel"+index+"' style='position:absolute;top:"+y+"px;left:"+x+"px;'>"+text+"</span>";target.append(html);var label=target.children("#pieLabel"+index);var labelTop=y-label.height()/2;var labelLeft=x-label.width()/2;label.css("top",labelTop);label.css("left",labelLeft);if(0-labelTop>0||0-labelLeft>0||canvasHeight-(labelTop+label.height())<0||canvasWidth-(labelLeft+label.width())<0){return false}if(options.series.pie.label.background.opacity!=0){var c=options.series.pie.label.background.color;if(c==null){c=slice.color}var pos="top:"+labelTop+"px;left:"+labelLeft+"px;";$("<div class='pieLabelBackground' style='position:absolute;width:"+label.width()+"px;height:"+label.height()+"px;"+pos+"background-color:"+c+";'></div>").css("opacity",options.series.pie.label.background.opacity).insertBefore(label)}return true}}}}function drawDonutHole(layer){if(options.series.pie.innerRadius>0){layer.save();var innerRadius=options.series.pie.innerRadius>1?options.series.pie.innerRadius:maxRadius*options.series.pie.innerRadius;layer.globalCompositeOperation="destination-out";layer.beginPath();layer.fillStyle=options.series.pie.stroke.color;layer.arc(0,0,innerRadius,0,Math.PI*2,false);layer.fill();layer.closePath();layer.restore();layer.save();layer.beginPath();layer.strokeStyle=options.series.pie.stroke.color;layer.arc(0,0,innerRadius,0,Math.PI*2,false);layer.stroke();layer.closePath();layer.restore()}}function isPointInPoly(poly,pt){for(var c=false,i=-1,l=poly.length,j=l-1;++i<l;j=i)(poly[i][1]<=pt[1]&&pt[1]<poly[j][1]||poly[j][1]<=pt[1]&&pt[1]<poly[i][1])&&pt[0]<(poly[j][0]-poly[i][0])*(pt[1]-poly[i][1])/(poly[j][1]-poly[i][1])+poly[i][0]&&(c=!c);return c}function findNearbySlice(mouseX,mouseY){var slices=plot.getData(),options=plot.getOptions(),radius=options.series.pie.radius>1?options.series.pie.radius:maxRadius*options.series.pie.radius,x,y;for(var i=0;i<slices.length;++i){var s=slices[i];if(s.pie.show){ctx.save();ctx.beginPath();ctx.moveTo(0,0);ctx.arc(0,0,radius,s.startAngle,s.startAngle+s.angle/2,false);ctx.arc(0,0,radius,s.startAngle+s.angle/2,s.startAngle+s.angle,false);ctx.closePath();x=mouseX-centerLeft;y=mouseY-centerTop;if(ctx.isPointInPath){if(ctx.isPointInPath(mouseX-centerLeft,mouseY-centerTop)){ctx.restore();return{datapoint:[s.percent,s.data],dataIndex:0,series:s,seriesIndex:i}}}else{var p1X=radius*Math.cos(s.startAngle),p1Y=radius*Math.sin(s.startAngle),p2X=radius*Math.cos(s.startAngle+s.angle/4),p2Y=radius*Math.sin(s.startAngle+s.angle/4),p3X=radius*Math.cos(s.startAngle+s.angle/2),p3Y=radius*Math.sin(s.startAngle+s.angle/2),p4X=radius*Math.cos(s.startAngle+s.angle/1.5),p4Y=radius*Math.sin(s.startAngle+s.angle/1.5),p5X=radius*Math.cos(s.startAngle+s.angle),p5Y=radius*Math.sin(s.startAngle+s.angle),arrPoly=[[0,0],[p1X,p1Y],[p2X,p2Y],[p3X,p3Y],[p4X,p4Y],[p5X,p5Y]],arrPoint=[x,y];if(isPointInPoly(arrPoly,arrPoint)){ctx.restore();return{datapoint:[s.percent,s.data],dataIndex:0,series:s,seriesIndex:i}}}ctx.restore()}}return null}function onMouseMove(e){triggerClickHoverEvent("plothover",e)}function onClick(e){triggerClickHoverEvent("plotclick",e)}function triggerClickHoverEvent(eventname,e){var offset=plot.offset();var canvasX=parseInt(e.pageX-offset.left);var canvasY=parseInt(e.pageY-offset.top);var item=findNearbySlice(canvasX,canvasY);if(options.grid.autoHighlight){for(var i=0;i<highlights.length;++i){var h=highlights[i];if(h.auto==eventname&&!(item&&h.series==item.series)){unhighlight(h.series)}}}if(item){highlight(item.series,eventname)}var pos={pageX:e.pageX,pageY:e.pageY};target.trigger(eventname,[pos,item])}function highlight(s,auto){var i=indexOfHighlight(s);if(i==-1){highlights.push({series:s,auto:auto});plot.triggerRedrawOverlay()}else if(!auto){highlights[i].auto=false}}function unhighlight(s){if(s==null){highlights=[];plot.triggerRedrawOverlay()}var i=indexOfHighlight(s);if(i!=-1){highlights.splice(i,1);plot.triggerRedrawOverlay()}}function indexOfHighlight(s){for(var i=0;i<highlights.length;++i){var h=highlights[i];if(h.series==s)return i}return-1}function drawOverlay(plot,octx){var options=plot.getOptions();var radius=options.series.pie.radius>1?options.series.pie.radius:maxRadius*options.series.pie.radius;octx.save();octx.translate(centerLeft,centerTop);octx.scale(1,options.series.pie.tilt);for(var i=0;i<highlights.length;++i){drawHighlight(highlights[i].series)}drawDonutHole(octx);octx.restore();function drawHighlight(series){if(series.angle<=0||isNaN(series.angle)){return}octx.fillStyle="rgba(255, 255, 255, "+options.series.pie.highlight.opacity+")";octx.beginPath();if(Math.abs(series.angle-Math.PI*2)>1e-9){octx.moveTo(0,0)}octx.arc(0,0,radius,series.startAngle,series.startAngle+series.angle/2,false);octx.arc(0,0,radius,series.startAngle+series.angle/2,series.startAngle+series.angle,false);octx.closePath();octx.fill()}}}var options={series:{pie:{show:false,radius:"auto",innerRadius:0,startAngle:3/2,tilt:1,shadow:{left:5,top:15,alpha:.02},offset:{top:0,left:"auto"},stroke:{color:"#fff",width:1},label:{show:"auto",formatter:function(label,slice){return"<div style='font-size:x-small;text-align:center;padding:2px;color:"+slice.color+";'>"+label+"<br/>"+Math.round(slice.percent)+"%</div>"},radius:1,background:{color:null,opacity:0},threshold:0},combine:{threshold:-1,color:null,label:"Other"},highlight:{opacity:.5}}}};$.plot.plugins.push({init:init,options:options,name:"pie",version:"1.1"})})(jQuery);
+ static/js/jquery.flot.resize.js view
@@ -0,0 +1,59 @@+/* Flot plugin for automatically redrawing plots as the placeholder resizes.++Copyright (c) 2007-2014 IOLA and Ole Laursen.+Licensed under the MIT license.++It works by listening for changes on the placeholder div (through the jQuery+resize event plugin) - if the size changes, it will redraw the plot.++There are no options. If you need to disable the plugin for some plots, you+can just fix the size of their placeholders.++*/++/* Inline dependency:+ * jQuery resize event - v1.1 - 3/14/2010+ * http://benalman.com/projects/jquery-resize-plugin/+ *+ * Copyright (c) 2010 "Cowboy" Ben Alman+ * Dual licensed under the MIT and GPL licenses.+ * http://benalman.com/about/license/+ */+(function($,e,t){"$:nomunge";var i=[],n=$.resize=$.extend($.resize,{}),a,r=false,s="setTimeout",u="resize",m=u+"-special-event",o="pendingDelay",l="activeDelay",f="throttleWindow";n[o]=200;n[l]=20;n[f]=true;$.event.special[u]={setup:function(){if(!n[f]&&this[s]){return false}var e=$(this);i.push(this);e.data(m,{w:e.width(),h:e.height()});if(i.length===1){a=t;h()}},teardown:function(){if(!n[f]&&this[s]){return false}var e=$(this);for(var t=i.length-1;t>=0;t--){if(i[t]==this){i.splice(t,1);break}}e.removeData(m);if(!i.length){if(r){cancelAnimationFrame(a)}else{clearTimeout(a)}a=null}},add:function(e){if(!n[f]&&this[s]){return false}var i;function a(e,n,a){var r=$(this),s=r.data(m)||{};s.w=n!==t?n:r.width();s.h=a!==t?a:r.height();i.apply(this,arguments)}if($.isFunction(e)){i=e;return a}else{i=e.handler;e.handler=a}}};function h(t){if(r===true){r=t||1}for(var s=i.length-1;s>=0;s--){var l=$(i[s]);if(l[0]==e||l.is(":visible")){var f=l.width(),c=l.height(),d=l.data(m);if(d&&(f!==d.w||c!==d.h)){l.trigger(u,[d.w=f,d.h=c]);r=t||true}}else{d=l.data(m);d.w=0;d.h=0}}if(a!==null){if(r&&(t==null||t-r<1e3)){a=e.requestAnimationFrame(h)}else{a=setTimeout(h,n[o]);r=false}}}if(!e.requestAnimationFrame){e.requestAnimationFrame=function(){return e.webkitRequestAnimationFrame||e.mozRequestAnimationFrame||e.oRequestAnimationFrame||e.msRequestAnimationFrame||function(t,i){return e.setTimeout(function(){t((new Date).getTime())},n[l])}}()}if(!e.cancelAnimationFrame){e.cancelAnimationFrame=function(){return e.webkitCancelRequestAnimationFrame||e.mozCancelRequestAnimationFrame||e.oCancelRequestAnimationFrame||e.msCancelRequestAnimationFrame||clearTimeout}()}})(jQuery,this);++(function ($) {+    var options = { }; // no options++    function init(plot) {+        function onResize() {+            var placeholder = plot.getPlaceholder();++            // somebody might have hidden us and we can't plot+            // when we don't have the dimensions+            if (placeholder.width() == 0 || placeholder.height() == 0)+                return;++            plot.resize();+            plot.setupGrid();+            plot.draw();+        }+        +        function bindEvents(plot, eventHolder) {+            plot.getPlaceholder().resize(onResize);+        }++        function shutdown(plot, eventHolder) {+            plot.getPlaceholder().unbind("resize", onResize);+        }+        +        plot.hooks.bindEvents.push(bindEvents);+        plot.hooks.shutdown.push(shutdown);+    }+    +    $.plot.plugins.push({+        init: init,+        options: options,+        name: 'resize',+        version: '1.0'+    });+})(jQuery);
+ static/js/jquery.flot.resize.min.js view
@@ -0,0 +1,7 @@+/* Javascript plotting library for jQuery, version 0.8.3.++Copyright (c) 2007-2014 IOLA and Ole Laursen.+Licensed under the MIT license.++*/+(function($,e,t){"$:nomunge";var i=[],n=$.resize=$.extend($.resize,{}),a,r=false,s="setTimeout",u="resize",m=u+"-special-event",o="pendingDelay",l="activeDelay",f="throttleWindow";n[o]=200;n[l]=20;n[f]=true;$.event.special[u]={setup:function(){if(!n[f]&&this[s]){return false}var e=$(this);i.push(this);e.data(m,{w:e.width(),h:e.height()});if(i.length===1){a=t;h()}},teardown:function(){if(!n[f]&&this[s]){return false}var e=$(this);for(var t=i.length-1;t>=0;t--){if(i[t]==this){i.splice(t,1);break}}e.removeData(m);if(!i.length){if(r){cancelAnimationFrame(a)}else{clearTimeout(a)}a=null}},add:function(e){if(!n[f]&&this[s]){return false}var i;function a(e,n,a){var r=$(this),s=r.data(m)||{};s.w=n!==t?n:r.width();s.h=a!==t?a:r.height();i.apply(this,arguments)}if($.isFunction(e)){i=e;return a}else{i=e.handler;e.handler=a}}};function h(t){if(r===true){r=t||1}for(var s=i.length-1;s>=0;s--){var l=$(i[s]);if(l[0]==e||l.is(":visible")){var f=l.width(),c=l.height(),d=l.data(m);if(d&&(f!==d.w||c!==d.h)){l.trigger(u,[d.w=f,d.h=c]);r=t||true}}else{d=l.data(m);d.w=0;d.h=0}}if(a!==null){if(r&&(t==null||t-r<1e3)){a=e.requestAnimationFrame(h)}else{a=setTimeout(h,n[o]);r=false}}}if(!e.requestAnimationFrame){e.requestAnimationFrame=function(){return e.webkitRequestAnimationFrame||e.mozRequestAnimationFrame||e.oRequestAnimationFrame||e.msRequestAnimationFrame||function(t,i){return e.setTimeout(function(){t((new Date).getTime())},n[l])}}()}if(!e.cancelAnimationFrame){e.cancelAnimationFrame=function(){return e.webkitCancelRequestAnimationFrame||e.mozCancelRequestAnimationFrame||e.oCancelRequestAnimationFrame||e.msCancelRequestAnimationFrame||clearTimeout}()}})(jQuery,this);(function($){var options={};function init(plot){function onResize(){var placeholder=plot.getPlaceholder();if(placeholder.width()==0||placeholder.height()==0)return;plot.resize();plot.setupGrid();plot.draw()}function bindEvents(plot,eventHolder){plot.getPlaceholder().resize(onResize)}function shutdown(plot,eventHolder){plot.getPlaceholder().unbind("resize",onResize)}plot.hooks.bindEvents.push(bindEvents);plot.hooks.shutdown.push(shutdown)}$.plot.plugins.push({init:init,options:options,name:"resize",version:"1.0"})})(jQuery);
+ static/js/jquery.flot.selection.js view
@@ -0,0 +1,360 @@+/* Flot plugin for selecting regions of a plot.++Copyright (c) 2007-2014 IOLA and Ole Laursen.+Licensed under the MIT license.++The plugin supports these options:++selection: {+	mode: null or "x" or "y" or "xy",+	color: color,+	shape: "round" or "miter" or "bevel",+	minSize: number of pixels+}++Selection support is enabled by setting the mode to one of "x", "y" or "xy".+In "x" mode, the user will only be able to specify the x range, similarly for+"y" mode. For "xy", the selection becomes a rectangle where both ranges can be+specified. "color" is color of the selection (if you need to change the color+later on, you can get to it with plot.getOptions().selection.color). "shape"+is the shape of the corners of the selection.++"minSize" is the minimum size a selection can be in pixels. This value can+be customized to determine the smallest size a selection can be and still+have the selection rectangle be displayed. When customizing this value, the+fact that it refers to pixels, not axis units must be taken into account.+Thus, for example, if there is a bar graph in time mode with BarWidth set to 1+minute, setting "minSize" to 1 will not make the minimum selection size 1+minute, but rather 1 pixel. Note also that setting "minSize" to 0 will prevent+"plotunselected" events from being fired when the user clicks the mouse without+dragging.++When selection support is enabled, a "plotselected" event will be emitted on+the DOM element you passed into the plot function. The event handler gets a+parameter with the ranges selected on the axes, like this:++	placeholder.bind( "plotselected", function( event, ranges ) {+		alert("You selected " + ranges.xaxis.from + " to " + ranges.xaxis.to)+		// similar for yaxis - with multiple axes, the extra ones are in+		// x2axis, x3axis, ...+	});++The "plotselected" event is only fired when the user has finished making the+selection. A "plotselecting" event is fired during the process with the same+parameters as the "plotselected" event, in case you want to know what's+happening while it's happening,++A "plotunselected" event with no arguments is emitted when the user clicks the+mouse to remove the selection. As stated above, setting "minSize" to 0 will+destroy this behavior.++The plugin allso adds the following methods to the plot object:++- setSelection( ranges, preventEvent )++  Set the selection rectangle. The passed in ranges is on the same form as+  returned in the "plotselected" event. If the selection mode is "x", you+  should put in either an xaxis range, if the mode is "y" you need to put in+  an yaxis range and both xaxis and yaxis if the selection mode is "xy", like+  this:++	setSelection({ xaxis: { from: 0, to: 10 }, yaxis: { from: 40, to: 60 } });++  setSelection will trigger the "plotselected" event when called. If you don't+  want that to happen, e.g. if you're inside a "plotselected" handler, pass+  true as the second parameter. If you are using multiple axes, you can+  specify the ranges on any of those, e.g. as x2axis/x3axis/... instead of+  xaxis, the plugin picks the first one it sees.++- clearSelection( preventEvent )++  Clear the selection rectangle. Pass in true to avoid getting a+  "plotunselected" event.++- getSelection()++  Returns the current selection in the same format as the "plotselected"+  event. If there's currently no selection, the function returns null.++*/++(function ($) {+    function init(plot) {+        var selection = {+                first: { x: -1, y: -1}, second: { x: -1, y: -1},+                show: false,+                active: false+            };++        // FIXME: The drag handling implemented here should be+        // abstracted out, there's some similar code from a library in+        // the navigation plugin, this should be massaged a bit to fit+        // the Flot cases here better and reused. Doing this would+        // make this plugin much slimmer.+        var savedhandlers = {};++        var mouseUpHandler = null;+        +        function onMouseMove(e) {+            if (selection.active) {+                updateSelection(e);+                +                plot.getPlaceholder().trigger("plotselecting", [ getSelection() ]);+            }+        }++        function onMouseDown(e) {+            if (e.which != 1)  // only accept left-click+                return;+            +            // cancel out any text selections+            document.body.focus();++            // prevent text selection and drag in old-school browsers+            if (document.onselectstart !== undefined && savedhandlers.onselectstart == null) {+                savedhandlers.onselectstart = document.onselectstart;+                document.onselectstart = function () { return false; };+            }+            if (document.ondrag !== undefined && savedhandlers.ondrag == null) {+                savedhandlers.ondrag = document.ondrag;+                document.ondrag = function () { return false; };+            }++            setSelectionPos(selection.first, e);++            selection.active = true;++            // this is a bit silly, but we have to use a closure to be+            // able to whack the same handler again+            mouseUpHandler = function (e) { onMouseUp(e); };+            +            $(document).one("mouseup", mouseUpHandler);+        }++        function onMouseUp(e) {+            mouseUpHandler = null;+            +            // revert drag stuff for old-school browsers+            if (document.onselectstart !== undefined)+                document.onselectstart = savedhandlers.onselectstart;+            if (document.ondrag !== undefined)+                document.ondrag = savedhandlers.ondrag;++            // no more dragging+            selection.active = false;+            updateSelection(e);++            if (selectionIsSane())+                triggerSelectedEvent();+            else {+                // this counts as a clear+                plot.getPlaceholder().trigger("plotunselected", [ ]);+                plot.getPlaceholder().trigger("plotselecting", [ null ]);+            }++            return false;+        }++        function getSelection() {+            if (!selectionIsSane())+                return null;+            +            if (!selection.show) return null;++            var r = {}, c1 = selection.first, c2 = selection.second;+            $.each(plot.getAxes(), function (name, axis) {+                if (axis.used) {+                    var p1 = axis.c2p(c1[axis.direction]), p2 = axis.c2p(c2[axis.direction]); +                    r[name] = { from: Math.min(p1, p2), to: Math.max(p1, p2) };+                }+            });+            return r;+        }++        function triggerSelectedEvent() {+            var r = getSelection();++            plot.getPlaceholder().trigger("plotselected", [ r ]);++            // backwards-compat stuff, to be removed in future+            if (r.xaxis && r.yaxis)+                plot.getPlaceholder().trigger("selected", [ { x1: r.xaxis.from, y1: r.yaxis.from, x2: r.xaxis.to, y2: r.yaxis.to } ]);+        }++        function clamp(min, value, max) {+            return value < min ? min: (value > max ? max: value);+        }++        function setSelectionPos(pos, e) {+            var o = plot.getOptions();+            var offset = plot.getPlaceholder().offset();+            var plotOffset = plot.getPlotOffset();+            pos.x = clamp(0, e.pageX - offset.left - plotOffset.left, plot.width());+            pos.y = clamp(0, e.pageY - offset.top - plotOffset.top, plot.height());++            if (o.selection.mode == "y")+                pos.x = pos == selection.first ? 0 : plot.width();++            if (o.selection.mode == "x")+                pos.y = pos == selection.first ? 0 : plot.height();+        }++        function updateSelection(pos) {+            if (pos.pageX == null)+                return;++            setSelectionPos(selection.second, pos);+            if (selectionIsSane()) {+                selection.show = true;+                plot.triggerRedrawOverlay();+            }+            else+                clearSelection(true);+        }++        function clearSelection(preventEvent) {+            if (selection.show) {+                selection.show = false;+                plot.triggerRedrawOverlay();+                if (!preventEvent)+                    plot.getPlaceholder().trigger("plotunselected", [ ]);+            }+        }++        // function taken from markings support in Flot+        function extractRange(ranges, coord) {+            var axis, from, to, key, axes = plot.getAxes();++            for (var k in axes) {+                axis = axes[k];+                if (axis.direction == coord) {+                    key = coord + axis.n + "axis";+                    if (!ranges[key] && axis.n == 1)+                        key = coord + "axis"; // support x1axis as xaxis+                    if (ranges[key]) {+                        from = ranges[key].from;+                        to = ranges[key].to;+                        break;+                    }+                }+            }++            // backwards-compat stuff - to be removed in future+            if (!ranges[key]) {+                axis = coord == "x" ? plot.getXAxes()[0] : plot.getYAxes()[0];+                from = ranges[coord + "1"];+                to = ranges[coord + "2"];+            }++            // auto-reverse as an added bonus+            if (from != null && to != null && from > to) {+                var tmp = from;+                from = to;+                to = tmp;+            }+            +            return { from: from, to: to, axis: axis };+        }+        +        function setSelection(ranges, preventEvent) {+            var axis, range, o = plot.getOptions();++            if (o.selection.mode == "y") {+                selection.first.x = 0;+                selection.second.x = plot.width();+            }+            else {+                range = extractRange(ranges, "x");++                selection.first.x = range.axis.p2c(range.from);+                selection.second.x = range.axis.p2c(range.to);+            }++            if (o.selection.mode == "x") {+                selection.first.y = 0;+                selection.second.y = plot.height();+            }+            else {+                range = extractRange(ranges, "y");++                selection.first.y = range.axis.p2c(range.from);+                selection.second.y = range.axis.p2c(range.to);+            }++            selection.show = true;+            plot.triggerRedrawOverlay();+            if (!preventEvent && selectionIsSane())+                triggerSelectedEvent();+        }++        function selectionIsSane() {+            var minSize = plot.getOptions().selection.minSize;+            return Math.abs(selection.second.x - selection.first.x) >= minSize &&+                Math.abs(selection.second.y - selection.first.y) >= minSize;+        }++        plot.clearSelection = clearSelection;+        plot.setSelection = setSelection;+        plot.getSelection = getSelection;++        plot.hooks.bindEvents.push(function(plot, eventHolder) {+            var o = plot.getOptions();+            if (o.selection.mode != null) {+                eventHolder.mousemove(onMouseMove);+                eventHolder.mousedown(onMouseDown);+            }+        });+++        plot.hooks.drawOverlay.push(function (plot, ctx) {+            // draw selection+            if (selection.show && selectionIsSane()) {+                var plotOffset = plot.getPlotOffset();+                var o = plot.getOptions();++                ctx.save();+                ctx.translate(plotOffset.left, plotOffset.top);++                var c = $.color.parse(o.selection.color);++                ctx.strokeStyle = c.scale('a', 0.8).toString();+                ctx.lineWidth = 1;+                ctx.lineJoin = o.selection.shape;+                ctx.fillStyle = c.scale('a', 0.4).toString();++                var x = Math.min(selection.first.x, selection.second.x) + 0.5,+                    y = Math.min(selection.first.y, selection.second.y) + 0.5,+                    w = Math.abs(selection.second.x - selection.first.x) - 1,+                    h = Math.abs(selection.second.y - selection.first.y) - 1;++                ctx.fillRect(x, y, w, h);+                ctx.strokeRect(x, y, w, h);++                ctx.restore();+            }+        });+        +        plot.hooks.shutdown.push(function (plot, eventHolder) {+            eventHolder.unbind("mousemove", onMouseMove);+            eventHolder.unbind("mousedown", onMouseDown);+            +            if (mouseUpHandler)+                $(document).unbind("mouseup", mouseUpHandler);+        });++    }++    $.plot.plugins.push({+        init: init,+        options: {+            selection: {+                mode: null, // one of null, "x", "y" or "xy"+                color: "#e8cfac",+                shape: "round", // one of "round", "miter", or "bevel"+                minSize: 5 // minimum number of pixels+            }+        },+        name: 'selection',+        version: '1.1'+    });+})(jQuery);
+ static/js/jquery.flot.selection.min.js view
@@ -0,0 +1,7 @@+/* Javascript plotting library for jQuery, version 0.8.3.++Copyright (c) 2007-2014 IOLA and Ole Laursen.+Licensed under the MIT license.++*/+(function($){function init(plot){var selection={first:{x:-1,y:-1},second:{x:-1,y:-1},show:false,active:false};var savedhandlers={};var mouseUpHandler=null;function onMouseMove(e){if(selection.active){updateSelection(e);plot.getPlaceholder().trigger("plotselecting",[getSelection()])}}function onMouseDown(e){if(e.which!=1)return;document.body.focus();if(document.onselectstart!==undefined&&savedhandlers.onselectstart==null){savedhandlers.onselectstart=document.onselectstart;document.onselectstart=function(){return false}}if(document.ondrag!==undefined&&savedhandlers.ondrag==null){savedhandlers.ondrag=document.ondrag;document.ondrag=function(){return false}}setSelectionPos(selection.first,e);selection.active=true;mouseUpHandler=function(e){onMouseUp(e)};$(document).one("mouseup",mouseUpHandler)}function onMouseUp(e){mouseUpHandler=null;if(document.onselectstart!==undefined)document.onselectstart=savedhandlers.onselectstart;if(document.ondrag!==undefined)document.ondrag=savedhandlers.ondrag;selection.active=false;updateSelection(e);if(selectionIsSane())triggerSelectedEvent();else{plot.getPlaceholder().trigger("plotunselected",[]);plot.getPlaceholder().trigger("plotselecting",[null])}return false}function getSelection(){if(!selectionIsSane())return null;if(!selection.show)return null;var r={},c1=selection.first,c2=selection.second;$.each(plot.getAxes(),function(name,axis){if(axis.used){var p1=axis.c2p(c1[axis.direction]),p2=axis.c2p(c2[axis.direction]);r[name]={from:Math.min(p1,p2),to:Math.max(p1,p2)}}});return r}function triggerSelectedEvent(){var r=getSelection();plot.getPlaceholder().trigger("plotselected",[r]);if(r.xaxis&&r.yaxis)plot.getPlaceholder().trigger("selected",[{x1:r.xaxis.from,y1:r.yaxis.from,x2:r.xaxis.to,y2:r.yaxis.to}])}function clamp(min,value,max){return value<min?min:value>max?max:value}function setSelectionPos(pos,e){var o=plot.getOptions();var offset=plot.getPlaceholder().offset();var plotOffset=plot.getPlotOffset();pos.x=clamp(0,e.pageX-offset.left-plotOffset.left,plot.width());pos.y=clamp(0,e.pageY-offset.top-plotOffset.top,plot.height());if(o.selection.mode=="y")pos.x=pos==selection.first?0:plot.width();if(o.selection.mode=="x")pos.y=pos==selection.first?0:plot.height()}function updateSelection(pos){if(pos.pageX==null)return;setSelectionPos(selection.second,pos);if(selectionIsSane()){selection.show=true;plot.triggerRedrawOverlay()}else clearSelection(true)}function clearSelection(preventEvent){if(selection.show){selection.show=false;plot.triggerRedrawOverlay();if(!preventEvent)plot.getPlaceholder().trigger("plotunselected",[])}}function extractRange(ranges,coord){var axis,from,to,key,axes=plot.getAxes();for(var k in axes){axis=axes[k];if(axis.direction==coord){key=coord+axis.n+"axis";if(!ranges[key]&&axis.n==1)key=coord+"axis";if(ranges[key]){from=ranges[key].from;to=ranges[key].to;break}}}if(!ranges[key]){axis=coord=="x"?plot.getXAxes()[0]:plot.getYAxes()[0];from=ranges[coord+"1"];to=ranges[coord+"2"]}if(from!=null&&to!=null&&from>to){var tmp=from;from=to;to=tmp}return{from:from,to:to,axis:axis}}function setSelection(ranges,preventEvent){var axis,range,o=plot.getOptions();if(o.selection.mode=="y"){selection.first.x=0;selection.second.x=plot.width()}else{range=extractRange(ranges,"x");selection.first.x=range.axis.p2c(range.from);selection.second.x=range.axis.p2c(range.to)}if(o.selection.mode=="x"){selection.first.y=0;selection.second.y=plot.height()}else{range=extractRange(ranges,"y");selection.first.y=range.axis.p2c(range.from);selection.second.y=range.axis.p2c(range.to)}selection.show=true;plot.triggerRedrawOverlay();if(!preventEvent&&selectionIsSane())triggerSelectedEvent()}function selectionIsSane(){var minSize=plot.getOptions().selection.minSize;return Math.abs(selection.second.x-selection.first.x)>=minSize&&Math.abs(selection.second.y-selection.first.y)>=minSize}plot.clearSelection=clearSelection;plot.setSelection=setSelection;plot.getSelection=getSelection;plot.hooks.bindEvents.push(function(plot,eventHolder){var o=plot.getOptions();if(o.selection.mode!=null){eventHolder.mousemove(onMouseMove);eventHolder.mousedown(onMouseDown)}});plot.hooks.drawOverlay.push(function(plot,ctx){if(selection.show&&selectionIsSane()){var plotOffset=plot.getPlotOffset();var o=plot.getOptions();ctx.save();ctx.translate(plotOffset.left,plotOffset.top);var c=$.color.parse(o.selection.color);ctx.strokeStyle=c.scale("a",.8).toString();ctx.lineWidth=1;ctx.lineJoin=o.selection.shape;ctx.fillStyle=c.scale("a",.4).toString();var x=Math.min(selection.first.x,selection.second.x)+.5,y=Math.min(selection.first.y,selection.second.y)+.5,w=Math.abs(selection.second.x-selection.first.x)-1,h=Math.abs(selection.second.y-selection.first.y)-1;ctx.fillRect(x,y,w,h);ctx.strokeRect(x,y,w,h);ctx.restore()}});plot.hooks.shutdown.push(function(plot,eventHolder){eventHolder.unbind("mousemove",onMouseMove);eventHolder.unbind("mousedown",onMouseDown);if(mouseUpHandler)$(document).unbind("mouseup",mouseUpHandler)})}$.plot.plugins.push({init:init,options:{selection:{mode:null,color:"#e8cfac",shape:"round",minSize:5}},name:"selection",version:"1.1"})})(jQuery);
+ static/js/jquery.flot.stack.js view
@@ -0,0 +1,188 @@+/* Flot plugin for stacking data sets rather than overlyaing them.++Copyright (c) 2007-2014 IOLA and Ole Laursen.+Licensed under the MIT license.++The plugin assumes the data is sorted on x (or y if stacking horizontally).+For line charts, it is assumed that if a line has an undefined gap (from a+null point), then the line above it should have the same gap - insert zeros+instead of "null" if you want another behaviour. This also holds for the start+and end of the chart. Note that stacking a mix of positive and negative values+in most instances doesn't make sense (so it looks weird).++Two or more series are stacked when their "stack" attribute is set to the same+key (which can be any number or string or just "true"). To specify the default+stack, you can set the stack option like this:++	series: {+		stack: null/false, true, or a key (number/string)+	}++You can also specify it for a single series, like this:++	$.plot( $("#placeholder"), [{+		data: [ ... ],+		stack: true+	}])++The stacking order is determined by the order of the data series in the array+(later series end up on top of the previous).++Internally, the plugin modifies the datapoints in each series, adding an+offset to the y value. For line series, extra data points are inserted through+interpolation. If there's a second y value, it's also adjusted (e.g for bar+charts or filled areas).++*/++(function ($) {+    var options = {+        series: { stack: null } // or number/string+    };+    +    function init(plot) {+        function findMatchingSeries(s, allseries) {+            var res = null;+            for (var i = 0; i < allseries.length; ++i) {+                if (s == allseries[i])+                    break;+                +                if (allseries[i].stack == s.stack)+                    res = allseries[i];+            }+            +            return res;+        }+        +        function stackData(plot, s, datapoints) {+            if (s.stack == null || s.stack === false)+                return;++            var other = findMatchingSeries(s, plot.getData());+            if (!other)+                return;++            var ps = datapoints.pointsize,+                points = datapoints.points,+                otherps = other.datapoints.pointsize,+                otherpoints = other.datapoints.points,+                newpoints = [],+                px, py, intery, qx, qy, bottom,+                withlines = s.lines.show,+                horizontal = s.bars.horizontal,+                withbottom = ps > 2 && (horizontal ? datapoints.format[2].x : datapoints.format[2].y),+                withsteps = withlines && s.lines.steps,+                fromgap = true,+                keyOffset = horizontal ? 1 : 0,+                accumulateOffset = horizontal ? 0 : 1,+                i = 0, j = 0, l, m;++            while (true) {+                if (i >= points.length)+                    break;++                l = newpoints.length;++                if (points[i] == null) {+                    // copy gaps+                    for (m = 0; m < ps; ++m)+                        newpoints.push(points[i + m]);+                    i += ps;+                }+                else if (j >= otherpoints.length) {+                    // for lines, we can't use the rest of the points+                    if (!withlines) {+                        for (m = 0; m < ps; ++m)+                            newpoints.push(points[i + m]);+                    }+                    i += ps;+                }+                else if (otherpoints[j] == null) {+                    // oops, got a gap+                    for (m = 0; m < ps; ++m)+                        newpoints.push(null);+                    fromgap = true;+                    j += otherps;+                }+                else {+                    // cases where we actually got two points+                    px = points[i + keyOffset];+                    py = points[i + accumulateOffset];+                    qx = otherpoints[j + keyOffset];+                    qy = otherpoints[j + accumulateOffset];+                    bottom = 0;++                    if (px == qx) {+                        for (m = 0; m < ps; ++m)+                            newpoints.push(points[i + m]);++                        newpoints[l + accumulateOffset] += qy;+                        bottom = qy;+                        +                        i += ps;+                        j += otherps;+                    }+                    else if (px > qx) {+                        // we got past point below, might need to+                        // insert interpolated extra point+                        if (withlines && i > 0 && points[i - ps] != null) {+                            intery = py + (points[i - ps + accumulateOffset] - py) * (qx - px) / (points[i - ps + keyOffset] - px);+                            newpoints.push(qx);+                            newpoints.push(intery + qy);+                            for (m = 2; m < ps; ++m)+                                newpoints.push(points[i + m]);+                            bottom = qy; +                        }++                        j += otherps;+                    }+                    else { // px < qx+                        if (fromgap && withlines) {+                            // if we come from a gap, we just skip this point+                            i += ps;+                            continue;+                        }+                            +                        for (m = 0; m < ps; ++m)+                            newpoints.push(points[i + m]);+                        +                        // we might be able to interpolate a point below,+                        // this can give us a better y+                        if (withlines && j > 0 && otherpoints[j - otherps] != null)+                            bottom = qy + (otherpoints[j - otherps + accumulateOffset] - qy) * (px - qx) / (otherpoints[j - otherps + keyOffset] - qx);++                        newpoints[l + accumulateOffset] += bottom;+                        +                        i += ps;+                    }++                    fromgap = false;+                    +                    if (l != newpoints.length && withbottom)+                        newpoints[l + 2] += bottom;+                }++                // maintain the line steps invariant+                if (withsteps && l != newpoints.length && l > 0+                    && newpoints[l] != null+                    && newpoints[l] != newpoints[l - ps]+                    && newpoints[l + 1] != newpoints[l - ps + 1]) {+                    for (m = 0; m < ps; ++m)+                        newpoints[l + ps + m] = newpoints[l + m];+                    newpoints[l + 1] = newpoints[l - ps + 1];+                }+            }++            datapoints.points = newpoints;+        }+        +        plot.hooks.processDatapoints.push(stackData);+    }+    +    $.plot.plugins.push({+        init: init,+        options: options,+        name: 'stack',+        version: '1.2'+    });+})(jQuery);
+ static/js/jquery.flot.stack.min.js view
@@ -0,0 +1,7 @@+/* Javascript plotting library for jQuery, version 0.8.3.++Copyright (c) 2007-2014 IOLA and Ole Laursen.+Licensed under the MIT license.++*/+(function($){var options={series:{stack:null}};function init(plot){function findMatchingSeries(s,allseries){var res=null;for(var i=0;i<allseries.length;++i){if(s==allseries[i])break;if(allseries[i].stack==s.stack)res=allseries[i]}return res}function stackData(plot,s,datapoints){if(s.stack==null||s.stack===false)return;var other=findMatchingSeries(s,plot.getData());if(!other)return;var ps=datapoints.pointsize,points=datapoints.points,otherps=other.datapoints.pointsize,otherpoints=other.datapoints.points,newpoints=[],px,py,intery,qx,qy,bottom,withlines=s.lines.show,horizontal=s.bars.horizontal,withbottom=ps>2&&(horizontal?datapoints.format[2].x:datapoints.format[2].y),withsteps=withlines&&s.lines.steps,fromgap=true,keyOffset=horizontal?1:0,accumulateOffset=horizontal?0:1,i=0,j=0,l,m;while(true){if(i>=points.length)break;l=newpoints.length;if(points[i]==null){for(m=0;m<ps;++m)newpoints.push(points[i+m]);i+=ps}else if(j>=otherpoints.length){if(!withlines){for(m=0;m<ps;++m)newpoints.push(points[i+m])}i+=ps}else if(otherpoints[j]==null){for(m=0;m<ps;++m)newpoints.push(null);fromgap=true;j+=otherps}else{px=points[i+keyOffset];py=points[i+accumulateOffset];qx=otherpoints[j+keyOffset];qy=otherpoints[j+accumulateOffset];bottom=0;if(px==qx){for(m=0;m<ps;++m)newpoints.push(points[i+m]);newpoints[l+accumulateOffset]+=qy;bottom=qy;i+=ps;j+=otherps}else if(px>qx){if(withlines&&i>0&&points[i-ps]!=null){intery=py+(points[i-ps+accumulateOffset]-py)*(qx-px)/(points[i-ps+keyOffset]-px);newpoints.push(qx);newpoints.push(intery+qy);for(m=2;m<ps;++m)newpoints.push(points[i+m]);bottom=qy}j+=otherps}else{if(fromgap&&withlines){i+=ps;continue}for(m=0;m<ps;++m)newpoints.push(points[i+m]);if(withlines&&j>0&&otherpoints[j-otherps]!=null)bottom=qy+(otherpoints[j-otherps+accumulateOffset]-qy)*(px-qx)/(otherpoints[j-otherps+keyOffset]-qx);newpoints[l+accumulateOffset]+=bottom;i+=ps}fromgap=false;if(l!=newpoints.length&&withbottom)newpoints[l+2]+=bottom}if(withsteps&&l!=newpoints.length&&l>0&&newpoints[l]!=null&&newpoints[l]!=newpoints[l-ps]&&newpoints[l+1]!=newpoints[l-ps+1]){for(m=0;m<ps;++m)newpoints[l+ps+m]=newpoints[l+m];newpoints[l+1]=newpoints[l-ps+1]}}datapoints.points=newpoints}plot.hooks.processDatapoints.push(stackData)}$.plot.plugins.push({init:init,options:options,name:"stack",version:"1.2"})})(jQuery);
+ static/js/jquery.flot.symbol.js view
@@ -0,0 +1,71 @@+/* Flot plugin that adds some extra symbols for plotting points.++Copyright (c) 2007-2014 IOLA and Ole Laursen.+Licensed under the MIT license.++The symbols are accessed as strings through the standard symbol options:++	series: {+		points: {+			symbol: "square" // or "diamond", "triangle", "cross"+		}+	}++*/++(function ($) {+    function processRawData(plot, series, datapoints) {+        // we normalize the area of each symbol so it is approximately the+        // same as a circle of the given radius++        var handlers = {+            square: function (ctx, x, y, radius, shadow) {+                // pi * r^2 = (2s)^2  =>  s = r * sqrt(pi)/2+                var size = radius * Math.sqrt(Math.PI) / 2;+                ctx.rect(x - size, y - size, size + size, size + size);+            },+            diamond: function (ctx, x, y, radius, shadow) {+                // pi * r^2 = 2s^2  =>  s = r * sqrt(pi/2)+                var size = radius * Math.sqrt(Math.PI / 2);+                ctx.moveTo(x - size, y);+                ctx.lineTo(x, y - size);+                ctx.lineTo(x + size, y);+                ctx.lineTo(x, y + size);+                ctx.lineTo(x - size, y);+            },+            triangle: function (ctx, x, y, radius, shadow) {+                // pi * r^2 = 1/2 * s^2 * sin (pi / 3)  =>  s = r * sqrt(2 * pi / sin(pi / 3))+                var size = radius * Math.sqrt(2 * Math.PI / Math.sin(Math.PI / 3));+                var height = size * Math.sin(Math.PI / 3);+                ctx.moveTo(x - size/2, y + height/2);+                ctx.lineTo(x + size/2, y + height/2);+                if (!shadow) {+                    ctx.lineTo(x, y - height/2);+                    ctx.lineTo(x - size/2, y + height/2);+                }+            },+            cross: function (ctx, x, y, radius, shadow) {+                // pi * r^2 = (2s)^2  =>  s = r * sqrt(pi)/2+                var size = radius * Math.sqrt(Math.PI) / 2;+                ctx.moveTo(x - size, y - size);+                ctx.lineTo(x + size, y + size);+                ctx.moveTo(x - size, y + size);+                ctx.lineTo(x + size, y - size);+            }+        };++        var s = series.points.symbol;+        if (handlers[s])+            series.points.symbol = handlers[s];+    }+    +    function init(plot) {+        plot.hooks.processDatapoints.push(processRawData);+    }+    +    $.plot.plugins.push({+        init: init,+        name: 'symbols',+        version: '1.0'+    });+})(jQuery);
+ static/js/jquery.flot.symbol.min.js view
@@ -0,0 +1,7 @@+/* Javascript plotting library for jQuery, version 0.8.3.++Copyright (c) 2007-2014 IOLA and Ole Laursen.+Licensed under the MIT license.++*/+(function($){function processRawData(plot,series,datapoints){var handlers={square:function(ctx,x,y,radius,shadow){var size=radius*Math.sqrt(Math.PI)/2;ctx.rect(x-size,y-size,size+size,size+size)},diamond:function(ctx,x,y,radius,shadow){var size=radius*Math.sqrt(Math.PI/2);ctx.moveTo(x-size,y);ctx.lineTo(x,y-size);ctx.lineTo(x+size,y);ctx.lineTo(x,y+size);ctx.lineTo(x-size,y)},triangle:function(ctx,x,y,radius,shadow){var size=radius*Math.sqrt(2*Math.PI/Math.sin(Math.PI/3));var height=size*Math.sin(Math.PI/3);ctx.moveTo(x-size/2,y+height/2);ctx.lineTo(x+size/2,y+height/2);if(!shadow){ctx.lineTo(x,y-height/2);ctx.lineTo(x-size/2,y+height/2)}},cross:function(ctx,x,y,radius,shadow){var size=radius*Math.sqrt(Math.PI)/2;ctx.moveTo(x-size,y-size);ctx.lineTo(x+size,y+size);ctx.moveTo(x-size,y+size);ctx.lineTo(x+size,y-size)}};var s=series.points.symbol;if(handlers[s])series.points.symbol=handlers[s]}function init(plot){plot.hooks.processDatapoints.push(processRawData)}$.plot.plugins.push({init:init,name:"symbols",version:"1.0"})})(jQuery);
+ static/js/jquery.flot.threshold.js view
@@ -0,0 +1,142 @@+/* Flot plugin for thresholding data.++Copyright (c) 2007-2014 IOLA and Ole Laursen.+Licensed under the MIT license.++The plugin supports these options:++	series: {+		threshold: {+			below: number+			color: colorspec+		}+	}++It can also be applied to a single series, like this:++	$.plot( $("#placeholder"), [{+		data: [ ... ],+		threshold: { ... }+	}])++An array can be passed for multiple thresholding, like this:++	threshold: [{+		below: number1+		color: color1+	},{+		below: number2+		color: color2+	}]++These multiple threshold objects can be passed in any order since they are+sorted by the processing function.++The data points below "below" are drawn with the specified color. This makes+it easy to mark points below 0, e.g. for budget data.++Internally, the plugin works by splitting the data into two series, above and+below the threshold. The extra series below the threshold will have its label+cleared and the special "originSeries" attribute set to the original series.+You may need to check for this in hover events.++*/++(function ($) {+    var options = {+        series: { threshold: null } // or { below: number, color: color spec}+    };+    +    function init(plot) {+        function thresholdData(plot, s, datapoints, below, color) {+            var ps = datapoints.pointsize, i, x, y, p, prevp,+                thresholded = $.extend({}, s); // note: shallow copy++            thresholded.datapoints = { points: [], pointsize: ps, format: datapoints.format };+            thresholded.label = null;+            thresholded.color = color;+            thresholded.threshold = null;+            thresholded.originSeries = s;+            thresholded.data = [];+ +            var origpoints = datapoints.points,+                addCrossingPoints = s.lines.show;++            var threspoints = [];+            var newpoints = [];+            var m;++            for (i = 0; i < origpoints.length; i += ps) {+                x = origpoints[i];+                y = origpoints[i + 1];++                prevp = p;+                if (y < below)+                    p = threspoints;+                else+                    p = newpoints;++                if (addCrossingPoints && prevp != p && x != null+                    && i > 0 && origpoints[i - ps] != null) {+                    var interx = x + (below - y) * (x - origpoints[i - ps]) / (y - origpoints[i - ps + 1]);+                    prevp.push(interx);+                    prevp.push(below);+                    for (m = 2; m < ps; ++m)+                        prevp.push(origpoints[i + m]);+                    +                    p.push(null); // start new segment+                    p.push(null);+                    for (m = 2; m < ps; ++m)+                        p.push(origpoints[i + m]);+                    p.push(interx);+                    p.push(below);+                    for (m = 2; m < ps; ++m)+                        p.push(origpoints[i + m]);+                }++                p.push(x);+                p.push(y);+                for (m = 2; m < ps; ++m)+                    p.push(origpoints[i + m]);+            }++            datapoints.points = newpoints;+            thresholded.datapoints.points = threspoints;+            +            if (thresholded.datapoints.points.length > 0) {+                var origIndex = $.inArray(s, plot.getData());+                // Insert newly-generated series right after original one (to prevent it from becoming top-most)+                plot.getData().splice(origIndex + 1, 0, thresholded);+            }+                +            // FIXME: there are probably some edge cases left in bars+        }+        +        function processThresholds(plot, s, datapoints) {+            if (!s.threshold)+                return;+            +            if (s.threshold instanceof Array) {+                s.threshold.sort(function(a, b) {+                    return a.below - b.below;+                });+                +                $(s.threshold).each(function(i, th) {+                    thresholdData(plot, s, datapoints, th.below, th.color);+                });+            }+            else {+                thresholdData(plot, s, datapoints, s.threshold.below, s.threshold.color);+            }+        }+        +        plot.hooks.processDatapoints.push(processThresholds);+    }+    +    $.plot.plugins.push({+        init: init,+        options: options,+        name: 'threshold',+        version: '1.2'+    });+})(jQuery);
+ static/js/jquery.flot.threshold.min.js view
@@ -0,0 +1,7 @@+/* Javascript plotting library for jQuery, version 0.8.3.++Copyright (c) 2007-2014 IOLA and Ole Laursen.+Licensed under the MIT license.++*/+(function($){var options={series:{threshold:null}};function init(plot){function thresholdData(plot,s,datapoints,below,color){var ps=datapoints.pointsize,i,x,y,p,prevp,thresholded=$.extend({},s);thresholded.datapoints={points:[],pointsize:ps,format:datapoints.format};thresholded.label=null;thresholded.color=color;thresholded.threshold=null;thresholded.originSeries=s;thresholded.data=[];var origpoints=datapoints.points,addCrossingPoints=s.lines.show;var threspoints=[];var newpoints=[];var m;for(i=0;i<origpoints.length;i+=ps){x=origpoints[i];y=origpoints[i+1];prevp=p;if(y<below)p=threspoints;else p=newpoints;if(addCrossingPoints&&prevp!=p&&x!=null&&i>0&&origpoints[i-ps]!=null){var interx=x+(below-y)*(x-origpoints[i-ps])/(y-origpoints[i-ps+1]);prevp.push(interx);prevp.push(below);for(m=2;m<ps;++m)prevp.push(origpoints[i+m]);p.push(null);p.push(null);for(m=2;m<ps;++m)p.push(origpoints[i+m]);p.push(interx);p.push(below);for(m=2;m<ps;++m)p.push(origpoints[i+m])}p.push(x);p.push(y);for(m=2;m<ps;++m)p.push(origpoints[i+m])}datapoints.points=newpoints;thresholded.datapoints.points=threspoints;if(thresholded.datapoints.points.length>0){var origIndex=$.inArray(s,plot.getData());plot.getData().splice(origIndex+1,0,thresholded)}}function processThresholds(plot,s,datapoints){if(!s.threshold)return;if(s.threshold instanceof Array){s.threshold.sort(function(a,b){return a.below-b.below});$(s.threshold).each(function(i,th){thresholdData(plot,s,datapoints,th.below,th.color)})}else{thresholdData(plot,s,datapoints,s.threshold.below,s.threshold.color)}}plot.hooks.processDatapoints.push(processThresholds)}$.plot.plugins.push({init:init,options:options,name:"threshold",version:"1.2"})})(jQuery);
+ static/js/jquery.flot.time.js view
@@ -0,0 +1,432 @@+/* Pretty handling of time axes.++Copyright (c) 2007-2014 IOLA and Ole Laursen.+Licensed under the MIT license.++Set axis.mode to "time" to enable. See the section "Time series data" in+API.txt for details.++*/++(function($) {++	var options = {+		xaxis: {+			timezone: null,		// "browser" for local to the client or timezone for timezone-js+			timeformat: null,	// format string to use+			twelveHourClock: false,	// 12 or 24 time in time mode+			monthNames: null	// list of names of months+		}+	};++	// round to nearby lower multiple of base++	function floorInBase(n, base) {+		return base * Math.floor(n / base);+	}++	// Returns a string with the date d formatted according to fmt.+	// A subset of the Open Group's strftime format is supported.++	function formatDate(d, fmt, monthNames, dayNames) {++		if (typeof d.strftime == "function") {+			return d.strftime(fmt);+		}++		var leftPad = function(n, pad) {+			n = "" + n;+			pad = "" + (pad == null ? "0" : pad);+			return n.length == 1 ? pad + n : n;+		};++		var r = [];+		var escape = false;+		var hours = d.getHours();+		var isAM = hours < 12;++		if (monthNames == null) {+			monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];+		}++		if (dayNames == null) {+			dayNames = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];+		}++		var hours12;++		if (hours > 12) {+			hours12 = hours - 12;+		} else if (hours == 0) {+			hours12 = 12;+		} else {+			hours12 = hours;+		}++		for (var i = 0; i < fmt.length; ++i) {++			var c = fmt.charAt(i);++			if (escape) {+				switch (c) {+					case 'a': c = "" + dayNames[d.getDay()]; break;+					case 'b': c = "" + monthNames[d.getMonth()]; break;+					case 'd': c = leftPad(d.getDate()); break;+					case 'e': c = leftPad(d.getDate(), " "); break;+					case 'h':	// For back-compat with 0.7; remove in 1.0+					case 'H': c = leftPad(hours); break;+					case 'I': c = leftPad(hours12); break;+					case 'l': c = leftPad(hours12, " "); break;+					case 'm': c = leftPad(d.getMonth() + 1); break;+					case 'M': c = leftPad(d.getMinutes()); break;+					// quarters not in Open Group's strftime specification+					case 'q':+						c = "" + (Math.floor(d.getMonth() / 3) + 1); break;+					case 'S': c = leftPad(d.getSeconds()); break;+					case 'y': c = leftPad(d.getFullYear() % 100); break;+					case 'Y': c = "" + d.getFullYear(); break;+					case 'p': c = (isAM) ? ("" + "am") : ("" + "pm"); break;+					case 'P': c = (isAM) ? ("" + "AM") : ("" + "PM"); break;+					case 'w': c = "" + d.getDay(); break;+				}+				r.push(c);+				escape = false;+			} else {+				if (c == "%") {+					escape = true;+				} else {+					r.push(c);+				}+			}+		}++		return r.join("");+	}++	// To have a consistent view of time-based data independent of which time+	// zone the client happens to be in we need a date-like object independent+	// of time zones.  This is done through a wrapper that only calls the UTC+	// versions of the accessor methods.++	function makeUtcWrapper(d) {++		function addProxyMethod(sourceObj, sourceMethod, targetObj, targetMethod) {+			sourceObj[sourceMethod] = function() {+				return targetObj[targetMethod].apply(targetObj, arguments);+			};+		};++		var utc = {+			date: d+		};++		// support strftime, if found++		if (d.strftime != undefined) {+			addProxyMethod(utc, "strftime", d, "strftime");+		}++		addProxyMethod(utc, "getTime", d, "getTime");+		addProxyMethod(utc, "setTime", d, "setTime");++		var props = ["Date", "Day", "FullYear", "Hours", "Milliseconds", "Minutes", "Month", "Seconds"];++		for (var p = 0; p < props.length; p++) {+			addProxyMethod(utc, "get" + props[p], d, "getUTC" + props[p]);+			addProxyMethod(utc, "set" + props[p], d, "setUTC" + props[p]);+		}++		return utc;+	};++	// select time zone strategy.  This returns a date-like object tied to the+	// desired timezone++	function dateGenerator(ts, opts) {+		if (opts.timezone == "browser") {+			return new Date(ts);+		} else if (!opts.timezone || opts.timezone == "utc") {+			return makeUtcWrapper(new Date(ts));+		} else if (typeof timezoneJS != "undefined" && typeof timezoneJS.Date != "undefined") {+			var d = new timezoneJS.Date();+			// timezone-js is fickle, so be sure to set the time zone before+			// setting the time.+			d.setTimezone(opts.timezone);+			d.setTime(ts);+			return d;+		} else {+			return makeUtcWrapper(new Date(ts));+		}+	}+	+	// map of app. size of time units in milliseconds++	var timeUnitSize = {+		"second": 1000,+		"minute": 60 * 1000,+		"hour": 60 * 60 * 1000,+		"day": 24 * 60 * 60 * 1000,+		"month": 30 * 24 * 60 * 60 * 1000,+		"quarter": 3 * 30 * 24 * 60 * 60 * 1000,+		"year": 365.2425 * 24 * 60 * 60 * 1000+	};++	// the allowed tick sizes, after 1 year we use+	// an integer algorithm++	var baseSpec = [+		[1, "second"], [2, "second"], [5, "second"], [10, "second"],+		[30, "second"], +		[1, "minute"], [2, "minute"], [5, "minute"], [10, "minute"],+		[30, "minute"], +		[1, "hour"], [2, "hour"], [4, "hour"],+		[8, "hour"], [12, "hour"],+		[1, "day"], [2, "day"], [3, "day"],+		[0.25, "month"], [0.5, "month"], [1, "month"],+		[2, "month"]+	];++	// we don't know which variant(s) we'll need yet, but generating both is+	// cheap++	var specMonths = baseSpec.concat([[3, "month"], [6, "month"],+		[1, "year"]]);+	var specQuarters = baseSpec.concat([[1, "quarter"], [2, "quarter"],+		[1, "year"]]);++	function init(plot) {+		plot.hooks.processOptions.push(function (plot, options) {+			$.each(plot.getAxes(), function(axisName, axis) {++				var opts = axis.options;++				if (opts.mode == "time") {+					axis.tickGenerator = function(axis) {++						var ticks = [];+						var d = dateGenerator(axis.min, opts);+						var minSize = 0;++						// make quarter use a possibility if quarters are+						// mentioned in either of these options++						var spec = (opts.tickSize && opts.tickSize[1] ===+							"quarter") ||+							(opts.minTickSize && opts.minTickSize[1] ===+							"quarter") ? specQuarters : specMonths;++						if (opts.minTickSize != null) {+							if (typeof opts.tickSize == "number") {+								minSize = opts.tickSize;+							} else {+								minSize = opts.minTickSize[0] * timeUnitSize[opts.minTickSize[1]];+							}+						}++						for (var i = 0; i < spec.length - 1; ++i) {+							if (axis.delta < (spec[i][0] * timeUnitSize[spec[i][1]]+											  + spec[i + 1][0] * timeUnitSize[spec[i + 1][1]]) / 2+								&& spec[i][0] * timeUnitSize[spec[i][1]] >= minSize) {+								break;+							}+						}++						var size = spec[i][0];+						var unit = spec[i][1];++						// special-case the possibility of several years++						if (unit == "year") {++							// if given a minTickSize in years, just use it,+							// ensuring that it's an integer++							if (opts.minTickSize != null && opts.minTickSize[1] == "year") {+								size = Math.floor(opts.minTickSize[0]);+							} else {++								var magn = Math.pow(10, Math.floor(Math.log(axis.delta / timeUnitSize.year) / Math.LN10));+								var norm = (axis.delta / timeUnitSize.year) / magn;++								if (norm < 1.5) {+									size = 1;+								} else if (norm < 3) {+									size = 2;+								} else if (norm < 7.5) {+									size = 5;+								} else {+									size = 10;+								}++								size *= magn;+							}++							// minimum size for years is 1++							if (size < 1) {+								size = 1;+							}+						}++						axis.tickSize = opts.tickSize || [size, unit];+						var tickSize = axis.tickSize[0];+						unit = axis.tickSize[1];++						var step = tickSize * timeUnitSize[unit];++						if (unit == "second") {+							d.setSeconds(floorInBase(d.getSeconds(), tickSize));+						} else if (unit == "minute") {+							d.setMinutes(floorInBase(d.getMinutes(), tickSize));+						} else if (unit == "hour") {+							d.setHours(floorInBase(d.getHours(), tickSize));+						} else if (unit == "month") {+							d.setMonth(floorInBase(d.getMonth(), tickSize));+						} else if (unit == "quarter") {+							d.setMonth(3 * floorInBase(d.getMonth() / 3,+								tickSize));+						} else if (unit == "year") {+							d.setFullYear(floorInBase(d.getFullYear(), tickSize));+						}++						// reset smaller components++						d.setMilliseconds(0);++						if (step >= timeUnitSize.minute) {+							d.setSeconds(0);+						}+						if (step >= timeUnitSize.hour) {+							d.setMinutes(0);+						}+						if (step >= timeUnitSize.day) {+							d.setHours(0);+						}+						if (step >= timeUnitSize.day * 4) {+							d.setDate(1);+						}+						if (step >= timeUnitSize.month * 2) {+							d.setMonth(floorInBase(d.getMonth(), 3));+						}+						if (step >= timeUnitSize.quarter * 2) {+							d.setMonth(floorInBase(d.getMonth(), 6));+						}+						if (step >= timeUnitSize.year) {+							d.setMonth(0);+						}++						var carry = 0;+						var v = Number.NaN;+						var prev;++						do {++							prev = v;+							v = d.getTime();+							ticks.push(v);++							if (unit == "month" || unit == "quarter") {+								if (tickSize < 1) {++									// a bit complicated - we'll divide the+									// month/quarter up but we need to take+									// care of fractions so we don't end up in+									// the middle of a day++									d.setDate(1);+									var start = d.getTime();+									d.setMonth(d.getMonth() ++										(unit == "quarter" ? 3 : 1));+									var end = d.getTime();+									d.setTime(v + carry * timeUnitSize.hour + (end - start) * tickSize);+									carry = d.getHours();+									d.setHours(0);+								} else {+									d.setMonth(d.getMonth() ++										tickSize * (unit == "quarter" ? 3 : 1));+								}+							} else if (unit == "year") {+								d.setFullYear(d.getFullYear() + tickSize);+							} else {+								d.setTime(v + step);+							}+						} while (v < axis.max && v != prev);++						return ticks;+					};++					axis.tickFormatter = function (v, axis) {++						var d = dateGenerator(v, axis.options);++						// first check global format++						if (opts.timeformat != null) {+							return formatDate(d, opts.timeformat, opts.monthNames, opts.dayNames);+						}++						// possibly use quarters if quarters are mentioned in+						// any of these places++						var useQuarters = (axis.options.tickSize &&+								axis.options.tickSize[1] == "quarter") ||+							(axis.options.minTickSize &&+								axis.options.minTickSize[1] == "quarter");++						var t = axis.tickSize[0] * timeUnitSize[axis.tickSize[1]];+						var span = axis.max - axis.min;+						var suffix = (opts.twelveHourClock) ? " %p" : "";+						var hourCode = (opts.twelveHourClock) ? "%I" : "%H";+						var fmt;++						if (t < timeUnitSize.minute) {+							fmt = hourCode + ":%M:%S" + suffix;+						} else if (t < timeUnitSize.day) {+							if (span < 2 * timeUnitSize.day) {+								fmt = hourCode + ":%M" + suffix;+							} else {+								fmt = "%b %d " + hourCode + ":%M" + suffix;+							}+						} else if (t < timeUnitSize.month) {+							fmt = "%b %d";+						} else if ((useQuarters && t < timeUnitSize.quarter) ||+							(!useQuarters && t < timeUnitSize.year)) {+							if (span < timeUnitSize.year) {+								fmt = "%b";+							} else {+								fmt = "%b %Y";+							}+						} else if (useQuarters && t < timeUnitSize.year) {+							if (span < timeUnitSize.year) {+								fmt = "Q%q";+							} else {+								fmt = "Q%q %Y";+							}+						} else {+							fmt = "%Y";+						}++						var rt = formatDate(d, fmt, opts.monthNames, opts.dayNames);++						return rt;+					};+				}+			});+		});+	}++	$.plot.plugins.push({+		init: init,+		options: options,+		name: 'time',+		version: '1.0'+	});++	// Time-axis support used to be in Flot core, which exposed the+	// formatDate function on the plot object.  Various plugins depend+	// on the function, so we need to re-expose it here.++	$.plot.formatDate = formatDate;+	$.plot.dateGenerator = dateGenerator;++})(jQuery);
+ static/js/jquery.flot.time.min.js view
@@ -0,0 +1,7 @@+/* Javascript plotting library for jQuery, version 0.8.3.++Copyright (c) 2007-2014 IOLA and Ole Laursen.+Licensed under the MIT license.++*/+(function($){var options={xaxis:{timezone:null,timeformat:null,twelveHourClock:false,monthNames:null}};function floorInBase(n,base){return base*Math.floor(n/base)}function formatDate(d,fmt,monthNames,dayNames){if(typeof d.strftime=="function"){return d.strftime(fmt)}var leftPad=function(n,pad){n=""+n;pad=""+(pad==null?"0":pad);return n.length==1?pad+n:n};var r=[];var escape=false;var hours=d.getHours();var isAM=hours<12;if(monthNames==null){monthNames=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]}if(dayNames==null){dayNames=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]}var hours12;if(hours>12){hours12=hours-12}else if(hours==0){hours12=12}else{hours12=hours}for(var i=0;i<fmt.length;++i){var c=fmt.charAt(i);if(escape){switch(c){case"a":c=""+dayNames[d.getDay()];break;case"b":c=""+monthNames[d.getMonth()];break;case"d":c=leftPad(d.getDate());break;case"e":c=leftPad(d.getDate()," ");break;case"h":case"H":c=leftPad(hours);break;case"I":c=leftPad(hours12);break;case"l":c=leftPad(hours12," ");break;case"m":c=leftPad(d.getMonth()+1);break;case"M":c=leftPad(d.getMinutes());break;case"q":c=""+(Math.floor(d.getMonth()/3)+1);break;case"S":c=leftPad(d.getSeconds());break;case"y":c=leftPad(d.getFullYear()%100);break;case"Y":c=""+d.getFullYear();break;case"p":c=isAM?""+"am":""+"pm";break;case"P":c=isAM?""+"AM":""+"PM";break;case"w":c=""+d.getDay();break}r.push(c);escape=false}else{if(c=="%"){escape=true}else{r.push(c)}}}return r.join("")}function makeUtcWrapper(d){function addProxyMethod(sourceObj,sourceMethod,targetObj,targetMethod){sourceObj[sourceMethod]=function(){return targetObj[targetMethod].apply(targetObj,arguments)}}var utc={date:d};if(d.strftime!=undefined){addProxyMethod(utc,"strftime",d,"strftime")}addProxyMethod(utc,"getTime",d,"getTime");addProxyMethod(utc,"setTime",d,"setTime");var props=["Date","Day","FullYear","Hours","Milliseconds","Minutes","Month","Seconds"];for(var p=0;p<props.length;p++){addProxyMethod(utc,"get"+props[p],d,"getUTC"+props[p]);addProxyMethod(utc,"set"+props[p],d,"setUTC"+props[p])}return utc}function dateGenerator(ts,opts){if(opts.timezone=="browser"){return new Date(ts)}else if(!opts.timezone||opts.timezone=="utc"){return makeUtcWrapper(new Date(ts))}else if(typeof timezoneJS!="undefined"&&typeof timezoneJS.Date!="undefined"){var d=new timezoneJS.Date;d.setTimezone(opts.timezone);d.setTime(ts);return d}else{return makeUtcWrapper(new Date(ts))}}var timeUnitSize={second:1e3,minute:60*1e3,hour:60*60*1e3,day:24*60*60*1e3,month:30*24*60*60*1e3,quarter:3*30*24*60*60*1e3,year:365.2425*24*60*60*1e3};var baseSpec=[[1,"second"],[2,"second"],[5,"second"],[10,"second"],[30,"second"],[1,"minute"],[2,"minute"],[5,"minute"],[10,"minute"],[30,"minute"],[1,"hour"],[2,"hour"],[4,"hour"],[8,"hour"],[12,"hour"],[1,"day"],[2,"day"],[3,"day"],[.25,"month"],[.5,"month"],[1,"month"],[2,"month"]];var specMonths=baseSpec.concat([[3,"month"],[6,"month"],[1,"year"]]);var specQuarters=baseSpec.concat([[1,"quarter"],[2,"quarter"],[1,"year"]]);function init(plot){plot.hooks.processOptions.push(function(plot,options){$.each(plot.getAxes(),function(axisName,axis){var opts=axis.options;if(opts.mode=="time"){axis.tickGenerator=function(axis){var ticks=[];var d=dateGenerator(axis.min,opts);var minSize=0;var spec=opts.tickSize&&opts.tickSize[1]==="quarter"||opts.minTickSize&&opts.minTickSize[1]==="quarter"?specQuarters:specMonths;if(opts.minTickSize!=null){if(typeof opts.tickSize=="number"){minSize=opts.tickSize}else{minSize=opts.minTickSize[0]*timeUnitSize[opts.minTickSize[1]]}}for(var i=0;i<spec.length-1;++i){if(axis.delta<(spec[i][0]*timeUnitSize[spec[i][1]]+spec[i+1][0]*timeUnitSize[spec[i+1][1]])/2&&spec[i][0]*timeUnitSize[spec[i][1]]>=minSize){break}}var size=spec[i][0];var unit=spec[i][1];if(unit=="year"){if(opts.minTickSize!=null&&opts.minTickSize[1]=="year"){size=Math.floor(opts.minTickSize[0])}else{var magn=Math.pow(10,Math.floor(Math.log(axis.delta/timeUnitSize.year)/Math.LN10));var norm=axis.delta/timeUnitSize.year/magn;if(norm<1.5){size=1}else if(norm<3){size=2}else if(norm<7.5){size=5}else{size=10}size*=magn}if(size<1){size=1}}axis.tickSize=opts.tickSize||[size,unit];var tickSize=axis.tickSize[0];unit=axis.tickSize[1];var step=tickSize*timeUnitSize[unit];if(unit=="second"){d.setSeconds(floorInBase(d.getSeconds(),tickSize))}else if(unit=="minute"){d.setMinutes(floorInBase(d.getMinutes(),tickSize))}else if(unit=="hour"){d.setHours(floorInBase(d.getHours(),tickSize))}else if(unit=="month"){d.setMonth(floorInBase(d.getMonth(),tickSize))}else if(unit=="quarter"){d.setMonth(3*floorInBase(d.getMonth()/3,tickSize))}else if(unit=="year"){d.setFullYear(floorInBase(d.getFullYear(),tickSize))}d.setMilliseconds(0);if(step>=timeUnitSize.minute){d.setSeconds(0)}if(step>=timeUnitSize.hour){d.setMinutes(0)}if(step>=timeUnitSize.day){d.setHours(0)}if(step>=timeUnitSize.day*4){d.setDate(1)}if(step>=timeUnitSize.month*2){d.setMonth(floorInBase(d.getMonth(),3))}if(step>=timeUnitSize.quarter*2){d.setMonth(floorInBase(d.getMonth(),6))}if(step>=timeUnitSize.year){d.setMonth(0)}var carry=0;var v=Number.NaN;var prev;do{prev=v;v=d.getTime();ticks.push(v);if(unit=="month"||unit=="quarter"){if(tickSize<1){d.setDate(1);var start=d.getTime();d.setMonth(d.getMonth()+(unit=="quarter"?3:1));var end=d.getTime();d.setTime(v+carry*timeUnitSize.hour+(end-start)*tickSize);carry=d.getHours();d.setHours(0)}else{d.setMonth(d.getMonth()+tickSize*(unit=="quarter"?3:1))}}else if(unit=="year"){d.setFullYear(d.getFullYear()+tickSize)}else{d.setTime(v+step)}}while(v<axis.max&&v!=prev);return ticks};axis.tickFormatter=function(v,axis){var d=dateGenerator(v,axis.options);if(opts.timeformat!=null){return formatDate(d,opts.timeformat,opts.monthNames,opts.dayNames)}var useQuarters=axis.options.tickSize&&axis.options.tickSize[1]=="quarter"||axis.options.minTickSize&&axis.options.minTickSize[1]=="quarter";var t=axis.tickSize[0]*timeUnitSize[axis.tickSize[1]];var span=axis.max-axis.min;var suffix=opts.twelveHourClock?" %p":"";var hourCode=opts.twelveHourClock?"%I":"%H";var fmt;if(t<timeUnitSize.minute){fmt=hourCode+":%M:%S"+suffix}else if(t<timeUnitSize.day){if(span<2*timeUnitSize.day){fmt=hourCode+":%M"+suffix}else{fmt="%b %d "+hourCode+":%M"+suffix}}else if(t<timeUnitSize.month){fmt="%b %d"}else if(useQuarters&&t<timeUnitSize.quarter||!useQuarters&&t<timeUnitSize.year){if(span<timeUnitSize.year){fmt="%b"}else{fmt="%b %Y"}}else if(useQuarters&&t<timeUnitSize.year){if(span<timeUnitSize.year){fmt="Q%q"}else{fmt="Q%q %Y"}}else{fmt="%Y"}var rt=formatDate(d,fmt,opts.monthNames,opts.dayNames);return rt}}})})}$.plot.plugins.push({init:init,options:options,name:"time",version:"1.0"});$.plot.formatDate=formatDate;$.plot.dateGenerator=dateGenerator})(jQuery);
+ static/js/jquery.flot.tooltip.js view
@@ -0,0 +1,409 @@+/*+ * jquery.flot.tooltip+ * + * description: easy-to-use tooltips for Flot charts+ * version: 0.7.1+ * author: Krzysztof Urbas @krzysu [myviews.pl]+ * website: https://github.com/krzysu/flot.tooltip+ * + * build on 2014-06-22+ * released under MIT License, 2012+*/ +// IE8 polyfill for Array.indexOf+if (!Array.prototype.indexOf) {+    Array.prototype.indexOf = function (searchElement, fromIndex) {+        if ( this === undefined || this === null ) {+            throw new TypeError( '"this" is null or not defined' );+        }+        var length = this.length >>> 0; // Hack to convert object.length to a UInt32+        fromIndex = +fromIndex || 0;+        if (Math.abs(fromIndex) === Infinity) {+            fromIndex = 0;+        }+        if (fromIndex < 0) {+            fromIndex += length;+            if (fromIndex < 0) {+                fromIndex = 0;+            }+        }++        for (;fromIndex < length; fromIndex++) {+            if (this[fromIndex] === searchElement) {+                return fromIndex;+            }+        }++        return -1;+    };+}++(function ($) {++    // plugin options, default values+    var defaultOptions = {+        tooltip: false,+        tooltipOpts: {+            content: "%s | X: %x | Y: %y",+            // allowed templates are:+            // %s -> series label,+            // %lx -> x axis label (requires flot-axislabels plugin https://github.com/markrcote/flot-axislabels),+            // %ly -> y axis label (requires flot-axislabels plugin https://github.com/markrcote/flot-axislabels),+            // %x -> X value,+            // %y -> Y value,+            // %x.2 -> precision of X value,+            // %p -> percent+            xDateFormat: null,+            yDateFormat: null,+            monthNames: null,+            dayNames: null,+            shifts: {+                x: 10,+                y: 20+            },+            defaultTheme: true,++            // callbacks+            onHover: function(flotItem, $tooltipEl) {}+        }+    };++    // object+    var FlotTooltip = function(plot) {++        // variables+        this.tipPosition = {x: 0, y: 0};++        this.init(plot);+    };++    // main plugin function+    FlotTooltip.prototype.init = function(plot) {++        var that = this;++        // detect other flot plugins+        var plotPluginsLength = $.plot.plugins.length;+        this.plotPlugins = [];++        if (plotPluginsLength) {+            for (var p = 0; p < plotPluginsLength; p++) {+                this.plotPlugins.push($.plot.plugins[p].name);+            }+        }++        plot.hooks.bindEvents.push(function (plot, eventHolder) {++            // get plot options+            that.plotOptions = plot.getOptions();++            // if not enabled return+            if (that.plotOptions.tooltip === false || typeof that.plotOptions.tooltip === 'undefined') return;++            // shortcut to access tooltip options+            that.tooltipOptions = that.plotOptions.tooltipOpts;++            // create tooltip DOM element+            var $tip = that.getDomElement();++            // bind event+            $( plot.getPlaceholder() ).bind("plothover", plothover);++            $(eventHolder).bind('mousemove', mouseMove);+        });++        plot.hooks.shutdown.push(function (plot, eventHolder){+            $(plot.getPlaceholder()).unbind("plothover", plothover);+            $(eventHolder).unbind("mousemove", mouseMove);+        });++        function mouseMove(e){+            var pos = {};+            pos.x = e.pageX;+            pos.y = e.pageY;+            that.updateTooltipPosition(pos);+        }++        function plothover(event, pos, item) {+            var $tip = that.getDomElement();+            if (item) {+                var tipText;++                // convert tooltip content template to real tipText+                tipText = that.stringFormat(that.tooltipOptions.content, item);++                $tip.html( tipText );+                that.updateTooltipPosition({ x: pos.pageX, y: pos.pageY });+                $tip.css({+                        left: that.tipPosition.x + that.tooltipOptions.shifts.x,+                        top: that.tipPosition.y + that.tooltipOptions.shifts.y+                    })+                    .show();++                // run callback+                if(typeof that.tooltipOptions.onHover === 'function') {+                    that.tooltipOptions.onHover(item, $tip);+                }+            }+            else {+                $tip.hide().html('');+            }+        }+    };++    /**+     * get or create tooltip DOM element+     * @return jQuery object+     */+    FlotTooltip.prototype.getDomElement = function() {+        var $tip = $('#flotTip');++        if( $tip.length === 0 ){+            $tip = $('<div />').attr('id', 'flotTip');+            $tip.appendTo('body').hide().css({position: 'absolute'});++            if(this.tooltipOptions.defaultTheme) {+                $tip.css({+                    'background': '#fff',+                    'z-index': '1040',+                    'padding': '0.4em 0.6em',+                    'border-radius': '0.5em',+                    'font-size': '0.8em',+                    'border': '1px solid #111',+                    'display': 'none',+                    'white-space': 'nowrap'+                });+            }+        }++        return $tip;+    };++    // as the name says+    FlotTooltip.prototype.updateTooltipPosition = function(pos) {+        var $tip = $('#flotTip');++        var totalTipWidth = $tip.outerWidth() + this.tooltipOptions.shifts.x;+        var totalTipHeight = $tip.outerHeight() + this.tooltipOptions.shifts.y;+        if ((pos.x - $(window).scrollLeft()) > ($(window).innerWidth() - totalTipWidth)) {+            pos.x -= totalTipWidth;+        }+        if ((pos.y - $(window).scrollTop()) > ($(window).innerHeight() - totalTipHeight)) {+            pos.y -= totalTipHeight;+        }+        this.tipPosition.x = pos.x;+        this.tipPosition.y = pos.y;+    };++    /**+     * core function, create tooltip content+     * @param  {string} content - template with tooltip content+     * @param  {object} item - Flot item+     * @return {string} real tooltip content for current item+     */+    FlotTooltip.prototype.stringFormat = function(content, item) {++        var percentPattern = /%p\.{0,1}(\d{0,})/;+        var seriesPattern = /%s/;+        var xLabelPattern = /%lx/; // requires flot-axislabels plugin https://github.com/markrcote/flot-axislabels, will be ignored if plugin isn't loaded+        var yLabelPattern = /%ly/; // requires flot-axislabels plugin https://github.com/markrcote/flot-axislabels, will be ignored if plugin isn't loaded+        var xPattern = /%x\.{0,1}(\d{0,})/;+        var yPattern = /%y\.{0,1}(\d{0,})/;+        var xPatternWithoutPrecision = "%x";+        var yPatternWithoutPrecision = "%y";+        var customTextPattern = "%ct";++        var x, y, customText;++        // for threshold plugin we need to read data from different place+        if (typeof item.series.threshold !== "undefined") {+            x = item.datapoint[0];+            y = item.datapoint[1];+            customText = item.datapoint[2];+        } else if (typeof item.series.lines !== "undefined" && item.series.lines.steps) {+            x = item.series.datapoints.points[item.dataIndex * 2];+            y = item.series.datapoints.points[item.dataIndex * 2 + 1];+            // TODO: where to find custom text in this variant?+            customText = "";+        } else {+            x = item.series.data[item.dataIndex][0];+            y = item.series.data[item.dataIndex][1];+            customText = item.series.data[item.dataIndex][2];+        }++        // I think this is only in case of threshold plugin+        if (item.series.label === null && item.series.originSeries) {+            item.series.label = item.series.originSeries.label;+        }++        // if it is a function callback get the content string+        if( typeof(content) === 'function' ) {+            content = content(item.series.label, x, y, item);+        }++        // percent match for pie charts+        if( typeof (item.series.percent) !== 'undefined' ) {+            content = this.adjustValPrecision(percentPattern, content, item.series.percent);+        }++        // series match+        if( typeof(item.series.label) !== 'undefined' ) {+            content = content.replace(seriesPattern, item.series.label);+        }+        else {+            //remove %s if label is undefined+            content = content.replace(seriesPattern, "");+        }++        // x axis label match+        if( this.hasAxisLabel('xaxis', item) ) {+            content = content.replace(xLabelPattern, item.series.xaxis.options.axisLabel);+        }+        else {+            //remove %lx if axis label is undefined or axislabels plugin not present+            content = content.replace(xLabelPattern, "");+        }++        // y axis label match+        if( this.hasAxisLabel('yaxis', item) ) {+            content = content.replace(yLabelPattern, item.series.yaxis.options.axisLabel);+        }+        else {+            //remove %ly if axis label is undefined or axislabels plugin not present+            content = content.replace(yLabelPattern, "");+        }++        // time mode axes with custom dateFormat+        if(this.isTimeMode('xaxis', item) && this.isXDateFormat(item)) {+            content = content.replace(xPattern, this.timestampToDate(x, this.tooltipOptions.xDateFormat, item.series.xaxis.options));+        }++        if(this.isTimeMode('yaxis', item) && this.isYDateFormat(item)) {+            content = content.replace(yPattern, this.timestampToDate(y, this.tooltipOptions.yDateFormat, item.series.yaxis.options));+        }++        // set precision if defined+        if(typeof x === 'number') {+            content = this.adjustValPrecision(xPattern, content, x);+        }+        if(typeof y === 'number') {+            content = this.adjustValPrecision(yPattern, content, y);+        }++        // change x from number to given label, if given+        if(typeof item.series.xaxis.ticks !== 'undefined') {++            var ticks;+            if(this.hasRotatedXAxisTicks(item)) {+                // xaxis.ticks will be an empty array if tickRotor is being used, but the values are available in rotatedTicks+                ticks = 'rotatedTicks';+            }+            else {+                ticks = 'ticks';+            }++            // see https://github.com/krzysu/flot.tooltip/issues/65+            var tickIndex = item.dataIndex + item.seriesIndex;++            if(item.series.xaxis[ticks].length > tickIndex && !this.isTimeMode('xaxis', item)) {+                var valueX = (this.isCategoriesMode('xaxis', item)) ? item.series.xaxis[ticks][tickIndex].label : item.series.xaxis[ticks][tickIndex].v;+                if (valueX === x) {+                    content = content.replace(xPattern, item.series.xaxis[ticks][tickIndex].label);+                }+            }+        }++        // change y from number to given label, if given+        if(typeof item.series.yaxis.ticks !== 'undefined') {+            for (var index in item.series.yaxis.ticks) {+                if (item.series.yaxis.ticks.hasOwnProperty(index)) {+                    var valueY = (this.isCategoriesMode('yaxis', item)) ? item.series.yaxis.ticks[index].label : item.series.yaxis.ticks[index].v;+                    if (valueY === y) {+                        content = content.replace(yPattern, item.series.yaxis.ticks[index].label);+                    }+                }+            }+        }++        // if no value customization, use tickFormatter by default+        if(typeof item.series.xaxis.tickFormatter !== 'undefined') {+            //escape dollar+            content = content.replace(xPatternWithoutPrecision, item.series.xaxis.tickFormatter(x, item.series.xaxis).replace(/\$/g, '$$'));+        }+        if(typeof item.series.yaxis.tickFormatter !== 'undefined') {+            //escape dollar+            content = content.replace(yPatternWithoutPrecision, item.series.yaxis.tickFormatter(y, item.series.yaxis).replace(/\$/g, '$$'));+        }++        if(customText) {+            content = content.replace(customTextPattern, customText);+        }++        return content;+    };++    // helpers just for readability+    FlotTooltip.prototype.isTimeMode = function(axisName, item) {+        return (typeof item.series[axisName].options.mode !== 'undefined' && item.series[axisName].options.mode === 'time');+    };++    FlotTooltip.prototype.isXDateFormat = function(item) {+        return (typeof this.tooltipOptions.xDateFormat !== 'undefined' && this.tooltipOptions.xDateFormat !== null);+    };++    FlotTooltip.prototype.isYDateFormat = function(item) {+        return (typeof this.tooltipOptions.yDateFormat !== 'undefined' && this.tooltipOptions.yDateFormat !== null);+    };++    FlotTooltip.prototype.isCategoriesMode = function(axisName, item) {+        return (typeof item.series[axisName].options.mode !== 'undefined' && item.series[axisName].options.mode === 'categories');+    };++    //+    FlotTooltip.prototype.timestampToDate = function(tmst, dateFormat, options) {+        var theDate = $.plot.dateGenerator(tmst, options);+        return $.plot.formatDate(theDate, dateFormat, this.tooltipOptions.monthNames, this.tooltipOptions.dayNames);+    };++    //+    FlotTooltip.prototype.adjustValPrecision = function(pattern, content, value) {++        var precision;+        var matchResult = content.match(pattern);+        if( matchResult !== null ) {+            if(RegExp.$1 !== '') {+                precision = RegExp.$1;+                value = value.toFixed(precision);++                // only replace content if precision exists, in other case use thickformater+                content = content.replace(pattern, value);+            }+        }+        return content;+    };++    // other plugins detection below++    // check if flot-axislabels plugin (https://github.com/markrcote/flot-axislabels) is used and that an axis label is given+    FlotTooltip.prototype.hasAxisLabel = function(axisName, item) {+        return (this.plotPlugins.indexOf('axisLabels') !== -1 && typeof item.series[axisName].options.axisLabel !== 'undefined' && item.series[axisName].options.axisLabel.length > 0);+    };++    // check whether flot-tickRotor, a plugin which allows rotation of X-axis ticks, is being used+    FlotTooltip.prototype.hasRotatedXAxisTicks = function(item) {+        return ($.grep($.plot.plugins, function(p){ return p.name === "tickRotor"; }).length === 1 && typeof item.series.xaxis.rotatedTicks !== 'undefined');+    };++    //+    var init = function(plot) {+      new FlotTooltip(plot);+    };++    // define Flot plugin+    $.plot.plugins.push({+        init: init,+        options: defaultOptions,+        name: 'tooltip',+        version: '0.6.7'+    });++})(jQuery);
+ static/js/jquery.flot.tooltip.min.js view
@@ -0,0 +1,12 @@+/*+ * jquery.flot.tooltip+ * + * description: easy-to-use tooltips for Flot charts+ * version: 0.7.1+ * author: Krzysztof Urbas @krzysu [myviews.pl]+ * website: https://github.com/krzysu/flot.tooltip+ * + * build on 2014-06-22+ * released under MIT License, 2012+*/ +Array.prototype.indexOf||(Array.prototype.indexOf=function(t,i){if(void 0===this||null===this)throw new TypeError('"this" is null or not defined');var e=this.length>>>0;for(i=+i||0,1/0===Math.abs(i)&&(i=0),0>i&&(i+=e,0>i&&(i=0));e>i;i++)if(this[i]===t)return i;return-1}),function(t){var i={tooltip:!1,tooltipOpts:{content:"%s | X: %x | Y: %y",xDateFormat:null,yDateFormat:null,monthNames:null,dayNames:null,shifts:{x:10,y:20},defaultTheme:!0,onHover:function(){}}},e=function(t){this.tipPosition={x:0,y:0},this.init(t)};e.prototype.init=function(i){function e(t){var i={};i.x=t.pageX,i.y=t.pageY,o.updateTooltipPosition(i)}function s(t,i,e){var s=o.getDomElement();if(e){var a;a=o.stringFormat(o.tooltipOptions.content,e),s.html(a),o.updateTooltipPosition({x:i.pageX,y:i.pageY}),s.css({left:o.tipPosition.x+o.tooltipOptions.shifts.x,top:o.tipPosition.y+o.tooltipOptions.shifts.y}).show(),"function"==typeof o.tooltipOptions.onHover&&o.tooltipOptions.onHover(e,s)}else s.hide().html("")}var o=this,a=t.plot.plugins.length;if(this.plotPlugins=[],a)for(var n=0;a>n;n++)this.plotPlugins.push(t.plot.plugins[n].name);i.hooks.bindEvents.push(function(i,a){o.plotOptions=i.getOptions(),o.plotOptions.tooltip!==!1&&void 0!==o.plotOptions.tooltip&&(o.tooltipOptions=o.plotOptions.tooltipOpts,o.getDomElement(),t(i.getPlaceholder()).bind("plothover",s),t(a).bind("mousemove",e))}),i.hooks.shutdown.push(function(i,o){t(i.getPlaceholder()).unbind("plothover",s),t(o).unbind("mousemove",e)})},e.prototype.getDomElement=function(){var i=t("#flotTip");return 0===i.length&&(i=t("<div />").attr("id","flotTip"),i.appendTo("body").hide().css({position:"absolute"}),this.tooltipOptions.defaultTheme&&i.css({background:"#fff","z-index":"1040",padding:"0.4em 0.6em","border-radius":"0.5em","font-size":"0.8em",border:"1px solid #111",display:"none","white-space":"nowrap"})),i},e.prototype.updateTooltipPosition=function(i){var e=t("#flotTip"),s=e.outerWidth()+this.tooltipOptions.shifts.x,o=e.outerHeight()+this.tooltipOptions.shifts.y;i.x-t(window).scrollLeft()>t(window).innerWidth()-s&&(i.x-=s),i.y-t(window).scrollTop()>t(window).innerHeight()-o&&(i.y-=o),this.tipPosition.x=i.x,this.tipPosition.y=i.y},e.prototype.stringFormat=function(t,i){var e,s,o,a=/%p\.{0,1}(\d{0,})/,n=/%s/,r=/%lx/,p=/%ly/,l=/%x\.{0,1}(\d{0,})/,d=/%y\.{0,1}(\d{0,})/,x="%x",h="%y",u="%ct";if(i.series.threshold!==void 0?(e=i.datapoint[0],s=i.datapoint[1],o=i.datapoint[2]):i.series.lines!==void 0&&i.series.lines.steps?(e=i.series.datapoints.points[2*i.dataIndex],s=i.series.datapoints.points[2*i.dataIndex+1],o=""):(e=i.series.data[i.dataIndex][0],s=i.series.data[i.dataIndex][1],o=i.series.data[i.dataIndex][2]),null===i.series.label&&i.series.originSeries&&(i.series.label=i.series.originSeries.label),"function"==typeof t&&(t=t(i.series.label,e,s,i)),i.series.percent!==void 0&&(t=this.adjustValPrecision(a,t,i.series.percent)),t=i.series.label!==void 0?t.replace(n,i.series.label):t.replace(n,""),t=this.hasAxisLabel("xaxis",i)?t.replace(r,i.series.xaxis.options.axisLabel):t.replace(r,""),t=this.hasAxisLabel("yaxis",i)?t.replace(p,i.series.yaxis.options.axisLabel):t.replace(p,""),this.isTimeMode("xaxis",i)&&this.isXDateFormat(i)&&(t=t.replace(l,this.timestampToDate(e,this.tooltipOptions.xDateFormat,i.series.xaxis.options))),this.isTimeMode("yaxis",i)&&this.isYDateFormat(i)&&(t=t.replace(d,this.timestampToDate(s,this.tooltipOptions.yDateFormat,i.series.yaxis.options))),"number"==typeof e&&(t=this.adjustValPrecision(l,t,e)),"number"==typeof s&&(t=this.adjustValPrecision(d,t,s)),i.series.xaxis.ticks!==void 0){var c;c=this.hasRotatedXAxisTicks(i)?"rotatedTicks":"ticks";var m=i.dataIndex+i.seriesIndex;if(i.series.xaxis[c].length>m&&!this.isTimeMode("xaxis",i)){var f=this.isCategoriesMode("xaxis",i)?i.series.xaxis[c][m].label:i.series.xaxis[c][m].v;f===e&&(t=t.replace(l,i.series.xaxis[c][m].label))}}if(i.series.yaxis.ticks!==void 0)for(var y in i.series.yaxis.ticks)if(i.series.yaxis.ticks.hasOwnProperty(y)){var v=this.isCategoriesMode("yaxis",i)?i.series.yaxis.ticks[y].label:i.series.yaxis.ticks[y].v;v===s&&(t=t.replace(d,i.series.yaxis.ticks[y].label))}return i.series.xaxis.tickFormatter!==void 0&&(t=t.replace(x,i.series.xaxis.tickFormatter(e,i.series.xaxis).replace(/\$/g,"$$"))),i.series.yaxis.tickFormatter!==void 0&&(t=t.replace(h,i.series.yaxis.tickFormatter(s,i.series.yaxis).replace(/\$/g,"$$"))),o&&(t=t.replace(u,o)),t},e.prototype.isTimeMode=function(t,i){return i.series[t].options.mode!==void 0&&"time"===i.series[t].options.mode},e.prototype.isXDateFormat=function(){return this.tooltipOptions.xDateFormat!==void 0&&null!==this.tooltipOptions.xDateFormat},e.prototype.isYDateFormat=function(){return this.tooltipOptions.yDateFormat!==void 0&&null!==this.tooltipOptions.yDateFormat},e.prototype.isCategoriesMode=function(t,i){return i.series[t].options.mode!==void 0&&"categories"===i.series[t].options.mode},e.prototype.timestampToDate=function(i,e,s){var o=t.plot.dateGenerator(i,s);return t.plot.formatDate(o,e,this.tooltipOptions.monthNames,this.tooltipOptions.dayNames)},e.prototype.adjustValPrecision=function(t,i,e){var s,o=i.match(t);return null!==o&&""!==RegExp.$1&&(s=RegExp.$1,e=e.toFixed(s),i=i.replace(t,e)),i},e.prototype.hasAxisLabel=function(t,i){return-1!==this.plotPlugins.indexOf("axisLabels")&&i.series[t].options.axisLabel!==void 0&&i.series[t].options.axisLabel.length>0},e.prototype.hasRotatedXAxisTicks=function(i){return 1===t.grep(t.plot.plugins,function(t){return"tickRotor"===t.name}).length&&i.series.xaxis.rotatedTicks!==void 0};var s=function(t){new e(t)};t.plot.plugins.push({init:s,options:i,name:"tooltip",version:"0.6.7"})}(jQuery);
+ static/js/jquery.hotkeys.js view
@@ -0,0 +1,102 @@+/*+ * jQuery Hotkeys Plugin+ * Copyright 2010, John Resig+ * Dual licensed under the MIT or GPL Version 2 licenses.+ *+ * Based upon the plugin by Tzury Bar Yochay:+ * http://github.com/tzuryby/hotkeys+ *+ * Original idea by:+ * Binny V A, http://www.openjs.com/scripts/events/keyboard_shortcuts/+*/++/*+ * One small change is: now keys are passed by object { keys: '...' }+ * Might be useful, when you want to pass some other data to your handler+ */++(function(jQuery){++	jQuery.hotkeys = {+		version: "0.8",++		specialKeys: {+			8: "backspace", 9: "tab", 10: "return", 13: "return", 16: "shift", 17: "ctrl", 18: "alt", 19: "pause",+			20: "capslock", 27: "esc", 32: "space", 33: "pageup", 34: "pagedown", 35: "end", 36: "home",+			37: "left", 38: "up", 39: "right", 40: "down", 45: "insert", 46: "del", 59: ";", 61: "=",+			96: "0", 97: "1", 98: "2", 99: "3", 100: "4", 101: "5", 102: "6", 103: "7",+			104: "8", 105: "9", 106: "*", 107: "+", 109: "-", 110: ".", 111 : "/",+			112: "f1", 113: "f2", 114: "f3", 115: "f4", 116: "f5", 117: "f6", 118: "f7", 119: "f8",+			120: "f9", 121: "f10", 122: "f11", 123: "f12", 144: "numlock", 145: "scroll", 173: "-", 186: ";", 187: "=",+			188: ",", 189: "-", 190: ".", 191: "/", 192: "`", 219: "[", 220: "\\", 221: "]", 222: "'"+		},++		shiftNums: {+			"`": "~", "1": "!", "2": "@", "3": "#", "4": "$", "5": "%", "6": "^", "7": "&",+			"8": "*", "9": "(", "0": ")", "-": "_", "=": "+", ";": ": ", "'": "\"", ",": "<",+			".": ">",  "/": "?",  "\\": "|"+		}+	};++	function keyHandler( handleObj ) {+		if ( typeof handleObj.data === "string" ) {+			handleObj.data = { keys: handleObj.data };+		}++		// Only care when a possible input has been specified+		if ( !handleObj.data || !handleObj.data.keys || typeof handleObj.data.keys !== "string" ) {+			return;+		}++		var origHandler = handleObj.handler,+			keys = handleObj.data.keys.toLowerCase().split(" "),+			textAcceptingInputTypes = ["text", "password", "number", "email", "url", "range", "date", "month", "week",+        "time", "datetime", "datetime-local", "search", "color", "tel"];++		handleObj.handler = function( event ) {+			// Don't fire in text-accepting inputs that we didn't directly bind to+			if ( this !== event.target && (/textarea|select/i.test( event.target.nodeName ) ||+				jQuery.inArray(event.target.type, textAcceptingInputTypes) > -1 ) ) {+				return;+			}++			var special = jQuery.hotkeys.specialKeys[ event.keyCode ],+				character = String.fromCharCode( event.which ).toLowerCase(),+				modif = "", possible = {};++      jQuery.each([ "alt", "ctrl", "meta", "shift" ], function(index, specialKey) {+        if (event[specialKey + 'Key'] && special !== specialKey) {+          modif += specialKey + '+';+        }+      });+++      modif = modif.replace('alt+ctrl+meta+shift', 'hyper');++			if ( special ) {+				possible[ modif + special ] = true;+			}++			if ( character ) {+				possible[ modif + character ] = true;+				possible[ modif + jQuery.hotkeys.shiftNums[ character ] ] = true;++				// "$" can be triggered as "Shift+4" or "Shift+$" or just "$"+				if ( modif === "shift+" ) {+					possible[ jQuery.hotkeys.shiftNums[ character ] ] = true;+				}+			}++			for ( var i = 0, l = keys.length; i < l; i++ ) {+				if ( possible[ keys[i] ] ) {+					return origHandler.apply( this, arguments );+				}+			}+		};+	}++	jQuery.each([ "keydown", "keyup", "keypress" ], function() {+		jQuery.event.special[ this ] = { add: keyHandler };+	});++})( this.jQuery );
+ static/js/jquery.min.js view
@@ -0,0 +1,4 @@+/*! jQuery v2.1.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */+!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l=a.document,m="2.1.1",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!n.isArray(a)&&a-parseFloat(a)>=0},isPlainObject:function(a){return"object"!==n.type(a)||a.nodeType||n.isWindow(a)?!1:a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=l.createElement("script"),b.text=a,l.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:k}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+-new Date,v=a.document,w=0,x=0,y=gb(),z=gb(),A=gb(),B=function(a,b){return a===b&&(l=!0),0},C="undefined",D=1<<31,E={}.hasOwnProperty,F=[],G=F.pop,H=F.push,I=F.push,J=F.slice,K=F.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",N="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=N.replace("w","w#"),P="\\["+M+"*("+N+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+O+"))|)"+M+"*\\]",Q=":("+N+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+P+")*)|.*)\\)|)",R=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),S=new RegExp("^"+M+"*,"+M+"*"),T=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),V=new RegExp(Q),W=new RegExp("^"+O+"$"),X={ID:new RegExp("^#("+N+")"),CLASS:new RegExp("^\\.("+N+")"),TAG:new RegExp("^("+N.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+Q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{I.apply(F=J.call(v.childNodes),v.childNodes),F[v.childNodes.length].nodeType}catch(eb){I={apply:F.length?function(a,b){H.apply(a,J.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],!a||"string"!=typeof a)return d;if(1!==(k=b.nodeType)&&9!==k)return[];if(p&&!e){if(f=_.exec(a))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return I.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return I.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=9===k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+qb(o[l]);w=ab.test(a)&&ob(b.parentNode)||b,x=o.join(",")}if(x)try{return I.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function gb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function hb(a){return a[u]=!0,a}function ib(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function jb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function kb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||D)-(~a.sourceIndex||D);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function lb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function nb(a){return hb(function(b){return b=+b,hb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function ob(a){return a&&typeof a.getElementsByTagName!==C&&a}c=fb.support={},f=fb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fb.setDocument=function(a){var b,e=a?a.ownerDocument||a:v,g=e.defaultView;return e!==n&&9===e.nodeType&&e.documentElement?(n=e,o=e.documentElement,p=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){m()},!1):g.attachEvent&&g.attachEvent("onunload",function(){m()})),c.attributes=ib(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ib(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(e.getElementsByClassName)&&ib(function(a){return a.innerHTML="<div class='a'></div><div class='a i'></div>",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=ib(function(a){return o.appendChild(a).id=u,!e.getElementsByName||!e.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==C&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=typeof a.getAttributeNode!==C&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==C?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==C&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(e.querySelectorAll))&&(ib(function(a){a.innerHTML="<select msallowclip=''><option selected=''></option></select>",a.querySelectorAll("[msallowclip^='']").length&&q.push("[*^$]="+M+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+M+"*(?:value|"+L+")"),a.querySelectorAll(":checked").length||q.push(":checked")}),ib(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+M+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ib(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",Q)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===v&&t(v,a)?-1:b===e||b.ownerDocument===v&&t(v,b)?1:k?K.call(k,a)-K.call(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],i=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:k?K.call(k,a)-K.call(k,b):0;if(f===g)return kb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?kb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},e):n},fb.matches=function(a,b){return fb(a,null,null,b)},fb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fb(b,n,null,[a]).length>0},fb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&E.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fb.selectors={cacheLength:50,createPseudo:hb,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+M+")"+a+"("+M+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==C&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?hb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=K.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:hb(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?hb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:hb(function(a){return function(b){return fb(a,b).length>0}}),contains:hb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:hb(function(a){return W.test(a||"")||fb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:nb(function(){return[0]}),last:nb(function(a,b){return[b-1]}),eq:nb(function(a,b,c){return[0>c?c+b:c]}),even:nb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:nb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:nb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:nb(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=lb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=mb(b);function pb(){}pb.prototype=d.filters=d.pseudos,d.setFilters=new pb,g=fb.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?fb.error(a):z(a,i).slice(0)};function qb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function rb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function sb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function tb(a,b,c){for(var d=0,e=b.length;e>d;d++)fb(a,b[d],c);return c}function ub(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function vb(a,b,c,d,e,f){return d&&!d[u]&&(d=vb(d)),e&&!e[u]&&(e=vb(e,f)),hb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||tb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ub(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ub(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?K.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ub(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):I.apply(g,r)})}function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=rb(function(a){return a===b},h,!0),l=rb(function(a){return K.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>i;i++)if(c=d.relative[a[i].type])m=[rb(sb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return vb(i>1&&sb(m),i>1&&qb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&wb(a.slice(i,e)),f>e&&wb(a=a.slice(e)),f>e&&qb(a))}m.push(c)}return sb(m)}function xb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=G.call(i));s=ub(s)}I.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&fb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?hb(f):f}return h=fb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xb(e,d)),f.selector=a}return f},i=fb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&ob(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qb(j),!a)return I.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&ob(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ib(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ib(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||jb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ib(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||jb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ib(function(a){return null==a.getAttribute("disabled")})||jb(L,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fb}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return g.call(b,a)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:l,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=l.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=l,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};A.prototype=n.fn,y=n(l);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?g.call(n(a),this[0]):g.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(C[a]||n.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return n.each(a.match(E)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!0,g=e||0,e=0,f=h.length,d=!0;h&&f>g;g++)if(h[g].apply(l[0],l[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,h&&(i?i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&n.each(arguments,function(a,b){var c;while((c=n.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],f=0,this},disable:function(){return h=i=b=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(H.resolveWith(l,[n]),n.fn.triggerHandler&&(n(l).triggerHandler("ready"),n(l).off("ready"))))}});function I(){l.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),n.ready()}n.ready.promise=function(b){return H||(H=n.Deferred(),"complete"===l.readyState?setTimeout(n.ready):(l.addEventListener("DOMContentLoaded",I,!1),a.addEventListener("load",I,!1))),H.promise(b)},n.ready.promise();var J=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};n.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=n.expando+Math.random()}K.uid=1,K.accepts=n.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,n.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(n.isEmptyObject(f))n.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!n.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return M.hasData(a)||L.hasData(a)},data:function(a,b,c){return M.access(a,b,c)},removeData:function(a,b){M.remove(a,b)+},_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=n.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||n.isArray(c)?d=L.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return L.get(a,c)||L.access(a,c,{empty:n.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=L.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var Q=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,R=["Top","Right","Bottom","Left"],S=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)},T=/^(?:checkbox|radio)$/i;!function(){var a=l.createDocumentFragment(),b=a.appendChild(l.createElement("div")),c=l.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";k.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|pointer|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return l.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof n!==U&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,m,o,p=[d||l],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||l,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+n.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=r.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),o=n.event.special[q]||{},e||!o.trigger||o.trigger.apply(d,c)!==!1)){if(!e&&!o.noBubble&&!n.isWindow(d)){for(i=o.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||l)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:o.bindType||q,m=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),m&&m.apply(g,c),m=k&&g[k],m&&m.apply&&n.acceptData(g)&&(b.result=m.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||o._default&&o._default.apply(p.pop(),c)!==!1||!n.acceptData(d)||k&&n.isFunction(d[q])&&!n.isWindow(d)&&(h=d[k],h&&(d[k]=null),n.event.triggered=q,d[q](),n.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>=0:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button;return null==a.pageX&&null!=b.clientX&&(c=a.target.ownerDocument||l,d=c.documentElement,e=c.body,a.pageX=b.clientX+(d&&d.scrollLeft||e&&e.scrollLeft||0)-(d&&d.clientLeft||e&&e.clientLeft||0),a.pageY=b.clientY+(d&&d.scrollTop||e&&e.scrollTop||0)-(d&&d.clientTop||e&&e.clientTop||0)),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},fix:function(a){if(a[n.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=W.test(e)?this.mouseHooks:V.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new n.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=l),3===a.target.nodeType&&(a.target=a.target.parentNode),g.filter?g.filter(a,f):a},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==_()&&this.focus?(this.focus(),!1):void 0},delegateType:"focusin"},blur:{trigger:function(){return this===_()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return"checkbox"===this.type&&this.click&&n.nodeName(this,"input")?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=n.extend(new n.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?n.event.trigger(e,null,b):n.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?Z:$):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={isDefaultPrevented:$,isPropagationStopped:$,isImmediatePropagationStopped:$,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=Z,a&&a.preventDefault&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=Z,a&&a.stopPropagation&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=Z,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!n.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.focusinBubbles||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a),!0)};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=L.access(d,b);e||d.addEventListener(a,c,!0),L.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=L.access(d,b)-1;e?L.access(d,b,e):(d.removeEventListener(a,c,!0),L.remove(d,b))}}}),n.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(g in a)this.on(g,b,c,a[g],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=$;else if(!d)return this;return 1===e&&(f=d,d=function(a){return n().off(a),f.apply(this,arguments)},d.guid=f.guid||(f.guid=n.guid++)),this.each(function(){n.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=$),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});var ab=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bb=/<([\w:]+)/,cb=/<|&#?\w+;/,db=/<(?:script|style|link)/i,eb=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/^$|\/(?:java|ecma)script/i,gb=/^true\/(.*)/,hb=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,ib={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ib.optgroup=ib.option,ib.tbody=ib.tfoot=ib.colgroup=ib.caption=ib.thead,ib.th=ib.td;function jb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function kb(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function lb(a){var b=gb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function mb(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function nb(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=n.extend({},h),M.set(b,i))}}function ob(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function pb(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}n.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=ob(h),f=ob(a),d=0,e=f.length;e>d;d++)pb(f[d],g[d]);if(b)if(c)for(f=f||ob(a),g=g||ob(h),d=0,e=f.length;e>d;d++)nb(f[d],g[d]);else nb(a,h);return g=ob(h,"script"),g.length>0&&mb(g,!i&&ob(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,o=a.length;o>m;m++)if(e=a[m],e||0===e)if("object"===n.type(e))n.merge(l,e.nodeType?[e]:e);else if(cb.test(e)){f=f||k.appendChild(b.createElement("div")),g=(bb.exec(e)||["",""])[1].toLowerCase(),h=ib[g]||ib._default,f.innerHTML=h[1]+e.replace(ab,"<$1></$2>")+h[2],j=h[0];while(j--)f=f.lastChild;n.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===n.inArray(e,d))&&(i=n.contains(e.ownerDocument,e),f=ob(k.appendChild(e),"script"),i&&mb(f),c)){j=0;while(e=f[j++])fb.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f=n.event.special,g=0;void 0!==(c=a[g]);g++){if(n.acceptData(c)&&(e=c[L.expando],e&&(b=L.cache[e]))){if(b.events)for(d in b.events)f[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);L.cache[e]&&delete L.cache[e]}delete M.cache[c[M.expando]]}}}),n.fn.extend({text:function(a){return J(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(ob(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&mb(ob(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(ob(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return J(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!db.test(a)&&!ib[(bb.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(ab,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ob(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(ob(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,m=this,o=l-1,p=a[0],q=n.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&eb.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(c=n.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=n.map(ob(c,"script"),kb),g=f.length;l>j;j++)h=c,j!==o&&(h=n.clone(h,!0,!0),g&&n.merge(f,ob(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,n.map(f,lb),j=0;g>j;j++)h=f[j],fb.test(h.type||"")&&!L.access(h,"globalEval")&&n.contains(i,h)&&(h.src?n._evalUrl&&n._evalUrl(h.src):n.globalEval(h.textContent.replace(hb,"")))}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),n(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qb,rb={};function sb(b,c){var d,e=n(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:n.css(e[0],"display");return e.detach(),f}function tb(a){var b=l,c=rb[a];return c||(c=sb(a,b),"none"!==c&&c||(qb=(qb||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=qb[0].contentDocument,b.write(),b.close(),c=sb(a,b),qb.detach()),rb[a]=c),c}var ub=/^margin/,vb=new RegExp("^("+Q+")(?!px)[a-z%]+$","i"),wb=function(a){return a.ownerDocument.defaultView.getComputedStyle(a,null)};function xb(a,b,c){var d,e,f,g,h=a.style;return c=c||wb(a),c&&(g=c.getPropertyValue(b)||c[b]),c&&(""!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),vb.test(g)&&ub.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function yb(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d=l.documentElement,e=l.createElement("div"),f=l.createElement("div");if(f.style){f.style.backgroundClip="content-box",f.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===f.style.backgroundClip,e.style.cssText="border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;position:absolute",e.appendChild(f);function g(){f.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",f.innerHTML="",d.appendChild(e);var g=a.getComputedStyle(f,null);b="1%"!==g.top,c="4px"===g.width,d.removeChild(e)}a.getComputedStyle&&n.extend(k,{pixelPosition:function(){return g(),b},boxSizingReliable:function(){return null==c&&g(),c},reliableMarginRight:function(){var b,c=f.appendChild(l.createElement("div"));return c.style.cssText=f.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",c.style.marginRight=c.style.width="0",f.style.width="1px",d.appendChild(e),b=!parseFloat(a.getComputedStyle(c,null).marginRight),d.removeChild(e),b}})}}(),n.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var zb=/^(none|table(?!-c[ea]).+)/,Ab=new RegExp("^("+Q+")(.*)$","i"),Bb=new RegExp("^([+-])=("+Q+")","i"),Cb={position:"absolute",visibility:"hidden",display:"block"},Db={letterSpacing:"0",fontWeight:"400"},Eb=["Webkit","O","Moz","ms"];function Fb(a,b){if(b in a)return b;var c=b[0].toUpperCase()+b.slice(1),d=b,e=Eb.length;while(e--)if(b=Eb[e]+c,b in a)return b;return d}function Gb(a,b,c){var d=Ab.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Hb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+R[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+R[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+R[f]+"Width",!0,e))):(g+=n.css(a,"padding"+R[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+R[f]+"Width",!0,e)));return g}function Ib(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=wb(a),g="border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=xb(a,b,f),(0>e||null==e)&&(e=a.style[b]),vb.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Hb(a,b,c||(g?"border":"content"),d,f)+"px"}function Jb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=L.get(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&S(d)&&(f[g]=L.access(d,"olddisplay",tb(d.nodeName)))):(e=S(d),"none"===c&&e||L.set(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=xb(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;return b=n.cssProps[h]||(n.cssProps[h]=Fb(i,h)),g=n.cssHooks[b]||n.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b]:(f=typeof c,"string"===f&&(e=Bb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(n.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||n.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=Fb(a.style,h)),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=xb(a,b,d)),"normal"===e&&b in Db&&(e=Db[b]),""===c||c?(f=parseFloat(e),c===!0||n.isNumeric(f)?f||0:e):e}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?zb.test(n.css(a,"display"))&&0===a.offsetWidth?n.swap(a,Cb,function(){return Ib(a,b,d)}):Ib(a,b,d):void 0},set:function(a,c,d){var e=d&&wb(a);return Gb(a,c,d?Hb(a,b,d,"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),n.cssHooks.marginRight=yb(k.reliableMarginRight,function(a,b){return b?n.swap(a,{display:"inline-block"},xb,[a,"marginRight"]):void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+R[d]+b]=f[d]||f[d-2]||f[0];return e}},ub.test(a)||(n.cssHooks[a+b].set=Gb)}),n.fn.extend({css:function(a,b){return J(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=wb(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)},a,b,arguments.length>1)},show:function(){return Jb(this,!0)},hide:function(){return Jb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){S(this)?n(this).show():n(this).hide()})}});function Kb(a,b,c,d,e){return new Kb.prototype.init(a,b,c,d,e)}n.Tween=Kb,Kb.prototype={constructor:Kb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=Kb.propHooks[this.prop];return a&&a.get?a.get(this):Kb.propHooks._default.get(this)},run:function(a){var b,c=Kb.propHooks[this.prop];return this.pos=b=this.options.duration?n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Kb.propHooks._default.set(this),this}},Kb.prototype.init.prototype=Kb.prototype,Kb.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[n.cssProps[a.prop]]||n.cssHooks[a.prop])?n.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Kb.propHooks.scrollTop=Kb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},n.fx=Kb.prototype.init,n.fx.step={};var Lb,Mb,Nb=/^(?:toggle|show|hide)$/,Ob=new RegExp("^(?:([+-])=|)("+Q+")([a-z%]*)$","i"),Pb=/queueHooks$/,Qb=[Vb],Rb={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=Ob.exec(b),f=e&&e[3]||(n.cssNumber[a]?"":"px"),g=(n.cssNumber[a]||"px"!==f&&+d)&&Ob.exec(n.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,n.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function Sb(){return setTimeout(function(){Lb=void 0}),Lb=n.now()}function Tb(a,b){var c,d=0,e={height:a};for(b=b?1:0;4>d;d+=2-b)c=R[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function Ub(a,b,c){for(var d,e=(Rb[b]||[]).concat(Rb["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function Vb(a,b,c){var d,e,f,g,h,i,j,k,l=this,m={},o=a.style,p=a.nodeType&&S(a),q=L.get(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,l.always(function(){l.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=n.css(a,"display"),k="none"===j?L.get(a,"olddisplay")||tb(a.nodeName):j,"inline"===k&&"none"===n.css(a,"float")&&(o.display="inline-block")),c.overflow&&(o.overflow="hidden",l.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],Nb.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}m[d]=q&&q[d]||n.style(a,d)}else j=void 0;if(n.isEmptyObject(m))"inline"===("none"===j?tb(a.nodeName):j)&&(o.display=j);else{q?"hidden"in q&&(p=q.hidden):q=L.access(a,"fxshow",{}),f&&(q.hidden=!p),p?n(a).show():l.done(function(){n(a).hide()}),l.done(function(){var b;L.remove(a,"fxshow");for(b in m)n.style(a,b,m[b])});for(d in m)g=Ub(p?q[d]:0,d,l),d in q||(q[d]=g.start,p&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function Wb(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function Xb(a,b,c){var d,e,f=0,g=Qb.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=Lb||Sb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:Lb||Sb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(Wb(k,j.opts.specialEasing);g>f;f++)if(d=Qb[f].call(j,a,k,j.opts))return d;return n.map(k,Ub,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(Xb,{tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],Rb[c]=Rb[c]||[],Rb[c].unshift(b)},prefilter:function(a,b){b?Qb.unshift(a):Qb.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(S).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=Xb(this,n.extend({},a),f);(e||L.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=L.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&Pb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=L.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(Tb(b,!0),a,d,e)}}),n.each({slideDown:Tb("show"),slideUp:Tb("hide"),slideToggle:Tb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=0,c=n.timers;for(Lb=n.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||n.fx.stop(),Lb=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){Mb||(Mb=setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){clearInterval(Mb),Mb=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(a,b){return a=n.fx?n.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a=l.createElement("input"),b=l.createElement("select"),c=b.appendChild(l.createElement("option"));a.type="checkbox",k.checkOn=""!==a.value,k.optSelected=c.selected,b.disabled=!0,k.optDisabled=!c.disabled,a=l.createElement("input"),a.value="t",a.type="radio",k.radioValue="t"===a.value}();var Yb,Zb,$b=n.expr.attrHandle;n.fn.extend({attr:function(a,b){return J(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===U?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),d=n.attrHooks[b]||(n.expr.match.bool.test(b)?Zb:Yb)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=n.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void n.removeAttr(a,b))+},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)&&(a[d]=!1),a.removeAttribute(c)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),Zb={set:function(a,b,c){return b===!1?n.removeAttr(a,c):a.setAttribute(c,c),c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=$b[b]||n.find.attr;$b[b]=function(a,b,d){var e,f;return d||(f=$b[b],$b[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,$b[b]=f),e}});var _b=/^(?:input|select|textarea|button)$/i;n.fn.extend({prop:function(a,b){return J(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[n.propFix[a]||a]})}}),n.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!n.isXMLDoc(a),f&&(b=n.propFix[b]||b,e=n.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){return a.hasAttribute("tabindex")||_b.test(a.nodeName)||a.href?a.tabIndex:-1}}}}),k.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this});var ac=/[\t\r\n\f]/g;n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h="string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ac," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=n.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0===arguments.length||"string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ac," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?n.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(n.isFunction(a)?function(c){n(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=n(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===U||"boolean"===c)&&(this.className&&L.set(this,"__className__",this.className),this.className=this.className||a===!1?"":L.get(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(ac," ").indexOf(b)>=0)return!0;return!1}});var bc=/\r/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(bc,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.trim(n.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=n.inArray(d.value,f)>=0)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>=0:void 0}},k.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var cc=n.now(),dc=/\?/;n.parseJSON=function(a){return JSON.parse(a+"")},n.parseXML=function(a){var b,c;if(!a||"string"!=typeof a)return null;try{c=new DOMParser,b=c.parseFromString(a,"text/xml")}catch(d){b=void 0}return(!b||b.getElementsByTagName("parsererror").length)&&n.error("Invalid XML: "+a),b};var ec,fc,gc=/#.*$/,hc=/([?&])_=[^&]*/,ic=/^(.*?):[ \t]*([^\r\n]*)$/gm,jc=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,kc=/^(?:GET|HEAD)$/,lc=/^\/\//,mc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,nc={},oc={},pc="*/".concat("*");try{fc=location.href}catch(qc){fc=l.createElement("a"),fc.href="",fc=fc.href}ec=mc.exec(fc.toLowerCase())||[];function rc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(n.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function sc(a,b,c,d){var e={},f=a===oc;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function tc(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&n.extend(!0,a,d),a}function uc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function vc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:fc,type:"GET",isLocal:jc.test(ec[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":pc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?tc(tc(a,n.ajaxSettings),b):tc(n.ajaxSettings,a)},ajaxPrefilter:rc(nc),ajaxTransport:rc(oc),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=n.ajaxSetup({},b),l=k.context||k,m=k.context&&(l.nodeType||l.jquery)?n(l):n.event,o=n.Deferred(),p=n.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!f){f={};while(b=ic.exec(e))f[b[1].toLowerCase()]=b[2]}b=f[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?e:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return c&&c.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||fc)+"").replace(gc,"").replace(lc,ec[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=n.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(h=mc.exec(k.url.toLowerCase()),k.crossDomain=!(!h||h[1]===ec[1]&&h[2]===ec[2]&&(h[3]||("http:"===h[1]?"80":"443"))===(ec[3]||("http:"===ec[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=n.param(k.data,k.traditional)),sc(nc,k,b,v),2===t)return v;i=k.global,i&&0===n.active++&&n.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!kc.test(k.type),d=k.url,k.hasContent||(k.data&&(d=k.url+=(dc.test(d)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=hc.test(d)?d.replace(hc,"$1_="+cc++):d+(dc.test(d)?"&":"?")+"_="+cc++)),k.ifModified&&(n.lastModified[d]&&v.setRequestHeader("If-Modified-Since",n.lastModified[d]),n.etag[d]&&v.setRequestHeader("If-None-Match",n.etag[d])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+pc+"; q=0.01":""):k.accepts["*"]);for(j in k.headers)v.setRequestHeader(j,k.headers[j]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(j in{success:1,error:1,complete:1})v[j](k[j]);if(c=sc(oc,k,b,v)){v.readyState=1,i&&m.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,c.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,f,h){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),c=void 0,e=h||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,f&&(u=uc(k,v,f)),u=vc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(n.lastModified[d]=w),w=v.getResponseHeader("etag"),w&&(n.etag[d]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,i&&m.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),i&&(m.trigger("ajaxComplete",[v,k]),--n.active||n.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){var b;return n.isFunction(a)?this.each(function(b){n(this).wrapAll(a.call(this,b))}):(this[0]&&(b=n(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this)},wrapInner:function(a){return this.each(n.isFunction(a)?function(b){n(this).wrapInner(a.call(this,b))}:function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}}),n.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var wc=/%20/g,xc=/\[\]$/,yc=/\r?\n/g,zc=/^(?:submit|button|image|reset|file)$/i,Ac=/^(?:input|select|textarea|keygen)/i;function Bc(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||xc.test(a)?d(a,e):Bc(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)Bc(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)Bc(c,a[c],b,e);return d.join("&").replace(wc,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&Ac.test(this.nodeName)&&!zc.test(a)&&(this.checked||!T.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(yc,"\r\n")}}):{name:b.name,value:c.replace(yc,"\r\n")}}).get()}}),n.ajaxSettings.xhr=function(){try{return new XMLHttpRequest}catch(a){}};var Cc=0,Dc={},Ec={0:200,1223:204},Fc=n.ajaxSettings.xhr();a.ActiveXObject&&n(a).on("unload",function(){for(var a in Dc)Dc[a]()}),k.cors=!!Fc&&"withCredentials"in Fc,k.ajax=Fc=!!Fc,n.ajaxTransport(function(a){var b;return k.cors||Fc&&!a.crossDomain?{send:function(c,d){var e,f=a.xhr(),g=++Cc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)f.setRequestHeader(e,c[e]);b=function(a){return function(){b&&(delete Dc[g],b=f.onload=f.onerror=null,"abort"===a?f.abort():"error"===a?d(f.status,f.statusText):d(Ec[f.status]||f.status,f.statusText,"string"==typeof f.responseText?{text:f.responseText}:void 0,f.getAllResponseHeaders()))}},f.onload=b(),f.onerror=b("error"),b=Dc[g]=b("abort");try{f.send(a.hasContent&&a.data||null)}catch(h){if(b)throw h}},abort:function(){b&&b()}}:void 0}),n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(d,e){b=n("<script>").prop({async:!0,charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&e("error"===a.type?404:200,a.type)}),l.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Gc=[],Hc=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Gc.pop()||n.expando+"_"+cc++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Hc.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Hc.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Hc,"$1"+e):b.jsonp!==!1&&(b.url+=(dc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Gc.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||l;var d=v.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=n.buildFragment([a],b,e),e&&e.length&&n(e).remove(),n.merge([],d.childNodes))};var Ic=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&Ic)return Ic.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=n.trim(a.slice(h)),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&n.ajax({url:a,type:e,dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,f||[a.responseText,b,a])}),this},n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};var Jc=a.document.documentElement;function Kc(a){return n.isWindow(a)?a:9===a.nodeType&&a.defaultView}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d=this[0],e={top:0,left:0},f=d&&d.ownerDocument;if(f)return b=f.documentElement,n.contains(b,d)?(typeof d.getBoundingClientRect!==U&&(e=d.getBoundingClientRect()),c=Kc(f),{top:e.top+c.pageYOffset-b.clientTop,left:e.left+c.pageXOffset-b.clientLeft}):e},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===n.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(d=a.offset()),d.top+=n.css(a[0],"borderTopWidth",!0),d.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-d.top-n.css(c,"marginTop",!0),left:b.left-d.left-n.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||Jc;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||Jc})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(b,c){var d="pageYOffset"===c;n.fn[b]=function(e){return J(this,function(b,e,f){var g=Kc(b);return void 0===f?g?g[c]:b[e]:void(g?g.scrollTo(d?a.pageXOffset:f,d?f:a.pageYOffset):b[e]=f)},b,e,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=yb(k.pixelPosition,function(a,c){return c?(c=xb(a,b),vb.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return J(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var Lc=a.jQuery,Mc=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=Mc),b&&a.jQuery===n&&(a.jQuery=Lc),n},typeof b===U&&(a.jQuery=a.$=n),n});
+ static/js/jquery.url.js view
@@ -0,0 +1,181 @@+// JQuery URL Parser+// Written by Mark Perkins, mark@allmarkedup.com+// License: http://unlicense.org/ (i.e. do what you want with it!)++jQuery.url = function()+{+	var segments = {};+	+	var parsed = {};+	+	/**+    * Options object. Only the URI and strictMode values can be changed via the setters below.+    */+  	var options = {+	+		url : window.location, // default URI is the page in which the script is running+		+		strictMode: false, // 'loose' parsing by default+	+		key: ["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"], // keys available to query +		+		q: {+			name: "queryKey",+			parser: /(?:^|&|;)([^&=;]*)=?([^&;]*)/g+		},+		+		parser: {+			strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,  //less intuitive, more accurate to the specs+			loose:  /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/ // more intuitive, fails on relative paths and deviates from specs+		}+		+	};+	+    /**+     * Deals with the parsing of the URI according to the regex above.+ 	 * Written by Steven Levithan - see credits at top.+     */		+	var parseUri = function()+	{+		str = decodeURI( options.url );+		+		var m = options.parser[ options.strictMode ? "strict" : "loose" ].exec( str );+		var uri = {};+		var i = 14;++		while ( i-- ) {+			uri[ options.key[i] ] = m[i] || "";+		}++		uri[ options.q.name ] = {};+		uri[ options.key[12] ].replace( options.q.parser, function ( $0, $1, $2 ) {+			if ($1) {+				uri[options.q.name][$1] = $2;+			}+		});++		return uri;+	};++    /**+     * Returns the value of the passed in key from the parsed URI.+  	 * +	 * @param string key The key whose value is required+     */		+	var key = function( key )+	{+		if ( jQuery.isEmptyObject(parsed) )+		{+			setUp(); // if the URI has not been parsed yet then do this first...	+		} +		if ( key == "base" )+		{+			if ( parsed.port !== null && parsed.port !== "" )+			{+				return parsed.protocol+"://"+parsed.host+":"+parsed.port+"/";	+			}+			else+			{+				return parsed.protocol+"://"+parsed.host+"/";+			}+		}+	+		return ( parsed[key] === "" ) ? null : parsed[key];+	};+	+	/**+     * Returns the value of the required query string parameter.+  	 * +	 * @param string item The parameter whose value is required+     */		+	var param = function( item )+	{+		if ( jQuery.isEmptyObject(parsed) )+		{+			setUp(); // if the URI has not been parsed yet then do this first...	+		}+		if ( item === undefined )+		{+            return parsed.queryKey;+        }+        else+        {+            return ( parsed.queryKey[item] === null ) ? null : parsed.queryKey[item];+        }+	};++    /**+     * 'Constructor' (not really!) function.+     *  Called whenever the URI changes to kick off re-parsing of the URI and splitting it up into segments. +     */	+	var setUp = function()+	{+		parsed = parseUri();+		+		getSegments();	+	};+	+    /**+     * Splits up the body of the URI into segments (i.e. sections delimited by '/')+     */+	var getSegments = function()+	{+		var p = parsed.path;+		segments = []; // clear out segments array+		segments = parsed.path.length == 1 ? {} : ( p.charAt( p.length - 1 ) == "/" ? p.substring( 1, p.length - 1 ) : path = p.substring( 1 ) ).split("/");+	};+	+	return {+		+	    /**+	     * Sets the parsing mode - either strict or loose. Set to loose by default.+	     *+	     * @param string mode The mode to set the parser to. Anything apart from a value of 'strict' will set it to loose!+	     */+		setMode : function( mode )+		{+			options.strictMode = mode == "strict" ? true : false;+			return this;+		},+		+		/**+	     * Sets URI to parse if you don't want to to parse the current page's URI.+		 * Calling the function with no value for newUri resets it to the current page's URI.+	     *+	     * @param string newUri The URI to parse.+	     */		+		setUrl : function( newUri )+		{+			options.url = newUri === undefined ? window.location : newUri;+			setUp();+			return this;+		},		+		+		/**+	     * Returns the value of the specified URI segment. Segments are numbered from 1 to the number of segments.+		 * For example the URI http://test.com/about/company/ segment(1) would return 'about'.+		 *+		 * If no integer is passed into the function it returns the number of segments in the URI.+	     *+	     * @param int pos The position of the segment to return. Can be empty.+	     */	+		segment : function( pos )+		{+			if ( jQuery.isEmptyObject(parsed) )+			{+				setUp(); // if the URI has not been parsed yet then do this first...	+			} +			if ( pos === undefined )+			{+				return segments.length;+			}+			return ( segments[pos] === "" || segments[pos] === undefined ) ? null : segments[pos];+		},+		+		attr : key, // provides public access to private 'key' function - see above+		+		param : param // provides public access to private 'param' function - see above+		+	};+	+}();
+ static/js/typeahead.bundle.js view
@@ -0,0 +1,1782 @@+/*!+ * typeahead.js 0.10.4+ * https://github.com/twitter/typeahead.js+ * Copyright 2013-2014 Twitter, Inc. and other contributors; Licensed MIT+ */++(function($) {+    var _ = function() {+        "use strict";+        return {+            isMsie: function() {+                return /(msie|trident)/i.test(navigator.userAgent) ? navigator.userAgent.match(/(msie |rv:)(\d+(.\d+)?)/i)[2] : false;+            },+            isBlankString: function(str) {+                return !str || /^\s*$/.test(str);+            },+            escapeRegExChars: function(str) {+                return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");+            },+            isString: function(obj) {+                return typeof obj === "string";+            },+            isNumber: function(obj) {+                return typeof obj === "number";+            },+            isArray: $.isArray,+            isFunction: $.isFunction,+            isObject: $.isPlainObject,+            isUndefined: function(obj) {+                return typeof obj === "undefined";+            },+            toStr: function toStr(s) {+                return _.isUndefined(s) || s === null ? "" : s + "";+            },+            bind: $.proxy,+            each: function(collection, cb) {+                $.each(collection, reverseArgs);+                function reverseArgs(index, value) {+                    return cb(value, index);+                }+            },+            map: $.map,+            filter: $.grep,+            every: function(obj, test) {+                var result = true;+                if (!obj) {+                    return result;+                }+                $.each(obj, function(key, val) {+                    if (!(result = test.call(null, val, key, obj))) {+                        return false;+                    }+                });+                return !!result;+            },+            some: function(obj, test) {+                var result = false;+                if (!obj) {+                    return result;+                }+                $.each(obj, function(key, val) {+                    if (result = test.call(null, val, key, obj)) {+                        return false;+                    }+                });+                return !!result;+            },+            mixin: $.extend,+            getUniqueId: function() {+                var counter = 0;+                return function() {+                    return counter++;+                };+            }(),+            templatify: function templatify(obj) {+                return $.isFunction(obj) ? obj : template;+                function template() {+                    return String(obj);+                }+            },+            defer: function(fn) {+                setTimeout(fn, 0);+            },+            debounce: function(func, wait, immediate) {+                var timeout, result;+                return function() {+                    var context = this, args = arguments, later, callNow;+                    later = function() {+                        timeout = null;+                        if (!immediate) {+                            result = func.apply(context, args);+                        }+                    };+                    callNow = immediate && !timeout;+                    clearTimeout(timeout);+                    timeout = setTimeout(later, wait);+                    if (callNow) {+                        result = func.apply(context, args);+                    }+                    return result;+                };+            },+            throttle: function(func, wait) {+                var context, args, timeout, result, previous, later;+                previous = 0;+                later = function() {+                    previous = new Date();+                    timeout = null;+                    result = func.apply(context, args);+                };+                return function() {+                    var now = new Date(), remaining = wait - (now - previous);+                    context = this;+                    args = arguments;+                    if (remaining <= 0) {+                        clearTimeout(timeout);+                        timeout = null;+                        previous = now;+                        result = func.apply(context, args);+                    } else if (!timeout) {+                        timeout = setTimeout(later, remaining);+                    }+                    return result;+                };+            },+            noop: function() {}+        };+    }();+    var VERSION = "0.10.4";+    var tokenizers = function() {+        "use strict";+        return {+            nonword: nonword,+            whitespace: whitespace,+            obj: {+                nonword: getObjTokenizer(nonword),+                whitespace: getObjTokenizer(whitespace)+            }+        };+        function whitespace(str) {+            str = _.toStr(str);+            return str ? str.split(/\s+/) : [];+        }+        function nonword(str) {+            str = _.toStr(str);+            return str ? str.split(/\W+/) : [];+        }+        function getObjTokenizer(tokenizer) {+            return function setKey() {+                var args = [].slice.call(arguments, 0);+                return function tokenize(o) {+                    var tokens = [];+                    _.each(args, function(k) {+                        tokens = tokens.concat(tokenizer(_.toStr(o[k])));+                    });+                    return tokens;+                };+            };+        }+    }();+    var LruCache = function() {+        "use strict";+        function LruCache(maxSize) {+            this.maxSize = _.isNumber(maxSize) ? maxSize : 100;+            this.reset();+            if (this.maxSize <= 0) {+                this.set = this.get = $.noop;+            }+        }+        _.mixin(LruCache.prototype, {+            set: function set(key, val) {+                var tailItem = this.list.tail, node;+                if (this.size >= this.maxSize) {+                    this.list.remove(tailItem);+                    delete this.hash[tailItem.key];+                }+                if (node = this.hash[key]) {+                    node.val = val;+                    this.list.moveToFront(node);+                } else {+                    node = new Node(key, val);+                    this.list.add(node);+                    this.hash[key] = node;+                    this.size++;+                }+            },+            get: function get(key) {+                var node = this.hash[key];+                if (node) {+                    this.list.moveToFront(node);+                    return node.val;+                }+            },+            reset: function reset() {+                this.size = 0;+                this.hash = {};+                this.list = new List();+            }+        });+        function List() {+            this.head = this.tail = null;+        }+        _.mixin(List.prototype, {+            add: function add(node) {+                if (this.head) {+                    node.next = this.head;+                    this.head.prev = node;+                }+                this.head = node;+                this.tail = this.tail || node;+            },+            remove: function remove(node) {+                node.prev ? node.prev.next = node.next : this.head = node.next;+                node.next ? node.next.prev = node.prev : this.tail = node.prev;+            },+            moveToFront: function(node) {+                this.remove(node);+                this.add(node);+            }+        });+        function Node(key, val) {+            this.key = key;+            this.val = val;+            this.prev = this.next = null;+        }+        return LruCache;+    }();+    var PersistentStorage = function() {+        "use strict";+        var ls, methods;+        try {+            ls = window.localStorage;+            ls.setItem("~~~", "!");+            ls.removeItem("~~~");+        } catch (err) {+            ls = null;+        }+        function PersistentStorage(namespace) {+            this.prefix = [ "__", namespace, "__" ].join("");+            this.ttlKey = "__ttl__";+            this.keyMatcher = new RegExp("^" + _.escapeRegExChars(this.prefix));+        }+        if (ls && window.JSON) {+            methods = {+                _prefix: function(key) {+                    return this.prefix + key;+                },+                _ttlKey: function(key) {+                    return this._prefix(key) + this.ttlKey;+                },+                get: function(key) {+                    if (this.isExpired(key)) {+                        this.remove(key);+                    }+                    return decode(ls.getItem(this._prefix(key)));+                },+                set: function(key, val, ttl) {+                    if (_.isNumber(ttl)) {+                        ls.setItem(this._ttlKey(key), encode(now() + ttl));+                    } else {+                        ls.removeItem(this._ttlKey(key));+                    }+                    return ls.setItem(this._prefix(key), encode(val));+                },+                remove: function(key) {+                    ls.removeItem(this._ttlKey(key));+                    ls.removeItem(this._prefix(key));+                    return this;+                },+                clear: function() {+                    var i, key, keys = [], len = ls.length;+                    for (i = 0; i < len; i++) {+                        if ((key = ls.key(i)).match(this.keyMatcher)) {+                            keys.push(key.replace(this.keyMatcher, ""));+                        }+                    }+                    for (i = keys.length; i--; ) {+                        this.remove(keys[i]);+                    }+                    return this;+                },+                isExpired: function(key) {+                    var ttl = decode(ls.getItem(this._ttlKey(key)));+                    return _.isNumber(ttl) && now() > ttl ? true : false;+                }+            };+        } else {+            methods = {+                get: _.noop,+                set: _.noop,+                remove: _.noop,+                clear: _.noop,+                isExpired: _.noop+            };+        }+        _.mixin(PersistentStorage.prototype, methods);+        return PersistentStorage;+        function now() {+            return new Date().getTime();+        }+        function encode(val) {+            return JSON.stringify(_.isUndefined(val) ? null : val);+        }+        function decode(val) {+            return JSON.parse(val);+        }+    }();+    var Transport = function() {+        "use strict";+        var pendingRequestsCount = 0, pendingRequests = {}, maxPendingRequests = 6, sharedCache = new LruCache(10);+        function Transport(o) {+            o = o || {};+            this.cancelled = false;+            this.lastUrl = null;+            this._send = o.transport ? callbackToDeferred(o.transport) : $.ajax;+            this._get = o.rateLimiter ? o.rateLimiter(this._get) : this._get;+            this._cache = o.cache === false ? new LruCache(0) : sharedCache;+        }+        Transport.setMaxPendingRequests = function setMaxPendingRequests(num) {+            maxPendingRequests = num;+        };+        Transport.resetCache = function resetCache() {+            sharedCache.reset();+        };+        _.mixin(Transport.prototype, {+            _get: function(url, o, cb) {+                var that = this, jqXhr;+                if (this.cancelled || url !== this.lastUrl) {+                    return;+                }+                if (jqXhr = pendingRequests[url]) {+                    jqXhr.done(done).fail(fail);+                } else if (pendingRequestsCount < maxPendingRequests) {+                    pendingRequestsCount++;+                    pendingRequests[url] = this._send(url, o).done(done).fail(fail).always(always);+                } else {+                    this.onDeckRequestArgs = [].slice.call(arguments, 0);+                }+                function done(resp) {+                    cb && cb(null, resp);+                    that._cache.set(url, resp);+                }+                function fail() {+                    cb && cb(true);+                }+                function always() {+                    pendingRequestsCount--;+                    delete pendingRequests[url];+                    if (that.onDeckRequestArgs) {+                        that._get.apply(that, that.onDeckRequestArgs);+                        that.onDeckRequestArgs = null;+                    }+                }+            },+            get: function(url, o, cb) {+                var resp;+                if (_.isFunction(o)) {+                    cb = o;+                    o = {};+                }+                this.cancelled = false;+                this.lastUrl = url;+                if (resp = this._cache.get(url)) {+                    _.defer(function() {+                        cb && cb(null, resp);+                    });+                } else {+                    this._get(url, o, cb);+                }+                return !!resp;+            },+            cancel: function() {+                this.cancelled = true;+            }+        });+        return Transport;+        function callbackToDeferred(fn) {+            return function customSendWrapper(url, o) {+                var deferred = $.Deferred();+                fn(url, o, onSuccess, onError);+                return deferred;+                function onSuccess(resp) {+                    _.defer(function() {+                        deferred.resolve(resp);+                    });+                }+                function onError(err) {+                    _.defer(function() {+                        deferred.reject(err);+                    });+                }+            };+        }+    }();+    var SearchIndex = function() {+        "use strict";+        function SearchIndex(o) {+            o = o || {};+            if (!o.datumTokenizer || !o.queryTokenizer) {+                $.error("datumTokenizer and queryTokenizer are both required");+            }+            this.datumTokenizer = o.datumTokenizer;+            this.queryTokenizer = o.queryTokenizer;+            this.reset();+        }+        _.mixin(SearchIndex.prototype, {+            bootstrap: function bootstrap(o) {+                this.datums = o.datums;+                this.trie = o.trie;+            },+            add: function(data) {+                var that = this;+                data = _.isArray(data) ? data : [ data ];+                _.each(data, function(datum) {+                    var id, tokens;+                    id = that.datums.push(datum) - 1;+                    tokens = normalizeTokens(that.datumTokenizer(datum));+                    _.each(tokens, function(token) {+                        var node, chars, ch;+                        node = that.trie;+                        chars = token.split("");+                        while (ch = chars.shift()) {+                            node = node.children[ch] || (node.children[ch] = newNode());+                            node.ids.push(id);+                        }+                    });+                });+            },+            get: function get(query) {+                var that = this, tokens, matches;+                tokens = normalizeTokens(this.queryTokenizer(query));+                _.each(tokens, function(token) {+                    var node, chars, ch, ids;+                    if (matches && matches.length === 0) {+                        return false;+                    }+                    node = that.trie;+                    chars = token.split("");+                    while (node && (ch = chars.shift())) {+                        node = node.children[ch];+                    }+                    if (node && chars.length === 0) {+                        ids = node.ids.slice(0);+                        matches = matches ? getIntersection(matches, ids) : ids;+                    } else {+                        matches = [];+                        return false;+                    }+                });+                return matches ? _.map(unique(matches), function(id) {+                    return that.datums[id];+                }) : [];+            },+            reset: function reset() {+                this.datums = [];+                this.trie = newNode();+            },+            serialize: function serialize() {+                return {+                    datums: this.datums,+                    trie: this.trie+                };+            }+        });+        return SearchIndex;+        function normalizeTokens(tokens) {+            tokens = _.filter(tokens, function(token) {+                return !!token;+            });+            tokens = _.map(tokens, function(token) {+                return token.toLowerCase();+            });+            return tokens;+        }+        function newNode() {+            return {+                ids: [],+                children: {}+            };+        }+        function unique(array) {+            var seen = {}, uniques = [];+            for (var i = 0, len = array.length; i < len; i++) {+                if (!seen[array[i]]) {+                    seen[array[i]] = true;+                    uniques.push(array[i]);+                }+            }+            return uniques;+        }+        function getIntersection(arrayA, arrayB) {+            var ai = 0, bi = 0, intersection = [];+            arrayA = arrayA.sort(compare);+            arrayB = arrayB.sort(compare);+            var lenArrayA = arrayA.length, lenArrayB = arrayB.length;+            while (ai < lenArrayA && bi < lenArrayB) {+                if (arrayA[ai] < arrayB[bi]) {+                    ai++;+                } else if (arrayA[ai] > arrayB[bi]) {+                    bi++;+                } else {+                    intersection.push(arrayA[ai]);+                    ai++;+                    bi++;+                }+            }+            return intersection;+            function compare(a, b) {+                return a - b;+            }+        }+    }();+    var oParser = function() {+        "use strict";+        return {+            local: getLocal,+            prefetch: getPrefetch,+            remote: getRemote+        };+        function getLocal(o) {+            return o.local || null;+        }+        function getPrefetch(o) {+            var prefetch, defaults;+            defaults = {+                url: null,+                thumbprint: "",+                ttl: 24 * 60 * 60 * 1e3,+                filter: null,+                ajax: {}+            };+            if (prefetch = o.prefetch || null) {+                prefetch = _.isString(prefetch) ? {+                    url: prefetch+                } : prefetch;+                prefetch = _.mixin(defaults, prefetch);+                prefetch.thumbprint = VERSION + prefetch.thumbprint;+                prefetch.ajax.type = prefetch.ajax.type || "GET";+                prefetch.ajax.dataType = prefetch.ajax.dataType || "json";+                !prefetch.url && $.error("prefetch requires url to be set");+            }+            return prefetch;+        }+        function getRemote(o) {+            var remote, defaults;+            defaults = {+                url: null,+                cache: true,+                wildcard: "%QUERY",+                replace: null,+                rateLimitBy: "debounce",+                rateLimitWait: 300,+                send: null,+                filter: null,+                ajax: {}+            };+            if (remote = o.remote || null) {+                remote = _.isString(remote) ? {+                    url: remote+                } : remote;+                remote = _.mixin(defaults, remote);+                remote.rateLimiter = /^throttle$/i.test(remote.rateLimitBy) ? byThrottle(remote.rateLimitWait) : byDebounce(remote.rateLimitWait);+                remote.ajax.type = remote.ajax.type || "GET";+                remote.ajax.dataType = remote.ajax.dataType || "json";+                delete remote.rateLimitBy;+                delete remote.rateLimitWait;+                !remote.url && $.error("remote requires url to be set");+            }+            return remote;+            function byDebounce(wait) {+                return function(fn) {+                    return _.debounce(fn, wait);+                };+            }+            function byThrottle(wait) {+                return function(fn) {+                    return _.throttle(fn, wait);+                };+            }+        }+    }();+    (function(root) {+        "use strict";+        var old, keys;+        old = root.Bloodhound;+        keys = {+            data: "data",+            protocol: "protocol",+            thumbprint: "thumbprint"+        };+        root.Bloodhound = Bloodhound;+        function Bloodhound(o) {+            if (!o || !o.local && !o.prefetch && !o.remote) {+                $.error("one of local, prefetch, or remote is required");+            }+            this.limit = o.limit || 5;+            this.sorter = getSorter(o.sorter);+            this.dupDetector = o.dupDetector || ignoreDuplicates;+            this.local = oParser.local(o);+            this.prefetch = oParser.prefetch(o);+            this.remote = oParser.remote(o);+            this.cacheKey = this.prefetch ? this.prefetch.cacheKey || this.prefetch.url : null;+            this.index = new SearchIndex({+                datumTokenizer: o.datumTokenizer,+                queryTokenizer: o.queryTokenizer+            });+            this.storage = this.cacheKey ? new PersistentStorage(this.cacheKey) : null;+        }+        Bloodhound.noConflict = function noConflict() {+            root.Bloodhound = old;+            return Bloodhound;+        };+        Bloodhound.tokenizers = tokenizers;+        _.mixin(Bloodhound.prototype, {+            _loadPrefetch: function loadPrefetch(o) {+                var that = this, serialized, deferred;+                if (serialized = this._readFromStorage(o.thumbprint)) {+                    this.index.bootstrap(serialized);+                    deferred = $.Deferred().resolve();+                } else {+                    deferred = $.ajax(o.url, o.ajax).done(handlePrefetchResponse);+                }+                return deferred;+                function handlePrefetchResponse(resp) {+                    that.clear();+                    that.add(o.filter ? o.filter(resp) : resp);+                    that._saveToStorage(that.index.serialize(), o.thumbprint, o.ttl);+                }+            },+            _getFromRemote: function getFromRemote(query, cb) {+                var that = this, url, uriEncodedQuery;+                if (!this.transport) {+                    return;+                }+                query = query || "";+                uriEncodedQuery = encodeURIComponent(query);+                url = this.remote.replace ? this.remote.replace(this.remote.url, query) : this.remote.url.replace(this.remote.wildcard, uriEncodedQuery);+                return this.transport.get(url, this.remote.ajax, handleRemoteResponse);+                function handleRemoteResponse(err, resp) {+                    err ? cb([]) : cb(that.remote.filter ? that.remote.filter(resp) : resp);+                }+            },+            _cancelLastRemoteRequest: function cancelLastRemoteRequest() {+                this.transport && this.transport.cancel();+            },+            _saveToStorage: function saveToStorage(data, thumbprint, ttl) {+                if (this.storage) {+                    this.storage.set(keys.data, data, ttl);+                    this.storage.set(keys.protocol, location.protocol, ttl);+                    this.storage.set(keys.thumbprint, thumbprint, ttl);+                }+            },+            _readFromStorage: function readFromStorage(thumbprint) {+                var stored = {}, isExpired;+                if (this.storage) {+                    stored.data = this.storage.get(keys.data);+                    stored.protocol = this.storage.get(keys.protocol);+                    stored.thumbprint = this.storage.get(keys.thumbprint);+                }+                isExpired = stored.thumbprint !== thumbprint || stored.protocol !== location.protocol;+                return stored.data && !isExpired ? stored.data : null;+            },+            _initialize: function initialize() {+                var that = this, local = this.local, deferred;+                deferred = this.prefetch ? this._loadPrefetch(this.prefetch) : $.Deferred().resolve();+                local && deferred.done(addLocalToIndex);+                this.transport = this.remote ? new Transport(this.remote) : null;+                return this.initPromise = deferred.promise();+                function addLocalToIndex() {+                    that.add(_.isFunction(local) ? local() : local);+                }+            },+            initialize: function initialize(force) {+                return !this.initPromise || force ? this._initialize() : this.initPromise;+            },+            add: function add(data) {+                this.index.add(data);+            },+            get: function get(query, cb) {+                var that = this, matches = [], cacheHit = false;+                matches = this.index.get(query);+                matches = this.sorter(matches).slice(0, this.limit);+                matches.length < this.limit ? cacheHit = this._getFromRemote(query, returnRemoteMatches) : this._cancelLastRemoteRequest();+                if (!cacheHit) {+                    (matches.length > 0 || !this.transport) && cb && cb(matches);+                }+                function returnRemoteMatches(remoteMatches) {+                    var matchesWithBackfill = matches.slice(0);+                    _.each(remoteMatches, function(remoteMatch) {+                        var isDuplicate;+                        isDuplicate = _.some(matchesWithBackfill, function(match) {+                            return that.dupDetector(remoteMatch, match);+                        });+                        !isDuplicate && matchesWithBackfill.push(remoteMatch);+                        return matchesWithBackfill.length < that.limit;+                    });+                    cb && cb(that.sorter(matchesWithBackfill));+                }+            },+            clear: function clear() {+                this.index.reset();+            },+            clearPrefetchCache: function clearPrefetchCache() {+                this.storage && this.storage.clear();+            },+            clearRemoteCache: function clearRemoteCache() {+                this.transport && Transport.resetCache();+            },+            ttAdapter: function ttAdapter() {+                return _.bind(this.get, this);+            }+        });+        return Bloodhound;+        function getSorter(sortFn) {+            return _.isFunction(sortFn) ? sort : noSort;+            function sort(array) {+                return array.sort(sortFn);+            }+            function noSort(array) {+                return array;+            }+        }+        function ignoreDuplicates() {+            return false;+        }+    })(this);+    var html = function() {+        return {+            wrapper: '<span class="twitter-typeahead"></span>',+            dropdown: '<span class="tt-dropdown-menu"></span>',+            dataset: '<div class="tt-dataset-%CLASS%"></div>',+            suggestions: '<span class="tt-suggestions"></span>',+            suggestion: '<div class="tt-suggestion"></div>'+        };+    }();+    var css = function() {+        "use strict";+        var css = {+            wrapper: {+                position: "relative",+                display: "inline-block"+            },+            hint: {+                position: "absolute",+                top: "0",+                left: "0",+                borderColor: "transparent",+                boxShadow: "none",+                opacity: "1"+            },+            input: {+                position: "relative",+                verticalAlign: "top",+                backgroundColor: "transparent"+            },+            inputWithNoHint: {+                position: "relative",+                verticalAlign: "top"+            },+            dropdown: {+                position: "absolute",+                top: "100%",+                left: "0",+                zIndex: "100",+                display: "none"+            },+            suggestions: {+                display: "block"+            },+            suggestion: {+                whiteSpace: "nowrap",+                cursor: "pointer"+            },+            suggestionChild: {+                whiteSpace: "normal"+            },+            ltr: {+                left: "0",+                right: "auto"+            },+            rtl: {+                left: "auto",+                right: " 0"+            }+        };+        if (_.isMsie()) {+            _.mixin(css.input, {+                backgroundImage: "url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)"+            });+        }+        if (_.isMsie() && _.isMsie() <= 7) {+            _.mixin(css.input, {+                marginTop: "-1px"+            });+        }+        return css;+    }();+    var EventBus = function() {+        "use strict";+        var namespace = "typeahead:";+        function EventBus(o) {+            if (!o || !o.el) {+                $.error("EventBus initialized without el");+            }+            this.$el = $(o.el);+        }+        _.mixin(EventBus.prototype, {+            trigger: function(type) {+                var args = [].slice.call(arguments, 1);+                this.$el.trigger(namespace + type, args);+            }+        });+        return EventBus;+    }();+    var EventEmitter = function() {+        "use strict";+        var splitter = /\s+/, nextTick = getNextTick();+        return {+            onSync: onSync,+            onAsync: onAsync,+            off: off,+            trigger: trigger+        };+        function on(method, types, cb, context) {+            var type;+            if (!cb) {+                return this;+            }+            types = types.split(splitter);+            cb = context ? bindContext(cb, context) : cb;+            this._callbacks = this._callbacks || {};+            while (type = types.shift()) {+                this._callbacks[type] = this._callbacks[type] || {+                    sync: [],+                    async: []+                };+                this._callbacks[type][method].push(cb);+            }+            return this;+        }+        function onAsync(types, cb, context) {+            return on.call(this, "async", types, cb, context);+        }+        function onSync(types, cb, context) {+            return on.call(this, "sync", types, cb, context);+        }+        function off(types) {+            var type;+            if (!this._callbacks) {+                return this;+            }+            types = types.split(splitter);+            while (type = types.shift()) {+                delete this._callbacks[type];+            }+            return this;+        }+        function trigger(types) {+            var type, callbacks, args, syncFlush, asyncFlush;+            if (!this._callbacks) {+                return this;+            }+            types = types.split(splitter);+            args = [].slice.call(arguments, 1);+            while ((type = types.shift()) && (callbacks = this._callbacks[type])) {+                syncFlush = getFlush(callbacks.sync, this, [ type ].concat(args));+                asyncFlush = getFlush(callbacks.async, this, [ type ].concat(args));+                syncFlush() && nextTick(asyncFlush);+            }+            return this;+        }+        function getFlush(callbacks, context, args) {+            return flush;+            function flush() {+                var cancelled;+                for (var i = 0, len = callbacks.length; !cancelled && i < len; i += 1) {+                    cancelled = callbacks[i].apply(context, args) === false;+                }+                return !cancelled;+            }+        }+        function getNextTick() {+            var nextTickFn;+            if (window.setImmediate) {+                nextTickFn = function nextTickSetImmediate(fn) {+                    setImmediate(function() {+                        fn();+                    });+                };+            } else {+                nextTickFn = function nextTickSetTimeout(fn) {+                    setTimeout(function() {+                        fn();+                    }, 0);+                };+            }+            return nextTickFn;+        }+        function bindContext(fn, context) {+            return fn.bind ? fn.bind(context) : function() {+                fn.apply(context, [].slice.call(arguments, 0));+            };+        }+    }();+    var highlight = function(doc) {+        "use strict";+        var defaults = {+            node: null,+            pattern: null,+            tagName: "strong",+            className: null,+            wordsOnly: false,+            caseSensitive: false+        };+        return function hightlight(o) {+            var regex;+            o = _.mixin({}, defaults, o);+            if (!o.node || !o.pattern) {+                return;+            }+            o.pattern = _.isArray(o.pattern) ? o.pattern : [ o.pattern ];+            regex = getRegex(o.pattern, o.caseSensitive, o.wordsOnly);+            traverse(o.node, hightlightTextNode);+            function hightlightTextNode(textNode) {+                var match, patternNode, wrapperNode;+                if (match = regex.exec(textNode.data)) {+                    wrapperNode = doc.createElement(o.tagName);+                    o.className && (wrapperNode.className = o.className);+                    patternNode = textNode.splitText(match.index);+                    patternNode.splitText(match[0].length);+                    wrapperNode.appendChild(patternNode.cloneNode(true));+                    textNode.parentNode.replaceChild(wrapperNode, patternNode);+                }+                return !!match;+            }+            function traverse(el, hightlightTextNode) {+                var childNode, TEXT_NODE_TYPE = 3;+                for (var i = 0; i < el.childNodes.length; i++) {+                    childNode = el.childNodes[i];+                    if (childNode.nodeType === TEXT_NODE_TYPE) {+                        i += hightlightTextNode(childNode) ? 1 : 0;+                    } else {+                        traverse(childNode, hightlightTextNode);+                    }+                }+            }+        };+        function getRegex(patterns, caseSensitive, wordsOnly) {+            var escapedPatterns = [], regexStr;+            for (var i = 0, len = patterns.length; i < len; i++) {+                escapedPatterns.push(_.escapeRegExChars(patterns[i]));+            }+            regexStr = wordsOnly ? "\\b(" + escapedPatterns.join("|") + ")\\b" : "(" + escapedPatterns.join("|") + ")";+            return caseSensitive ? new RegExp(regexStr) : new RegExp(regexStr, "i");+        }+    }(window.document);+    var Input = function() {+        "use strict";+        var specialKeyCodeMap;+        specialKeyCodeMap = {+            9: "tab",+            27: "esc",+            37: "left",+            39: "right",+            13: "enter",+            38: "up",+            40: "down"+        };+        function Input(o) {+            var that = this, onBlur, onFocus, onKeydown, onInput;+            o = o || {};+            if (!o.input) {+                $.error("input is missing");+            }+            onBlur = _.bind(this._onBlur, this);+            onFocus = _.bind(this._onFocus, this);+            onKeydown = _.bind(this._onKeydown, this);+            onInput = _.bind(this._onInput, this);+            this.$hint = $(o.hint);+            this.$input = $(o.input).on("blur.tt", onBlur).on("focus.tt", onFocus).on("keydown.tt", onKeydown);+            if (this.$hint.length === 0) {+                this.setHint = this.getHint = this.clearHint = this.clearHintIfInvalid = _.noop;+            }+            if (!_.isMsie()) {+                this.$input.on("input.tt", onInput);+            } else {+                this.$input.on("keydown.tt keypress.tt cut.tt paste.tt", function($e) {+                    if (specialKeyCodeMap[$e.which || $e.keyCode]) {+                        return;+                    }+                    _.defer(_.bind(that._onInput, that, $e));+                });+            }+            this.query = this.$input.val();+            this.$overflowHelper = buildOverflowHelper(this.$input);+        }+        Input.normalizeQuery = function(str) {+            return (str || "").replace(/^\s*/g, "").replace(/\s{2,}/g, " ");+        };+        _.mixin(Input.prototype, EventEmitter, {+            _onBlur: function onBlur() {+                this.resetInputValue();+                this.trigger("blurred");+            },+            _onFocus: function onFocus() {+                this.trigger("focused");+            },+            _onKeydown: function onKeydown($e) {+                var keyName = specialKeyCodeMap[$e.which || $e.keyCode];+                this._managePreventDefault(keyName, $e);+                if (keyName && this._shouldTrigger(keyName, $e)) {+                    this.trigger(keyName + "Keyed", $e);+                }+            },+            _onInput: function onInput() {+                this._checkInputValue();+            },+            _managePreventDefault: function managePreventDefault(keyName, $e) {+                var preventDefault, hintValue, inputValue;+                switch (keyName) {+                  case "tab":+                    hintValue = this.getHint();+                    inputValue = this.getInputValue();+                    preventDefault = hintValue && hintValue !== inputValue && !withModifier($e);+                    break;++                  case "up":+                  case "down":+                    preventDefault = !withModifier($e);+                    break;++                  default:+                    preventDefault = false;+                }+                preventDefault && $e.preventDefault();+            },+            _shouldTrigger: function shouldTrigger(keyName, $e) {+                var trigger;+                switch (keyName) {+                  case "tab":+                    trigger = !withModifier($e);+                    break;++                  default:+                    trigger = true;+                }+                return trigger;+            },+            _checkInputValue: function checkInputValue() {+                var inputValue, areEquivalent, hasDifferentWhitespace;+                inputValue = this.getInputValue();+                areEquivalent = areQueriesEquivalent(inputValue, this.query);+                hasDifferentWhitespace = areEquivalent ? this.query.length !== inputValue.length : false;+                this.query = inputValue;+                if (!areEquivalent) {+                    this.trigger("queryChanged", this.query);+                } else if (hasDifferentWhitespace) {+                    this.trigger("whitespaceChanged", this.query);+                }+            },+            focus: function focus() {+                this.$input.focus();+            },+            blur: function blur() {+                this.$input.blur();+            },+            getQuery: function getQuery() {+                return this.query;+            },+            setQuery: function setQuery(query) {+                this.query = query;+            },+            getInputValue: function getInputValue() {+                return this.$input.val();+            },+            setInputValue: function setInputValue(value, silent) {+                this.$input.val(value);+                silent ? this.clearHint() : this._checkInputValue();+            },+            resetInputValue: function resetInputValue() {+                this.setInputValue(this.query, true);+            },+            getHint: function getHint() {+                return this.$hint.val();+            },+            setHint: function setHint(value) {+                this.$hint.val(value);+            },+            clearHint: function clearHint() {+                this.setHint("");+            },+            clearHintIfInvalid: function clearHintIfInvalid() {+                var val, hint, valIsPrefixOfHint, isValid;+                val = this.getInputValue();+                hint = this.getHint();+                valIsPrefixOfHint = val !== hint && hint.indexOf(val) === 0;+                isValid = val !== "" && valIsPrefixOfHint && !this.hasOverflow();+                !isValid && this.clearHint();+            },+            getLanguageDirection: function getLanguageDirection() {+                return (this.$input.css("direction") || "ltr").toLowerCase();+            },+            hasOverflow: function hasOverflow() {+                var constraint = this.$input.width() - 2;+                this.$overflowHelper.text(this.getInputValue());+                return this.$overflowHelper.width() >= constraint;+            },+            isCursorAtEnd: function() {+                var valueLength, selectionStart, range;+                valueLength = this.$input.val().length;+                selectionStart = this.$input[0].selectionStart;+                if (_.isNumber(selectionStart)) {+                    return selectionStart === valueLength;+                } else if (document.selection) {+                    range = document.selection.createRange();+                    range.moveStart("character", -valueLength);+                    return valueLength === range.text.length;+                }+                return true;+            },+            destroy: function destroy() {+                this.$hint.off(".tt");+                this.$input.off(".tt");+                this.$hint = this.$input = this.$overflowHelper = null;+            }+        });+        return Input;+        function buildOverflowHelper($input) {+            return $('<pre aria-hidden="true"></pre>').css({+                position: "absolute",+                visibility: "hidden",+                whiteSpace: "pre",+                fontFamily: $input.css("font-family"),+                fontSize: $input.css("font-size"),+                fontStyle: $input.css("font-style"),+                fontVariant: $input.css("font-variant"),+                fontWeight: $input.css("font-weight"),+                wordSpacing: $input.css("word-spacing"),+                letterSpacing: $input.css("letter-spacing"),+                textIndent: $input.css("text-indent"),+                textRendering: $input.css("text-rendering"),+                textTransform: $input.css("text-transform")+            }).insertAfter($input);+        }+        function areQueriesEquivalent(a, b) {+            return Input.normalizeQuery(a) === Input.normalizeQuery(b);+        }+        function withModifier($e) {+            return $e.altKey || $e.ctrlKey || $e.metaKey || $e.shiftKey;+        }+    }();+    var Dataset = function() {+        "use strict";+        var datasetKey = "ttDataset", valueKey = "ttValue", datumKey = "ttDatum";+        function Dataset(o) {+            o = o || {};+            o.templates = o.templates || {};+            if (!o.source) {+                $.error("missing source");+            }+            if (o.name && !isValidName(o.name)) {+                $.error("invalid dataset name: " + o.name);+            }+            this.query = null;+            this.highlight = !!o.highlight;+            this.name = o.name || _.getUniqueId();+            this.source = o.source;+            this.displayFn = getDisplayFn(o.display || o.displayKey);+            this.templates = getTemplates(o.templates, this.displayFn);+            this.$el = $(html.dataset.replace("%CLASS%", this.name));+        }+        Dataset.extractDatasetName = function extractDatasetName(el) {+            return $(el).data(datasetKey);+        };+        Dataset.extractValue = function extractDatum(el) {+            return $(el).data(valueKey);+        };+        Dataset.extractDatum = function extractDatum(el) {+            return $(el).data(datumKey);+        };+        _.mixin(Dataset.prototype, EventEmitter, {+            _render: function render(query, suggestions) {+                if (!this.$el) {+                    return;+                }+                var that = this, hasSuggestions;+                this.$el.empty();+                hasSuggestions = suggestions && suggestions.length;+                if (!hasSuggestions && this.templates.empty) {+                    this.$el.html(getEmptyHtml()).prepend(that.templates.header ? getHeaderHtml() : null).append(that.templates.footer ? getFooterHtml() : null);+                } else if (hasSuggestions) {+                    this.$el.html(getSuggestionsHtml()).prepend(that.templates.header ? getHeaderHtml() : null).append(that.templates.footer ? getFooterHtml() : null);+                }+                this.trigger("rendered");+                function getEmptyHtml() {+                    return that.templates.empty({+                        query: query,+                        isEmpty: true+                    });+                }+                function getSuggestionsHtml() {+                    var $suggestions, nodes;+                    $suggestions = $(html.suggestions).css(css.suggestions);+                    nodes = _.map(suggestions, getSuggestionNode);+                    $suggestions.append.apply($suggestions, nodes);+                    that.highlight && highlight({+                        className: "tt-highlight",+                        node: $suggestions[0],+                        pattern: query+                    });+                    return $suggestions;+                    function getSuggestionNode(suggestion) {+                        var $el;+                        $el = $(html.suggestion).append(that.templates.suggestion(suggestion)).data(datasetKey, that.name).data(valueKey, that.displayFn(suggestion)).data(datumKey, suggestion);+                        $el.children().each(function() {+                            $(this).css(css.suggestionChild);+                        });+                        return $el;+                    }+                }+                function getHeaderHtml() {+                    return that.templates.header({+                        query: query,+                        isEmpty: !hasSuggestions+                    });+                }+                function getFooterHtml() {+                    return that.templates.footer({+                        query: query,+                        isEmpty: !hasSuggestions+                    });+                }+            },+            getRoot: function getRoot() {+                return this.$el;+            },+            update: function update(query) {+                var that = this;+                this.query = query;+                this.canceled = false;+                this.source(query, render);+                function render(suggestions) {+                    if (!that.canceled && query === that.query) {+                        that._render(query, suggestions);+                    }+                }+            },+            cancel: function cancel() {+                this.canceled = true;+            },+            clear: function clear() {+                this.cancel();+                this.$el.empty();+                this.trigger("rendered");+            },+            isEmpty: function isEmpty() {+                return this.$el.is(":empty");+            },+            destroy: function destroy() {+                this.$el = null;+            }+        });+        return Dataset;+        function getDisplayFn(display) {+            display = display || "value";+            return _.isFunction(display) ? display : displayFn;+            function displayFn(obj) {+                return obj[display];+            }+        }+        function getTemplates(templates, displayFn) {+            return {+                empty: templates.empty && _.templatify(templates.empty),+                header: templates.header && _.templatify(templates.header),+                footer: templates.footer && _.templatify(templates.footer),+                suggestion: templates.suggestion || suggestionTemplate+            };+            function suggestionTemplate(context) {+                return "<p>" + displayFn(context) + "</p>";+            }+        }+        function isValidName(str) {+            return /^[_a-zA-Z0-9-]+$/.test(str);+        }+    }();+    var Dropdown = function() {+        "use strict";+        function Dropdown(o) {+            var that = this, onSuggestionClick, onSuggestionMouseEnter, onSuggestionMouseLeave;+            o = o || {};+            if (!o.menu) {+                $.error("menu is required");+            }+            this.isOpen = false;+            this.isEmpty = true;+            this.datasets = _.map(o.datasets, initializeDataset);+            onSuggestionClick = _.bind(this._onSuggestionClick, this);+            onSuggestionMouseEnter = _.bind(this._onSuggestionMouseEnter, this);+            onSuggestionMouseLeave = _.bind(this._onSuggestionMouseLeave, this);+            this.$menu = $(o.menu).on("click.tt", ".tt-suggestion", onSuggestionClick).on("mouseenter.tt", ".tt-suggestion", onSuggestionMouseEnter).on("mouseleave.tt", ".tt-suggestion", onSuggestionMouseLeave);+            _.each(this.datasets, function(dataset) {+                that.$menu.append(dataset.getRoot());+                dataset.onSync("rendered", that._onRendered, that);+            });+        }+        _.mixin(Dropdown.prototype, EventEmitter, {+            _onSuggestionClick: function onSuggestionClick($e) {+                this.trigger("suggestionClicked", $($e.currentTarget));+            },+            _onSuggestionMouseEnter: function onSuggestionMouseEnter($e) {+                this._removeCursor();+                this._setCursor($($e.currentTarget), true);+            },+            _onSuggestionMouseLeave: function onSuggestionMouseLeave() {+                this._removeCursor();+            },+            _onRendered: function onRendered() {+                this.isEmpty = _.every(this.datasets, isDatasetEmpty);+                this.isEmpty ? this._hide() : this.isOpen && this._show();+                this.trigger("datasetRendered");+                function isDatasetEmpty(dataset) {+                    return dataset.isEmpty();+                }+            },+            _hide: function() {+                this.$menu.hide();+            },+            _show: function() {+                this.$menu.css("display", "block");+            },+            _getSuggestions: function getSuggestions() {+                return this.$menu.find(".tt-suggestion");+            },+            _getCursor: function getCursor() {+                return this.$menu.find(".tt-cursor").first();+            },+            _setCursor: function setCursor($el, silent) {+                $el.first().addClass("tt-cursor");+                !silent && this.trigger("cursorMoved");+            },+            _removeCursor: function removeCursor() {+                this._getCursor().removeClass("tt-cursor");+            },+            _moveCursor: function moveCursor(increment) {+                var $suggestions, $oldCursor, newCursorIndex, $newCursor;+                if (!this.isOpen) {+                    return;+                }+                $oldCursor = this._getCursor();+                $suggestions = this._getSuggestions();+                this._removeCursor();+                newCursorIndex = $suggestions.index($oldCursor) + increment;+                newCursorIndex = (newCursorIndex + 1) % ($suggestions.length + 1) - 1;+                if (newCursorIndex === -1) {+                    this.trigger("cursorRemoved");+                    return;+                } else if (newCursorIndex < -1) {+                    newCursorIndex = $suggestions.length - 1;+                }+                this._setCursor($newCursor = $suggestions.eq(newCursorIndex));+                this._ensureVisible($newCursor);+            },+            _ensureVisible: function ensureVisible($el) {+                var elTop, elBottom, menuScrollTop, menuHeight;+                elTop = $el.position().top;+                elBottom = elTop + $el.outerHeight(true);+                menuScrollTop = this.$menu.scrollTop();+                menuHeight = this.$menu.height() + parseInt(this.$menu.css("paddingTop"), 10) + parseInt(this.$menu.css("paddingBottom"), 10);+                if (elTop < 0) {+                    this.$menu.scrollTop(menuScrollTop + elTop);+                } else if (menuHeight < elBottom) {+                    this.$menu.scrollTop(menuScrollTop + (elBottom - menuHeight));+                }+            },+            close: function close() {+                if (this.isOpen) {+                    this.isOpen = false;+                    this._removeCursor();+                    this._hide();+                    this.trigger("closed");+                }+            },+            open: function open() {+                if (!this.isOpen) {+                    this.isOpen = true;+                    !this.isEmpty && this._show();+                    this.trigger("opened");+                }+            },+            setLanguageDirection: function setLanguageDirection(dir) {+                this.$menu.css(dir === "ltr" ? css.ltr : css.rtl);+            },+            moveCursorUp: function moveCursorUp() {+                this._moveCursor(-1);+            },+            moveCursorDown: function moveCursorDown() {+                this._moveCursor(+1);+            },+            getDatumForSuggestion: function getDatumForSuggestion($el) {+                var datum = null;+                if ($el.length) {+                    datum = {+                        raw: Dataset.extractDatum($el),+                        value: Dataset.extractValue($el),+                        datasetName: Dataset.extractDatasetName($el)+                    };+                }+                return datum;+            },+            getDatumForCursor: function getDatumForCursor() {+                return this.getDatumForSuggestion(this._getCursor().first());+            },+            getDatumForTopSuggestion: function getDatumForTopSuggestion() {+                return this.getDatumForSuggestion(this._getSuggestions().first());+            },+            update: function update(query) {+                _.each(this.datasets, updateDataset);+                function updateDataset(dataset) {+                    dataset.update(query);+                }+            },+            empty: function empty() {+                _.each(this.datasets, clearDataset);+                this.isEmpty = true;+                function clearDataset(dataset) {+                    dataset.clear();+                }+            },+            isVisible: function isVisible() {+                return this.isOpen && !this.isEmpty;+            },+            destroy: function destroy() {+                this.$menu.off(".tt");+                this.$menu = null;+                _.each(this.datasets, destroyDataset);+                function destroyDataset(dataset) {+                    dataset.destroy();+                }+            }+        });+        return Dropdown;+        function initializeDataset(oDataset) {+            return new Dataset(oDataset);+        }+    }();+    var Typeahead = function() {+        "use strict";+        var attrsKey = "ttAttrs";+        function Typeahead(o) {+            var $menu, $input, $hint;+            o = o || {};+            if (!o.input) {+                $.error("missing input");+            }+            this.isActivated = false;+            this.autoselect = !!o.autoselect;+            this.minLength = _.isNumber(o.minLength) ? o.minLength : 1;+            this.$node = buildDom(o.input, o.withHint);+            $menu = this.$node.find(".tt-dropdown-menu");+            $input = this.$node.find(".tt-input");+            $hint = this.$node.find(".tt-hint");+            $input.on("blur.tt", function($e) {+                var active, isActive, hasActive;+                active = document.activeElement;+                isActive = $menu.is(active);+                hasActive = $menu.has(active).length > 0;+                if (_.isMsie() && (isActive || hasActive)) {+                    $e.preventDefault();+                    $e.stopImmediatePropagation();+                    _.defer(function() {+                        $input.focus();+                    });+                }+            });+            $menu.on("mousedown.tt", function($e) {+                $e.preventDefault();+            });+            this.eventBus = o.eventBus || new EventBus({+                el: $input+            });+            this.dropdown = new Dropdown({+                menu: $menu,+                datasets: o.datasets+            }).onSync("suggestionClicked", this._onSuggestionClicked, this).onSync("cursorMoved", this._onCursorMoved, this).onSync("cursorRemoved", this._onCursorRemoved, this).onSync("opened", this._onOpened, this).onSync("closed", this._onClosed, this).onAsync("datasetRendered", this._onDatasetRendered, this);+            this.input = new Input({+                input: $input,+                hint: $hint+            }).onSync("focused", this._onFocused, this).onSync("blurred", this._onBlurred, this).onSync("enterKeyed", this._onEnterKeyed, this).onSync("tabKeyed", this._onTabKeyed, this).onSync("escKeyed", this._onEscKeyed, this).onSync("upKeyed", this._onUpKeyed, this).onSync("downKeyed", this._onDownKeyed, this).onSync("leftKeyed", this._onLeftKeyed, this).onSync("rightKeyed", this._onRightKeyed, this).onSync("queryChanged", this._onQueryChanged, this).onSync("whitespaceChanged", this._onWhitespaceChanged, this);+            this._setLanguageDirection();+        }+        _.mixin(Typeahead.prototype, {+            _onSuggestionClicked: function onSuggestionClicked(type, $el) {+                var datum;+                if (datum = this.dropdown.getDatumForSuggestion($el)) {+                    this._select(datum);+                }+            },+            _onCursorMoved: function onCursorMoved() {+                var datum = this.dropdown.getDatumForCursor();+                this.input.setInputValue(datum.value, true);+                this.eventBus.trigger("cursorchanged", datum.raw, datum.datasetName);+            },+            _onCursorRemoved: function onCursorRemoved() {+                this.input.resetInputValue();+                this._updateHint();+            },+            _onDatasetRendered: function onDatasetRendered() {+                this._updateHint();+            },+            _onOpened: function onOpened() {+                this._updateHint();+                this.eventBus.trigger("opened");+            },+            _onClosed: function onClosed() {+                this.input.clearHint();+                this.eventBus.trigger("closed");+            },+            _onFocused: function onFocused() {+                this.isActivated = true;+                this.dropdown.open();+            },+            _onBlurred: function onBlurred() {+                this.isActivated = false;+                this.dropdown.empty();+                this.dropdown.close();+            },+            _onEnterKeyed: function onEnterKeyed(type, $e) {+                var cursorDatum, topSuggestionDatum;+                cursorDatum = this.dropdown.getDatumForCursor();+                topSuggestionDatum = this.dropdown.getDatumForTopSuggestion();+                if (cursorDatum) {+                    this._select(cursorDatum);+                    $e.preventDefault();+                } else if (this.autoselect && topSuggestionDatum) {+                    this._select(topSuggestionDatum);+                    $e.preventDefault();+                }+            },+            _onTabKeyed: function onTabKeyed(type, $e) {+                var datum;+                if (datum = this.dropdown.getDatumForCursor()) {+                    this._select(datum);+                    $e.preventDefault();+                } else {+                    this._autocomplete(true);+                }+            },+            _onEscKeyed: function onEscKeyed() {+                this.dropdown.close();+                this.input.resetInputValue();+            },+            _onUpKeyed: function onUpKeyed() {+                var query = this.input.getQuery();+                this.dropdown.isEmpty && query.length >= this.minLength ? this.dropdown.update(query) : this.dropdown.moveCursorUp();+                this.dropdown.open();+            },+            _onDownKeyed: function onDownKeyed() {+                var query = this.input.getQuery();+                this.dropdown.isEmpty && query.length >= this.minLength ? this.dropdown.update(query) : this.dropdown.moveCursorDown();+                this.dropdown.open();+            },+            _onLeftKeyed: function onLeftKeyed() {+                this.dir === "rtl" && this._autocomplete();+            },+            _onRightKeyed: function onRightKeyed() {+                this.dir === "ltr" && this._autocomplete();+            },+            _onQueryChanged: function onQueryChanged(e, query) {+                this.input.clearHintIfInvalid();+                query.length >= this.minLength ? this.dropdown.update(query) : this.dropdown.empty();+                this.dropdown.open();+                this._setLanguageDirection();+            },+            _onWhitespaceChanged: function onWhitespaceChanged() {+                this._updateHint();+                this.dropdown.open();+            },+            _setLanguageDirection: function setLanguageDirection() {+                var dir;+                if (this.dir !== (dir = this.input.getLanguageDirection())) {+                    this.dir = dir;+                    this.$node.css("direction", dir);+                    this.dropdown.setLanguageDirection(dir);+                }+            },+            _updateHint: function updateHint() {+                var datum, val, query, escapedQuery, frontMatchRegEx, match;+                datum = this.dropdown.getDatumForTopSuggestion();+                if (datum && this.dropdown.isVisible() && !this.input.hasOverflow()) {+                    val = this.input.getInputValue();+                    query = Input.normalizeQuery(val);+                    escapedQuery = _.escapeRegExChars(query);+                    frontMatchRegEx = new RegExp("^(?:" + escapedQuery + ")(.+$)", "i");+                    match = frontMatchRegEx.exec(datum.value);+                    match ? this.input.setHint(val + match[1]) : this.input.clearHint();+                } else {+                    this.input.clearHint();+                }+            },+            _autocomplete: function autocomplete(laxCursor) {+                var hint, query, isCursorAtEnd, datum;+                hint = this.input.getHint();+                query = this.input.getQuery();+                isCursorAtEnd = laxCursor || this.input.isCursorAtEnd();+                if (hint && query !== hint && isCursorAtEnd) {+                    datum = this.dropdown.getDatumForTopSuggestion();+                    datum && this.input.setInputValue(datum.value);+                    this.eventBus.trigger("autocompleted", datum.raw, datum.datasetName);+                }+            },+            _select: function select(datum) {+                this.input.setQuery(datum.value);+                this.input.setInputValue(datum.value, true);+                this._setLanguageDirection();+                this.eventBus.trigger("selected", datum.raw, datum.datasetName);+                this.dropdown.close();+                _.defer(_.bind(this.dropdown.empty, this.dropdown));+            },+            open: function open() {+                this.dropdown.open();+            },+            close: function close() {+                this.dropdown.close();+            },+            setVal: function setVal(val) {+                val = _.toStr(val);+                if (this.isActivated) {+                    this.input.setInputValue(val);+                } else {+                    this.input.setQuery(val);+                    this.input.setInputValue(val, true);+                }+                this._setLanguageDirection();+            },+            getVal: function getVal() {+                return this.input.getQuery();+            },+            destroy: function destroy() {+                this.input.destroy();+                this.dropdown.destroy();+                destroyDomStructure(this.$node);+                this.$node = null;+            }+        });+        return Typeahead;+        function buildDom(input, withHint) {+            var $input, $wrapper, $dropdown, $hint;+            $input = $(input);+            $wrapper = $(html.wrapper).css(css.wrapper);+            $dropdown = $(html.dropdown).css(css.dropdown);+            $hint = $input.clone().css(css.hint).css(getBackgroundStyles($input));+            $hint.val("").removeData().addClass("tt-hint").removeAttr("id name placeholder required").prop("readonly", true).attr({+                autocomplete: "off",+                spellcheck: "false",+                tabindex: -1+            });+            $input.data(attrsKey, {+                dir: $input.attr("dir"),+                autocomplete: $input.attr("autocomplete"),+                spellcheck: $input.attr("spellcheck"),+                style: $input.attr("style")+            });+            $input.addClass("tt-input").attr({+                autocomplete: "off",+                spellcheck: false+            }).css(withHint ? css.input : css.inputWithNoHint);+            try {+                !$input.attr("dir") && $input.attr("dir", "auto");+            } catch (e) {}+            return $input.wrap($wrapper).parent().prepend(withHint ? $hint : null).append($dropdown);+        }+        function getBackgroundStyles($el) {+            return {+                backgroundAttachment: $el.css("background-attachment"),+                backgroundClip: $el.css("background-clip"),+                backgroundColor: $el.css("background-color"),+                backgroundImage: $el.css("background-image"),+                backgroundOrigin: $el.css("background-origin"),+                backgroundPosition: $el.css("background-position"),+                backgroundRepeat: $el.css("background-repeat"),+                backgroundSize: $el.css("background-size")+            };+        }+        function destroyDomStructure($node) {+            var $input = $node.find(".tt-input");+            _.each($input.data(attrsKey), function(val, key) {+                _.isUndefined(val) ? $input.removeAttr(key) : $input.attr(key, val);+            });+            $input.detach().removeData(attrsKey).removeClass("tt-input").insertAfter($node);+            $node.remove();+        }+    }();+    (function() {+        "use strict";+        var old, typeaheadKey, methods;+        old = $.fn.typeahead;+        typeaheadKey = "ttTypeahead";+        methods = {+            initialize: function initialize(o, datasets) {+                datasets = _.isArray(datasets) ? datasets : [].slice.call(arguments, 1);+                o = o || {};+                return this.each(attach);+                function attach() {+                    var $input = $(this), eventBus, typeahead;+                    _.each(datasets, function(d) {+                        d.highlight = !!o.highlight;+                    });+                    typeahead = new Typeahead({+                        input: $input,+                        eventBus: eventBus = new EventBus({+                            el: $input+                        }),+                        withHint: _.isUndefined(o.hint) ? true : !!o.hint,+                        minLength: o.minLength,+                        autoselect: o.autoselect,+                        datasets: datasets+                    });+                    $input.data(typeaheadKey, typeahead);+                }+            },+            open: function open() {+                return this.each(openTypeahead);+                function openTypeahead() {+                    var $input = $(this), typeahead;+                    if (typeahead = $input.data(typeaheadKey)) {+                        typeahead.open();+                    }+                }+            },+            close: function close() {+                return this.each(closeTypeahead);+                function closeTypeahead() {+                    var $input = $(this), typeahead;+                    if (typeahead = $input.data(typeaheadKey)) {+                        typeahead.close();+                    }+                }+            },+            val: function val(newVal) {+                return !arguments.length ? getVal(this.first()) : this.each(setVal);+                function setVal() {+                    var $input = $(this), typeahead;+                    if (typeahead = $input.data(typeaheadKey)) {+                        typeahead.setVal(newVal);+                    }+                }+                function getVal($input) {+                    var typeahead, query;+                    if (typeahead = $input.data(typeaheadKey)) {+                        query = typeahead.getVal();+                    }+                    return query;+                }+            },+            destroy: function destroy() {+                return this.each(unattach);+                function unattach() {+                    var $input = $(this), typeahead;+                    if (typeahead = $input.data(typeaheadKey)) {+                        typeahead.destroy();+                        $input.removeData(typeaheadKey);+                    }+                }+            }+        };+        $.fn.typeahead = function(method) {+            var tts;+            if (methods[method] && method !== "initialize") {+                tts = this.filter(function() {+                    return !!$(this).data(typeaheadKey);+                });+                return methods[method].apply(tts, [].slice.call(arguments, 1));+            } else {+                return methods.initialize.apply(this, arguments);+            }+        };+        $.fn.typeahead.noConflict = function noConflict() {+            $.fn.typeahead = old;+            return this;+        };+    })();+})(window.jQuery);
+ static/js/typeahead.bundle.min.js view
@@ -0,0 +1,7 @@+/*!+ * typeahead.js 0.10.4+ * https://github.com/twitter/typeahead.js+ * Copyright 2013-2014 Twitter, Inc. and other contributors; Licensed MIT+ */++!function(a){var b=function(){"use strict";return{isMsie:function(){return/(msie|trident)/i.test(navigator.userAgent)?navigator.userAgent.match(/(msie |rv:)(\d+(.\d+)?)/i)[2]:!1},isBlankString:function(a){return!a||/^\s*$/.test(a)},escapeRegExChars:function(a){return a.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},isString:function(a){return"string"==typeof a},isNumber:function(a){return"number"==typeof a},isArray:a.isArray,isFunction:a.isFunction,isObject:a.isPlainObject,isUndefined:function(a){return"undefined"==typeof a},toStr:function(a){return b.isUndefined(a)||null===a?"":a+""},bind:a.proxy,each:function(b,c){function d(a,b){return c(b,a)}a.each(b,d)},map:a.map,filter:a.grep,every:function(b,c){var d=!0;return b?(a.each(b,function(a,e){return(d=c.call(null,e,a,b))?void 0:!1}),!!d):d},some:function(b,c){var d=!1;return b?(a.each(b,function(a,e){return(d=c.call(null,e,a,b))?!1:void 0}),!!d):d},mixin:a.extend,getUniqueId:function(){var a=0;return function(){return a++}}(),templatify:function(b){function c(){return String(b)}return a.isFunction(b)?b:c},defer:function(a){setTimeout(a,0)},debounce:function(a,b,c){var d,e;return function(){var f,g,h=this,i=arguments;return f=function(){d=null,c||(e=a.apply(h,i))},g=c&&!d,clearTimeout(d),d=setTimeout(f,b),g&&(e=a.apply(h,i)),e}},throttle:function(a,b){var c,d,e,f,g,h;return g=0,h=function(){g=new Date,e=null,f=a.apply(c,d)},function(){var i=new Date,j=b-(i-g);return c=this,d=arguments,0>=j?(clearTimeout(e),e=null,g=i,f=a.apply(c,d)):e||(e=setTimeout(h,j)),f}},noop:function(){}}}(),c="0.10.4",d=function(){"use strict";function a(a){return a=b.toStr(a),a?a.split(/\s+/):[]}function c(a){return a=b.toStr(a),a?a.split(/\W+/):[]}function d(a){return function(){var c=[].slice.call(arguments,0);return function(d){var e=[];return b.each(c,function(c){e=e.concat(a(b.toStr(d[c])))}),e}}}return{nonword:c,whitespace:a,obj:{nonword:d(c),whitespace:d(a)}}}(),e=function(){"use strict";function c(c){this.maxSize=b.isNumber(c)?c:100,this.reset(),this.maxSize<=0&&(this.set=this.get=a.noop)}function d(){this.head=this.tail=null}function e(a,b){this.key=a,this.val=b,this.prev=this.next=null}return b.mixin(c.prototype,{set:function(a,b){var c,d=this.list.tail;this.size>=this.maxSize&&(this.list.remove(d),delete this.hash[d.key]),(c=this.hash[a])?(c.val=b,this.list.moveToFront(c)):(c=new e(a,b),this.list.add(c),this.hash[a]=c,this.size++)},get:function(a){var b=this.hash[a];return b?(this.list.moveToFront(b),b.val):void 0},reset:function(){this.size=0,this.hash={},this.list=new d}}),b.mixin(d.prototype,{add:function(a){this.head&&(a.next=this.head,this.head.prev=a),this.head=a,this.tail=this.tail||a},remove:function(a){a.prev?a.prev.next=a.next:this.head=a.next,a.next?a.next.prev=a.prev:this.tail=a.prev},moveToFront:function(a){this.remove(a),this.add(a)}}),c}(),f=function(){"use strict";function a(a){this.prefix=["__",a,"__"].join(""),this.ttlKey="__ttl__",this.keyMatcher=new RegExp("^"+b.escapeRegExChars(this.prefix))}function c(){return(new Date).getTime()}function d(a){return JSON.stringify(b.isUndefined(a)?null:a)}function e(a){return JSON.parse(a)}var f,g;try{f=window.localStorage,f.setItem("~~~","!"),f.removeItem("~~~")}catch(h){f=null}return g=f&&window.JSON?{_prefix:function(a){return this.prefix+a},_ttlKey:function(a){return this._prefix(a)+this.ttlKey},get:function(a){return this.isExpired(a)&&this.remove(a),e(f.getItem(this._prefix(a)))},set:function(a,e,g){return b.isNumber(g)?f.setItem(this._ttlKey(a),d(c()+g)):f.removeItem(this._ttlKey(a)),f.setItem(this._prefix(a),d(e))},remove:function(a){return f.removeItem(this._ttlKey(a)),f.removeItem(this._prefix(a)),this},clear:function(){var a,b,c=[],d=f.length;for(a=0;d>a;a++)(b=f.key(a)).match(this.keyMatcher)&&c.push(b.replace(this.keyMatcher,""));for(a=c.length;a--;)this.remove(c[a]);return this},isExpired:function(a){var d=e(f.getItem(this._ttlKey(a)));return b.isNumber(d)&&c()>d?!0:!1}}:{get:b.noop,set:b.noop,remove:b.noop,clear:b.noop,isExpired:b.noop},b.mixin(a.prototype,g),a}(),g=function(){"use strict";function c(b){b=b||{},this.cancelled=!1,this.lastUrl=null,this._send=b.transport?d(b.transport):a.ajax,this._get=b.rateLimiter?b.rateLimiter(this._get):this._get,this._cache=b.cache===!1?new e(0):i}function d(c){return function(d,e){function f(a){b.defer(function(){h.resolve(a)})}function g(a){b.defer(function(){h.reject(a)})}var h=a.Deferred();return c(d,e,f,g),h}}var f=0,g={},h=6,i=new e(10);return c.setMaxPendingRequests=function(a){h=a},c.resetCache=function(){i.reset()},b.mixin(c.prototype,{_get:function(a,b,c){function d(b){c&&c(null,b),k._cache.set(a,b)}function e(){c&&c(!0)}function i(){f--,delete g[a],k.onDeckRequestArgs&&(k._get.apply(k,k.onDeckRequestArgs),k.onDeckRequestArgs=null)}var j,k=this;this.cancelled||a!==this.lastUrl||((j=g[a])?j.done(d).fail(e):h>f?(f++,g[a]=this._send(a,b).done(d).fail(e).always(i)):this.onDeckRequestArgs=[].slice.call(arguments,0))},get:function(a,c,d){var e;return b.isFunction(c)&&(d=c,c={}),this.cancelled=!1,this.lastUrl=a,(e=this._cache.get(a))?b.defer(function(){d&&d(null,e)}):this._get(a,c,d),!!e},cancel:function(){this.cancelled=!0}}),c}(),h=function(){"use strict";function c(b){b=b||{},b.datumTokenizer&&b.queryTokenizer||a.error("datumTokenizer and queryTokenizer are both required"),this.datumTokenizer=b.datumTokenizer,this.queryTokenizer=b.queryTokenizer,this.reset()}function d(a){return a=b.filter(a,function(a){return!!a}),a=b.map(a,function(a){return a.toLowerCase()})}function e(){return{ids:[],children:{}}}function f(a){for(var b={},c=[],d=0,e=a.length;e>d;d++)b[a[d]]||(b[a[d]]=!0,c.push(a[d]));return c}function g(a,b){function c(a,b){return a-b}var d=0,e=0,f=[];a=a.sort(c),b=b.sort(c);for(var g=a.length,h=b.length;g>d&&h>e;)a[d]<b[e]?d++:a[d]>b[e]?e++:(f.push(a[d]),d++,e++);return f}return b.mixin(c.prototype,{bootstrap:function(a){this.datums=a.datums,this.trie=a.trie},add:function(a){var c=this;a=b.isArray(a)?a:[a],b.each(a,function(a){var f,g;f=c.datums.push(a)-1,g=d(c.datumTokenizer(a)),b.each(g,function(a){var b,d,g;for(b=c.trie,d=a.split("");g=d.shift();)b=b.children[g]||(b.children[g]=e()),b.ids.push(f)})})},get:function(a){var c,e,h=this;return c=d(this.queryTokenizer(a)),b.each(c,function(a){var b,c,d,f;if(e&&0===e.length)return!1;for(b=h.trie,c=a.split("");b&&(d=c.shift());)b=b.children[d];return b&&0===c.length?(f=b.ids.slice(0),void(e=e?g(e,f):f)):(e=[],!1)}),e?b.map(f(e),function(a){return h.datums[a]}):[]},reset:function(){this.datums=[],this.trie=e()},serialize:function(){return{datums:this.datums,trie:this.trie}}}),c}(),i=function(){"use strict";function d(a){return a.local||null}function e(d){var e,f;return f={url:null,thumbprint:"",ttl:864e5,filter:null,ajax:{}},(e=d.prefetch||null)&&(e=b.isString(e)?{url:e}:e,e=b.mixin(f,e),e.thumbprint=c+e.thumbprint,e.ajax.type=e.ajax.type||"GET",e.ajax.dataType=e.ajax.dataType||"json",!e.url&&a.error("prefetch requires url to be set")),e}function f(c){function d(a){return function(c){return b.debounce(c,a)}}function e(a){return function(c){return b.throttle(c,a)}}var f,g;return g={url:null,cache:!0,wildcard:"%QUERY",replace:null,rateLimitBy:"debounce",rateLimitWait:300,send:null,filter:null,ajax:{}},(f=c.remote||null)&&(f=b.isString(f)?{url:f}:f,f=b.mixin(g,f),f.rateLimiter=/^throttle$/i.test(f.rateLimitBy)?e(f.rateLimitWait):d(f.rateLimitWait),f.ajax.type=f.ajax.type||"GET",f.ajax.dataType=f.ajax.dataType||"json",delete f.rateLimitBy,delete f.rateLimitWait,!f.url&&a.error("remote requires url to be set")),f}return{local:d,prefetch:e,remote:f}}();!function(c){"use strict";function e(b){b&&(b.local||b.prefetch||b.remote)||a.error("one of local, prefetch, or remote is required"),this.limit=b.limit||5,this.sorter=j(b.sorter),this.dupDetector=b.dupDetector||k,this.local=i.local(b),this.prefetch=i.prefetch(b),this.remote=i.remote(b),this.cacheKey=this.prefetch?this.prefetch.cacheKey||this.prefetch.url:null,this.index=new h({datumTokenizer:b.datumTokenizer,queryTokenizer:b.queryTokenizer}),this.storage=this.cacheKey?new f(this.cacheKey):null}function j(a){function c(b){return b.sort(a)}function d(a){return a}return b.isFunction(a)?c:d}function k(){return!1}var l,m;return l=c.Bloodhound,m={data:"data",protocol:"protocol",thumbprint:"thumbprint"},c.Bloodhound=e,e.noConflict=function(){return c.Bloodhound=l,e},e.tokenizers=d,b.mixin(e.prototype,{_loadPrefetch:function(b){function c(a){f.clear(),f.add(b.filter?b.filter(a):a),f._saveToStorage(f.index.serialize(),b.thumbprint,b.ttl)}var d,e,f=this;return(d=this._readFromStorage(b.thumbprint))?(this.index.bootstrap(d),e=a.Deferred().resolve()):e=a.ajax(b.url,b.ajax).done(c),e},_getFromRemote:function(a,b){function c(a,c){b(a?[]:f.remote.filter?f.remote.filter(c):c)}var d,e,f=this;if(this.transport)return a=a||"",e=encodeURIComponent(a),d=this.remote.replace?this.remote.replace(this.remote.url,a):this.remote.url.replace(this.remote.wildcard,e),this.transport.get(d,this.remote.ajax,c)},_cancelLastRemoteRequest:function(){this.transport&&this.transport.cancel()},_saveToStorage:function(a,b,c){this.storage&&(this.storage.set(m.data,a,c),this.storage.set(m.protocol,location.protocol,c),this.storage.set(m.thumbprint,b,c))},_readFromStorage:function(a){var b,c={};return this.storage&&(c.data=this.storage.get(m.data),c.protocol=this.storage.get(m.protocol),c.thumbprint=this.storage.get(m.thumbprint)),b=c.thumbprint!==a||c.protocol!==location.protocol,c.data&&!b?c.data:null},_initialize:function(){function c(){e.add(b.isFunction(f)?f():f)}var d,e=this,f=this.local;return d=this.prefetch?this._loadPrefetch(this.prefetch):a.Deferred().resolve(),f&&d.done(c),this.transport=this.remote?new g(this.remote):null,this.initPromise=d.promise()},initialize:function(a){return!this.initPromise||a?this._initialize():this.initPromise},add:function(a){this.index.add(a)},get:function(a,c){function d(a){var d=f.slice(0);b.each(a,function(a){var c;return c=b.some(d,function(b){return e.dupDetector(a,b)}),!c&&d.push(a),d.length<e.limit}),c&&c(e.sorter(d))}var e=this,f=[],g=!1;f=this.index.get(a),f=this.sorter(f).slice(0,this.limit),f.length<this.limit?g=this._getFromRemote(a,d):this._cancelLastRemoteRequest(),g||(f.length>0||!this.transport)&&c&&c(f)},clear:function(){this.index.reset()},clearPrefetchCache:function(){this.storage&&this.storage.clear()},clearRemoteCache:function(){this.transport&&g.resetCache()},ttAdapter:function(){return b.bind(this.get,this)}}),e}(this);var j=function(){return{wrapper:'<span class="twitter-typeahead"></span>',dropdown:'<span class="tt-dropdown-menu"></span>',dataset:'<div class="tt-dataset-%CLASS%"></div>',suggestions:'<span class="tt-suggestions"></span>',suggestion:'<div class="tt-suggestion"></div>'}}(),k=function(){"use strict";var a={wrapper:{position:"relative",display:"inline-block"},hint:{position:"absolute",top:"0",left:"0",borderColor:"transparent",boxShadow:"none",opacity:"1"},input:{position:"relative",verticalAlign:"top",backgroundColor:"transparent"},inputWithNoHint:{position:"relative",verticalAlign:"top"},dropdown:{position:"absolute",top:"100%",left:"0",zIndex:"100",display:"none"},suggestions:{display:"block"},suggestion:{whiteSpace:"nowrap",cursor:"pointer"},suggestionChild:{whiteSpace:"normal"},ltr:{left:"0",right:"auto"},rtl:{left:"auto",right:" 0"}};return b.isMsie()&&b.mixin(a.input,{backgroundImage:"url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)"}),b.isMsie()&&b.isMsie()<=7&&b.mixin(a.input,{marginTop:"-1px"}),a}(),l=function(){"use strict";function c(b){b&&b.el||a.error("EventBus initialized without el"),this.$el=a(b.el)}var d="typeahead:";return b.mixin(c.prototype,{trigger:function(a){var b=[].slice.call(arguments,1);this.$el.trigger(d+a,b)}}),c}(),m=function(){"use strict";function a(a,b,c,d){var e;if(!c)return this;for(b=b.split(i),c=d?h(c,d):c,this._callbacks=this._callbacks||{};e=b.shift();)this._callbacks[e]=this._callbacks[e]||{sync:[],async:[]},this._callbacks[e][a].push(c);return this}function b(b,c,d){return a.call(this,"async",b,c,d)}function c(b,c,d){return a.call(this,"sync",b,c,d)}function d(a){var b;if(!this._callbacks)return this;for(a=a.split(i);b=a.shift();)delete this._callbacks[b];return this}function e(a){var b,c,d,e,g;if(!this._callbacks)return this;for(a=a.split(i),d=[].slice.call(arguments,1);(b=a.shift())&&(c=this._callbacks[b]);)e=f(c.sync,this,[b].concat(d)),g=f(c.async,this,[b].concat(d)),e()&&j(g);return this}function f(a,b,c){function d(){for(var d,e=0,f=a.length;!d&&f>e;e+=1)d=a[e].apply(b,c)===!1;return!d}return d}function g(){var a;return a=window.setImmediate?function(a){setImmediate(function(){a()})}:function(a){setTimeout(function(){a()},0)}}function h(a,b){return a.bind?a.bind(b):function(){a.apply(b,[].slice.call(arguments,0))}}var i=/\s+/,j=g();return{onSync:c,onAsync:b,off:d,trigger:e}}(),n=function(a){"use strict";function c(a,c,d){for(var e,f=[],g=0,h=a.length;h>g;g++)f.push(b.escapeRegExChars(a[g]));return e=d?"\\b("+f.join("|")+")\\b":"("+f.join("|")+")",c?new RegExp(e):new RegExp(e,"i")}var d={node:null,pattern:null,tagName:"strong",className:null,wordsOnly:!1,caseSensitive:!1};return function(e){function f(b){var c,d,f;return(c=h.exec(b.data))&&(f=a.createElement(e.tagName),e.className&&(f.className=e.className),d=b.splitText(c.index),d.splitText(c[0].length),f.appendChild(d.cloneNode(!0)),b.parentNode.replaceChild(f,d)),!!c}function g(a,b){for(var c,d=3,e=0;e<a.childNodes.length;e++)c=a.childNodes[e],c.nodeType===d?e+=b(c)?1:0:g(c,b)}var h;e=b.mixin({},d,e),e.node&&e.pattern&&(e.pattern=b.isArray(e.pattern)?e.pattern:[e.pattern],h=c(e.pattern,e.caseSensitive,e.wordsOnly),g(e.node,f))}}(window.document),o=function(){"use strict";function c(c){var e,f,h,i,j=this;c=c||{},c.input||a.error("input is missing"),e=b.bind(this._onBlur,this),f=b.bind(this._onFocus,this),h=b.bind(this._onKeydown,this),i=b.bind(this._onInput,this),this.$hint=a(c.hint),this.$input=a(c.input).on("blur.tt",e).on("focus.tt",f).on("keydown.tt",h),0===this.$hint.length&&(this.setHint=this.getHint=this.clearHint=this.clearHintIfInvalid=b.noop),b.isMsie()?this.$input.on("keydown.tt keypress.tt cut.tt paste.tt",function(a){g[a.which||a.keyCode]||b.defer(b.bind(j._onInput,j,a))}):this.$input.on("input.tt",i),this.query=this.$input.val(),this.$overflowHelper=d(this.$input)}function d(b){return a('<pre aria-hidden="true"></pre>').css({position:"absolute",visibility:"hidden",whiteSpace:"pre",fontFamily:b.css("font-family"),fontSize:b.css("font-size"),fontStyle:b.css("font-style"),fontVariant:b.css("font-variant"),fontWeight:b.css("font-weight"),wordSpacing:b.css("word-spacing"),letterSpacing:b.css("letter-spacing"),textIndent:b.css("text-indent"),textRendering:b.css("text-rendering"),textTransform:b.css("text-transform")}).insertAfter(b)}function e(a,b){return c.normalizeQuery(a)===c.normalizeQuery(b)}function f(a){return a.altKey||a.ctrlKey||a.metaKey||a.shiftKey}var g;return g={9:"tab",27:"esc",37:"left",39:"right",13:"enter",38:"up",40:"down"},c.normalizeQuery=function(a){return(a||"").replace(/^\s*/g,"").replace(/\s{2,}/g," ")},b.mixin(c.prototype,m,{_onBlur:function(){this.resetInputValue(),this.trigger("blurred")},_onFocus:function(){this.trigger("focused")},_onKeydown:function(a){var b=g[a.which||a.keyCode];this._managePreventDefault(b,a),b&&this._shouldTrigger(b,a)&&this.trigger(b+"Keyed",a)},_onInput:function(){this._checkInputValue()},_managePreventDefault:function(a,b){var c,d,e;switch(a){case"tab":d=this.getHint(),e=this.getInputValue(),c=d&&d!==e&&!f(b);break;case"up":case"down":c=!f(b);break;default:c=!1}c&&b.preventDefault()},_shouldTrigger:function(a,b){var c;switch(a){case"tab":c=!f(b);break;default:c=!0}return c},_checkInputValue:function(){var a,b,c;a=this.getInputValue(),b=e(a,this.query),c=b?this.query.length!==a.length:!1,this.query=a,b?c&&this.trigger("whitespaceChanged",this.query):this.trigger("queryChanged",this.query)},focus:function(){this.$input.focus()},blur:function(){this.$input.blur()},getQuery:function(){return this.query},setQuery:function(a){this.query=a},getInputValue:function(){return this.$input.val()},setInputValue:function(a,b){this.$input.val(a),b?this.clearHint():this._checkInputValue()},resetInputValue:function(){this.setInputValue(this.query,!0)},getHint:function(){return this.$hint.val()},setHint:function(a){this.$hint.val(a)},clearHint:function(){this.setHint("")},clearHintIfInvalid:function(){var a,b,c,d;a=this.getInputValue(),b=this.getHint(),c=a!==b&&0===b.indexOf(a),d=""!==a&&c&&!this.hasOverflow(),!d&&this.clearHint()},getLanguageDirection:function(){return(this.$input.css("direction")||"ltr").toLowerCase()},hasOverflow:function(){var a=this.$input.width()-2;return this.$overflowHelper.text(this.getInputValue()),this.$overflowHelper.width()>=a},isCursorAtEnd:function(){var a,c,d;return a=this.$input.val().length,c=this.$input[0].selectionStart,b.isNumber(c)?c===a:document.selection?(d=document.selection.createRange(),d.moveStart("character",-a),a===d.text.length):!0},destroy:function(){this.$hint.off(".tt"),this.$input.off(".tt"),this.$hint=this.$input=this.$overflowHelper=null}}),c}(),p=function(){"use strict";function c(c){c=c||{},c.templates=c.templates||{},c.source||a.error("missing source"),c.name&&!f(c.name)&&a.error("invalid dataset name: "+c.name),this.query=null,this.highlight=!!c.highlight,this.name=c.name||b.getUniqueId(),this.source=c.source,this.displayFn=d(c.display||c.displayKey),this.templates=e(c.templates,this.displayFn),this.$el=a(j.dataset.replace("%CLASS%",this.name))}function d(a){function c(b){return b[a]}return a=a||"value",b.isFunction(a)?a:c}function e(a,c){function d(a){return"<p>"+c(a)+"</p>"}return{empty:a.empty&&b.templatify(a.empty),header:a.header&&b.templatify(a.header),footer:a.footer&&b.templatify(a.footer),suggestion:a.suggestion||d}}function f(a){return/^[_a-zA-Z0-9-]+$/.test(a)}var g="ttDataset",h="ttValue",i="ttDatum";return c.extractDatasetName=function(b){return a(b).data(g)},c.extractValue=function(b){return a(b).data(h)},c.extractDatum=function(b){return a(b).data(i)},b.mixin(c.prototype,m,{_render:function(c,d){function e(){return p.templates.empty({query:c,isEmpty:!0})}function f(){function e(b){var c;return c=a(j.suggestion).append(p.templates.suggestion(b)).data(g,p.name).data(h,p.displayFn(b)).data(i,b),c.children().each(function(){a(this).css(k.suggestionChild)}),c}var f,l;return f=a(j.suggestions).css(k.suggestions),l=b.map(d,e),f.append.apply(f,l),p.highlight&&n({className:"tt-highlight",node:f[0],pattern:c}),f}function l(){return p.templates.header({query:c,isEmpty:!o})}function m(){return p.templates.footer({query:c,isEmpty:!o})}if(this.$el){var o,p=this;this.$el.empty(),o=d&&d.length,!o&&this.templates.empty?this.$el.html(e()).prepend(p.templates.header?l():null).append(p.templates.footer?m():null):o&&this.$el.html(f()).prepend(p.templates.header?l():null).append(p.templates.footer?m():null),this.trigger("rendered")}},getRoot:function(){return this.$el},update:function(a){function b(b){c.canceled||a!==c.query||c._render(a,b)}var c=this;this.query=a,this.canceled=!1,this.source(a,b)},cancel:function(){this.canceled=!0},clear:function(){this.cancel(),this.$el.empty(),this.trigger("rendered")},isEmpty:function(){return this.$el.is(":empty")},destroy:function(){this.$el=null}}),c}(),q=function(){"use strict";function c(c){var e,f,g,h=this;c=c||{},c.menu||a.error("menu is required"),this.isOpen=!1,this.isEmpty=!0,this.datasets=b.map(c.datasets,d),e=b.bind(this._onSuggestionClick,this),f=b.bind(this._onSuggestionMouseEnter,this),g=b.bind(this._onSuggestionMouseLeave,this),this.$menu=a(c.menu).on("click.tt",".tt-suggestion",e).on("mouseenter.tt",".tt-suggestion",f).on("mouseleave.tt",".tt-suggestion",g),b.each(this.datasets,function(a){h.$menu.append(a.getRoot()),a.onSync("rendered",h._onRendered,h)})}function d(a){return new p(a)}return b.mixin(c.prototype,m,{_onSuggestionClick:function(b){this.trigger("suggestionClicked",a(b.currentTarget))},_onSuggestionMouseEnter:function(b){this._removeCursor(),this._setCursor(a(b.currentTarget),!0)},_onSuggestionMouseLeave:function(){this._removeCursor()},_onRendered:function(){function a(a){return a.isEmpty()}this.isEmpty=b.every(this.datasets,a),this.isEmpty?this._hide():this.isOpen&&this._show(),this.trigger("datasetRendered")},_hide:function(){this.$menu.hide()},_show:function(){this.$menu.css("display","block")},_getSuggestions:function(){return this.$menu.find(".tt-suggestion")},_getCursor:function(){return this.$menu.find(".tt-cursor").first()},_setCursor:function(a,b){a.first().addClass("tt-cursor"),!b&&this.trigger("cursorMoved")},_removeCursor:function(){this._getCursor().removeClass("tt-cursor")},_moveCursor:function(a){var b,c,d,e;if(this.isOpen){if(c=this._getCursor(),b=this._getSuggestions(),this._removeCursor(),d=b.index(c)+a,d=(d+1)%(b.length+1)-1,-1===d)return void this.trigger("cursorRemoved");-1>d&&(d=b.length-1),this._setCursor(e=b.eq(d)),this._ensureVisible(e)}},_ensureVisible:function(a){var b,c,d,e;b=a.position().top,c=b+a.outerHeight(!0),d=this.$menu.scrollTop(),e=this.$menu.height()+parseInt(this.$menu.css("paddingTop"),10)+parseInt(this.$menu.css("paddingBottom"),10),0>b?this.$menu.scrollTop(d+b):c>e&&this.$menu.scrollTop(d+(c-e))},close:function(){this.isOpen&&(this.isOpen=!1,this._removeCursor(),this._hide(),this.trigger("closed"))},open:function(){this.isOpen||(this.isOpen=!0,!this.isEmpty&&this._show(),this.trigger("opened"))},setLanguageDirection:function(a){this.$menu.css("ltr"===a?k.ltr:k.rtl)},moveCursorUp:function(){this._moveCursor(-1)},moveCursorDown:function(){this._moveCursor(1)},getDatumForSuggestion:function(a){var b=null;return a.length&&(b={raw:p.extractDatum(a),value:p.extractValue(a),datasetName:p.extractDatasetName(a)}),b},getDatumForCursor:function(){return this.getDatumForSuggestion(this._getCursor().first())},getDatumForTopSuggestion:function(){return this.getDatumForSuggestion(this._getSuggestions().first())},update:function(a){function c(b){b.update(a)}b.each(this.datasets,c)},empty:function(){function a(a){a.clear()}b.each(this.datasets,a),this.isEmpty=!0},isVisible:function(){return this.isOpen&&!this.isEmpty},destroy:function(){function a(a){a.destroy()}this.$menu.off(".tt"),this.$menu=null,b.each(this.datasets,a)}}),c}(),r=function(){"use strict";function c(c){var e,f,g;c=c||{},c.input||a.error("missing input"),this.isActivated=!1,this.autoselect=!!c.autoselect,this.minLength=b.isNumber(c.minLength)?c.minLength:1,this.$node=d(c.input,c.withHint),e=this.$node.find(".tt-dropdown-menu"),f=this.$node.find(".tt-input"),g=this.$node.find(".tt-hint"),f.on("blur.tt",function(a){var c,d,g;c=document.activeElement,d=e.is(c),g=e.has(c).length>0,b.isMsie()&&(d||g)&&(a.preventDefault(),a.stopImmediatePropagation(),b.defer(function(){f.focus()}))}),e.on("mousedown.tt",function(a){a.preventDefault()}),this.eventBus=c.eventBus||new l({el:f}),this.dropdown=new q({menu:e,datasets:c.datasets}).onSync("suggestionClicked",this._onSuggestionClicked,this).onSync("cursorMoved",this._onCursorMoved,this).onSync("cursorRemoved",this._onCursorRemoved,this).onSync("opened",this._onOpened,this).onSync("closed",this._onClosed,this).onAsync("datasetRendered",this._onDatasetRendered,this),this.input=new o({input:f,hint:g}).onSync("focused",this._onFocused,this).onSync("blurred",this._onBlurred,this).onSync("enterKeyed",this._onEnterKeyed,this).onSync("tabKeyed",this._onTabKeyed,this).onSync("escKeyed",this._onEscKeyed,this).onSync("upKeyed",this._onUpKeyed,this).onSync("downKeyed",this._onDownKeyed,this).onSync("leftKeyed",this._onLeftKeyed,this).onSync("rightKeyed",this._onRightKeyed,this).onSync("queryChanged",this._onQueryChanged,this).onSync("whitespaceChanged",this._onWhitespaceChanged,this),this._setLanguageDirection()}function d(b,c){var d,f,h,i;d=a(b),f=a(j.wrapper).css(k.wrapper),h=a(j.dropdown).css(k.dropdown),i=d.clone().css(k.hint).css(e(d)),i.val("").removeData().addClass("tt-hint").removeAttr("id name placeholder required").prop("readonly",!0).attr({autocomplete:"off",spellcheck:"false",tabindex:-1}),d.data(g,{dir:d.attr("dir"),autocomplete:d.attr("autocomplete"),spellcheck:d.attr("spellcheck"),style:d.attr("style")}),d.addClass("tt-input").attr({autocomplete:"off",spellcheck:!1}).css(c?k.input:k.inputWithNoHint);try{!d.attr("dir")&&d.attr("dir","auto")}catch(l){}return d.wrap(f).parent().prepend(c?i:null).append(h)}function e(a){return{backgroundAttachment:a.css("background-attachment"),backgroundClip:a.css("background-clip"),backgroundColor:a.css("background-color"),backgroundImage:a.css("background-image"),backgroundOrigin:a.css("background-origin"),backgroundPosition:a.css("background-position"),backgroundRepeat:a.css("background-repeat"),backgroundSize:a.css("background-size")}}function f(a){var c=a.find(".tt-input");b.each(c.data(g),function(a,d){b.isUndefined(a)?c.removeAttr(d):c.attr(d,a)}),c.detach().removeData(g).removeClass("tt-input").insertAfter(a),a.remove()}var g="ttAttrs";return b.mixin(c.prototype,{_onSuggestionClicked:function(a,b){var c;(c=this.dropdown.getDatumForSuggestion(b))&&this._select(c)},_onCursorMoved:function(){var a=this.dropdown.getDatumForCursor();this.input.setInputValue(a.value,!0),this.eventBus.trigger("cursorchanged",a.raw,a.datasetName)},_onCursorRemoved:function(){this.input.resetInputValue(),this._updateHint()},_onDatasetRendered:function(){this._updateHint()},_onOpened:function(){this._updateHint(),this.eventBus.trigger("opened")},_onClosed:function(){this.input.clearHint(),this.eventBus.trigger("closed")},_onFocused:function(){this.isActivated=!0,this.dropdown.open()},_onBlurred:function(){this.isActivated=!1,this.dropdown.empty(),this.dropdown.close()},_onEnterKeyed:function(a,b){var c,d;c=this.dropdown.getDatumForCursor(),d=this.dropdown.getDatumForTopSuggestion(),c?(this._select(c),b.preventDefault()):this.autoselect&&d&&(this._select(d),b.preventDefault())},_onTabKeyed:function(a,b){var c;(c=this.dropdown.getDatumForCursor())?(this._select(c),b.preventDefault()):this._autocomplete(!0)},_onEscKeyed:function(){this.dropdown.close(),this.input.resetInputValue()},_onUpKeyed:function(){var a=this.input.getQuery();this.dropdown.isEmpty&&a.length>=this.minLength?this.dropdown.update(a):this.dropdown.moveCursorUp(),this.dropdown.open()},_onDownKeyed:function(){var a=this.input.getQuery();this.dropdown.isEmpty&&a.length>=this.minLength?this.dropdown.update(a):this.dropdown.moveCursorDown(),this.dropdown.open()},_onLeftKeyed:function(){"rtl"===this.dir&&this._autocomplete()},_onRightKeyed:function(){"ltr"===this.dir&&this._autocomplete()},_onQueryChanged:function(a,b){this.input.clearHintIfInvalid(),b.length>=this.minLength?this.dropdown.update(b):this.dropdown.empty(),this.dropdown.open(),this._setLanguageDirection()},_onWhitespaceChanged:function(){this._updateHint(),this.dropdown.open()},_setLanguageDirection:function(){var a;this.dir!==(a=this.input.getLanguageDirection())&&(this.dir=a,this.$node.css("direction",a),this.dropdown.setLanguageDirection(a))},_updateHint:function(){var a,c,d,e,f,g;a=this.dropdown.getDatumForTopSuggestion(),a&&this.dropdown.isVisible()&&!this.input.hasOverflow()?(c=this.input.getInputValue(),d=o.normalizeQuery(c),e=b.escapeRegExChars(d),f=new RegExp("^(?:"+e+")(.+$)","i"),g=f.exec(a.value),g?this.input.setHint(c+g[1]):this.input.clearHint()):this.input.clearHint()},_autocomplete:function(a){var b,c,d,e;b=this.input.getHint(),c=this.input.getQuery(),d=a||this.input.isCursorAtEnd(),b&&c!==b&&d&&(e=this.dropdown.getDatumForTopSuggestion(),e&&this.input.setInputValue(e.value),this.eventBus.trigger("autocompleted",e.raw,e.datasetName))},_select:function(a){this.input.setQuery(a.value),this.input.setInputValue(a.value,!0),this._setLanguageDirection(),this.eventBus.trigger("selected",a.raw,a.datasetName),this.dropdown.close(),b.defer(b.bind(this.dropdown.empty,this.dropdown))},open:function(){this.dropdown.open()},close:function(){this.dropdown.close()},setVal:function(a){a=b.toStr(a),this.isActivated?this.input.setInputValue(a):(this.input.setQuery(a),this.input.setInputValue(a,!0)),this._setLanguageDirection()},getVal:function(){return this.input.getQuery()},destroy:function(){this.input.destroy(),this.dropdown.destroy(),f(this.$node),this.$node=null}}),c}();!function(){"use strict";var c,d,e;c=a.fn.typeahead,d="ttTypeahead",e={initialize:function(c,e){function f(){var f,g,h=a(this);b.each(e,function(a){a.highlight=!!c.highlight}),g=new r({input:h,eventBus:f=new l({el:h}),withHint:b.isUndefined(c.hint)?!0:!!c.hint,minLength:c.minLength,autoselect:c.autoselect,datasets:e}),h.data(d,g)}return e=b.isArray(e)?e:[].slice.call(arguments,1),c=c||{},this.each(f)},open:function(){function b(){var b,c=a(this);(b=c.data(d))&&b.open()}return this.each(b)},close:function(){function b(){var b,c=a(this);(b=c.data(d))&&b.close()}return this.each(b)},val:function(b){function c(){var c,e=a(this);(c=e.data(d))&&c.setVal(b)}function e(a){var b,c;return(b=a.data(d))&&(c=b.getVal()),c}return arguments.length?this.each(c):e(this.first())},destroy:function(){function b(){var b,c=a(this);(b=c.data(d))&&(b.destroy(),c.removeData(d))}return this.each(b)}},a.fn.typeahead=function(b){var c;return e[b]&&"initialize"!==b?(c=this.filter(function(){return!!a(this).data(d)}),e[b].apply(c,[].slice.call(arguments,1))):e.initialize.apply(this,arguments)},a.fn.typeahead.noConflict=function(){return a.fn.typeahead=c,this}}()}(window.jQuery);
− static/select2-spinner.gif

binary file changed (1849 → absent bytes)

− static/select2.css
@@ -1,652 +0,0 @@-/*-Version: 3.4.0 Timestamp: Tue May 14 08:27:33 PDT 2013-*/-.select2-container {-    margin: 0;-    position: relative;-    display: inline-block;-    /* inline-block for ie7 */-    zoom: 1;-    *display: inline;-    vertical-align: middle;-}--.select2-container,-.select2-drop,-.select2-search,-.select2-search input{-  /*-    Force border-box so that % widths fit the parent-    container without overlap because of margin/padding.--    More Info : http://www.quirksmode.org/css/box.html-  */-  -webkit-box-sizing: border-box; /* webkit */-   -khtml-box-sizing: border-box; /* konqueror */-     -moz-box-sizing: border-box; /* firefox */-      -ms-box-sizing: border-box; /* ie */-          box-sizing: border-box; /* css3 */-}--.select2-container .select2-choice {-    display: block;-    height: 26px;-    padding: 0 0 0 8px;-    overflow: hidden;-    position: relative;--    border: 1px solid #aaa;-    white-space: nowrap;-    line-height: 26px;-    color: #444;-    text-decoration: none;--    -webkit-border-radius: 4px;-       -moz-border-radius: 4px;-            border-radius: 4px;--    -webkit-background-clip: padding-box;-       -moz-background-clip: padding;-            background-clip: padding-box;--    -webkit-touch-callout: none;-      -webkit-user-select: none;-       -khtml-user-select: none;-         -moz-user-select: none;-          -ms-user-select: none;-              user-select: none;--    background-color: #fff;-    background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #eeeeee), color-stop(0.5, white));-    background-image: -webkit-linear-gradient(center bottom, #eeeeee 0%, white 50%);-    background-image: -moz-linear-gradient(center bottom, #eeeeee 0%, white 50%);-    background-image: -o-linear-gradient(bottom, #eeeeee 0%, #ffffff 50%);-    background-image: -ms-linear-gradient(top, #ffffff 0%, #eeeeee 50%);-    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#ffffff', endColorstr = '#eeeeee', GradientType = 0);-    background-image: linear-gradient(top, #ffffff 0%, #eeeeee 50%);-}--.select2-container.select2-drop-above .select2-choice {-    border-bottom-color: #aaa;--    -webkit-border-radius:0 0 4px 4px;-       -moz-border-radius:0 0 4px 4px;-            border-radius:0 0 4px 4px;--    background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #eeeeee), color-stop(0.9, white));-    background-image: -webkit-linear-gradient(center bottom, #eeeeee 0%, white 90%);-    background-image: -moz-linear-gradient(center bottom, #eeeeee 0%, white 90%);-    background-image: -o-linear-gradient(bottom, #eeeeee 0%, white 90%);-    background-image: -ms-linear-gradient(top, #eeeeee 0%,#ffffff 90%);-    filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#eeeeee',GradientType=0 );-    background-image: linear-gradient(top, #eeeeee 0%,#ffffff 90%);-}--.select2-container.select2-allowclear .select2-choice span {-    margin-right: 42px;-}--.select2-container .select2-choice span {-    margin-right: 26px;-    display: block;-    overflow: hidden;--    white-space: nowrap;--    -ms-text-overflow: ellipsis;-     -o-text-overflow: ellipsis;-        text-overflow: ellipsis;-}--.select2-container .select2-choice abbr {-    display: none;-    width: 12px;-    height: 12px;-    position: absolute;-    right: 24px;-    top: 8px;--    font-size: 1px;-    text-decoration: none;--    border: 0;-    background: url('select2.png') right top no-repeat;-    cursor: pointer;-    outline: 0;-}--.select2-container.select2-allowclear .select2-choice abbr {-    display: inline-block;-}--.select2-container .select2-choice abbr:hover {-    background-position: right -11px;-    cursor: pointer;-}--.select2-drop-mask {-    position: absolute;-    left: 0;-    top: 0;-    z-index: 9998;-}--.select2-drop {-    width: 100%;-    margin-top:-1px;-    position: absolute;-    z-index: 9999;-    top: 100%;--    background: #fff;-    color: #000;-    border: 1px solid #aaa;-    border-top: 0;--    -webkit-border-radius: 0 0 4px 4px;-       -moz-border-radius: 0 0 4px 4px;-            border-radius: 0 0 4px 4px;--    -webkit-box-shadow: 0 4px 5px rgba(0, 0, 0, .15);-       -moz-box-shadow: 0 4px 5px rgba(0, 0, 0, .15);-            box-shadow: 0 4px 5px rgba(0, 0, 0, .15);-}--.select2-drop-auto-width {-    border-top: 1px solid #aaa;-    width: auto;-}--.select2-drop-auto-width .select2-search {-    padding-top: 4px;-}--.select2-drop.select2-drop-above {-    margin-top: 1px;-    border-top: 1px solid #aaa;-    border-bottom: 0;--    -webkit-border-radius: 4px 4px 0 0;-       -moz-border-radius: 4px 4px 0 0;-            border-radius: 4px 4px 0 0;--    -webkit-box-shadow: 0 -4px 5px rgba(0, 0, 0, .15);-       -moz-box-shadow: 0 -4px 5px rgba(0, 0, 0, .15);-            box-shadow: 0 -4px 5px rgba(0, 0, 0, .15);-}--.select2-container .select2-choice div {-    display: inline-block;-    width: 18px;-    height: 100%;-    position: absolute;-    right: 0;-    top: 0;--    border-left: 1px solid #aaa;-    -webkit-border-radius: 0 4px 4px 0;-       -moz-border-radius: 0 4px 4px 0;-            border-radius: 0 4px 4px 0;--    -webkit-background-clip: padding-box;-       -moz-background-clip: padding;-            background-clip: padding-box;--    background: #ccc;-    background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #ccc), color-stop(0.6, #eee));-    background-image: -webkit-linear-gradient(center bottom, #ccc 0%, #eee 60%);-    background-image: -moz-linear-gradient(center bottom, #ccc 0%, #eee 60%);-    background-image: -o-linear-gradient(bottom, #ccc 0%, #eee 60%);-    background-image: -ms-linear-gradient(top, #cccccc 0%, #eeeeee 60%);-    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#eeeeee', endColorstr = '#cccccc', GradientType = 0);-    background-image: linear-gradient(top, #cccccc 0%, #eeeeee 60%);-}--.select2-container .select2-choice div b {-    display: block;-    width: 100%;-    height: 100%;-    background: url('select2.png') no-repeat 0 1px;-}--.select2-search {-    display: inline-block;-    width: 100%;-    min-height: 26px;-    margin: 0;-    padding-left: 4px;-    padding-right: 4px;--    position: relative;-    z-index: 10000;--    white-space: nowrap;-}--.select2-search input {-    width: 100%;-    height: auto !important;-    min-height: 26px;-    padding: 4px 20px 4px 5px;-    margin: 0;--    outline: 0;-    font-family: sans-serif;-    font-size: 1em;--    border: 1px solid #aaa;-    -webkit-border-radius: 0;-       -moz-border-radius: 0;-            border-radius: 0;--    -webkit-box-shadow: none;-       -moz-box-shadow: none;-            box-shadow: none;--    background: #fff url('select2.png') no-repeat 100% -22px;-    background: url('select2.png') no-repeat 100% -22px, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, white), color-stop(0.99, #eeeeee));-    background: url('select2.png') no-repeat 100% -22px, -webkit-linear-gradient(center bottom, white 85%, #eeeeee 99%);-    background: url('select2.png') no-repeat 100% -22px, -moz-linear-gradient(center bottom, white 85%, #eeeeee 99%);-    background: url('select2.png') no-repeat 100% -22px, -o-linear-gradient(bottom, white 85%, #eeeeee 99%);-    background: url('select2.png') no-repeat 100% -22px, -ms-linear-gradient(top, #ffffff 85%, #eeeeee 99%);-    background: url('select2.png') no-repeat 100% -22px, linear-gradient(top, #ffffff 85%, #eeeeee 99%);-}--.select2-drop.select2-drop-above .select2-search input {-    margin-top: 4px;-}--.select2-search input.select2-active {-    background: #fff url('select2-spinner.gif') no-repeat 100%;-    background: url('select2-spinner.gif') no-repeat 100%, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, white), color-stop(0.99, #eeeeee));-    background: url('select2-spinner.gif') no-repeat 100%, -webkit-linear-gradient(center bottom, white 85%, #eeeeee 99%);-    background: url('select2-spinner.gif') no-repeat 100%, -moz-linear-gradient(center bottom, white 85%, #eeeeee 99%);-    background: url('select2-spinner.gif') no-repeat 100%, -o-linear-gradient(bottom, white 85%, #eeeeee 99%);-    background: url('select2-spinner.gif') no-repeat 100%, -ms-linear-gradient(top, #ffffff 85%, #eeeeee 99%);-    background: url('select2-spinner.gif') no-repeat 100%, linear-gradient(top, #ffffff 85%, #eeeeee 99%);-}--.select2-container-active .select2-choice,-.select2-container-active .select2-choices {-    border: 1px solid #5897fb;-    outline: none;--    -webkit-box-shadow: 0 0 5px rgba(0,0,0,.3);-       -moz-box-shadow: 0 0 5px rgba(0,0,0,.3);-            box-shadow: 0 0 5px rgba(0,0,0,.3);-}--.select2-dropdown-open .select2-choice {-    border-bottom-color: transparent;-    -webkit-box-shadow: 0 1px 0 #fff inset;-       -moz-box-shadow: 0 1px 0 #fff inset;-            box-shadow: 0 1px 0 #fff inset;--    -webkit-border-bottom-left-radius: 0;-        -moz-border-radius-bottomleft: 0;-            border-bottom-left-radius: 0;--    -webkit-border-bottom-right-radius: 0;-        -moz-border-radius-bottomright: 0;-            border-bottom-right-radius: 0;--    background-color: #eee;-    background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, white), color-stop(0.5, #eeeeee));-    background-image: -webkit-linear-gradient(center bottom, white 0%, #eeeeee 50%);-    background-image: -moz-linear-gradient(center bottom, white 0%, #eeeeee 50%);-    background-image: -o-linear-gradient(bottom, white 0%, #eeeeee 50%);-    background-image: -ms-linear-gradient(top, #ffffff 0%,#eeeeee 50%);-    filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#eeeeee', endColorstr='#ffffff',GradientType=0 );-    background-image: linear-gradient(top, #ffffff 0%,#eeeeee 50%);-}--.select2-dropdown-open.select2-drop-above .select2-choice,-.select2-dropdown-open.select2-drop-above .select2-choices {-    border: 1px solid #5897fb;-    border-top-color: transparent;--    background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, white), color-stop(0.5, #eeeeee));-    background-image: -webkit-linear-gradient(center top, white 0%, #eeeeee 50%);-    background-image: -moz-linear-gradient(center top, white 0%, #eeeeee 50%);-    background-image: -o-linear-gradient(top, white 0%, #eeeeee 50%);-    background-image: -ms-linear-gradient(bottom, #ffffff 0%,#eeeeee 50%);-    filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#eeeeee', endColorstr='#ffffff',GradientType=0 );-    background-image: linear-gradient(bottom, #ffffff 0%,#eeeeee 50%);-}--.select2-dropdown-open .select2-choice div {-    background: transparent;-    border-left: none;-    filter: none;-}-.select2-dropdown-open .select2-choice div b {-    background-position: -18px 1px;-}--/* results */-.select2-results {-    max-height: 200px;-    padding: 0 0 0 4px;-    margin: 4px 4px 4px 0;-    position: relative;-    overflow-x: hidden;-    overflow-y: auto;-    -webkit-tap-highlight-color: rgba(0,0,0,0);-}--.select2-results ul.select2-result-sub {-    margin: 0;-    padding-left: 0;-}--.select2-results ul.select2-result-sub > li .select2-result-label { padding-left: 20px }-.select2-results ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 40px }-.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 60px }-.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 80px }-.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 100px }-.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 110px }-.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 120px }--.select2-results li {-    list-style: none;-    display: list-item;-    background-image: none;-}--.select2-results li.select2-result-with-children > .select2-result-label {-    font-weight: bold;-}--.select2-results .select2-result-label {-    padding: 3px 7px 4px;-    margin: 0;-    cursor: pointer;--    min-height: 1em;--    -webkit-touch-callout: none;-      -webkit-user-select: none;-       -khtml-user-select: none;-         -moz-user-select: none;-          -ms-user-select: none;-              user-select: none;-}--.select2-results .select2-highlighted {-    background: #3875d7;-    color: #fff;-}--.select2-results li em {-    background: #feffde;-    font-style: normal;-}--.select2-results .select2-highlighted em {-    background: transparent;-}--.select2-results .select2-highlighted ul {-    background: white;-    color: #000;-}---.select2-results .select2-no-results,-.select2-results .select2-searching,-.select2-results .select2-selection-limit {-    background: #f4f4f4;-    display: list-item;-}--/*-disabled look for disabled choices in the results dropdown-*/-.select2-results .select2-disabled.select2-highlighted {-    color: #666;-    background: #f4f4f4;-    display: list-item;-    cursor: default;-}-.select2-results .select2-disabled {-  background: #f4f4f4;-  display: list-item;-  cursor: default;-}--.select2-results .select2-selected {-    display: none;-}--.select2-more-results.select2-active {-    background: #f4f4f4 url('select2-spinner.gif') no-repeat 100%;-}--.select2-more-results {-    background: #f4f4f4;-    display: list-item;-}--/* disabled styles */--.select2-container.select2-container-disabled .select2-choice {-    background-color: #f4f4f4;-    background-image: none;-    border: 1px solid #ddd;-    cursor: default;-}--.select2-container.select2-container-disabled .select2-choice div {-    background-color: #f4f4f4;-    background-image: none;-    border-left: 0;-}--.select2-container.select2-container-disabled .select2-choice abbr {-    display: none;-}---/* multiselect */--.select2-container-multi .select2-choices {-    height: auto !important;-    height: 1%;-    margin: 0;-    padding: 0;-    position: relative;--    border: 1px solid #aaa;-    cursor: text;-    overflow: hidden;--    background-color: #fff;-    background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(1%, #eeeeee), color-stop(15%, #ffffff));-    background-image: -webkit-linear-gradient(top, #eeeeee 1%, #ffffff 15%);-    background-image: -moz-linear-gradient(top, #eeeeee 1%, #ffffff 15%);-    background-image: -o-linear-gradient(top, #eeeeee 1%, #ffffff 15%);-    background-image: -ms-linear-gradient(top, #eeeeee 1%, #ffffff 15%);-    background-image: linear-gradient(top, #eeeeee 1%, #ffffff 15%);-}--.select2-locked {-  padding: 3px 5px 3px 5px !important;-}--.select2-container-multi .select2-choices {-    min-height: 26px;-}--.select2-container-multi.select2-container-active .select2-choices {-    border: 1px solid #5897fb;-    outline: none;--    -webkit-box-shadow: 0 0 5px rgba(0,0,0,.3);-       -moz-box-shadow: 0 0 5px rgba(0,0,0,.3);-            box-shadow: 0 0 5px rgba(0,0,0,.3);-}-.select2-container-multi .select2-choices li {-    float: left;-    list-style: none;-}-.select2-container-multi .select2-choices .select2-search-field {-    margin: 0;-    padding: 0;-    white-space: nowrap;-}--.select2-container-multi .select2-choices .select2-search-field input {-    padding: 5px;-    margin: 1px 0;--    font-family: sans-serif;-    font-size: 100%;-    color: #666;-    outline: 0;-    border: 0;-    -webkit-box-shadow: none;-       -moz-box-shadow: none;-            box-shadow: none;-    background: transparent !important;-}--.select2-container-multi .select2-choices .select2-search-field input.select2-active {-    background: #fff url('select2-spinner.gif') no-repeat 100% !important;-}--.select2-default {-    color: #999 !important;-}--.select2-container-multi .select2-choices .select2-search-choice {-    padding: 3px 5px 3px 18px;-    margin: 3px 0 3px 5px;-    position: relative;--    line-height: 13px;-    color: #333;-    cursor: default;-    border: 1px solid #aaaaaa;--    -webkit-border-radius: 3px;-       -moz-border-radius: 3px;-            border-radius: 3px;--    -webkit-box-shadow: 0 0 2px #ffffff inset, 0 1px 0 rgba(0,0,0,0.05);-       -moz-box-shadow: 0 0 2px #ffffff inset, 0 1px 0 rgba(0,0,0,0.05);-            box-shadow: 0 0 2px #ffffff inset, 0 1px 0 rgba(0,0,0,0.05);--    -webkit-background-clip: padding-box;-       -moz-background-clip: padding;-            background-clip: padding-box;--    -webkit-touch-callout: none;-      -webkit-user-select: none;-       -khtml-user-select: none;-         -moz-user-select: none;-          -ms-user-select: none;-              user-select: none;--    background-color: #e4e4e4;-    filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#eeeeee', endColorstr='#f4f4f4', GradientType=0 );-    background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eeeeee));-    background-image: -webkit-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);-    background-image: -moz-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);-    background-image: -o-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);-    background-image: -ms-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);-    background-image: linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);-}-.select2-container-multi .select2-choices .select2-search-choice span {-    cursor: default;-}-.select2-container-multi .select2-choices .select2-search-choice-focus {-    background: #d4d4d4;-}--.select2-search-choice-close {-    display: block;-    width: 12px;-    height: 13px;-    position: absolute;-    right: 3px;-    top: 4px;--    font-size: 1px;-    outline: none;-    background: url('select2.png') right top no-repeat;-}--.select2-container-multi .select2-search-choice-close {-    left: 3px;-}--.select2-container-multi .select2-choices .select2-search-choice .select2-search-choice-close:hover {-  background-position: right -11px;-}-.select2-container-multi .select2-choices .select2-search-choice-focus .select2-search-choice-close {-    background-position: right -11px;-}--/* disabled styles */-.select2-container-multi.select2-container-disabled .select2-choices{-    background-color: #f4f4f4;-    background-image: none;-    border: 1px solid #ddd;-    cursor: default;-}--.select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice {-    padding: 3px 5px 3px 5px;-    border: 1px solid #ddd;-    background-image: none;-    background-color: #f4f4f4;-}--.select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice .select2-search-choice-close {    display: none;-    background:none;-}-/* end multiselect */---.select2-result-selectable .select2-match,-.select2-result-unselectable .select2-match {-    text-decoration: underline;-}--.select2-offscreen, .select2-offscreen:focus {-    clip: rect(0 0 0 0);-    width: 1px;-    height: 1px;-    border: 0;-    margin: 0;-    padding: 0;-    overflow: hidden;-    position: absolute;-    outline: 0;-    left: 0px;-}--.select2-display-none {-    display: none;-}--.select2-measure-scrollbar {-    position: absolute;-    top: -10000px;-    left: -10000px;-    width: 100px;-    height: 100px;-    overflow: scroll;-}-/* Retina-ize icons */--@media only screen and (-webkit-min-device-pixel-ratio: 1.5), only screen and (min-resolution: 144dpi)  {-  .select2-search input, .select2-search-choice-close, .select2-container .select2-choice abbr, .select2-container .select2-choice div b {-      background-image: url('select2x2.png') !important;-      background-repeat: no-repeat !important;-      background-size: 60px 40px !important;-  }-  .select2-search input {-      background-position: 100% -21px !important;-  }-}
− static/select2.js
@@ -1,3054 +0,0 @@-/*-Copyright 2012 Igor Vaynberg--Version: 3.4.0 Timestamp: Tue May 14 08:27:33 PDT 2013--This software is licensed under the Apache License, Version 2.0 (the "Apache License") or the GNU-General Public License version 2 (the "GPL License"). You may choose either license to govern your-use of this software only upon the condition that you accept all of the terms of either the Apache-License or the GPL License.--You may obtain a copy of the Apache License and the GPL License at:--    http://www.apache.org/licenses/LICENSE-2.0-    http://www.gnu.org/licenses/gpl-2.0.html--Unless required by applicable law or agreed to in writing, software distributed under the-Apache License or the GPL Licesnse is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR-CONDITIONS OF ANY KIND, either express or implied. See the Apache License and the GPL License for-the specific language governing permissions and limitations under the Apache License and the GPL License.-*/- (function ($) {- 	if(typeof $.fn.each2 == "undefined"){- 		$.fn.extend({- 			/*-			* 4-10 times faster .each replacement-			* use it carefully, as it overrides jQuery context of element on each iteration-			*/-			each2 : function (c) {-				var j = $([0]), i = -1, l = this.length;-				while (-					++i < l-					&& (j.context = j[0] = this[i])-					&& c.call(j[0], i, j) !== false //"this"=DOM, i=index, j=jQuery object-				);-				return this;-			}- 		});- 	}-})(jQuery);--(function ($, undefined) {-    "use strict";-    /*global document, window, jQuery, console */--    if (window.Select2 !== undefined) {-        return;-    }--    var KEY, AbstractSelect2, SingleSelect2, MultiSelect2, nextUid, sizer,-        lastMousePosition, $document, scrollBarDimensions,--    KEY = {-        TAB: 9,-        ENTER: 13,-        ESC: 27,-        SPACE: 32,-        LEFT: 37,-        UP: 38,-        RIGHT: 39,-        DOWN: 40,-        SHIFT: 16,-        CTRL: 17,-        ALT: 18,-        PAGE_UP: 33,-        PAGE_DOWN: 34,-        HOME: 36,-        END: 35,-        BACKSPACE: 8,-        DELETE: 46,-        isArrow: function (k) {-            k = k.which ? k.which : k;-            switch (k) {-            case KEY.LEFT:-            case KEY.RIGHT:-            case KEY.UP:-            case KEY.DOWN:-                return true;-            }-            return false;-        },-        isControl: function (e) {-            var k = e.which;-            switch (k) {-            case KEY.SHIFT:-            case KEY.CTRL:-            case KEY.ALT:-                return true;-            }--            if (e.metaKey) return true;--            return false;-        },-        isFunctionKey: function (k) {-            k = k.which ? k.which : k;-            return k >= 112 && k <= 123;-        }-    },-    MEASURE_SCROLLBAR_TEMPLATE = "<div class='select2-measure-scrollbar'></div>";--    $document = $(document);--    nextUid=(function() { var counter=1; return function() { return counter++; }; }());--    function indexOf(value, array) {-        var i = 0, l = array.length;-        for (; i < l; i = i + 1) {-            if (equal(value, array[i])) return i;-        }-        return -1;-    }--    function measureScrollbar () {-        var $template = $( MEASURE_SCROLLBAR_TEMPLATE );-        $template.appendTo('body');--        var dim = {-            width: $template.width() - $template[0].clientWidth,-            height: $template.height() - $template[0].clientHeight-        };-        $template.remove();--        return dim;-    }--    /**-     * Compares equality of a and b-     * @param a-     * @param b-     */-    function equal(a, b) {-        if (a === b) return true;-        if (a === undefined || b === undefined) return false;-        if (a === null || b === null) return false;-        if (a.constructor === String) return a+'' === b+''; // IE requires a+'' instead of just a-        if (b.constructor === String) return b+'' === a+''; // IE requires b+'' instead of just b-        return false;-    }--    /**-     * Splits the string into an array of values, trimming each value. An empty array is returned for nulls or empty-     * strings-     * @param string-     * @param separator-     */-    function splitVal(string, separator) {-        var val, i, l;-        if (string === null || string.length < 1) return [];-        val = string.split(separator);-        for (i = 0, l = val.length; i < l; i = i + 1) val[i] = $.trim(val[i]);-        return val;-    }--    function getSideBorderPadding(element) {-        return element.outerWidth(false) - element.width();-    }--    function installKeyUpChangeEvent(element) {-        var key="keyup-change-value";-        element.on("keydown", function () {-            if ($.data(element, key) === undefined) {-                $.data(element, key, element.val());-            }-        });-        element.on("keyup", function () {-            var val= $.data(element, key);-            if (val !== undefined && element.val() !== val) {-                $.removeData(element, key);-                element.trigger("keyup-change");-            }-        });-    }--    $document.on("mousemove", function (e) {-        lastMousePosition = {x: e.pageX, y: e.pageY};-    });--    /**-     * filters mouse events so an event is fired only if the mouse moved.-     *-     * filters out mouse events that occur when mouse is stationary but-     * the elements under the pointer are scrolled.-     */-    function installFilteredMouseMove(element) {-	    element.on("mousemove", function (e) {-            var lastpos = lastMousePosition;-            if (lastpos === undefined || lastpos.x !== e.pageX || lastpos.y !== e.pageY) {-                $(e.target).trigger("mousemove-filtered", e);-            }-        });-    }--    /**-     * Debounces a function. Returns a function that calls the original fn function only if no invocations have been made-     * within the last quietMillis milliseconds.-     *-     * @param quietMillis number of milliseconds to wait before invoking fn-     * @param fn function to be debounced-     * @param ctx object to be used as this reference within fn-     * @return debounced version of fn-     */-    function debounce(quietMillis, fn, ctx) {-        ctx = ctx || undefined;-        var timeout;-        return function () {-            var args = arguments;-            window.clearTimeout(timeout);-            timeout = window.setTimeout(function() {-                fn.apply(ctx, args);-            }, quietMillis);-        };-    }--    /**-     * A simple implementation of a thunk-     * @param formula function used to lazily initialize the thunk-     * @return {Function}-     */-    function thunk(formula) {-        var evaluated = false,-            value;-        return function() {-            if (evaluated === false) { value = formula(); evaluated = true; }-            return value;-        };-    };--    function installDebouncedScroll(threshold, element) {-        var notify = debounce(threshold, function (e) { element.trigger("scroll-debounced", e);});-        element.on("scroll", function (e) {-            if (indexOf(e.target, element.get()) >= 0) notify(e);-        });-    }--    function focus($el) {-        if ($el[0] === document.activeElement) return;--        /* set the focus in a 0 timeout - that way the focus is set after the processing-            of the current event has finished - which seems like the only reliable way-            to set focus */-        window.setTimeout(function() {-            var el=$el[0], pos=$el.val().length, range;--            $el.focus();--            /* make sure el received focus so we do not error out when trying to manipulate the caret.-                sometimes modals or others listeners may steal it after its set */-            if ($el.is(":visible") && el === document.activeElement) {--                /* after the focus is set move the caret to the end, necessary when we val()-                    just before setting focus */-                if(el.setSelectionRange)-                {-                    el.setSelectionRange(pos, pos);-                }-                else if (el.createTextRange) {-                    range = el.createTextRange();-                    range.collapse(false);-                    range.select();-                }-            }-        }, 0);-    }--    function getCursorInfo(el) {-        el = $(el)[0];-        var offset = 0;-        var length = 0;-        if ('selectionStart' in el) {-            offset = el.selectionStart;-            length = el.selectionEnd - offset;-        } else if ('selection' in document) {-            el.focus();-            var sel = document.selection.createRange();-            length = document.selection.createRange().text.length;-            sel.moveStart('character', -el.value.length);-            offset = sel.text.length - length;-        }-        return { offset: offset, length: length };-    }--    function killEvent(event) {-        event.preventDefault();-        event.stopPropagation();-    }-    function killEventImmediately(event) {-        event.preventDefault();-        event.stopImmediatePropagation();-    }--    function measureTextWidth(e) {-        if (!sizer){-        	var style = e[0].currentStyle || window.getComputedStyle(e[0], null);-        	sizer = $(document.createElement("div")).css({-	            position: "absolute",-	            left: "-10000px",-	            top: "-10000px",-	            display: "none",-	            fontSize: style.fontSize,-	            fontFamily: style.fontFamily,-	            fontStyle: style.fontStyle,-	            fontWeight: style.fontWeight,-	            letterSpacing: style.letterSpacing,-	            textTransform: style.textTransform,-	            whiteSpace: "nowrap"-	        });-            sizer.attr("class","select2-sizer");-        	$("body").append(sizer);-        }-        sizer.text(e.val());-        return sizer.width();-    }--    function syncCssClasses(dest, src, adapter) {-        var classes, replacements = [], adapted;--        classes = dest.attr("class");-        if (classes) {-            classes = '' + classes; // for IE which returns object-            $(classes.split(" ")).each2(function() {-                if (this.indexOf("select2-") === 0) {-                    replacements.push(this);-                }-            });-        }-        classes = src.attr("class");-        if (classes) {-            classes = '' + classes; // for IE which returns object-            $(classes.split(" ")).each2(function() {-                if (this.indexOf("select2-") !== 0) {-                    adapted = adapter(this);-                    if (adapted) {-                        replacements.push(this);-                    }-                }-            });-        }-        dest.attr("class", replacements.join(" "));-    }---    function markMatch(text, term, markup, escapeMarkup) {-        var match=text.toUpperCase().indexOf(term.toUpperCase()),-            tl=term.length;--        if (match<0) {-            markup.push(escapeMarkup(text));-            return;-        }--        markup.push(escapeMarkup(text.substring(0, match)));-        markup.push("<span class='select2-match'>");-        markup.push(escapeMarkup(text.substring(match, match + tl)));-        markup.push("</span>");-        markup.push(escapeMarkup(text.substring(match + tl, text.length)));-    }--    /**-     * Produces an ajax-based query function-     *-     * @param options object containing configuration paramters-     * @param options.params parameter map for the transport ajax call, can contain such options as cache, jsonpCallback, etc. see $.ajax-     * @param options.transport function that will be used to execute the ajax request. must be compatible with parameters supported by $.ajax-     * @param options.url url for the data-     * @param options.data a function(searchTerm, pageNumber, context) that should return an object containing query string parameters for the above url.-     * @param options.dataType request data type: ajax, jsonp, other datatatypes supported by jQuery's $.ajax function or the transport function if specified-     * @param options.quietMillis (optional) milliseconds to wait before making the ajaxRequest, helps debounce the ajax function if invoked too often-     * @param options.results a function(remoteData, pageNumber) that converts data returned form the remote request to the format expected by Select2.-     *      The expected format is an object containing the following keys:-     *      results array of objects that will be used as choices-     *      more (optional) boolean indicating whether there are more results available-     *      Example: {results:[{id:1, text:'Red'},{id:2, text:'Blue'}], more:true}-     */-    function ajax(options) {-        var timeout, // current scheduled but not yet executed request-            requestSequence = 0, // sequence used to drop out-of-order responses-            handler = null,-            quietMillis = options.quietMillis || 100,-            ajaxUrl = options.url,-            self = this;--        return function (query) {-            window.clearTimeout(timeout);-            timeout = window.setTimeout(function () {-                requestSequence += 1; // increment the sequence-                var requestNumber = requestSequence, // this request's sequence number-                    data = options.data, // ajax data function-                    url = ajaxUrl, // ajax url string or function-                    transport = options.transport || $.fn.select2.ajaxDefaults.transport,-                    // deprecated - to be removed in 4.0  - use params instead-                    deprecated = {-                        type: options.type || 'GET', // set type of request (GET or POST)-                        cache: options.cache || false,-                        jsonpCallback: options.jsonpCallback||undefined,-                        dataType: options.dataType||"json"-                    },-                    params = $.extend({}, $.fn.select2.ajaxDefaults.params, deprecated);--                data = data ? data.call(self, query.term, query.page, query.context) : null;-                url = (typeof url === 'function') ? url.call(self, query.term, query.page, query.context) : url;--                if( null !== handler) { handler.abort(); }--                if (options.params) {-                    if ($.isFunction(options.params)) {-                        $.extend(params, options.params.call(self));-                    } else {-                        $.extend(params, options.params);-                    }-                }--                $.extend(params, {-                    url: url,-                    dataType: options.dataType,-                    data: data,-                    success: function (data) {-                        if (requestNumber < requestSequence) {-                            return;-                        }-                        // TODO - replace query.page with query so users have access to term, page, etc.-                        var results = options.results(data, query.page);-                        query.callback(results);-                    }-                });-                handler = transport.call(self, params);-            }, quietMillis);-        };-    }--    /**-     * Produces a query function that works with a local array-     *-     * @param options object containing configuration parameters. The options parameter can either be an array or an-     * object.-     *-     * If the array form is used it is assumed that it contains objects with 'id' and 'text' keys.-     *-     * If the object form is used ti is assumed that it contains 'data' and 'text' keys. The 'data' key should contain-     * an array of objects that will be used as choices. These objects must contain at least an 'id' key. The 'text'-     * key can either be a String in which case it is expected that each element in the 'data' array has a key with the-     * value of 'text' which will be used to match choices. Alternatively, text can be a function(item) that can extract-     * the text.-     */-    function local(options) {-        var data = options, // data elements-            dataText,-            tmp,-            text = function (item) { return ""+item.text; }; // function used to retrieve the text portion of a data item that is matched against the search--		 if ($.isArray(data)) {-            tmp = data;-            data = { results: tmp };-        }--		 if ($.isFunction(data) === false) {-            tmp = data;-            data = function() { return tmp; };-        }--        var dataItem = data();-        if (dataItem.text) {-            text = dataItem.text;-            // if text is not a function we assume it to be a key name-            if (!$.isFunction(text)) {-                dataText = dataItem.text; // we need to store this in a separate variable because in the next step data gets reset and data.text is no longer available-                text = function (item) { return item[dataText]; };-            }-        }--        return function (query) {-            var t = query.term, filtered = { results: [] }, process;-            if (t === "") {-                query.callback(data());-                return;-            }--            process = function(datum, collection) {-                var group, attr;-                datum = datum[0];-                if (datum.children) {-                    group = {};-                    for (attr in datum) {-                        if (datum.hasOwnProperty(attr)) group[attr]=datum[attr];-                    }-                    group.children=[];-                    $(datum.children).each2(function(i, childDatum) { process(childDatum, group.children); });-                    if (group.children.length || query.matcher(t, text(group), datum)) {-                        collection.push(group);-                    }-                } else {-                    if (query.matcher(t, text(datum), datum)) {-                        collection.push(datum);-                    }-                }-            };--            $(data().results).each2(function(i, datum) { process(datum, filtered.results); });-            query.callback(filtered);-        };-    }--    // TODO javadoc-    function tags(data) {-        var isFunc = $.isFunction(data);-        return function (query) {-            var t = query.term, filtered = {results: []};-            $(isFunc ? data() : data).each(function () {-                var isObject = this.text !== undefined,-                    text = isObject ? this.text : this;-                if (t === "" || query.matcher(t, text)) {-                    filtered.results.push(isObject ? this : {id: this, text: this});-                }-            });-            query.callback(filtered);-        };-    }--    /**-     * Checks if the formatter function should be used.-     *-     * Throws an error if it is not a function. Returns true if it should be used,-     * false if no formatting should be performed.-     *-     * @param formatter-     */-    function checkFormatter(formatter, formatterName) {-        if ($.isFunction(formatter)) return true;-        if (!formatter) return false;-        throw new Error("formatterName must be a function or a falsy value");-    }--    function evaluate(val) {-        return $.isFunction(val) ? val() : val;-    }--    function countResults(results) {-        var count = 0;-        $.each(results, function(i, item) {-            if (item.children) {-                count += countResults(item.children);-            } else {-                count++;-            }-        });-        return count;-    }--    /**-     * Default tokenizer. This function uses breaks the input on substring match of any string from the-     * opts.tokenSeparators array and uses opts.createSearchChoice to create the choice object. Both of those-     * two options have to be defined in order for the tokenizer to work.-     *-     * @param input text user has typed so far or pasted into the search field-     * @param selection currently selected choices-     * @param selectCallback function(choice) callback tho add the choice to selection-     * @param opts select2's opts-     * @return undefined/null to leave the current input unchanged, or a string to change the input to the returned value-     */-    function defaultTokenizer(input, selection, selectCallback, opts) {-        var original = input, // store the original so we can compare and know if we need to tell the search to update its text-            dupe = false, // check for whether a token we extracted represents a duplicate selected choice-            token, // token-            index, // position at which the separator was found-            i, l, // looping variables-            separator; // the matched separator--        if (!opts.createSearchChoice || !opts.tokenSeparators || opts.tokenSeparators.length < 1) return undefined;--        while (true) {-            index = -1;--            for (i = 0, l = opts.tokenSeparators.length; i < l; i++) {-                separator = opts.tokenSeparators[i];-                index = input.indexOf(separator);-                if (index >= 0) break;-            }--            if (index < 0) break; // did not find any token separator in the input string, bail--            token = input.substring(0, index);-            input = input.substring(index + separator.length);--            if (token.length > 0) {-                token = opts.createSearchChoice(token, selection);-                if (token !== undefined && token !== null && opts.id(token) !== undefined && opts.id(token) !== null) {-                    dupe = false;-                    for (i = 0, l = selection.length; i < l; i++) {-                        if (equal(opts.id(token), opts.id(selection[i]))) {-                            dupe = true; break;-                        }-                    }--                    if (!dupe) selectCallback(token);-                }-            }-        }--        if (original!==input) return input;-    }--    /**-     * Creates a new class-     *-     * @param superClass-     * @param methods-     */-    function clazz(SuperClass, methods) {-        var constructor = function () {};-        constructor.prototype = new SuperClass;-        constructor.prototype.constructor = constructor;-        constructor.prototype.parent = SuperClass.prototype;-        constructor.prototype = $.extend(constructor.prototype, methods);-        return constructor;-    }--    AbstractSelect2 = clazz(Object, {--        // abstract-        bind: function (func) {-            var self = this;-            return function () {-                func.apply(self, arguments);-            };-        },--        // abstract-        init: function (opts) {-            var results, search, resultsSelector = ".select2-results", disabled, readonly;--            // prepare options-            this.opts = opts = this.prepareOpts(opts);--            this.id=opts.id;--            // destroy if called on an existing component-            if (opts.element.data("select2") !== undefined &&-                opts.element.data("select2") !== null) {-                this.destroy();-            }--            this.container = this.createContainer();--            this.containerId="s2id_"+(opts.element.attr("id") || "autogen"+nextUid());-            this.containerSelector="#"+this.containerId.replace(/([;&,\.\+\*\~':"\!\^#$%@\[\]\(\)=>\|])/g, '\\$1');-            this.container.attr("id", this.containerId);--            // cache the body so future lookups are cheap-            this.body = thunk(function() { return opts.element.closest("body"); });--            syncCssClasses(this.container, this.opts.element, this.opts.adaptContainerCssClass);--            this.container.css(evaluate(opts.containerCss));-            this.container.addClass(evaluate(opts.containerCssClass));--            this.elementTabIndex = this.opts.element.attr("tabindex");--            // swap container for the element-            this.opts.element-                .data("select2", this)-                .attr("tabindex", "-1")-                .before(this.container);-            this.container.data("select2", this);--            this.dropdown = this.container.find(".select2-drop");-            this.dropdown.addClass(evaluate(opts.dropdownCssClass));-            this.dropdown.data("select2", this);--            this.results = results = this.container.find(resultsSelector);-            this.search = search = this.container.find("input.select2-input");--            this.resultsPage = 0;-            this.context = null;--            // initialize the container-            this.initContainer();--            installFilteredMouseMove(this.results);-            this.dropdown.on("mousemove-filtered touchstart touchmove touchend", resultsSelector, this.bind(this.highlightUnderEvent));--            installDebouncedScroll(80, this.results);-            this.dropdown.on("scroll-debounced", resultsSelector, this.bind(this.loadMoreIfNeeded));--            // do not propagate change event from the search field out of the component-            $(this.container).on("change", ".select2-input", function(e) {e.stopPropagation();});-            $(this.dropdown).on("change", ".select2-input", function(e) {e.stopPropagation();});--            // if jquery.mousewheel plugin is installed we can prevent out-of-bounds scrolling of results via mousewheel-            if ($.fn.mousewheel) {-                results.mousewheel(function (e, delta, deltaX, deltaY) {-                    var top = results.scrollTop(), height;-                    if (deltaY > 0 && top - deltaY <= 0) {-                        results.scrollTop(0);-                        killEvent(e);-                    } else if (deltaY < 0 && results.get(0).scrollHeight - results.scrollTop() + deltaY <= results.height()) {-                        results.scrollTop(results.get(0).scrollHeight - results.height());-                        killEvent(e);-                    }-                });-            }--            installKeyUpChangeEvent(search);-            search.on("keyup-change input paste", this.bind(this.updateResults));-            search.on("focus", function () { search.addClass("select2-focused"); });-            search.on("blur", function () { search.removeClass("select2-focused");});--            this.dropdown.on("mouseup", resultsSelector, this.bind(function (e) {-                if ($(e.target).closest(".select2-result-selectable").length > 0) {-                    this.highlightUnderEvent(e);-                    this.selectHighlighted(e);-                }-            }));--            // trap all mouse events from leaving the dropdown. sometimes there may be a modal that is listening-            // for mouse events outside of itself so it can close itself. since the dropdown is now outside the select2's-            // dom it will trigger the popup close, which is not what we want-            this.dropdown.on("click mouseup mousedown", function (e) { e.stopPropagation(); });--            if ($.isFunction(this.opts.initSelection)) {-                // initialize selection based on the current value of the source element-                this.initSelection();--                // if the user has provided a function that can set selection based on the value of the source element-                // we monitor the change event on the element and trigger it, allowing for two way synchronization-                this.monitorSource();-            }--            if (opts.maximumInputLength !== null) {-                this.search.attr("maxlength", opts.maximumInputLength);-            }--            var disabled = opts.element.prop("disabled");-            if (disabled === undefined) disabled = false;-            this.enable(!disabled);--            var readonly = opts.element.prop("readonly");-            if (readonly === undefined) readonly = false;-            this.readonly(readonly);--            // Calculate size of scrollbar-            scrollBarDimensions = scrollBarDimensions || measureScrollbar();--            this.autofocus = opts.element.prop("autofocus")-            opts.element.prop("autofocus", false);-            if (this.autofocus) this.focus();-        },--        // abstract-        destroy: function () {-            var select2 = this.opts.element.data("select2");--            if (this.propertyObserver) { delete this.propertyObserver; this.propertyObserver = null; }--            if (select2 !== undefined) {--                select2.container.remove();-                select2.dropdown.remove();-                select2.opts.element-                    .removeClass("select2-offscreen")-                    .removeData("select2")-                    .off(".select2")-                    .attr({"tabindex": this.elementTabIndex})-                    .prop("autofocus", this.autofocus||false)-                    .show();-            }-        },--        // abstract-        optionToData: function(element) {-            if (element.is("option")) {-                return {-                    id:element.prop("value"),-                    text:element.text(),-                    element: element.get(),-                    css: element.attr("class"),-                    disabled: element.prop("disabled"),-                    locked: equal(element.attr("locked"), "locked")-                };-            } else if (element.is("optgroup")) {-                return {-                    text:element.attr("label"),-                    children:[],-                    element: element.get(),-                    css: element.attr("class")-                };-            }-        },--        // abstract-        prepareOpts: function (opts) {-            var element, select, idKey, ajaxUrl, self = this;--            element = opts.element;--            if (element.get(0).tagName.toLowerCase() === "select") {-                this.select = select = opts.element;-            }--            if (select) {-                // these options are not allowed when attached to a select because they are picked up off the element itself-                $.each(["id", "multiple", "ajax", "query", "createSearchChoice", "initSelection", "data", "tags"], function () {-                    if (this in opts) {-                        throw new Error("Option '" + this + "' is not allowed for Select2 when attached to a <select> element.");-                    }-                });-            }--            opts = $.extend({}, {-                populateResults: function(container, results, query) {-                    var populate,  data, result, children, id=this.opts.id;--                    populate=function(results, container, depth) {--                        var i, l, result, selectable, disabled, compound, node, label, innerContainer, formatted;--                        results = opts.sortResults(results, container, query);--                        for (i = 0, l = results.length; i < l; i = i + 1) {--                            result=results[i];--                            disabled = (result.disabled === true);-                            selectable = (!disabled) && (id(result) !== undefined);--                            compound=result.children && result.children.length > 0;--                            node=$("<li></li>");-                            node.addClass("select2-results-dept-"+depth);-                            node.addClass("select2-result");-                            node.addClass(selectable ? "select2-result-selectable" : "select2-result-unselectable");-                            if (disabled) { node.addClass("select2-disabled"); }-                            if (compound) { node.addClass("select2-result-with-children"); }-                            node.addClass(self.opts.formatResultCssClass(result));--                            label=$(document.createElement("div"));-                            label.addClass("select2-result-label");--                            formatted=opts.formatResult(result, label, query, self.opts.escapeMarkup);-                            if (formatted!==undefined) {-                                label.html(formatted);-                            }--                            node.append(label);--                            if (compound) {--                                innerContainer=$("<ul></ul>");-                                innerContainer.addClass("select2-result-sub");-                                populate(result.children, innerContainer, depth+1);-                                node.append(innerContainer);-                            }--                            node.data("select2-data", result);-                            container.append(node);-                        }-                    };--                    populate(results, container, 0);-                }-            }, $.fn.select2.defaults, opts);--            if (typeof(opts.id) !== "function") {-                idKey = opts.id;-                opts.id = function (e) { return e[idKey]; };-            }--            if ($.isArray(opts.element.data("select2Tags"))) {-                if ("tags" in opts) {-                    throw "tags specified as both an attribute 'data-select2-tags' and in options of Select2 " + opts.element.attr("id");-                }-                opts.tags=opts.element.data("select2Tags");-            }--            if (select) {-                opts.query = this.bind(function (query) {-                    var data = { results: [], more: false },-                        term = query.term,-                        children, firstChild, process;--                    process=function(element, collection) {-                        var group;-                        if (element.is("option")) {-                            if (query.matcher(term, element.text(), element)) {-                                collection.push(self.optionToData(element));-                            }-                        } else if (element.is("optgroup")) {-                            group=self.optionToData(element);-                            element.children().each2(function(i, elm) { process(elm, group.children); });-                            if (group.children.length>0) {-                                collection.push(group);-                            }-                        }-                    };--                    children=element.children();--                    // ignore the placeholder option if there is one-                    if (this.getPlaceholder() !== undefined && children.length > 0) {-                        firstChild = children[0];-                        if ($(firstChild).text() === "") {-                            children=children.not(firstChild);-                        }-                    }--                    children.each2(function(i, elm) { process(elm, data.results); });--                    query.callback(data);-                });-                // this is needed because inside val() we construct choices from options and there id is hardcoded-                opts.id=function(e) { return e.id; };-                opts.formatResultCssClass = function(data) { return data.css; };-            } else {-                if (!("query" in opts)) {--                    if ("ajax" in opts) {-                        ajaxUrl = opts.element.data("ajax-url");-                        if (ajaxUrl && ajaxUrl.length > 0) {-                            opts.ajax.url = ajaxUrl;-                        }-                        opts.query = ajax.call(opts.element, opts.ajax);-                    } else if ("data" in opts) {-                        opts.query = local(opts.data);-                    } else if ("tags" in opts) {-                        opts.query = tags(opts.tags);-                        if (opts.createSearchChoice === undefined) {-                            opts.createSearchChoice = function (term) { return {id: term, text: term}; };-                        }-                        if (opts.initSelection === undefined) {-                            opts.initSelection = function (element, callback) {-                                var data = [];-                                $(splitVal(element.val(), opts.separator)).each(function () {-                                    var id = this, text = this, tags=opts.tags;-                                    if ($.isFunction(tags)) tags=tags();-                                    $(tags).each(function() { if (equal(this.id, id)) { text = this.text; return false; } });-                                    data.push({id: id, text: text});-                                });--                                callback(data);-                            };-                        }-                    }-                }-            }-            if (typeof(opts.query) !== "function") {-                throw "query function not defined for Select2 " + opts.element.attr("id");-            }--            return opts;-        },--        /**-         * Monitor the original element for changes and update select2 accordingly-         */-        // abstract-        monitorSource: function () {-            var el = this.opts.element, sync;--            el.on("change.select2", this.bind(function (e) {-                if (this.opts.element.data("select2-change-triggered") !== true) {-                    this.initSelection();-                }-            }));--            sync = this.bind(function () {--                var enabled, readonly, self = this;--                // sync enabled state--                var disabled = el.prop("disabled");-                if (disabled === undefined) disabled = false;-                this.enable(!disabled);--                var readonly = el.prop("readonly");-                if (readonly === undefined) readonly = false;-                this.readonly(readonly);--                syncCssClasses(this.container, this.opts.element, this.opts.adaptContainerCssClass);-                this.container.addClass(evaluate(this.opts.containerCssClass));--                syncCssClasses(this.dropdown, this.opts.element, this.opts.adaptDropdownCssClass);-                this.dropdown.addClass(evaluate(this.opts.dropdownCssClass));--            });--            // mozilla and IE-            el.on("propertychange.select2 DOMAttrModified.select2", sync);---            // hold onto a reference of the callback to work around a chromium bug-            if (this.mutationCallback === undefined) {-                this.mutationCallback = function (mutations) {-                    mutations.forEach(sync);-                }-            }--            // safari and chrome-            if (typeof WebKitMutationObserver !== "undefined") {-                if (this.propertyObserver) { delete this.propertyObserver; this.propertyObserver = null; }-                this.propertyObserver = new WebKitMutationObserver(this.mutationCallback);-                this.propertyObserver.observe(el.get(0), { attributes:true, subtree:false });-            }-        },--        // abstract-        triggerSelect: function(data) {-            var evt = $.Event("select2-selecting", { val: this.id(data), object: data });-            this.opts.element.trigger(evt);-            return !evt.isDefaultPrevented();-        },--        /**-         * Triggers the change event on the source element-         */-        // abstract-        triggerChange: function (details) {--            details = details || {};-            details= $.extend({}, details, { type: "change", val: this.val() });-            // prevents recursive triggering-            this.opts.element.data("select2-change-triggered", true);-            this.opts.element.trigger(details);-            this.opts.element.data("select2-change-triggered", false);--            // some validation frameworks ignore the change event and listen instead to keyup, click for selects-            // so here we trigger the click event manually-            this.opts.element.click();--            // ValidationEngine ignorea the change event and listens instead to blur-            // so here we trigger the blur event manually if so desired-            if (this.opts.blurOnChange)-                this.opts.element.blur();-        },--        //abstract-        isInterfaceEnabled: function()-        {-            return this.enabledInterface === true;-        },--        // abstract-        enableInterface: function() {-            var enabled = this._enabled && !this._readonly,-                disabled = !enabled;--            if (enabled === this.enabledInterface) return false;--            this.container.toggleClass("select2-container-disabled", disabled);-            this.close();-            this.enabledInterface = enabled;--            return true;-        },--        // abstract-        enable: function(enabled) {-            if (enabled === undefined) enabled = true;-            if (this._enabled === enabled) return false;-            this._enabled = enabled;--            this.opts.element.prop("disabled", !enabled);-            this.enableInterface();-            return true;-        },--        // abstract-        readonly: function(enabled) {-            if (enabled === undefined) enabled = false;-            if (this._readonly === enabled) return false;-            this._readonly = enabled;--            this.opts.element.prop("readonly", enabled);-            this.enableInterface();-            return true;-        },--        // abstract-        opened: function () {-            return this.container.hasClass("select2-dropdown-open");-        },--        // abstract-        positionDropdown: function() {-            var $dropdown = this.dropdown,-                offset = this.container.offset(),-                height = this.container.outerHeight(false),-                width = this.container.outerWidth(false),-                dropHeight = $dropdown.outerHeight(false),-	            viewPortRight = $(window).scrollLeft() + $(window).width(),-                viewportBottom = $(window).scrollTop() + $(window).height(),-                dropTop = offset.top + height,-                dropLeft = offset.left,-                enoughRoomBelow = dropTop + dropHeight <= viewportBottom,-                enoughRoomAbove = (offset.top - dropHeight) >= this.body().scrollTop(),-	            dropWidth = $dropdown.outerWidth(false),-	            enoughRoomOnRight = dropLeft + dropWidth <= viewPortRight,-                aboveNow = $dropdown.hasClass("select2-drop-above"),-                bodyOffset,-                above,-                css,-                resultsListNode;--            if (this.opts.dropdownAutoWidth) {-                resultsListNode = $('.select2-results', $dropdown)[0];-                $dropdown.addClass('select2-drop-auto-width');-                $dropdown.css('width', '');-                // Add scrollbar width to dropdown if vertical scrollbar is present-                dropWidth = $dropdown.outerWidth(false) + (resultsListNode.scrollHeight === resultsListNode.clientHeight ? 0 : scrollBarDimensions.width);-                dropWidth > width ? width = dropWidth : dropWidth = width;-                enoughRoomOnRight = dropLeft + dropWidth <= viewPortRight;-            }-            else {-                this.container.removeClass('select2-drop-auto-width');-            }--            //console.log("below/ droptop:", dropTop, "dropHeight", dropHeight, "sum", (dropTop+dropHeight)+" viewport bottom", viewportBottom, "enough?", enoughRoomBelow);-            //console.log("above/ offset.top", offset.top, "dropHeight", dropHeight, "top", (offset.top-dropHeight), "scrollTop", this.body().scrollTop(), "enough?", enoughRoomAbove);--            // fix positioning when body has an offset and is not position: static--            if (this.body().css('position') !== 'static') {-                bodyOffset = this.body().offset();-                dropTop -= bodyOffset.top;-                dropLeft -= bodyOffset.left;-            }--            // always prefer the current above/below alignment, unless there is not enough room--            if (aboveNow) {-                above = true;-                if (!enoughRoomAbove && enoughRoomBelow) above = false;-            } else {-                above = false;-                if (!enoughRoomBelow && enoughRoomAbove) above = true;-            }--            if (!enoughRoomOnRight) {-               dropLeft = offset.left + width - dropWidth;-            }--            if (above) {-                dropTop = offset.top - dropHeight;-                this.container.addClass("select2-drop-above");-                $dropdown.addClass("select2-drop-above");-            }-            else {-                this.container.removeClass("select2-drop-above");-                $dropdown.removeClass("select2-drop-above");-            }--            css = $.extend({-                top: dropTop,-                left: dropLeft,-                width: width-            }, evaluate(this.opts.dropdownCss));--            $dropdown.css(css);-        },--        // abstract-        shouldOpen: function() {-            var event;--            if (this.opened()) return false;--            if (this._enabled === false || this._readonly === true) return false;--            event = $.Event("select2-opening");-            this.opts.element.trigger(event);-            return !event.isDefaultPrevented();-        },--        // abstract-        clearDropdownAlignmentPreference: function() {-            // clear the classes used to figure out the preference of where the dropdown should be opened-            this.container.removeClass("select2-drop-above");-            this.dropdown.removeClass("select2-drop-above");-        },--        /**-         * Opens the dropdown-         *-         * @return {Boolean} whether or not dropdown was opened. This method will return false if, for example,-         * the dropdown is already open, or if the 'open' event listener on the element called preventDefault().-         */-        // abstract-        open: function () {--            if (!this.shouldOpen()) return false;--            this.opening();--            return true;-        },--        /**-         * Performs the opening of the dropdown-         */-        // abstract-        opening: function() {-            var cid = this.containerId,-                scroll = "scroll." + cid,-                resize = "resize."+cid,-                orient = "orientationchange."+cid,-                mask;--            this.container.addClass("select2-dropdown-open").addClass("select2-container-active");--            this.clearDropdownAlignmentPreference();--            if(this.dropdown[0] !== this.body().children().last()[0]) {-                this.dropdown.detach().appendTo(this.body());-            }--            // create the dropdown mask if doesnt already exist-            mask = $("#select2-drop-mask");-            if (mask.length == 0) {-                mask = $(document.createElement("div"));-                mask.attr("id","select2-drop-mask").attr("class","select2-drop-mask");-                mask.hide();-                mask.appendTo(this.body());-                mask.on("mousedown touchstart", function (e) {-                    var dropdown = $("#select2-drop"), self;-                    if (dropdown.length > 0) {-                        self=dropdown.data("select2");-                        if (self.opts.selectOnBlur) {-                            self.selectHighlighted({noFocus: true});-                        }-                        self.close();-                        e.preventDefault();-                        e.stopPropagation();-                    }-                });-            }--            // ensure the mask is always right before the dropdown-            if (this.dropdown.prev()[0] !== mask[0]) {-                this.dropdown.before(mask);-            }--            // move the global id to the correct dropdown-            $("#select2-drop").removeAttr("id");-            this.dropdown.attr("id", "select2-drop");--            // show the elements-            mask.css(_makeMaskCss());-            mask.show();-            this.dropdown.show();-            this.positionDropdown();--            this.dropdown.addClass("select2-drop-active");-            this.ensureHighlightVisible();--            // attach listeners to events that can change the position of the container and thus require-            // the position of the dropdown to be updated as well so it does not come unglued from the container-            var that = this;-            this.container.parents().add(window).each(function () {-                $(this).on(resize+" "+scroll+" "+orient, function (e) {-                    $("#select2-drop-mask").css(_makeMaskCss());-                    that.positionDropdown();-                });-            });--            function _makeMaskCss() {-                return {-                    width  : Math.max(document.documentElement.scrollWidth,  $(window).width()),-                    height : Math.max(document.documentElement.scrollHeight, $(window).height())-                }-            }-        },--        // abstract-        close: function () {-            if (!this.opened()) return;--            var cid = this.containerId,-                scroll = "scroll." + cid,-                resize = "resize."+cid,-                orient = "orientationchange."+cid;--            // unbind event listeners-            this.container.parents().add(window).each(function () { $(this).off(scroll).off(resize).off(orient); });--            this.clearDropdownAlignmentPreference();--            $("#select2-drop-mask").hide();-            this.dropdown.removeAttr("id"); // only the active dropdown has the select2-drop id-            this.dropdown.hide();-            this.container.removeClass("select2-dropdown-open");-            this.results.empty();---            this.clearSearch();-            this.search.removeClass("select2-active");-            this.opts.element.trigger($.Event("select2-close"));-        },--        // abstract-        clearSearch: function () {--        },--        //abstract-        getMaximumSelectionSize: function() {-            return evaluate(this.opts.maximumSelectionSize);-        },--        // abstract-        ensureHighlightVisible: function () {-            var results = this.results, children, index, child, hb, rb, y, more;--            index = this.highlight();--            if (index < 0) return;--            if (index == 0) {--                // if the first element is highlighted scroll all the way to the top,-                // that way any unselectable headers above it will also be scrolled-                // into view--                results.scrollTop(0);-                return;-            }--            children = this.findHighlightableChoices().find('.select2-result-label');--            child = $(children[index]);--            hb = child.offset().top + child.outerHeight(true);--            // if this is the last child lets also make sure select2-more-results is visible-            if (index === children.length - 1) {-                more = results.find("li.select2-more-results");-                if (more.length > 0) {-                    hb = more.offset().top + more.outerHeight(true);-                }-            }--            rb = results.offset().top + results.outerHeight(true);-            if (hb > rb) {-                results.scrollTop(results.scrollTop() + (hb - rb));-            }-            y = child.offset().top - results.offset().top;--            // make sure the top of the element is visible-            if (y < 0 && child.css('display') != 'none' ) {-                results.scrollTop(results.scrollTop() + y); // y is negative-            }-        },--        // abstract-        findHighlightableChoices: function() {-            return this.results.find(".select2-result-selectable:not(.select2-selected):not(.select2-disabled)");-        },--        // abstract-        moveHighlight: function (delta) {-            var choices = this.findHighlightableChoices(),-                index = this.highlight();--            while (index > -1 && index < choices.length) {-                index += delta;-                var choice = $(choices[index]);-                if (choice.hasClass("select2-result-selectable") && !choice.hasClass("select2-disabled") && !choice.hasClass("select2-selected")) {-                    this.highlight(index);-                    break;-                }-            }-        },--        // abstract-        highlight: function (index) {-            var choices = this.findHighlightableChoices(),-                choice,-                data;--            if (arguments.length === 0) {-                return indexOf(choices.filter(".select2-highlighted")[0], choices.get());-            }--            if (index >= choices.length) index = choices.length - 1;-            if (index < 0) index = 0;--            this.results.find(".select2-highlighted").removeClass("select2-highlighted");--            choice = $(choices[index]);-            choice.addClass("select2-highlighted");--            this.ensureHighlightVisible();--            data = choice.data("select2-data");-            if (data) {-                this.opts.element.trigger({ type: "select2-highlight", val: this.id(data), choice: data });-            }-        },--        // abstract-        countSelectableResults: function() {-            return this.findHighlightableChoices().length;-        },--        // abstract-        highlightUnderEvent: function (event) {-            var el = $(event.target).closest(".select2-result-selectable");-            if (el.length > 0 && !el.is(".select2-highlighted")) {-        		var choices = this.findHighlightableChoices();-                this.highlight(choices.index(el));-            } else if (el.length == 0) {-                // if we are over an unselectable item remove al highlights-                this.results.find(".select2-highlighted").removeClass("select2-highlighted");-            }-        },--        // abstract-        loadMoreIfNeeded: function () {-            var results = this.results,-                more = results.find("li.select2-more-results"),-                below, // pixels the element is below the scroll fold, below==0 is when the element is starting to be visible-                offset = -1, // index of first element without data-                page = this.resultsPage + 1,-                self=this,-                term=this.search.val(),-                context=this.context;--            if (more.length === 0) return;-            below = more.offset().top - results.offset().top - results.height();--            if (below <= this.opts.loadMorePadding) {-                more.addClass("select2-active");-                this.opts.query({-                        element: this.opts.element,-                        term: term,-                        page: page,-                        context: context,-                        matcher: this.opts.matcher,-                        callback: this.bind(function (data) {--                    // ignore a response if the select2 has been closed before it was received-                    if (!self.opened()) return;---                    self.opts.populateResults.call(this, results, data.results, {term: term, page: page, context:context});-                    self.postprocessResults(data, false, false);--                    if (data.more===true) {-                        more.detach().appendTo(results).text(self.opts.formatLoadMore(page+1));-                        window.setTimeout(function() { self.loadMoreIfNeeded(); }, 10);-                    } else {-                        more.remove();-                    }-                    self.positionDropdown();-                    self.resultsPage = page;-                    self.context = data.context;-                })});-            }-        },--        /**-         * Default tokenizer function which does nothing-         */-        tokenize: function() {--        },--        /**-         * @param initial whether or not this is the call to this method right after the dropdown has been opened-         */-        // abstract-        updateResults: function (initial) {-            var search = this.search,-                results = this.results,-                opts = this.opts,-                data,-                self = this,-                input,-                term = search.val(),-                lastTerm=$.data(this.container, "select2-last-term");--            // prevent duplicate queries against the same term-            if (initial !== true && lastTerm && equal(term, lastTerm)) return;--            $.data(this.container, "select2-last-term", term);--            // if the search is currently hidden we do not alter the results-            if (initial !== true && (this.showSearchInput === false || !this.opened())) {-                return;-            }--            function postRender() {-                results.scrollTop(0);-                search.removeClass("select2-active");-                self.positionDropdown();-            }--            function render(html) {-                results.html(html);-                postRender();-            }--            var maxSelSize = this.getMaximumSelectionSize();-            if (maxSelSize >=1) {-                data = this.data();-                if ($.isArray(data) && data.length >= maxSelSize && checkFormatter(opts.formatSelectionTooBig, "formatSelectionTooBig")) {-            	    render("<li class='select2-selection-limit'>" + opts.formatSelectionTooBig(maxSelSize) + "</li>");-            	    return;-                }-            }--            if (search.val().length < opts.minimumInputLength) {-                if (checkFormatter(opts.formatInputTooShort, "formatInputTooShort")) {-                    render("<li class='select2-no-results'>" + opts.formatInputTooShort(search.val(), opts.minimumInputLength) + "</li>");-                } else {-                    render("");-                }-                if (initial) this.showSearch(true);-                return;-            }--            if (opts.maximumInputLength && search.val().length > opts.maximumInputLength) {-                if (checkFormatter(opts.formatInputTooLong, "formatInputTooLong")) {-                    render("<li class='select2-no-results'>" + opts.formatInputTooLong(search.val(), opts.maximumInputLength) + "</li>");-                } else {-                    render("");-                }-                return;-            }--            if (opts.formatSearching && this.findHighlightableChoices().length === 0) {-                render("<li class='select2-searching'>" + opts.formatSearching() + "</li>");-            }--            search.addClass("select2-active");--            // give the tokenizer a chance to pre-process the input-            input = this.tokenize();-            if (input != undefined && input != null) {-                search.val(input);-            }--            this.resultsPage = 1;--            opts.query({-                element: opts.element,-                    term: search.val(),-                    page: this.resultsPage,-                    context: null,-                    matcher: opts.matcher,-                    callback: this.bind(function (data) {-                var def; // default choice--                // ignore a response if the select2 has been closed before it was received-                if (!this.opened()) {-                    this.search.removeClass("select2-active");-                    return;-                }--                // save context, if any-                this.context = (data.context===undefined) ? null : data.context;-                // create a default choice and prepend it to the list-                if (this.opts.createSearchChoice && search.val() !== "") {-                    def = this.opts.createSearchChoice.call(null, search.val(), data.results);-                    if (def !== undefined && def !== null && self.id(def) !== undefined && self.id(def) !== null) {-                        if ($(data.results).filter(-                            function () {-                                return equal(self.id(this), self.id(def));-                            }).length === 0) {-                            data.results.unshift(def);-                        }-                    }-                }--                if (data.results.length === 0 && checkFormatter(opts.formatNoMatches, "formatNoMatches")) {-                    render("<li class='select2-no-results'>" + opts.formatNoMatches(search.val()) + "</li>");-                    return;-                }--                results.empty();-                self.opts.populateResults.call(this, results, data.results, {term: search.val(), page: this.resultsPage, context:null});--                if (data.more === true && checkFormatter(opts.formatLoadMore, "formatLoadMore")) {-                    results.append("<li class='select2-more-results'>" + self.opts.escapeMarkup(opts.formatLoadMore(this.resultsPage)) + "</li>");-                    window.setTimeout(function() { self.loadMoreIfNeeded(); }, 10);-                }--                this.postprocessResults(data, initial);--                postRender();--                this.opts.element.trigger({ type: "select2-loaded", data:data });-            })});-        },--        // abstract-        cancel: function () {-            this.close();-        },--        // abstract-        blur: function () {-            // if selectOnBlur == true, select the currently highlighted option-            if (this.opts.selectOnBlur)-                this.selectHighlighted({noFocus: true});--            this.close();-            this.container.removeClass("select2-container-active");-            // synonymous to .is(':focus'), which is available in jquery >= 1.6-            if (this.search[0] === document.activeElement) { this.search.blur(); }-            this.clearSearch();-            this.selection.find(".select2-search-choice-focus").removeClass("select2-search-choice-focus");-        },--        // abstract-        focusSearch: function () {-            focus(this.search);-        },--        // abstract-        selectHighlighted: function (options) {-            var index=this.highlight(),-                highlighted=this.results.find(".select2-highlighted"),-                data = highlighted.closest('.select2-result').data("select2-data");--            if (data) {-                this.highlight(index);-                this.onSelect(data, options);-            }-        },--        // abstract-        getPlaceholder: function () {-            return this.opts.element.attr("placeholder") ||-                this.opts.element.attr("data-placeholder") || // jquery 1.4 compat-                this.opts.element.data("placeholder") ||-                this.opts.placeholder;-        },--        /**-         * Get the desired width for the container element.  This is-         * derived first from option `width` passed to select2, then-         * the inline 'style' on the original element, and finally-         * falls back to the jQuery calculated element width.-         */-        // abstract-        initContainerWidth: function () {-            function resolveContainerWidth() {-                var style, attrs, matches, i, l;--                if (this.opts.width === "off") {-                    return null;-                } else if (this.opts.width === "element"){-                    return this.opts.element.outerWidth(false) === 0 ? 'auto' : this.opts.element.outerWidth(false) + 'px';-                } else if (this.opts.width === "copy" || this.opts.width === "resolve") {-                    // check if there is inline style on the element that contains width-                    style = this.opts.element.attr('style');-                    if (style !== undefined) {-                        attrs = style.split(';');-                        for (i = 0, l = attrs.length; i < l; i = i + 1) {-                            matches = attrs[i].replace(/\s/g, '')-                                .match(/width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i);-                            if (matches !== null && matches.length >= 1)-                                return matches[1];-                        }-                    }--                    // next check if css('width') can resolve a width that is percent based, this is sometimes possible-                    // when attached to input type=hidden or elements hidden via css-                    style = this.opts.element.css('width');-                    if (style && style.length > 0) return style;--                    if (this.opts.width === "resolve") {-                        // finally, fallback on the calculated width of the element-                        return (this.opts.element.outerWidth(false) === 0 ? 'auto' : this.opts.element.outerWidth(false) + 'px');-                    }--                    return null;-                } else if ($.isFunction(this.opts.width)) {-                    return this.opts.width();-                } else {-                    return this.opts.width;-               }-            };--            var width = resolveContainerWidth.call(this);-            if (width !== null) {-                this.container.css("width", width);-            }-        }-    });--    SingleSelect2 = clazz(AbstractSelect2, {--        // single--		createContainer: function () {-            var container = $(document.createElement("div")).attr({-                "class": "select2-container"-            }).html([-                "<a href='javascript:void(0)' onclick='return false;' class='select2-choice' tabindex='-1'>",-                "   <span>&nbsp;</span><abbr class='select2-search-choice-close'></abbr>",-                "   <div><b></b></div>" ,-                "</a>",-                "<input class='select2-focusser select2-offscreen' type='text'/>",-                "<div class='select2-drop select2-display-none'>" ,-                "   <div class='select2-search'>" ,-                "       <input type='text' autocomplete='off' autocorrect='off' autocapitilize='off' spellcheck='false' class='select2-input'/>" ,-                "   </div>" ,-                "   <ul class='select2-results'>" ,-                "   </ul>" ,-                "</div>"].join(""));-            return container;-        },--        // single-        enableInterface: function() {-            if (this.parent.enableInterface.apply(this, arguments)) {-                this.focusser.prop("disabled", !this.isInterfaceEnabled());-            }-        },--        // single-        opening: function () {-            var el, range;-            this.parent.opening.apply(this, arguments);-            if (this.showSearchInput !== false) {-                // IE appends focusser.val() at the end of field :/ so we manually insert it at the beginning using a range-                // all other browsers handle this just fine--                this.search.val(this.focusser.val());-            }-            this.search.focus();-            // in IE we have to move the cursor to the end after focussing, otherwise it will be at the beginning and-            // new text will appear *before* focusser.val()-            el = this.search.get(0);-            if (el.createTextRange) {-                range = el.createTextRange();-                range.collapse(false);-                range.select();-            }--            this.focusser.prop("disabled", true).val("");-            this.updateResults(true);-            this.opts.element.trigger($.Event("select2-open"));-        },--        // single-        close: function () {-            if (!this.opened()) return;-            this.parent.close.apply(this, arguments);-            this.focusser.removeAttr("disabled");-            this.focusser.focus();-        },--        // single-        focus: function () {-            if (this.opened()) {-                this.close();-            } else {-                this.focusser.removeAttr("disabled");-                this.focusser.focus();-            }-        },--        // single-        isFocused: function () {-            return this.container.hasClass("select2-container-active");-        },--        // single-        cancel: function () {-            this.parent.cancel.apply(this, arguments);-            this.focusser.removeAttr("disabled");-            this.focusser.focus();-        },--        // single-        initContainer: function () {--            var selection,-                container = this.container,-                dropdown = this.dropdown;--            this.showSearch(false);--            this.selection = selection = container.find(".select2-choice");--            this.focusser = container.find(".select2-focusser");--            // rewrite labels from original element to focusser-            this.focusser.attr("id", "s2id_autogen"+nextUid());--            $("label[for='" + this.opts.element.attr("id") + "']")-                .attr('for', this.focusser.attr('id'));--            this.focusser.attr("tabindex", this.elementTabIndex);--            this.search.on("keydown", this.bind(function (e) {-                if (!this.isInterfaceEnabled()) return;--                if (e.which === KEY.PAGE_UP || e.which === KEY.PAGE_DOWN) {-                    // prevent the page from scrolling-                    killEvent(e);-                    return;-                }--                switch (e.which) {-                    case KEY.UP:-                    case KEY.DOWN:-                        this.moveHighlight((e.which === KEY.UP) ? -1 : 1);-                        killEvent(e);-                        return;-                    case KEY.ENTER:-                        this.selectHighlighted();-                        killEvent(e);-                        return;-                    case KEY.TAB:-                        this.selectHighlighted({noFocus: true});-                        return;-                    case KEY.ESC:-                        this.cancel(e);-                        killEvent(e);-                        return;-                }-            }));--            this.search.on("blur", this.bind(function(e) {-                // a workaround for chrome to keep the search field focussed when the scroll bar is used to scroll the dropdown.-                // without this the search field loses focus which is annoying-                if (document.activeElement === this.body().get(0)) {-                    window.setTimeout(this.bind(function() {-                        this.search.focus();-                    }), 0);-                }-            }));--            this.focusser.on("keydown", this.bind(function (e) {-                if (!this.isInterfaceEnabled()) return;--                if (e.which === KEY.TAB || KEY.isControl(e) || KEY.isFunctionKey(e) || e.which === KEY.ESC) {-                    return;-                }--                if (this.opts.openOnEnter === false && e.which === KEY.ENTER) {-                    killEvent(e);-                    return;-                }--                if (e.which == KEY.DOWN || e.which == KEY.UP-                    || (e.which == KEY.ENTER && this.opts.openOnEnter)) {-                    this.open();-                    killEvent(e);-                    return;-                }--                if (e.which == KEY.DELETE || e.which == KEY.BACKSPACE) {-                    if (this.opts.allowClear) {-                        this.clear();-                    }-                    killEvent(e);-                    return;-                }-            }));---            installKeyUpChangeEvent(this.focusser);-            this.focusser.on("keyup-change input", this.bind(function(e) {-                e.stopPropagation();-                if (this.opened()) return;-                this.open();-            }));--            selection.on("mousedown", "abbr", this.bind(function (e) {-                if (!this.isInterfaceEnabled()) return;-                this.clear();-                killEventImmediately(e);-                this.close();-                this.selection.focus();-            }));--            selection.on("mousedown", this.bind(function (e) {--                if (!this.container.hasClass("select2-container-active")) {-                    this.opts.element.trigger($.Event("select2-focus"));-                }--                if (this.opened()) {-                    this.close();-                } else if (this.isInterfaceEnabled()) {-                    this.open();-                }--                killEvent(e);-            }));--            dropdown.on("mousedown", this.bind(function() { this.search.focus(); }));--            selection.on("focus", this.bind(function(e) {-                killEvent(e);-            }));--            this.focusser.on("focus", this.bind(function(){-                if (!this.container.hasClass("select2-container-active")) {-                    this.opts.element.trigger($.Event("select2-focus"));-                }-                this.container.addClass("select2-container-active");-            })).on("blur", this.bind(function() {-                if (!this.opened()) {-                    this.container.removeClass("select2-container-active");-                    this.opts.element.trigger($.Event("select2-blur"));-                }-            }));-            this.search.on("focus", this.bind(function(){-                if (!this.container.hasClass("select2-container-active")) {-                    this.opts.element.trigger($.Event("select2-focus"));-                }-                this.container.addClass("select2-container-active");-            }));--            this.initContainerWidth();-            this.opts.element.addClass("select2-offscreen");-            this.setPlaceholder();--        },--        // single-        clear: function(triggerChange) {-            var data=this.selection.data("select2-data");-            if (data) { // guard against queued quick consecutive clicks-                this.opts.element.val("");-                this.selection.find("span").empty();-                this.selection.removeData("select2-data");-                this.setPlaceholder();--                if (triggerChange !== false){-                    this.opts.element.trigger({ type: "select2-removed", val: this.id(data), choice: data });-                    this.triggerChange({removed:data});-                }-            }-        },--        /**-         * Sets selection based on source element's value-         */-        // single-        initSelection: function () {-            var selected;-            if (this.opts.element.val() === "" && this.opts.element.text() === "") {-                this.updateSelection([]);-                this.close();-                this.setPlaceholder();-            } else {-                var self = this;-                this.opts.initSelection.call(null, this.opts.element, function(selected){-                    if (selected !== undefined && selected !== null) {-                        self.updateSelection(selected);-                        self.close();-                        self.setPlaceholder();-                    }-                });-            }-        },--        // single-        prepareOpts: function () {-            var opts = this.parent.prepareOpts.apply(this, arguments),-                self=this;--            if (opts.element.get(0).tagName.toLowerCase() === "select") {-                // install the selection initializer-                opts.initSelection = function (element, callback) {-                    var selected = element.find(":selected");-                    // a single select box always has a value, no need to null check 'selected'-                    callback(self.optionToData(selected));-                };-            } else if ("data" in opts) {-                // install default initSelection when applied to hidden input and data is local-                opts.initSelection = opts.initSelection || function (element, callback) {-                    var id = element.val();-                    //search in data by id, storing the actual matching item-                    var match = null;-                    opts.query({-                        matcher: function(term, text, el){-                            var is_match = equal(id, opts.id(el));-                            if (is_match) {-                                match = el;-                            }-                            return is_match;-                        },-                        callback: !$.isFunction(callback) ? $.noop : function() {-                            callback(match);-                        }-                    });-                };-            }--            return opts;-        },--        // single-        getPlaceholder: function() {-            // if a placeholder is specified on a single select without the first empty option ignore it-            if (this.select) {-                if (this.select.find("option").first().text() !== "") {-                    return undefined;-                }-            }--            return this.parent.getPlaceholder.apply(this, arguments);-        },--        // single-        setPlaceholder: function () {-            var placeholder = this.getPlaceholder();--            if (this.opts.element.val() === "" && placeholder !== undefined) {--                // check for a first blank option if attached to a select-                if (this.select && this.select.find("option:first").text() !== "") return;--                this.selection.find("span").html(this.opts.escapeMarkup(placeholder));--                this.selection.addClass("select2-default");--                this.container.removeClass("select2-allowclear");-            }-        },--        // single-        postprocessResults: function (data, initial, noHighlightUpdate) {-            var selected = 0, self = this, showSearchInput = true;--            // find the selected element in the result list--            this.findHighlightableChoices().each2(function (i, elm) {-                if (equal(self.id(elm.data("select2-data")), self.opts.element.val())) {-                    selected = i;-                    return false;-                }-            });--            // and highlight it-            if (noHighlightUpdate !== false) {-                this.highlight(selected);-            }--            // show the search box if this is the first we got the results and there are enough of them for search--            if (initial === true && this.showSearchInput === false) {-                var min=this.opts.minimumResultsForSearch;-                if (min>=0) {-                    this.showSearch(countResults(data.results)>=min);-                }-            }--        },--        // single-        showSearch: function(showSearchInput) {-            this.showSearchInput = showSearchInput;--            this.dropdown.find(".select2-search").toggleClass("select2-search-hidden", !showSearchInput);-            this.dropdown.find(".select2-search").toggleClass("select2-offscreen", !showSearchInput);-            //add "select2-with-searchbox" to the container if search box is shown-            $(this.dropdown, this.container).toggleClass("select2-with-searchbox", showSearchInput);-        },--        // single-        onSelect: function (data, options) {--            if (!this.triggerSelect(data)) { return; }--            var old = this.opts.element.val(),-                oldData = this.data();--            this.opts.element.val(this.id(data));-            this.updateSelection(data);--            this.opts.element.trigger({ type: "select2-selected", val: this.id(data), choice: data });--            this.close();--            if (!options || !options.noFocus)-                this.selection.focus();--            if (!equal(old, this.id(data))) { this.triggerChange({added:data,removed:oldData}); }-        },--        // single-        updateSelection: function (data) {--            var container=this.selection.find("span"), formatted;--            this.selection.data("select2-data", data);--            container.empty();-            formatted=this.opts.formatSelection(data, container);-            if (formatted !== undefined) {-                container.append(this.opts.escapeMarkup(formatted));-            }--            this.selection.removeClass("select2-default");--            if (this.opts.allowClear && this.getPlaceholder() !== undefined) {-                this.container.addClass("select2-allowclear");-            }-        },--        // single-        val: function () {-            var val,-                triggerChange = false,-                data = null,-                self = this,-                oldData = this.data();--            if (arguments.length === 0) {-                return this.opts.element.val();-            }--            val = arguments[0];--            if (arguments.length > 1) {-                triggerChange = arguments[1];-            }--            if (this.select) {-                this.select-                    .val(val)-                    .find(":selected").each2(function (i, elm) {-                        data = self.optionToData(elm);-                        return false;-                    });-                this.updateSelection(data);-                this.setPlaceholder();-                if (triggerChange) {-                    this.triggerChange({added: data, removed:oldData});-                }-            } else {-                if (this.opts.initSelection === undefined) {-                    throw new Error("cannot call val() if initSelection() is not defined");-                }-                // val is an id. !val is true for [undefined,null,'',0] - 0 is legal-                if (!val && val !== 0) {-                    this.clear(triggerChange);-                    return;-                }-                this.opts.element.val(val);-                this.opts.initSelection(this.opts.element, function(data){-                    self.opts.element.val(!data ? "" : self.id(data));-                    self.updateSelection(data);-                    self.setPlaceholder();-                    if (triggerChange) {-                        self.triggerChange({added: data, removed:oldData});-                    }-                });-            }-        },--        // single-        clearSearch: function () {-            this.search.val("");-            this.focusser.val("");-        },--        // single-        data: function(value, triggerChange) {-            var data;--            if (arguments.length === 0) {-                data = this.selection.data("select2-data");-                if (data == undefined) data = null;-                return data;-            } else {-                if (!value || value === "") {-                    this.clear(triggerChange);-                } else {-                    data = this.data();-                    this.opts.element.val(!value ? "" : this.id(value));-                    this.updateSelection(value);-                    if (triggerChange) {-                        this.triggerChange({added: value, removed:data});-                    }-                }-            }-        }-    });--    MultiSelect2 = clazz(AbstractSelect2, {--        // multi-        createContainer: function () {-            var container = $(document.createElement("div")).attr({-                "class": "select2-container select2-container-multi"-            }).html([-                "    <ul class='select2-choices'>",-                //"<li class='select2-search-choice'><span>California</span><a href="javascript:void(0)" class="select2-search-choice-close"></a></li>" ,-                "  <li class='select2-search-field'>" ,-                "    <input type='text' autocomplete='off' autocorrect='off' autocapitilize='off' spellcheck='false' class='select2-input'>" ,-                "  </li>" ,-                "</ul>" ,-                "<div class='select2-drop select2-drop-multi select2-display-none'>" ,-                "   <ul class='select2-results'>" ,-                "   </ul>" ,-                "</div>"].join(""));-			return container;-        },--        // multi-        prepareOpts: function () {-            var opts = this.parent.prepareOpts.apply(this, arguments),-                self=this;--            // TODO validate placeholder is a string if specified--            if (opts.element.get(0).tagName.toLowerCase() === "select") {-                // install sthe selection initializer-                opts.initSelection = function (element, callback) {--                    var data = [];--                    element.find(":selected").each2(function (i, elm) {-                        data.push(self.optionToData(elm));-                    });-                    callback(data);-                };-            } else if ("data" in opts) {-                // install default initSelection when applied to hidden input and data is local-                opts.initSelection = opts.initSelection || function (element, callback) {-                    var ids = splitVal(element.val(), opts.separator);-                    //search in data by array of ids, storing matching items in a list-                    var matches = [];-                    opts.query({-                        matcher: function(term, text, el){-                            var is_match = $.grep(ids, function(id) {-                                return equal(id, opts.id(el));-                            }).length;-                            if (is_match) {-                                matches.push(el);-                            }-                            return is_match;-                        },-                        callback: !$.isFunction(callback) ? $.noop : function() {-                            // reorder matches based on the order they appear in the ids array because right now-                            // they are in the order in which they appear in data array-                            var ordered = [];-                            for (var i = 0; i < ids.length; i++) {-                                var id = ids[i];-                                for (var j = 0; j < matches.length; j++) {-                                    var match = matches[j];-                                    if (equal(id, opts.id(match))) {-                                        ordered.push(match);-                                        matches.splice(j, 1);-                                        break;-                                    }-                                }-                            }-                            callback(ordered);-                        }-                    });-                };-            }--            return opts;-        },--        selectChoice: function (choice) {--            var selected = this.container.find(".select2-search-choice-focus");-            if (selected.length && choice && choice[0] == selected[0]) {--            } else {-                if (selected.length) {-                    this.opts.element.trigger("choice-deselected", selected);-                }-                selected.removeClass("select2-search-choice-focus");-                if (choice && choice.length) {-                    this.close();-                    choice.addClass("select2-search-choice-focus");-                    this.opts.element.trigger("choice-selected", choice);-                }-            }-        },--        // multi-        initContainer: function () {--            var selector = ".select2-choices", selection;--            this.searchContainer = this.container.find(".select2-search-field");-            this.selection = selection = this.container.find(selector);--            var _this = this;-            this.selection.on("mousedown", ".select2-search-choice", function (e) {-                //killEvent(e);-                _this.search[0].focus();-                _this.selectChoice($(this));-            })-            //.sortable({-            //    items: " > li",-            //    tolerance: "pointer",-            //    revert: 100-            //});--            // rewrite labels from original element to focusser-            this.search.attr("id", "s2id_autogen"+nextUid());-            $("label[for='" + this.opts.element.attr("id") + "']")-                .attr('for', this.search.attr('id'));--            this.search.on("input paste", this.bind(function() {-                if (!this.isInterfaceEnabled()) return;-                if (!this.opened()) {-                    this.open();-                }-            }));--            this.search.attr("tabindex", this.elementTabIndex);--            this.keydowns = 0;-            this.search.on("keydown", this.bind(function (e) {-                if (!this.isInterfaceEnabled()) return;--                ++this.keydowns;-                var selected = selection.find(".select2-search-choice-focus");-                var prev = selected.prev(".select2-search-choice:not(.select2-locked)");-                var next = selected.next(".select2-search-choice:not(.select2-locked)");-                var pos = getCursorInfo(this.search);--                if (selected.length &&-                    (e.which == KEY.LEFT || e.which == KEY.RIGHT || e.which == KEY.BACKSPACE || e.which == KEY.DELETE || e.which == KEY.ENTER)) {-                    var selectedChoice = selected;-                    if (e.which == KEY.LEFT && prev.length) {-                        selectedChoice = prev;-                    }-                    else if (e.which == KEY.RIGHT) {-                        selectedChoice = next.length ? next : null;-                    }-                    else if (e.which === KEY.BACKSPACE) {-                        this.unselect(selected.first());-                        this.search.width(10);-                        selectedChoice = prev.length ? prev : next;-                    } else if (e.which == KEY.DELETE) {-                        this.unselect(selected.first());-                        this.search.width(10);-                        selectedChoice = next.length ? next : null;-                    } else if (e.which == KEY.ENTER) {-                        selectedChoice = null;-                    }--                    this.selectChoice(selectedChoice);-                    killEvent(e);-                    if (!selectedChoice || !selectedChoice.length) {-                        this.open();-                    }-                    return;-                } else if (((e.which === KEY.BACKSPACE && this.keydowns == 1)-                    || e.which == KEY.LEFT) && (pos.offset == 0 && !pos.length)) {--                    this.selectChoice(selection.find(".select2-search-choice:not(.select2-locked)").last());-                    killEvent(e);-                    return;-                } else {-                    this.selectChoice(null);-                }--                if (this.opened()) {-                    switch (e.which) {-                    case KEY.UP:-                    case KEY.DOWN:-                        this.moveHighlight((e.which === KEY.UP) ? -1 : 1);-                        killEvent(e);-                        return;-                    case KEY.ENTER:-                        this.selectHighlighted();-                        killEvent(e);-                        return;-                    case KEY.TAB:-                        this.selectHighlighted({noFocus:true});-                        return;-                    case KEY.ESC:-                        this.cancel(e);-                        killEvent(e);-                        return;-                    }-                }--                if (e.which === KEY.TAB || KEY.isControl(e) || KEY.isFunctionKey(e)-                 || e.which === KEY.BACKSPACE || e.which === KEY.ESC) {-                    return;-                }--                if (e.which === KEY.ENTER) {-                    if (this.opts.openOnEnter === false) {-                        return;-                    } else if (e.altKey || e.ctrlKey || e.shiftKey || e.metaKey) {-                        return;-                    }-                }--                this.open();--                if (e.which === KEY.PAGE_UP || e.which === KEY.PAGE_DOWN) {-                    // prevent the page from scrolling-                    killEvent(e);-                }--                if (e.which === KEY.ENTER) {-                    // prevent form from being submitted-                    killEvent(e);-                }--            }));--            this.search.on("keyup", this.bind(function (e) {-                this.keydowns = 0;-                this.resizeSearch();-            })-            );--            this.search.on("blur", this.bind(function(e) {-                this.container.removeClass("select2-container-active");-                this.search.removeClass("select2-focused");-                this.selectChoice(null);-                if (!this.opened()) this.clearSearch();-                e.stopImmediatePropagation();-                this.opts.element.trigger($.Event("select2-blur"));-            }));--            this.container.on("mousedown", selector, this.bind(function (e) {-                if (!this.isInterfaceEnabled()) return;-                if ($(e.target).closest(".select2-search-choice").length > 0) {-                    // clicked inside a select2 search choice, do not open-                    return;-                }-                this.selectChoice(null);-                this.clearPlaceholder();-                if (!this.container.hasClass("select2-container-active")) {-                    this.opts.element.trigger($.Event("select2-focus"));-                }-                this.open();-                this.focusSearch();-                e.preventDefault();-            }));--            this.container.on("focus", selector, this.bind(function () {-                if (!this.isInterfaceEnabled()) return;-                if (!this.container.hasClass("select2-container-active")) {-                    this.opts.element.trigger($.Event("select2-focus"));-                }-                this.container.addClass("select2-container-active");-                this.dropdown.addClass("select2-drop-active");-                this.clearPlaceholder();-            }));--            this.initContainerWidth();-            this.opts.element.addClass("select2-offscreen");--            // set the placeholder if necessary-            this.clearSearch();-        },--        // multi-        enableInterface: function() {-            if (this.parent.enableInterface.apply(this, arguments)) {-                this.search.prop("disabled", !this.isInterfaceEnabled());-            }-        },--        // multi-        initSelection: function () {-            var data;-            if (this.opts.element.val() === "" && this.opts.element.text() === "") {-                this.updateSelection([]);-                this.close();-                // set the placeholder if necessary-                this.clearSearch();-            }-            if (this.select || this.opts.element.val() !== "") {-                var self = this;-                this.opts.initSelection.call(null, this.opts.element, function(data){-                    if (data !== undefined && data !== null) {-                        self.updateSelection(data);-                        self.close();-                        // set the placeholder if necessary-                        self.clearSearch();-                    }-                });-            }-        },--        // multi-        clearSearch: function () {-            var placeholder = this.getPlaceholder(),-                maxWidth = this.getMaxSearchWidth();--            if (placeholder !== undefined  && this.getVal().length === 0 && this.search.hasClass("select2-focused") === false) {-                this.search.val(placeholder).addClass("select2-default");-                // stretch the search box to full width of the container so as much of the placeholder is visible as possible-                // we could call this.resizeSearch(), but we do not because that requires a sizer and we do not want to create one so early because of a firefox bug, see #944-                this.search.width(maxWidth > 0 ? maxWidth : this.container.css("width"));-            } else {-                this.search.val("").width(10);-            }-        },--        // multi-        clearPlaceholder: function () {-            if (this.search.hasClass("select2-default")) {-                this.search.val("").removeClass("select2-default");-            }-        },--        // multi-        opening: function () {-            this.clearPlaceholder(); // should be done before super so placeholder is not used to search-            this.resizeSearch();--            this.parent.opening.apply(this, arguments);--            this.focusSearch();--            this.updateResults(true);-            this.search.focus();-            this.opts.element.trigger($.Event("select2-open"));-        },--        // multi-        close: function () {-            if (!this.opened()) return;-            this.parent.close.apply(this, arguments);-        },--        // multi-        focus: function () {-            this.close();-            this.search.focus();-            //this.opts.element.triggerHandler("focus");-        },--        // multi-        isFocused: function () {-            return this.search.hasClass("select2-focused");-        },--        // multi-        updateSelection: function (data) {-            var ids = [], filtered = [], self = this;--            // filter out duplicates-            $(data).each(function () {-                if (indexOf(self.id(this), ids) < 0) {-                    ids.push(self.id(this));-                    filtered.push(this);-                }-            });-            data = filtered;--            this.selection.find(".select2-search-choice").remove();-            $(data).each(function () {-                self.addSelectedChoice(this);-            });-            self.postprocessResults();-        },--        // multi-        tokenize: function() {-            var input = this.search.val();-            input = this.opts.tokenizer(input, this.data(), this.bind(this.onSelect), this.opts);-            if (input != null && input != undefined) {-                this.search.val(input);-                if (input.length > 0) {-                    this.open();-                }-            }--        },--        // multi-        onSelect: function (data, options) {--            if (!this.triggerSelect(data)) { return; }--            this.addSelectedChoice(data);--            this.opts.element.trigger({ type: "selected", val: this.id(data), choice: data });--            if (this.select || !this.opts.closeOnSelect) this.postprocessResults();--            if (this.opts.closeOnSelect) {-                this.close();-                this.search.width(10);-            } else {-                if (this.countSelectableResults()>0) {-                    this.search.width(10);-                    this.resizeSearch();-                    if (this.getMaximumSelectionSize() > 0 && this.val().length >= this.getMaximumSelectionSize()) {-                        // if we reached max selection size repaint the results so choices-                        // are replaced with the max selection reached message-                        this.updateResults(true);-                    }-                    this.positionDropdown();-                } else {-                    // if nothing left to select close-                    this.close();-                    this.search.width(10);-                }-            }--            // since its not possible to select an element that has already been-            // added we do not need to check if this is a new element before firing change-            this.triggerChange({ added: data });--            if (!options || !options.noFocus)-                this.focusSearch();-        },--        // multi-        cancel: function () {-            this.close();-            this.focusSearch();-        },--        addSelectedChoice: function (data) {-            var enableChoice = !data.locked,-                enabledItem = $(-                    "<li class='select2-search-choice'>" +-                    "    <div></div>" +-                    "    <a href='#' onclick='return false;' class='select2-search-choice-close' tabindex='-1'></a>" +-                    "</li>"),-                disabledItem = $(-                    "<li class='select2-search-choice select2-locked'>" +-                    "<div></div>" +-                    "</li>");-            var choice = enableChoice ? enabledItem : disabledItem,-                id = this.id(data),-                val = this.getVal(),-                formatted;--            formatted=this.opts.formatSelection(data, choice.find("div"));-            if (formatted != undefined) {-                choice.find("div").replaceWith("<div title='"+this.opts.escapeMarkup(formatted)+"'>"+this.opts.escapeMarkup(formatted)+"</div>");-            }--            if(enableChoice){-              choice.find(".select2-search-choice-close")-                  .on("mousedown", killEvent)-                  .on("click dblclick", this.bind(function (e) {-                  if (!this.isInterfaceEnabled()) return;--                  $(e.target).closest(".select2-search-choice").fadeOut('fast', this.bind(function(){-                      this.unselect($(e.target));-                      this.selection.find(".select2-search-choice-focus").removeClass("select2-search-choice-focus");-                      this.close();-                      this.focusSearch();-                  })).dequeue();-                  killEvent(e);-              })).on("focus", this.bind(function () {-                  if (!this.isInterfaceEnabled()) return;-                  this.container.addClass("select2-container-active");-                  this.dropdown.addClass("select2-drop-active");-              }));-            }--            choice.data("select2-data", data);-            choice.insertBefore(this.searchContainer);--            val.push(id);-            this.setVal(val);-        },--        // multi-        unselect: function (selected) {-            var val = this.getVal(),-                data,-                index;--            selected = selected.closest(".select2-search-choice");--            if (selected.length === 0) {-                throw "Invalid argument: " + selected + ". Must be .select2-search-choice";-            }--            data = selected.data("select2-data");--            if (!data) {-                // prevent a race condition when the 'x' is clicked really fast repeatedly the event can be queued-                // and invoked on an element already removed-                return;-            }--            index = indexOf(this.id(data), val);--            if (index >= 0) {-                val.splice(index, 1);-                this.setVal(val);-                if (this.select) this.postprocessResults();-            }-            selected.remove();--            this.opts.element.trigger({ type: "removed", val: this.id(data), choice: data });-            this.triggerChange({ removed: data });-        },--        // multi-        postprocessResults: function (data, initial, noHighlightUpdate) {-            var val = this.getVal(),-                choices = this.results.find(".select2-result"),-                compound = this.results.find(".select2-result-with-children"),-                self = this;--            choices.each2(function (i, choice) {-                var id = self.id(choice.data("select2-data"));-                if (indexOf(id, val) >= 0) {-                    choice.addClass("select2-selected");-                    // mark all children of the selected parent as selected-                    choice.find(".select2-result-selectable").addClass("select2-selected");-                }-            });--            compound.each2(function(i, choice) {-                // hide an optgroup if it doesnt have any selectable children-                if (!choice.is('.select2-result-selectable')-                    && choice.find(".select2-result-selectable:not(.select2-selected)").length === 0) {-                    choice.addClass("select2-selected");-                }-            });--            if (this.highlight() == -1 && noHighlightUpdate !== false){-                self.highlight(0);-            }--            //If all results are chosen render formatNoMAtches-            if(!this.opts.createSearchChoice && !choices.filter('.select2-result:not(.select2-selected)').length > 0){-                this.results.append("<li class='select2-no-results'>" + self.opts.formatNoMatches(self.search.val()) + "</li>");-            }--        },--        // multi-        getMaxSearchWidth: function() {-            return this.selection.width() - getSideBorderPadding(this.search);-        },--        // multi-        resizeSearch: function () {-            var minimumWidth, left, maxWidth, containerLeft, searchWidth,-            	sideBorderPadding = getSideBorderPadding(this.search);--            minimumWidth = measureTextWidth(this.search) + 10;--            left = this.search.offset().left;--            maxWidth = this.selection.width();-            containerLeft = this.selection.offset().left;--            searchWidth = maxWidth - (left - containerLeft) - sideBorderPadding;--            if (searchWidth < minimumWidth) {-                searchWidth = maxWidth - sideBorderPadding;-            }--            if (searchWidth < 40) {-                searchWidth = maxWidth - sideBorderPadding;-            }--            if (searchWidth <= 0) {-              searchWidth = minimumWidth;-            }--            this.search.width(searchWidth);-        },--        // multi-        getVal: function () {-            var val;-            if (this.select) {-                val = this.select.val();-                return val === null ? [] : val;-            } else {-                val = this.opts.element.val();-                return splitVal(val, this.opts.separator);-            }-        },--        // multi-        setVal: function (val) {-            var unique;-            if (this.select) {-                this.select.val(val);-            } else {-                unique = [];-                // filter out duplicates-                $(val).each(function () {-                    if (indexOf(this, unique) < 0) unique.push(this);-                });-                this.opts.element.val(unique.length === 0 ? "" : unique.join(this.opts.separator));-            }-        },--        // multi-        buildChangeDetails: function (old, current) {-            var current = current.slice(0),-                old = old.slice(0);--            // remove intersection from each array-            for (var i = 0; i < current.length; i++) {-                for (var j = 0; j < old.length; j++) {-                    if (equal(this.opts.id(current[i]), this.opts.id(old[j]))) {-                        current.splice(i, 1);-                        i--;-                        old.splice(j, 1);-                        j--;-                    }-                }-            }--            return {added: current, removed: old};-        },---        // multi-        val: function (val, triggerChange) {-            var oldData, self=this, changeDetails;--            if (arguments.length === 0) {-                return this.getVal();-            }--            oldData=this.data();-            if (!oldData.length) oldData=[];--            // val is an id. !val is true for [undefined,null,'',0] - 0 is legal-            if (!val && val !== 0) {-                this.opts.element.val("");-                this.updateSelection([]);-                this.clearSearch();-                if (triggerChange) {-                    this.triggerChange({added: this.data(), removed: oldData});-                }-                return;-            }--            // val is a list of ids-            this.setVal(val);--            if (this.select) {-                this.opts.initSelection(this.select, this.bind(this.updateSelection));-                if (triggerChange) {-                    this.triggerChange(this.buildChangeDetails(oldData, this.data()));-                }-            } else {-                if (this.opts.initSelection === undefined) {-                    throw new Error("val() cannot be called if initSelection() is not defined");-                }--                this.opts.initSelection(this.opts.element, function(data){-                    var ids=$(data).map(self.id);-                    self.setVal(ids);-                    self.updateSelection(data);-                    self.clearSearch();-                    if (triggerChange) {-                        self.triggerChange(this.buildChangeDetails(oldData, this.data()));-                    }-                });-            }-            this.clearSearch();-        },--        // multi-        onSortStart: function() {-            if (this.select) {-                throw new Error("Sorting of elements is not supported when attached to <select>. Attach to <input type='hidden'/> instead.");-            }--            // collapse search field into 0 width so its container can be collapsed as well-            this.search.width(0);-            // hide the container-            this.searchContainer.hide();-        },--        // multi-        onSortEnd:function() {--            var val=[], self=this;--            // show search and move it to the end of the list-            this.searchContainer.show();-            // make sure the search container is the last item in the list-            this.searchContainer.appendTo(this.searchContainer.parent());-            // since we collapsed the width in dragStarted, we resize it here-            this.resizeSearch();--            // update selection--            this.selection.find(".select2-search-choice").each(function() {-                val.push(self.opts.id($(this).data("select2-data")));-            });-            this.setVal(val);-            this.triggerChange();-        },--        // multi-        data: function(values, triggerChange) {-            var self=this, ids, old;-            if (arguments.length === 0) {-                 return this.selection-                     .find(".select2-search-choice")-                     .map(function() { return $(this).data("select2-data"); })-                     .get();-            } else {-                old = this.data();-                if (!values) { values = []; }-                ids = $.map(values, function(e) { return self.opts.id(e); });-                this.setVal(ids);-                this.updateSelection(values);-                this.clearSearch();-                if (triggerChange) {-                    this.triggerChange(this.buildChangeDetails(old, this.data()));-                }-            }-        }-    });--    $.fn.select2 = function () {--        var args = Array.prototype.slice.call(arguments, 0),-            opts,-            select2,-            value, multiple,-            allowedMethods = ["val", "destroy", "opened", "open", "close", "focus", "isFocused", "container", "onSortStart", "onSortEnd", "enable", "readonly", "positionDropdown", "data"],-            valueMethods = ["val", "opened", "isFocused", "container", "data"];--        this.each(function () {-            if (args.length === 0 || typeof(args[0]) === "object") {-                opts = args.length === 0 ? {} : $.extend({}, args[0]);-                opts.element = $(this);--                if (opts.element.get(0).tagName.toLowerCase() === "select") {-                    multiple = opts.element.prop("multiple");-                } else {-                    multiple = opts.multiple || false;-                    if ("tags" in opts) {opts.multiple = multiple = true;}-                }--                select2 = multiple ? new MultiSelect2() : new SingleSelect2();-                select2.init(opts);-            } else if (typeof(args[0]) === "string") {--                if (indexOf(args[0], allowedMethods) < 0) {-                    throw "Unknown method: " + args[0];-                }--                value = undefined;-                select2 = $(this).data("select2");-                if (select2 === undefined) return;-                if (args[0] === "container") {-                    value=select2.container;-                } else {-                    value = select2[args[0]].apply(select2, args.slice(1));-                }-                if (indexOf(args[0], valueMethods) >= 0) {-                    return false;-                }-            } else {-                throw "Invalid arguments to select2 plugin: " + args;-            }-        });-        return (value === undefined) ? this : value;-    };--    // plugin defaults, accessible to users-    $.fn.select2.defaults = {-        width: "copy",-        loadMorePadding: 0,-        closeOnSelect: true,-        openOnEnter: true,-        containerCss: {},-        dropdownCss: {},-        containerCssClass: "",-        dropdownCssClass: "",-        formatResult: function(result, container, query, escapeMarkup) {-            var markup=[];-            markMatch(result.text, query.term, markup, escapeMarkup);-            return markup.join("");-        },-        formatSelection: function (data, container) {-            return data ? data.text : undefined;-        },-        sortResults: function (results, container, query) {-            return results;-        },-        formatResultCssClass: function(data) {return undefined;},-        formatNoMatches: function () { return "No matches found"; },-        formatInputTooShort: function (input, min) { var n = min - input.length; return "Please enter " + n + " more character" + (n == 1? "" : "s"); },-        formatInputTooLong: function (input, max) { var n = input.length - max; return "Please delete " + n + " character" + (n == 1? "" : "s"); },-        formatSelectionTooBig: function (limit) { return "You can only select " + limit + " item" + (limit == 1 ? "" : "s"); },-        formatLoadMore: function (pageNumber) { return "Loading more results..."; },-        formatSearching: function () { return "Searching..."; },-        minimumResultsForSearch: 0,-        minimumInputLength: 0,-        maximumInputLength: null,-        maximumSelectionSize: 0,-        id: function (e) { return e.id; },-        matcher: function(term, text) {-            return (''+text).toUpperCase().indexOf((''+term).toUpperCase()) >= 0;-        },-        separator: ",",-        tokenSeparators: [],-        tokenizer: defaultTokenizer,-        escapeMarkup: function (markup) {-            var replace_map = {-                '\\': '&#92;',-                '&': '&amp;',-                '<': '&lt;',-                '>': '&gt;',-                '"': '&quot;',-                "'": '&#39;',-                "/": '&#47;'-            };--            return String(markup).replace(/[&<>"'\/\\]/g, function (match) {-                    return replace_map[match];-            });-        },-        blurOnChange: false,-        selectOnBlur: false,-        adaptContainerCssClass: function(c) { return c; },-        adaptDropdownCssClass: function(c) { return null; }-    };--    $.fn.select2.ajaxDefaults = {-        transport: $.ajax,-        params: {-            type: "GET",-            cache: false,-            dataType: "json"-        }-    };--    // exports-    window.Select2 = {-        query: {-            ajax: ajax,-            local: local,-            tags: tags-        }, util: {-            debounce: debounce,-            markMatch: markMatch-        }, "class": {-            "abstract": AbstractSelect2,-            "single": SingleSelect2,-            "multi": MultiSelect2-        }-    };--}(jQuery));
− static/select2.min.js
@@ -1,22 +0,0 @@-/*-Copyright 2012 Igor Vaynberg--Version: 3.4.0 Timestamp: Tue May 14 08:27:33 PDT 2013--This software is licensed under the Apache License, Version 2.0 (the "Apache License") or the GNU-General Public License version 2 (the "GPL License"). You may choose either license to govern your-use of this software only upon the condition that you accept all of the terms of either the Apache-License or the GPL License.--You may obtain a copy of the Apache License and the GPL License at:--http://www.apache.org/licenses/LICENSE-2.0-http://www.gnu.org/licenses/gpl-2.0.html--Unless required by applicable law or agreed to in writing, software distributed under the Apache License-or the GPL Licesnse is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,-either express or implied. See the Apache License and the GPL License for the specific language governing-permissions and limitations under the Apache License and the GPL License.-*/-(function(a){a.fn.each2===void 0&&a.fn.extend({each2:function(b){for(var c=a([0]),d=-1,e=this.length;e>++d&&(c.context=c[0]=this[d])&&b.call(c[0],d,c)!==!1;);return this}})})(jQuery),function(a,b){"use strict";function m(a,b){for(var c=0,d=b.length;d>c;c+=1)if(o(a,b[c]))return c;return-1}function n(){var b=a(l);b.appendTo("body");var c={width:b.width()-b[0].clientWidth,height:b.height()-b[0].clientHeight};return b.remove(),c}function o(a,c){return a===c?!0:a===b||c===b?!1:null===a||null===c?!1:a.constructor===String?a+""==c+"":c.constructor===String?c+""==a+"":!1}function p(b,c){var d,e,f;if(null===b||1>b.length)return[];for(d=b.split(c),e=0,f=d.length;f>e;e+=1)d[e]=a.trim(d[e]);return d}function q(a){return a.outerWidth(!1)-a.width()}function r(c){var d="keyup-change-value";c.on("keydown",function(){a.data(c,d)===b&&a.data(c,d,c.val())}),c.on("keyup",function(){var e=a.data(c,d);e!==b&&c.val()!==e&&(a.removeData(c,d),c.trigger("keyup-change"))})}function s(c){c.on("mousemove",function(c){var d=i;(d===b||d.x!==c.pageX||d.y!==c.pageY)&&a(c.target).trigger("mousemove-filtered",c)})}function t(a,c,d){d=d||b;var e;return function(){var b=arguments;window.clearTimeout(e),e=window.setTimeout(function(){c.apply(d,b)},a)}}function u(a){var c,b=!1;return function(){return b===!1&&(c=a(),b=!0),c}}function v(a,b){var c=t(a,function(a){b.trigger("scroll-debounced",a)});b.on("scroll",function(a){m(a.target,b.get())>=0&&c(a)})}function w(a){a[0]!==document.activeElement&&window.setTimeout(function(){var d,b=a[0],c=a.val().length;a.focus(),a.is(":visible")&&b===document.activeElement&&(b.setSelectionRange?b.setSelectionRange(c,c):b.createTextRange&&(d=b.createTextRange(),d.collapse(!1),d.select()))},0)}function x(b){b=a(b)[0];var c=0,d=0;if("selectionStart"in b)c=b.selectionStart,d=b.selectionEnd-c;else if("selection"in document){b.focus();var e=document.selection.createRange();d=document.selection.createRange().text.length,e.moveStart("character",-b.value.length),c=e.text.length-d}return{offset:c,length:d}}function y(a){a.preventDefault(),a.stopPropagation()}function z(a){a.preventDefault(),a.stopImmediatePropagation()}function A(b){if(!h){var c=b[0].currentStyle||window.getComputedStyle(b[0],null);h=a(document.createElement("div")).css({position:"absolute",left:"-10000px",top:"-10000px",display:"none",fontSize:c.fontSize,fontFamily:c.fontFamily,fontStyle:c.fontStyle,fontWeight:c.fontWeight,letterSpacing:c.letterSpacing,textTransform:c.textTransform,whiteSpace:"nowrap"}),h.attr("class","select2-sizer"),a("body").append(h)}return h.text(b.val()),h.width()}function B(b,c,d){var e,g,f=[];e=b.attr("class"),e&&(e=""+e,a(e.split(" ")).each2(function(){0===this.indexOf("select2-")&&f.push(this)})),e=c.attr("class"),e&&(e=""+e,a(e.split(" ")).each2(function(){0!==this.indexOf("select2-")&&(g=d(this),g&&f.push(this))})),b.attr("class",f.join(" "))}function C(a,c,d,e){var f=a.toUpperCase().indexOf(c.toUpperCase()),g=c.length;return 0>f?(d.push(e(a)),b):(d.push(e(a.substring(0,f))),d.push("<span class='select2-match'>"),d.push(e(a.substring(f,f+g))),d.push("</span>"),d.push(e(a.substring(f+g,a.length))),b)}function D(c){var d,e=0,f=null,g=c.quietMillis||100,h=c.url,i=this;return function(j){window.clearTimeout(d),d=window.setTimeout(function(){e+=1;var d=e,g=c.data,k=h,l=c.transport||a.fn.select2.ajaxDefaults.transport,m={type:c.type||"GET",cache:c.cache||!1,jsonpCallback:c.jsonpCallback||b,dataType:c.dataType||"json"},n=a.extend({},a.fn.select2.ajaxDefaults.params,m);g=g?g.call(i,j.term,j.page,j.context):null,k="function"==typeof k?k.call(i,j.term,j.page,j.context):k,null!==f&&f.abort(),c.params&&(a.isFunction(c.params)?a.extend(n,c.params.call(i)):a.extend(n,c.params)),a.extend(n,{url:k,dataType:c.dataType,data:g,success:function(a){if(!(e>d)){var b=c.results(a,j.page);j.callback(b)}}}),f=l.call(i,n)},g)}}function E(c){var e,f,d=c,g=function(a){return""+a.text};a.isArray(d)&&(f=d,d={results:f}),a.isFunction(d)===!1&&(f=d,d=function(){return f});var h=d();return h.text&&(g=h.text,a.isFunction(g)||(e=h.text,g=function(a){return a[e]})),function(c){var h,e=c.term,f={results:[]};return""===e?(c.callback(d()),b):(h=function(b,d){var f,i;if(b=b[0],b.children){f={};for(i in b)b.hasOwnProperty(i)&&(f[i]=b[i]);f.children=[],a(b.children).each2(function(a,b){h(b,f.children)}),(f.children.length||c.matcher(e,g(f),b))&&d.push(f)}else c.matcher(e,g(b),b)&&d.push(b)},a(d().results).each2(function(a,b){h(b,f.results)}),c.callback(f),b)}}function F(c){var d=a.isFunction(c);return function(e){var f=e.term,g={results:[]};a(d?c():c).each(function(){var a=this.text!==b,c=a?this.text:this;(""===f||e.matcher(f,c))&&g.results.push(a?this:{id:this,text:this})}),e.callback(g)}}function G(b){if(a.isFunction(b))return!0;if(!b)return!1;throw Error("formatterName must be a function or a falsy value")}function H(b){return a.isFunction(b)?b():b}function I(b){var c=0;return a.each(b,function(a,b){b.children?c+=I(b.children):c++}),c}function J(a,c,d,e){var h,i,j,k,l,f=a,g=!1;if(!e.createSearchChoice||!e.tokenSeparators||1>e.tokenSeparators.length)return b;for(;;){for(i=-1,j=0,k=e.tokenSeparators.length;k>j&&(l=e.tokenSeparators[j],i=a.indexOf(l),!(i>=0));j++);if(0>i)break;if(h=a.substring(0,i),a=a.substring(i+l.length),h.length>0&&(h=e.createSearchChoice(h,c),h!==b&&null!==h&&e.id(h)!==b&&null!==e.id(h))){for(g=!1,j=0,k=c.length;k>j;j++)if(o(e.id(h),e.id(c[j]))){g=!0;break}g||d(h)}}return f!==a?a:b}function K(b,c){var d=function(){};return d.prototype=new b,d.prototype.constructor=d,d.prototype.parent=b.prototype,d.prototype=a.extend(d.prototype,c),d}if(window.Select2===b){var c,d,e,f,g,h,i,j,k,c={TAB:9,ENTER:13,ESC:27,SPACE:32,LEFT:37,UP:38,RIGHT:39,DOWN:40,SHIFT:16,CTRL:17,ALT:18,PAGE_UP:33,PAGE_DOWN:34,HOME:36,END:35,BACKSPACE:8,DELETE:46,isArrow:function(a){switch(a=a.which?a.which:a){case c.LEFT:case c.RIGHT:case c.UP:case c.DOWN:return!0}return!1},isControl:function(a){var b=a.which;switch(b){case c.SHIFT:case c.CTRL:case c.ALT:return!0}return a.metaKey?!0:!1},isFunctionKey:function(a){return a=a.which?a.which:a,a>=112&&123>=a}},l="<div class='select2-measure-scrollbar'></div>";j=a(document),g=function(){var a=1;return function(){return a++}}(),j.on("mousemove",function(a){i={x:a.pageX,y:a.pageY}}),d=K(Object,{bind:function(a){var b=this;return function(){a.apply(b,arguments)}},init:function(c){var d,e,h,i,f=".select2-results";this.opts=c=this.prepareOpts(c),this.id=c.id,c.element.data("select2")!==b&&null!==c.element.data("select2")&&this.destroy(),this.container=this.createContainer(),this.containerId="s2id_"+(c.element.attr("id")||"autogen"+g()),this.containerSelector="#"+this.containerId.replace(/([;&,\.\+\*\~':"\!\^#$%@\[\]\(\)=>\|])/g,"\\$1"),this.container.attr("id",this.containerId),this.body=u(function(){return c.element.closest("body")}),B(this.container,this.opts.element,this.opts.adaptContainerCssClass),this.container.css(H(c.containerCss)),this.container.addClass(H(c.containerCssClass)),this.elementTabIndex=this.opts.element.attr("tabindex"),this.opts.element.data("select2",this).attr("tabindex","-1").before(this.container),this.container.data("select2",this),this.dropdown=this.container.find(".select2-drop"),this.dropdown.addClass(H(c.dropdownCssClass)),this.dropdown.data("select2",this),this.results=d=this.container.find(f),this.search=e=this.container.find("input.select2-input"),this.resultsPage=0,this.context=null,this.initContainer(),s(this.results),this.dropdown.on("mousemove-filtered touchstart touchmove touchend",f,this.bind(this.highlightUnderEvent)),v(80,this.results),this.dropdown.on("scroll-debounced",f,this.bind(this.loadMoreIfNeeded)),a(this.container).on("change",".select2-input",function(a){a.stopPropagation()}),a(this.dropdown).on("change",".select2-input",function(a){a.stopPropagation()}),a.fn.mousewheel&&d.mousewheel(function(a,b,c,e){var f=d.scrollTop();e>0&&0>=f-e?(d.scrollTop(0),y(a)):0>e&&d.get(0).scrollHeight-d.scrollTop()+e<=d.height()&&(d.scrollTop(d.get(0).scrollHeight-d.height()),y(a))}),r(e),e.on("keyup-change input paste",this.bind(this.updateResults)),e.on("focus",function(){e.addClass("select2-focused")}),e.on("blur",function(){e.removeClass("select2-focused")}),this.dropdown.on("mouseup",f,this.bind(function(b){a(b.target).closest(".select2-result-selectable").length>0&&(this.highlightUnderEvent(b),this.selectHighlighted(b))})),this.dropdown.on("click mouseup mousedown",function(a){a.stopPropagation()}),a.isFunction(this.opts.initSelection)&&(this.initSelection(),this.monitorSource()),null!==c.maximumInputLength&&this.search.attr("maxlength",c.maximumInputLength);var h=c.element.prop("disabled");h===b&&(h=!1),this.enable(!h);var i=c.element.prop("readonly");i===b&&(i=!1),this.readonly(i),k=k||n(),this.autofocus=c.element.prop("autofocus"),c.element.prop("autofocus",!1),this.autofocus&&this.focus()},destroy:function(){var a=this.opts.element.data("select2");this.propertyObserver&&(delete this.propertyObserver,this.propertyObserver=null),a!==b&&(a.container.remove(),a.dropdown.remove(),a.opts.element.removeClass("select2-offscreen").removeData("select2").off(".select2").attr({tabindex:this.elementTabIndex}).prop("autofocus",this.autofocus||!1).show())},optionToData:function(a){return a.is("option")?{id:a.prop("value"),text:a.text(),element:a.get(),css:a.attr("class"),disabled:a.prop("disabled"),locked:o(a.attr("locked"),"locked")}:a.is("optgroup")?{text:a.attr("label"),children:[],element:a.get(),css:a.attr("class")}:b},prepareOpts:function(c){var d,e,f,g,h=this;if(d=c.element,"select"===d.get(0).tagName.toLowerCase()&&(this.select=e=c.element),e&&a.each(["id","multiple","ajax","query","createSearchChoice","initSelection","data","tags"],function(){if(this in c)throw Error("Option '"+this+"' is not allowed for Select2 when attached to a <select> element.")}),c=a.extend({},{populateResults:function(d,e,f){var g,l=this.opts.id;g=function(d,e,i){var j,k,m,n,o,p,q,r,s,t;for(d=c.sortResults(d,e,f),j=0,k=d.length;k>j;j+=1)m=d[j],o=m.disabled===!0,n=!o&&l(m)!==b,p=m.children&&m.children.length>0,q=a("<li></li>"),q.addClass("select2-results-dept-"+i),q.addClass("select2-result"),q.addClass(n?"select2-result-selectable":"select2-result-unselectable"),o&&q.addClass("select2-disabled"),p&&q.addClass("select2-result-with-children"),q.addClass(h.opts.formatResultCssClass(m)),r=a(document.createElement("div")),r.addClass("select2-result-label"),t=c.formatResult(m,r,f,h.opts.escapeMarkup),t!==b&&r.html(t),q.append(r),p&&(s=a("<ul></ul>"),s.addClass("select2-result-sub"),g(m.children,s,i+1),q.append(s)),q.data("select2-data",m),e.append(q)},g(e,d,0)}},a.fn.select2.defaults,c),"function"!=typeof c.id&&(f=c.id,c.id=function(a){return a[f]}),a.isArray(c.element.data("select2Tags"))){if("tags"in c)throw"tags specified as both an attribute 'data-select2-tags' and in options of Select2 "+c.element.attr("id");c.tags=c.element.data("select2Tags")}if(e?(c.query=this.bind(function(c){var g,i,j,e={results:[],more:!1},f=c.term;j=function(a,b){var d;a.is("option")?c.matcher(f,a.text(),a)&&b.push(h.optionToData(a)):a.is("optgroup")&&(d=h.optionToData(a),a.children().each2(function(a,b){j(b,d.children)}),d.children.length>0&&b.push(d))},g=d.children(),this.getPlaceholder()!==b&&g.length>0&&(i=g[0],""===a(i).text()&&(g=g.not(i))),g.each2(function(a,b){j(b,e.results)}),c.callback(e)}),c.id=function(a){return a.id},c.formatResultCssClass=function(a){return a.css}):"query"in c||("ajax"in c?(g=c.element.data("ajax-url"),g&&g.length>0&&(c.ajax.url=g),c.query=D.call(c.element,c.ajax)):"data"in c?c.query=E(c.data):"tags"in c&&(c.query=F(c.tags),c.createSearchChoice===b&&(c.createSearchChoice=function(a){return{id:a,text:a}}),c.initSelection===b&&(c.initSelection=function(d,e){var f=[];a(p(d.val(),c.separator)).each(function(){var d=this,e=this,g=c.tags;a.isFunction(g)&&(g=g()),a(g).each(function(){return o(this.id,d)?(e=this.text,!1):b}),f.push({id:d,text:e})}),e(f)}))),"function"!=typeof c.query)throw"query function not defined for Select2 "+c.element.attr("id");return c},monitorSource:function(){var c,a=this.opts.element;a.on("change.select2",this.bind(function(){this.opts.element.data("select2-change-triggered")!==!0&&this.initSelection()})),c=this.bind(function(){var d,f=a.prop("disabled");f===b&&(f=!1),this.enable(!f);var d=a.prop("readonly");d===b&&(d=!1),this.readonly(d),B(this.container,this.opts.element,this.opts.adaptContainerCssClass),this.container.addClass(H(this.opts.containerCssClass)),B(this.dropdown,this.opts.element,this.opts.adaptDropdownCssClass),this.dropdown.addClass(H(this.opts.dropdownCssClass))}),a.on("propertychange.select2 DOMAttrModified.select2",c),this.mutationCallback===b&&(this.mutationCallback=function(a){a.forEach(c)}),"undefined"!=typeof WebKitMutationObserver&&(this.propertyObserver&&(delete this.propertyObserver,this.propertyObserver=null),this.propertyObserver=new WebKitMutationObserver(this.mutationCallback),this.propertyObserver.observe(a.get(0),{attributes:!0,subtree:!1}))},triggerSelect:function(b){var c=a.Event("select2-selecting",{val:this.id(b),object:b});return this.opts.element.trigger(c),!c.isDefaultPrevented()},triggerChange:function(b){b=b||{},b=a.extend({},b,{type:"change",val:this.val()}),this.opts.element.data("select2-change-triggered",!0),this.opts.element.trigger(b),this.opts.element.data("select2-change-triggered",!1),this.opts.element.click(),this.opts.blurOnChange&&this.opts.element.blur()},isInterfaceEnabled:function(){return this.enabledInterface===!0},enableInterface:function(){var a=this._enabled&&!this._readonly,b=!a;return a===this.enabledInterface?!1:(this.container.toggleClass("select2-container-disabled",b),this.close(),this.enabledInterface=a,!0)},enable:function(a){return a===b&&(a=!0),this._enabled===a?!1:(this._enabled=a,this.opts.element.prop("disabled",!a),this.enableInterface(),!0)},readonly:function(a){return a===b&&(a=!1),this._readonly===a?!1:(this._readonly=a,this.opts.element.prop("readonly",a),this.enableInterface(),!0)},opened:function(){return this.container.hasClass("select2-dropdown-open")},positionDropdown:function(){var q,r,s,t,b=this.dropdown,c=this.container.offset(),d=this.container.outerHeight(!1),e=this.container.outerWidth(!1),f=b.outerHeight(!1),g=a(window).scrollLeft()+a(window).width(),h=a(window).scrollTop()+a(window).height(),i=c.top+d,j=c.left,l=h>=i+f,m=c.top-f>=this.body().scrollTop(),n=b.outerWidth(!1),o=g>=j+n,p=b.hasClass("select2-drop-above");this.opts.dropdownAutoWidth?(t=a(".select2-results",b)[0],b.addClass("select2-drop-auto-width"),b.css("width",""),n=b.outerWidth(!1)+(t.scrollHeight===t.clientHeight?0:k.width),n>e?e=n:n=e,o=g>=j+n):this.container.removeClass("select2-drop-auto-width"),"static"!==this.body().css("position")&&(q=this.body().offset(),i-=q.top,j-=q.left),p?(r=!0,!m&&l&&(r=!1)):(r=!1,!l&&m&&(r=!0)),o||(j=c.left+e-n),r?(i=c.top-f,this.container.addClass("select2-drop-above"),b.addClass("select2-drop-above")):(this.container.removeClass("select2-drop-above"),b.removeClass("select2-drop-above")),s=a.extend({top:i,left:j,width:e},H(this.opts.dropdownCss)),b.css(s)},shouldOpen:function(){var b;return this.opened()?!1:this._enabled===!1||this._readonly===!0?!1:(b=a.Event("select2-opening"),this.opts.element.trigger(b),!b.isDefaultPrevented())},clearDropdownAlignmentPreference:function(){this.container.removeClass("select2-drop-above"),this.dropdown.removeClass("select2-drop-above")},open:function(){return this.shouldOpen()?(this.opening(),!0):!1},opening:function(){function h(){return{width:Math.max(document.documentElement.scrollWidth,a(window).width()),height:Math.max(document.documentElement.scrollHeight,a(window).height())}}var f,b=this.containerId,c="scroll."+b,d="resize."+b,e="orientationchange."+b;this.container.addClass("select2-dropdown-open").addClass("select2-container-active"),this.clearDropdownAlignmentPreference(),this.dropdown[0]!==this.body().children().last()[0]&&this.dropdown.detach().appendTo(this.body()),f=a("#select2-drop-mask"),0==f.length&&(f=a(document.createElement("div")),f.attr("id","select2-drop-mask").attr("class","select2-drop-mask"),f.hide(),f.appendTo(this.body()),f.on("mousedown touchstart",function(b){var d,c=a("#select2-drop");c.length>0&&(d=c.data("select2"),d.opts.selectOnBlur&&d.selectHighlighted({noFocus:!0}),d.close(),b.preventDefault(),b.stopPropagation())})),this.dropdown.prev()[0]!==f[0]&&this.dropdown.before(f),a("#select2-drop").removeAttr("id"),this.dropdown.attr("id","select2-drop"),f.css(h()),f.show(),this.dropdown.show(),this.positionDropdown(),this.dropdown.addClass("select2-drop-active"),this.ensureHighlightVisible();var g=this;this.container.parents().add(window).each(function(){a(this).on(d+" "+c+" "+e,function(){a("#select2-drop-mask").css(h()),g.positionDropdown()})})},close:function(){if(this.opened()){var b=this.containerId,c="scroll."+b,d="resize."+b,e="orientationchange."+b;this.container.parents().add(window).each(function(){a(this).off(c).off(d).off(e)}),this.clearDropdownAlignmentPreference(),a("#select2-drop-mask").hide(),this.dropdown.removeAttr("id"),this.dropdown.hide(),this.container.removeClass("select2-dropdown-open"),this.results.empty(),this.clearSearch(),this.search.removeClass("select2-active"),this.opts.element.trigger(a.Event("select2-close"))}},clearSearch:function(){},getMaximumSelectionSize:function(){return H(this.opts.maximumSelectionSize)},ensureHighlightVisible:function(){var d,e,f,g,h,i,j,c=this.results;if(e=this.highlight(),!(0>e)){if(0==e)return c.scrollTop(0),b;d=this.findHighlightableChoices().find(".select2-result-label"),f=a(d[e]),g=f.offset().top+f.outerHeight(!0),e===d.length-1&&(j=c.find("li.select2-more-results"),j.length>0&&(g=j.offset().top+j.outerHeight(!0))),h=c.offset().top+c.outerHeight(!0),g>h&&c.scrollTop(c.scrollTop()+(g-h)),i=f.offset().top-c.offset().top,0>i&&"none"!=f.css("display")&&c.scrollTop(c.scrollTop()+i)}},findHighlightableChoices:function(){return this.results.find(".select2-result-selectable:not(.select2-selected):not(.select2-disabled)")},moveHighlight:function(b){for(var c=this.findHighlightableChoices(),d=this.highlight();d>-1&&c.length>d;){d+=b;var e=a(c[d]);if(e.hasClass("select2-result-selectable")&&!e.hasClass("select2-disabled")&&!e.hasClass("select2-selected")){this.highlight(d);break}}},highlight:function(c){var e,f,d=this.findHighlightableChoices();return 0===arguments.length?m(d.filter(".select2-highlighted")[0],d.get()):(c>=d.length&&(c=d.length-1),0>c&&(c=0),this.results.find(".select2-highlighted").removeClass("select2-highlighted"),e=a(d[c]),e.addClass("select2-highlighted"),this.ensureHighlightVisible(),f=e.data("select2-data"),f&&this.opts.element.trigger({type:"select2-highlight",val:this.id(f),choice:f}),b)},countSelectableResults:function(){return this.findHighlightableChoices().length},highlightUnderEvent:function(b){var c=a(b.target).closest(".select2-result-selectable");if(c.length>0&&!c.is(".select2-highlighted")){var d=this.findHighlightableChoices();this.highlight(d.index(c))}else 0==c.length&&this.results.find(".select2-highlighted").removeClass("select2-highlighted")},loadMoreIfNeeded:function(){var c,a=this.results,b=a.find("li.select2-more-results"),e=this.resultsPage+1,f=this,g=this.search.val(),h=this.context;0!==b.length&&(c=b.offset().top-a.offset().top-a.height(),this.opts.loadMorePadding>=c&&(b.addClass("select2-active"),this.opts.query({element:this.opts.element,term:g,page:e,context:h,matcher:this.opts.matcher,callback:this.bind(function(c){f.opened()&&(f.opts.populateResults.call(this,a,c.results,{term:g,page:e,context:h}),f.postprocessResults(c,!1,!1),c.more===!0?(b.detach().appendTo(a).text(f.opts.formatLoadMore(e+1)),window.setTimeout(function(){f.loadMoreIfNeeded()},10)):b.remove(),f.positionDropdown(),f.resultsPage=e,f.context=c.context)})})))},tokenize:function(){},updateResults:function(c){function l(){e.scrollTop(0),d.removeClass("select2-active"),h.positionDropdown()}function m(a){e.html(a),l()}var g,i,d=this.search,e=this.results,f=this.opts,h=this,j=d.val(),k=a.data(this.container,"select2-last-term");if((c===!0||!k||!o(j,k))&&(a.data(this.container,"select2-last-term",j),c===!0||this.showSearchInput!==!1&&this.opened())){var n=this.getMaximumSelectionSize();if(n>=1&&(g=this.data(),a.isArray(g)&&g.length>=n&&G(f.formatSelectionTooBig,"formatSelectionTooBig")))return m("<li class='select2-selection-limit'>"+f.formatSelectionTooBig(n)+"</li>"),b;if(d.val().length<f.minimumInputLength)return G(f.formatInputTooShort,"formatInputTooShort")?m("<li class='select2-no-results'>"+f.formatInputTooShort(d.val(),f.minimumInputLength)+"</li>"):m(""),c&&this.showSearch(!0),b;if(f.maximumInputLength&&d.val().length>f.maximumInputLength)return G(f.formatInputTooLong,"formatInputTooLong")?m("<li class='select2-no-results'>"+f.formatInputTooLong(d.val(),f.maximumInputLength)+"</li>"):m(""),b;f.formatSearching&&0===this.findHighlightableChoices().length&&m("<li class='select2-searching'>"+f.formatSearching()+"</li>"),d.addClass("select2-active"),i=this.tokenize(),i!=b&&null!=i&&d.val(i),this.resultsPage=1,f.query({element:f.element,term:d.val(),page:this.resultsPage,context:null,matcher:f.matcher,callback:this.bind(function(g){var i;return this.opened()?(this.context=g.context===b?null:g.context,this.opts.createSearchChoice&&""!==d.val()&&(i=this.opts.createSearchChoice.call(null,d.val(),g.results),i!==b&&null!==i&&h.id(i)!==b&&null!==h.id(i)&&0===a(g.results).filter(function(){return o(h.id(this),h.id(i))}).length&&g.results.unshift(i)),0===g.results.length&&G(f.formatNoMatches,"formatNoMatches")?(m("<li class='select2-no-results'>"+f.formatNoMatches(d.val())+"</li>"),b):(e.empty(),h.opts.populateResults.call(this,e,g.results,{term:d.val(),page:this.resultsPage,context:null}),g.more===!0&&G(f.formatLoadMore,"formatLoadMore")&&(e.append("<li class='select2-more-results'>"+h.opts.escapeMarkup(f.formatLoadMore(this.resultsPage))+"</li>"),window.setTimeout(function(){h.loadMoreIfNeeded()},10)),this.postprocessResults(g,c),l(),this.opts.element.trigger({type:"select2-loaded",data:g}),b)):(this.search.removeClass("select2-active"),b)})})}},cancel:function(){this.close()},blur:function(){this.opts.selectOnBlur&&this.selectHighlighted({noFocus:!0}),this.close(),this.container.removeClass("select2-container-active"),this.search[0]===document.activeElement&&this.search.blur(),this.clearSearch(),this.selection.find(".select2-search-choice-focus").removeClass("select2-search-choice-focus")},focusSearch:function(){w(this.search)},selectHighlighted:function(a){var b=this.highlight(),c=this.results.find(".select2-highlighted"),d=c.closest(".select2-result").data("select2-data");d&&(this.highlight(b),this.onSelect(d,a))},getPlaceholder:function(){return this.opts.element.attr("placeholder")||this.opts.element.attr("data-placeholder")||this.opts.element.data("placeholder")||this.opts.placeholder},initContainerWidth:function(){function c(){var c,d,e,f,g;if("off"===this.opts.width)return null;if("element"===this.opts.width)return 0===this.opts.element.outerWidth(!1)?"auto":this.opts.element.outerWidth(!1)+"px";if("copy"===this.opts.width||"resolve"===this.opts.width){if(c=this.opts.element.attr("style"),c!==b)for(d=c.split(";"),f=0,g=d.length;g>f;f+=1)if(e=d[f].replace(/\s/g,"").match(/width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i),null!==e&&e.length>=1)return e[1];return c=this.opts.element.css("width"),c&&c.length>0?c:"resolve"===this.opts.width?0===this.opts.element.outerWidth(!1)?"auto":this.opts.element.outerWidth(!1)+"px":null}return a.isFunction(this.opts.width)?this.opts.width():this.opts.width}var d=c.call(this);null!==d&&this.container.css("width",d)}}),e=K(d,{createContainer:function(){var b=a(document.createElement("div")).attr({"class":"select2-container"}).html(["<a href='javascript:void(0)' onclick='return false;' class='select2-choice' tabindex='-1'>","   <span>&nbsp;</span><abbr class='select2-search-choice-close'></abbr>","   <div><b></b></div>","</a>","<input class='select2-focusser select2-offscreen' type='text'/>","<div class='select2-drop select2-display-none'>","   <div class='select2-search'>","       <input type='text' autocomplete='off' autocorrect='off' autocapitilize='off' spellcheck='false' class='select2-input'/>","   </div>","   <ul class='select2-results'>","   </ul>","</div>"].join(""));return b},enableInterface:function(){this.parent.enableInterface.apply(this,arguments)&&this.focusser.prop("disabled",!this.isInterfaceEnabled())},opening:function(){var b,c;this.parent.opening.apply(this,arguments),this.showSearchInput!==!1&&this.search.val(this.focusser.val()),this.search.focus(),b=this.search.get(0),b.createTextRange&&(c=b.createTextRange(),c.collapse(!1),c.select()),this.focusser.prop("disabled",!0).val(""),this.updateResults(!0),this.opts.element.trigger(a.Event("select2-open"))},close:function(){this.opened()&&(this.parent.close.apply(this,arguments),this.focusser.removeAttr("disabled"),this.focusser.focus())},focus:function(){this.opened()?this.close():(this.focusser.removeAttr("disabled"),this.focusser.focus())},isFocused:function(){return this.container.hasClass("select2-container-active")},cancel:function(){this.parent.cancel.apply(this,arguments),this.focusser.removeAttr("disabled"),this.focusser.focus()},initContainer:function(){var d,e=this.container,f=this.dropdown;this.showSearch(!1),this.selection=d=e.find(".select2-choice"),this.focusser=e.find(".select2-focusser"),this.focusser.attr("id","s2id_autogen"+g()),a("label[for='"+this.opts.element.attr("id")+"']").attr("for",this.focusser.attr("id")),this.focusser.attr("tabindex",this.elementTabIndex),this.search.on("keydown",this.bind(function(a){if(this.isInterfaceEnabled()){if(a.which===c.PAGE_UP||a.which===c.PAGE_DOWN)return y(a),b;switch(a.which){case c.UP:case c.DOWN:return this.moveHighlight(a.which===c.UP?-1:1),y(a),b;case c.ENTER:return this.selectHighlighted(),y(a),b;case c.TAB:return this.selectHighlighted({noFocus:!0}),b;case c.ESC:return this.cancel(a),y(a),b}}})),this.search.on("blur",this.bind(function(){document.activeElement===this.body().get(0)&&window.setTimeout(this.bind(function(){this.search.focus()}),0)})),this.focusser.on("keydown",this.bind(function(a){return!this.isInterfaceEnabled()||a.which===c.TAB||c.isControl(a)||c.isFunctionKey(a)||a.which===c.ESC?b:this.opts.openOnEnter===!1&&a.which===c.ENTER?(y(a),b):a.which==c.DOWN||a.which==c.UP||a.which==c.ENTER&&this.opts.openOnEnter?(this.open(),y(a),b):a.which==c.DELETE||a.which==c.BACKSPACE?(this.opts.allowClear&&this.clear(),y(a),b):b})),r(this.focusser),this.focusser.on("keyup-change input",this.bind(function(a){a.stopPropagation(),this.opened()||this.open()})),d.on("mousedown","abbr",this.bind(function(a){this.isInterfaceEnabled()&&(this.clear(),z(a),this.close(),this.selection.focus())})),d.on("mousedown",this.bind(function(b){this.container.hasClass("select2-container-active")||this.opts.element.trigger(a.Event("select2-focus")),this.opened()?this.close():this.isInterfaceEnabled()&&this.open(),y(b)})),f.on("mousedown",this.bind(function(){this.search.focus()})),d.on("focus",this.bind(function(a){y(a)})),this.focusser.on("focus",this.bind(function(){this.container.hasClass("select2-container-active")||this.opts.element.trigger(a.Event("select2-focus")),this.container.addClass("select2-container-active")})).on("blur",this.bind(function(){this.opened()||(this.container.removeClass("select2-container-active"),this.opts.element.trigger(a.Event("select2-blur")))})),this.search.on("focus",this.bind(function(){this.container.hasClass("select2-container-active")||this.opts.element.trigger(a.Event("select2-focus")),this.container.addClass("select2-container-active")})),this.initContainerWidth(),this.opts.element.addClass("select2-offscreen"),this.setPlaceholder()},clear:function(a){var b=this.selection.data("select2-data");b&&(this.opts.element.val(""),this.selection.find("span").empty(),this.selection.removeData("select2-data"),this.setPlaceholder(),a!==!1&&(this.opts.element.trigger({type:"select2-removed",val:this.id(b),choice:b}),this.triggerChange({removed:b})))},initSelection:function(){if(""===this.opts.element.val()&&""===this.opts.element.text())this.updateSelection([]),this.close(),this.setPlaceholder();else{var c=this;this.opts.initSelection.call(null,this.opts.element,function(a){a!==b&&null!==a&&(c.updateSelection(a),c.close(),c.setPlaceholder())})}},prepareOpts:function(){var b=this.parent.prepareOpts.apply(this,arguments),c=this;return"select"===b.element.get(0).tagName.toLowerCase()?b.initSelection=function(a,b){var d=a.find(":selected");b(c.optionToData(d))}:"data"in b&&(b.initSelection=b.initSelection||function(c,d){var e=c.val(),f=null;b.query({matcher:function(a,c,d){var g=o(e,b.id(d));return g&&(f=d),g},callback:a.isFunction(d)?function(){d(f)}:a.noop})}),b},getPlaceholder:function(){return this.select&&""!==this.select.find("option").first().text()?b:this.parent.getPlaceholder.apply(this,arguments)},setPlaceholder:function(){var a=this.getPlaceholder();if(""===this.opts.element.val()&&a!==b){if(this.select&&""!==this.select.find("option:first").text())return;this.selection.find("span").html(this.opts.escapeMarkup(a)),this.selection.addClass("select2-default"),this.container.removeClass("select2-allowclear")}},postprocessResults:function(a,c,d){var e=0,f=this;if(this.findHighlightableChoices().each2(function(a,c){return o(f.id(c.data("select2-data")),f.opts.element.val())?(e=a,!1):b}),d!==!1&&this.highlight(e),c===!0&&this.showSearchInput===!1){var h=this.opts.minimumResultsForSearch;h>=0&&this.showSearch(I(a.results)>=h)}},showSearch:function(b){this.showSearchInput=b,this.dropdown.find(".select2-search").toggleClass("select2-search-hidden",!b),this.dropdown.find(".select2-search").toggleClass("select2-offscreen",!b),a(this.dropdown,this.container).toggleClass("select2-with-searchbox",b)},onSelect:function(a,b){if(this.triggerSelect(a)){var c=this.opts.element.val(),d=this.data();this.opts.element.val(this.id(a)),this.updateSelection(a),this.opts.element.trigger({type:"select2-selected",val:this.id(a),choice:a}),this.close(),b&&b.noFocus||this.selection.focus(),o(c,this.id(a))||this.triggerChange({added:a,removed:d})}},updateSelection:function(a){var d,c=this.selection.find("span");this.selection.data("select2-data",a),c.empty(),d=this.opts.formatSelection(a,c),d!==b&&c.append(this.opts.escapeMarkup(d)),this.selection.removeClass("select2-default"),this.opts.allowClear&&this.getPlaceholder()!==b&&this.container.addClass("select2-allowclear")},val:function(){var a,c=!1,d=null,e=this,f=this.data();if(0===arguments.length)return this.opts.element.val();if(a=arguments[0],arguments.length>1&&(c=arguments[1]),this.select)this.select.val(a).find(":selected").each2(function(a,b){return d=e.optionToData(b),!1}),this.updateSelection(d),this.setPlaceholder(),c&&this.triggerChange({added:d,removed:f});else{if(this.opts.initSelection===b)throw Error("cannot call val() if initSelection() is not defined");if(!a&&0!==a)return this.clear(c),b;this.opts.element.val(a),this.opts.initSelection(this.opts.element,function(a){e.opts.element.val(a?e.id(a):""),e.updateSelection(a),e.setPlaceholder(),c&&e.triggerChange({added:a,removed:f})})}},clearSearch:function(){this.search.val(""),this.focusser.val("")},data:function(a,c){var d;return 0===arguments.length?(d=this.selection.data("select2-data"),d==b&&(d=null),d):(a&&""!==a?(d=this.data(),this.opts.element.val(a?this.id(a):""),this.updateSelection(a),c&&this.triggerChange({added:a,removed:d})):this.clear(c),b)}}),f=K(d,{createContainer:function(){var b=a(document.createElement("div")).attr({"class":"select2-container select2-container-multi"}).html(["    <ul class='select2-choices'>","  <li class='select2-search-field'>","    <input type='text' autocomplete='off' autocorrect='off' autocapitilize='off' spellcheck='false' class='select2-input'>","  </li>","</ul>","<div class='select2-drop select2-drop-multi select2-display-none'>","   <ul class='select2-results'>","   </ul>","</div>"].join(""));-return b},prepareOpts:function(){var b=this.parent.prepareOpts.apply(this,arguments),c=this;return"select"===b.element.get(0).tagName.toLowerCase()?b.initSelection=function(a,b){var d=[];a.find(":selected").each2(function(a,b){d.push(c.optionToData(b))}),b(d)}:"data"in b&&(b.initSelection=b.initSelection||function(c,d){var e=p(c.val(),b.separator),f=[];b.query({matcher:function(c,d,g){var h=a.grep(e,function(a){return o(a,b.id(g))}).length;return h&&f.push(g),h},callback:a.isFunction(d)?function(){for(var a=[],c=0;e.length>c;c++)for(var g=e[c],h=0;f.length>h;h++){var i=f[h];if(o(g,b.id(i))){a.push(i),f.splice(h,1);break}}d(a)}:a.noop})}),b},selectChoice:function(a){var b=this.container.find(".select2-search-choice-focus");b.length&&a&&a[0]==b[0]||(b.length&&this.opts.element.trigger("choice-deselected",b),b.removeClass("select2-search-choice-focus"),a&&a.length&&(this.close(),a.addClass("select2-search-choice-focus"),this.opts.element.trigger("choice-selected",a)))},initContainer:function(){var e,d=".select2-choices";this.searchContainer=this.container.find(".select2-search-field"),this.selection=e=this.container.find(d);var f=this;this.selection.on("mousedown",".select2-search-choice",function(){f.search[0].focus(),f.selectChoice(a(this))}),this.search.attr("id","s2id_autogen"+g()),a("label[for='"+this.opts.element.attr("id")+"']").attr("for",this.search.attr("id")),this.search.on("input paste",this.bind(function(){this.isInterfaceEnabled()&&(this.opened()||this.open())})),this.search.attr("tabindex",this.elementTabIndex),this.keydowns=0,this.search.on("keydown",this.bind(function(a){if(this.isInterfaceEnabled()){++this.keydowns;var d=e.find(".select2-search-choice-focus"),f=d.prev(".select2-search-choice:not(.select2-locked)"),g=d.next(".select2-search-choice:not(.select2-locked)"),h=x(this.search);if(d.length&&(a.which==c.LEFT||a.which==c.RIGHT||a.which==c.BACKSPACE||a.which==c.DELETE||a.which==c.ENTER)){var i=d;return a.which==c.LEFT&&f.length?i=f:a.which==c.RIGHT?i=g.length?g:null:a.which===c.BACKSPACE?(this.unselect(d.first()),this.search.width(10),i=f.length?f:g):a.which==c.DELETE?(this.unselect(d.first()),this.search.width(10),i=g.length?g:null):a.which==c.ENTER&&(i=null),this.selectChoice(i),y(a),i&&i.length||this.open(),b}if((a.which===c.BACKSPACE&&1==this.keydowns||a.which==c.LEFT)&&0==h.offset&&!h.length)return this.selectChoice(e.find(".select2-search-choice:not(.select2-locked)").last()),y(a),b;if(this.selectChoice(null),this.opened())switch(a.which){case c.UP:case c.DOWN:return this.moveHighlight(a.which===c.UP?-1:1),y(a),b;case c.ENTER:return this.selectHighlighted(),y(a),b;case c.TAB:return this.selectHighlighted({noFocus:!0}),b;case c.ESC:return this.cancel(a),y(a),b}if(a.which!==c.TAB&&!c.isControl(a)&&!c.isFunctionKey(a)&&a.which!==c.BACKSPACE&&a.which!==c.ESC){if(a.which===c.ENTER){if(this.opts.openOnEnter===!1)return;if(a.altKey||a.ctrlKey||a.shiftKey||a.metaKey)return}this.open(),(a.which===c.PAGE_UP||a.which===c.PAGE_DOWN)&&y(a),a.which===c.ENTER&&y(a)}}})),this.search.on("keyup",this.bind(function(){this.keydowns=0,this.resizeSearch()})),this.search.on("blur",this.bind(function(b){this.container.removeClass("select2-container-active"),this.search.removeClass("select2-focused"),this.selectChoice(null),this.opened()||this.clearSearch(),b.stopImmediatePropagation(),this.opts.element.trigger(a.Event("select2-blur"))})),this.container.on("mousedown",d,this.bind(function(b){this.isInterfaceEnabled()&&(a(b.target).closest(".select2-search-choice").length>0||(this.selectChoice(null),this.clearPlaceholder(),this.container.hasClass("select2-container-active")||this.opts.element.trigger(a.Event("select2-focus")),this.open(),this.focusSearch(),b.preventDefault()))})),this.container.on("focus",d,this.bind(function(){this.isInterfaceEnabled()&&(this.container.hasClass("select2-container-active")||this.opts.element.trigger(a.Event("select2-focus")),this.container.addClass("select2-container-active"),this.dropdown.addClass("select2-drop-active"),this.clearPlaceholder())})),this.initContainerWidth(),this.opts.element.addClass("select2-offscreen"),this.clearSearch()},enableInterface:function(){this.parent.enableInterface.apply(this,arguments)&&this.search.prop("disabled",!this.isInterfaceEnabled())},initSelection:function(){if(""===this.opts.element.val()&&""===this.opts.element.text()&&(this.updateSelection([]),this.close(),this.clearSearch()),this.select||""!==this.opts.element.val()){var c=this;this.opts.initSelection.call(null,this.opts.element,function(a){a!==b&&null!==a&&(c.updateSelection(a),c.close(),c.clearSearch())})}},clearSearch:function(){var a=this.getPlaceholder(),c=this.getMaxSearchWidth();a!==b&&0===this.getVal().length&&this.search.hasClass("select2-focused")===!1?(this.search.val(a).addClass("select2-default"),this.search.width(c>0?c:this.container.css("width"))):this.search.val("").width(10)},clearPlaceholder:function(){this.search.hasClass("select2-default")&&this.search.val("").removeClass("select2-default")},opening:function(){this.clearPlaceholder(),this.resizeSearch(),this.parent.opening.apply(this,arguments),this.focusSearch(),this.updateResults(!0),this.search.focus(),this.opts.element.trigger(a.Event("select2-open"))},close:function(){this.opened()&&this.parent.close.apply(this,arguments)},focus:function(){this.close(),this.search.focus()},isFocused:function(){return this.search.hasClass("select2-focused")},updateSelection:function(b){var c=[],d=[],e=this;a(b).each(function(){0>m(e.id(this),c)&&(c.push(e.id(this)),d.push(this))}),b=d,this.selection.find(".select2-search-choice").remove(),a(b).each(function(){e.addSelectedChoice(this)}),e.postprocessResults()},tokenize:function(){var a=this.search.val();a=this.opts.tokenizer(a,this.data(),this.bind(this.onSelect),this.opts),null!=a&&a!=b&&(this.search.val(a),a.length>0&&this.open())},onSelect:function(a,b){this.triggerSelect(a)&&(this.addSelectedChoice(a),this.opts.element.trigger({type:"selected",val:this.id(a),choice:a}),(this.select||!this.opts.closeOnSelect)&&this.postprocessResults(),this.opts.closeOnSelect?(this.close(),this.search.width(10)):this.countSelectableResults()>0?(this.search.width(10),this.resizeSearch(),this.getMaximumSelectionSize()>0&&this.val().length>=this.getMaximumSelectionSize()&&this.updateResults(!0),this.positionDropdown()):(this.close(),this.search.width(10)),this.triggerChange({added:a}),b&&b.noFocus||this.focusSearch())},cancel:function(){this.close(),this.focusSearch()},addSelectedChoice:function(c){var j,d=!c.locked,e=a("<li class='select2-search-choice'>    <div></div>    <a href='#' onclick='return false;' class='select2-search-choice-close' tabindex='-1'></a></li>"),f=a("<li class='select2-search-choice select2-locked'><div></div></li>"),g=d?e:f,h=this.id(c),i=this.getVal();j=this.opts.formatSelection(c,g.find("div")),j!=b&&g.find("div").replaceWith("<div title='"+this.opts.escapeMarkup(j)+"'>"+this.opts.escapeMarkup(j)+"</div>"),d&&g.find(".select2-search-choice-close").on("mousedown",y).on("click dblclick",this.bind(function(b){this.isInterfaceEnabled()&&(a(b.target).closest(".select2-search-choice").fadeOut("fast",this.bind(function(){this.unselect(a(b.target)),this.selection.find(".select2-search-choice-focus").removeClass("select2-search-choice-focus"),this.close(),this.focusSearch()})).dequeue(),y(b))})).on("focus",this.bind(function(){this.isInterfaceEnabled()&&(this.container.addClass("select2-container-active"),this.dropdown.addClass("select2-drop-active"))})),g.data("select2-data",c),g.insertBefore(this.searchContainer),i.push(h),this.setVal(i)},unselect:function(a){var c,d,b=this.getVal();if(a=a.closest(".select2-search-choice"),0===a.length)throw"Invalid argument: "+a+". Must be .select2-search-choice";c=a.data("select2-data"),c&&(d=m(this.id(c),b),d>=0&&(b.splice(d,1),this.setVal(b),this.select&&this.postprocessResults()),a.remove(),this.opts.element.trigger({type:"removed",val:this.id(c),choice:c}),this.triggerChange({removed:c}))},postprocessResults:function(a,b,c){var d=this.getVal(),e=this.results.find(".select2-result"),f=this.results.find(".select2-result-with-children"),g=this;e.each2(function(a,b){var c=g.id(b.data("select2-data"));m(c,d)>=0&&(b.addClass("select2-selected"),b.find(".select2-result-selectable").addClass("select2-selected"))}),f.each2(function(a,b){b.is(".select2-result-selectable")||0!==b.find(".select2-result-selectable:not(.select2-selected)").length||b.addClass("select2-selected")}),-1==this.highlight()&&c!==!1&&g.highlight(0),!this.opts.createSearchChoice&&!e.filter(".select2-result:not(.select2-selected)").length>0&&this.results.append("<li class='select2-no-results'>"+g.opts.formatNoMatches(g.search.val())+"</li>")},getMaxSearchWidth:function(){return this.selection.width()-q(this.search)},resizeSearch:function(){var a,b,c,d,e,f=q(this.search);a=A(this.search)+10,b=this.search.offset().left,c=this.selection.width(),d=this.selection.offset().left,e=c-(b-d)-f,a>e&&(e=c-f),40>e&&(e=c-f),0>=e&&(e=a),this.search.width(e)},getVal:function(){var a;return this.select?(a=this.select.val(),null===a?[]:a):(a=this.opts.element.val(),p(a,this.opts.separator))},setVal:function(b){var c;this.select?this.select.val(b):(c=[],a(b).each(function(){0>m(this,c)&&c.push(this)}),this.opts.element.val(0===c.length?"":c.join(this.opts.separator)))},buildChangeDetails:function(a,b){for(var b=b.slice(0),a=a.slice(0),c=0;b.length>c;c++)for(var d=0;a.length>d;d++)o(this.opts.id(b[c]),this.opts.id(a[d]))&&(b.splice(c,1),c--,a.splice(d,1),d--);return{added:b,removed:a}},val:function(c,d){var e,f=this;if(0===arguments.length)return this.getVal();if(e=this.data(),e.length||(e=[]),!c&&0!==c)return this.opts.element.val(""),this.updateSelection([]),this.clearSearch(),d&&this.triggerChange({added:this.data(),removed:e}),b;if(this.setVal(c),this.select)this.opts.initSelection(this.select,this.bind(this.updateSelection)),d&&this.triggerChange(this.buildChangeDetails(e,this.data()));else{if(this.opts.initSelection===b)throw Error("val() cannot be called if initSelection() is not defined");this.opts.initSelection(this.opts.element,function(b){var c=a(b).map(f.id);f.setVal(c),f.updateSelection(b),f.clearSearch(),d&&f.triggerChange(this.buildChangeDetails(e,this.data()))})}this.clearSearch()},onSortStart:function(){if(this.select)throw Error("Sorting of elements is not supported when attached to <select>. Attach to <input type='hidden'/> instead.");this.search.width(0),this.searchContainer.hide()},onSortEnd:function(){var b=[],c=this;this.searchContainer.show(),this.searchContainer.appendTo(this.searchContainer.parent()),this.resizeSearch(),this.selection.find(".select2-search-choice").each(function(){b.push(c.opts.id(a(this).data("select2-data")))}),this.setVal(b),this.triggerChange()},data:function(c,d){var f,g,e=this;return 0===arguments.length?this.selection.find(".select2-search-choice").map(function(){return a(this).data("select2-data")}).get():(g=this.data(),c||(c=[]),f=a.map(c,function(a){return e.opts.id(a)}),this.setVal(f),this.updateSelection(c),this.clearSearch(),d&&this.triggerChange(this.buildChangeDetails(g,this.data())),b)}}),a.fn.select2=function(){var d,g,h,i,c=Array.prototype.slice.call(arguments,0),j=["val","destroy","opened","open","close","focus","isFocused","container","onSortStart","onSortEnd","enable","readonly","positionDropdown","data"],k=["val","opened","isFocused","container","data"];return this.each(function(){if(0===c.length||"object"==typeof c[0])d=0===c.length?{}:a.extend({},c[0]),d.element=a(this),"select"===d.element.get(0).tagName.toLowerCase()?i=d.element.prop("multiple"):(i=d.multiple||!1,"tags"in d&&(d.multiple=i=!0)),g=i?new f:new e,g.init(d);else{if("string"!=typeof c[0])throw"Invalid arguments to select2 plugin: "+c;if(0>m(c[0],j))throw"Unknown method: "+c[0];if(h=b,g=a(this).data("select2"),g===b)return;if(h="container"===c[0]?g.container:g[c[0]].apply(g,c.slice(1)),m(c[0],k)>=0)return!1}}),h===b?this:h},a.fn.select2.defaults={width:"copy",loadMorePadding:0,closeOnSelect:!0,openOnEnter:!0,containerCss:{},dropdownCss:{},containerCssClass:"",dropdownCssClass:"",formatResult:function(a,b,c,d){var e=[];return C(a.text,c.term,e,d),e.join("")},formatSelection:function(a){return a?a.text:b},sortResults:function(a){return a},formatResultCssClass:function(){return b},formatNoMatches:function(){return"No matches found"},formatInputTooShort:function(a,b){var c=b-a.length;return"Please enter "+c+" more character"+(1==c?"":"s")},formatInputTooLong:function(a,b){var c=a.length-b;return"Please delete "+c+" character"+(1==c?"":"s")},formatSelectionTooBig:function(a){return"You can only select "+a+" item"+(1==a?"":"s")},formatLoadMore:function(){return"Loading more results..."},formatSearching:function(){return"Searching..."},minimumResultsForSearch:0,minimumInputLength:0,maximumInputLength:null,maximumSelectionSize:0,id:function(a){return a.id},matcher:function(a,b){return(""+b).toUpperCase().indexOf((""+a).toUpperCase())>=0},separator:",",tokenSeparators:[],tokenizer:J,escapeMarkup:function(a){var b={"\\":"&#92;","&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#47;"};return(a+"").replace(/[&<>"'\/\\]/g,function(a){return b[a]})},blurOnChange:!1,selectOnBlur:!1,adaptContainerCssClass:function(a){return a},adaptDropdownCssClass:function(){return null}},a.fn.select2.ajaxDefaults={transport:a.ajax,params:{type:"GET",cache:!1,dataType:"json"}},window.Select2={query:{ajax:D,local:E,tags:F},util:{debounce:t,markMatch:C},"class":{"abstract":d,single:e,multi:f}}}}(jQuery);
− static/select2.png

binary file changed (613 → absent bytes)

− static/style.css
@@ -1,291 +0,0 @@-/* hledger web ui styles */--/*------------------------------------------------------------------------------------------*/-/* 1. colours */--/* green */-body                                                                 { background-color:white; color:black; }-.registerreport .odd                                                 { background-color:#ded; }-.transactionsreport .odd                                             { background-color:#eee; }-.filtering                                                           { background-color:#ded; }-/* #main                                                                { border-color:#ded; } see below */-/* .journalreport td                                                    { border-color:thin solid #ded; } see below */--/* white */-/* body                                                                 { background-color:#fff; } */-/* .registerreport .odd                                                 { background-color:#eee; } */-/* .filtering                                                           { background-color:#ddd; } */-/* #main                                                                { border-color:#eee; } see below */-/* .journalreport td                                                    { border-color:thin solid #eee; } see below */--#message                                                             { color:red; background-color:#fee; }-#addform input.textinput, #addform .dhx_combo_input, .dhx_combo_list { background-color:#eee; }-#editform textarea                                                   { background-color:#eee; }-.negative                                                            { color:#800; }-.help                                                                {  }--.balancereport .inacct                                               { /*background-color:#ddd;*/ font-weight:bold; }-.notinacct, .notinacct :link, .notinacct :visited { color:#888; }-.notinacct .negative { color:#b77; }-.balancereport .numpostings                                          { padding-left:1em; color:#aaa; }-.balancereport td.add.mouseover { background-color:rgba(208,208,208,0.5); }-.balancereport td.journal.mouseover { background-color:rgba(208,208,208,0.5); }-.balancereport td.journal.mouseover .hoverlinks { visibility:visible; }-.balancereport td.account.mouseover { background-color:rgba(208,208,208,0.5); }-.balancereport td.account.mouseover .hoverlinks { visibility:visible; }-.balancereport .hoverlinks { visibility:hidden; }-.balancereport .hoverlinks { margin-left:0em; font-weight:normal; /*font-size:smaller;*/ display:inline-block; text-align:right; }-.balancereport .hoverlinks a { margin-left:0.5em; }--/*------------------------------------------------------------------------------------------*/-/* 2. font families & sizes */-/* overspecified for cross-browser robustness */-body                                               { font-family:helvetica,arial,sans-serif; }-pre                                                { font-family:courier,"courier new",monospace; }-input.textinput, .dhx_combo_input, .dhx_combo_list { font-size:small; }-#editform textarea                                 { font-family:courier,"courier new",monospace; font-size:small; }-.nav2                                              { font-size:small; }-#searchform                                        { font-size:small; }-.topleftlink                                       { font-size:small; }-.toprightlink                                      { font-size:small; }-#journaldesc                                       { font-size:small; }-.togglelink                                        { font-size:smaller; white-space:nowrap }-.help                                              { font-size:smaller; }-.form                                              { font-size:small; }-.transactionsreport                                { font-size:small; }-.entriesreport                                     { font-size:small; }-.balancereport                                     { font-size:small; }-.registerreport                                    { font-size:small; }-.showall                                           { font-size:small; }-/* #addformlink                                    { font-size:small; } */-/* #editformlink                                   { font-size:small; } */-#contenttitle                                    { font-size:1.2em; }--/*------------------------------------------------------------------------------------------*/-/* 3. layout */--body                        { margin:0; }-#content                    { padding:1em 0 0 0.5em; }---#topbar                     { padding:2px; }-.topleftlink                { float:left; margin-right:1em; padding:2px; }-.toprightlink               { float:right; margin-left:1em; padding:2px; }-#topbar h1                  { display:inline-block; vertical-align:top; margin:0; }-#journalinfo                { vertical-align:middle; margin:0; }-/* #topbar                  { padding:4px; border-bottom:2px solid #ddd; } */--#message                    { margin:0.5em;}-.help                       { font-style: italic; }-.helprow td                 { padding-bottom:8px; }--#outermain { overflow:auto; }-#main { overflow:auto; padding-left:1em; }--#sidebar { float:left; padding-right:1em; border-right:thin solid #ded; margin-bottom:5em; }--#navlinks                   { margin-bottom:1em; }-.navlink                    { }-.navlinkcurrent             { font-weight:bold; }-.form                       { margin:0em; }--#searchformdiv              { margin:0 0 1em 0; }-#searchform                 { margin:0; }-#searchform span            { padding:4px; }-#stopfilterlink             { font-weight:bold; }-.filtering                  { font-weight:bold; }--#main .journal { }-#main .register { }-.current                    { font-weight:bold; }-.date                       { padding-left:0em; }-.description                { padding-left:1em; white-space:normal; }-.account                    { padding-left:1em; white-space:normal; }-.amount                     { padding-left:1em; white-space:nowrap; }-.balance                    { padding-left:1em; padding-right:0.3em; white-space:nowrap; }-.amount, .balance { width:2em; }  /* minimise width */-.positive                   { }--/* table.transactionsreport         { border-spacing: 0; } */-/* .transactionsreport td           {  } */-/* .transactionsreport pre          { margin-top:0; } */--/* table.entriesreport         { border-spacing: 0; } */-/* .entriesreport td           {  } */-/* .entriesreport pre          { margin-top:0; } */--.balancereport              { border-spacing:0; }-.balancereport tr           { vertical-align:bottom; border-spacing:0; }-.balancereport .title       { white-space:nowrap; }-.balancereport .item        { }-.balancereport .depth0      { padding-top:1em; }-.balancereport td           { padding:0; }-.totalrule td               { border-top:thin solid black; }-.balancereport .account     { white-space:nowrap; }--.hidden { display:none; }-table.registerreport        { border-spacing:0; }-table.registerreport tr     { vertical-align:top; }-table.registerreport td     { padding-bottom:0.2em; }-table.registerreport .date  { white-space:nowrap; }-table.registerreport tr.posting { font-size:smaller; }-table.registerreport tr.posting .account  { padding-left:1.5em; }-table.registerreport tr.posting .amount  { padding-right:0.5em; }-tr.firstposting td          { }-tr.newday td                { border-top: 1px solid #797; }-/* tr.newday .date             { font-weight:bold; } */-tr.newmonth td              { border-top: 2px solid #464; }-/* tr.newyear td               { border-top: 3px solid black; } */-#accountsheading            { white-space:nowrap; }---#addform input.textinput, #addform .dhx_combo_input, .dhx_combo_list   { padding:4px; }-#addform table              { }-#addform #addbuttonrow      { text-align:right; }-/* #editform                   { width:95%; } */-#editform textarea          { width:100%; padding:4px; }-#searchform table           { border-spacing:0; padding-left:0em; }---/*------------------------------------------------------------------------------------------*/-/* 4. dhtmlx.com auto-completing combo box styles */--.dhx_combo_input{-/* color:#333333; */-/* font-family: Arial; */-/* font-size: 9pt; */-/* border:0px; */-/* padding:2px 2px 2px 2px; */-/* position:absolute; */-/* top:0px; */-}--/* table {border:thin solid red} */-/* div {border:thin solid yellow} */--.dhx_combo_box{-    position:relative;-    display:inline-block;-    /* text-align:left; */-    /* height:20px; */-    /* _height:22px; */-    /* overflow:hidden; */-    /* background-color: white; */-}--.dhx_combo_list{-    position:absolute;-    z-index:230;-    overflow-y:auto;-    overflow-x:hidden;-    white-space:nowrap;-    border:1px solid black;-    height:50%;-    /* background-color: white; */-}--.dhx_combo_list div{-    cursor:default;-    padding:2px 2px 2px 2px;-}--.dhx_selected_option{-    background-color:navy;-    color:white;-}--.dhx_combo_img{-    /* display:none; */-    width:18px;-    height:20px;-    position:absolute;-    top:12px;-    right:-10px;-}--.dhx_combo_option_img{-	position:relative;-	top:1px;-	margin:0px;-	margin-left:2px;-	left:0px;-	width:18px; height:18px;-}--/* .combo_dhx_sel{ */-/* .dhx_selected_option{ */-/*    background-image: url("../static/images/bg_selection.gif") !important; */-/*    background-position: bottom; */-/*    background-repeat: repeat-x; */-/*    color:black; */-/* } */----/* .dhx_combo_img_rtl{ */-/* 	position:absolute; */-/* 	top:0px; */-/* 	left:1px; */-/* 	width:17px; */-/* 	height:20px; */-/* } */-/* .dhx_combo_option_img_rtl{ */-/* 	float:right; */-/* 	margin-right :0px; */-/* 	width:18px; height:18px; */-/* } */--/* .dhx_combo_list_rtl{ */-/* 	direction: rtl; */-/* 	unicode-bidi : bidi-override; */-/*    position:absolute; */-/*    z-index:230; */-/*    overflow-y:auto; */-/*    overflow-x:hidden; */-/*    border:1px solid black; */-/*    height:100px; */-/*    /\* font-family: Arial; *\/ */-/*    font-size: 9pt; */-/*    background-color: white; */-/* } */-/* .dhx_combo_list_rtl div{ */-/* 	direction: rtl; */-/* 	unicode-bidi : bidi-override; */-/* 	padding:2px 2px 2px 2px; */-/* } */-/* .dhx_combo_list_rtl div div{ */-/* 	float :right !important; */-/* 	cursor:default; */-/* } */-/* .dhx_combo_list_rtl div img{ */-/* 	float :right !important; */-/* } */-/* .dhx_combo_list_rtl div input{ */-/* 	float :right !important; */-/* } */--/* .dhx_combo_box.dhx_skyblue{ */-/* 	border:1px solid #a4bed4; */-/* } */-/* .dhx_combo_box.dhx_skyblue .dhx_combo_input { */-/* 	font-family:Tahoma; */-/* 	font-size: 11px; */-/* 	padding:3px; */-/* } */-/* .dhx_combo_list.dhx_skyblue_list{ */-/* 	background-color: #eaf2fb; */-/* 	border:1px solid #a4bed4; */-/* 	font-family:Tahoma; */-/* 	font-size: 11px; */-/* } */-/* .dhx_combo_list.dhx_skyblue_list div{ */-/* 	cursor:default; */-/* 	padding:3px 4px; */-/* } */-/* .dhx_combo_list_rtl.dhx_skyblue_list{ */-/*    background-color: #eaf2fb; */-/* 	border:1px solid #a4bed4; */-/* 	font-family:Tahoma; */-/* 	font-size: 11px; */-/* } */-
templates/default-layout-wrapper.hamlet view
@@ -46,3 +46,58 @@             <script>                 window.attachEvent('onload',function(){CFInstall.check({mode:'overlay'})})         \<![endif]-->++        <div .modal.fade #helpmodal tabindex="-1" role="dialog" aria-labelledby="helpLabel" aria-hidden="true">+          <div .modal-dialog .modal-lg>+            <div .modal-content>+              <div .modal-header>+                <button type="button" .close data-dismiss="modal" aria-hidden="true">&times;+                <h3 .modal-title #helpLabel>Help+              <div .modal-body>+                <div .row>+                  <div .col-xs-6>+                    <p>+                      <b>Keyboard shortcuts+                      <ul>+                        <li> <b><tt>h</tt></b> or maybe <b><tt>?</tt></b> - view this help (escape or click to exit)+                        <li> <b><tt>j</tt></b> - go to the Journal view (home)+                        <li> <b><tt>a</tt></b> - add a transaction (escape to cancel)+                        <li> <b><tt>s</tt></b> - toggle sidebar+                        <li> <b><tt>f</tt></b> - focus search form ("find")+                    <p>+                      <b>General+                      <ul>+                        <li> The Journal view shows general journal entries, representing zero-sum movements of money (or other commodity) between hierarchical accounts+                        <li> The sidebar shows the resulting accounts and their final balances+                        <li> Parent account balances include subaccount balances+                        <li> Multiple currencies in balances are displayed one above the other+                        <li> Click account name links to see transactions affecting that account, with running balance+                        <li> Click date links to see journal entries on that date+                  <div .col-xs-6>+                    <p>+                      <b>Search+                      <ul>+                        <li> <b><tt>acct:REGEXP</tt></b> - filter on to/from account+                        <li> <b><tt>desc:REGEXP</tt></b> - filter on description+                        <li> <b><tt>date:PERIODEXP</tt></b>, <b><tt>date2:PERIODEXP</tt></b> - filter on date or secondary date+                        <li> <b><tt>code:REGEXP</tt></b> - filter on transaction's code (eg check number)+                        <li> <b><tt>status:*</tt></b>, <b><tt>status:!</tt></b>, <b><tt>status:</tt></b> - filter on transaction's status flag (eg cleared status)+                        <!-- <li> <b><tt>empty:BOOL</tt></b> - filter on whether amount is zero -->+                        <li> <b><tt>amt:N</tt></b>, <b><tt>amt:&lt;N</tt></b>, <b><tt>amt:&gt;N</tt></b> - filter on the unsigned amount magnitude. Or with a sign before N, filter on the signed value. (Single-commodity amounts only.)+                        <li> <b><tt>cur:REGEXP</tt></b> - filter on the currency/commodity symbol (must match all of it). Dollar sign must be written as <tt>\$</tt>+                        <li> <b><tt>tag:NAME</tt></b>, <b><tt>tag:NAME=REGEX</tt></b> - filter on tag name, or tag name and value+                        <!-- <li> <b><tt>depth:N</tt></b> - filter out accounts below this depth -->+                        <li> <b><tt>real:BOOL</tt></b> - filter on postings' real/virtual-ness+                        <li> Enclose search patterns containing spaces in single or double quotes+                        <li> Prepend <b><tt>not:</tt></b> to negate a search term+                        <li> Multiple search terms on different fields are AND'ed, multiple search terms on the same field are OR'ed+                        <li> These search terms also work with command-line hledger++        <div .modal #addmodal tabindex="-1" role="dialog" aria-labelledby="addLabel" aria-hidden="true">+          <div .modal-dialog .modal-lg>+            <div .modal-content>+              <div .modal-header>+                <button type="button" .close data-dismiss="modal" aria-hidden="true">&times;+                <h3 .modal-title #addLabel>Add a transaction+              <div .modal-body>+                ^{addform staticRootUrl vd}