darcsden 1.0.1 → 1.1
raw patch · 91 files changed
+17773/−80 lines, 91 filesdep +HUnitdep +HsOpenSSLdep +Win32-services-wrapperdep ~blaze-builderdep ~blaze-htmldep ~darcsnew-component:exe:darcsden-testbinary-added
Dependencies added: HUnit, HsOpenSSL, Win32-services-wrapper, aeson, blaze-markup, http-conduit, mime-mail, webdriver
Dependency ranges changed: blaze-builder, blaze-html, darcs, hsp, pandoc
Files
- CHANGES.md +858/−0
- README.md +203/−0
- darcsden.cabal +244/−30
- public/bootstrap/css/bootstrap-responsive.css +1058/−0
- public/bootstrap/css/bootstrap-responsive.min.css +9/−0
- public/bootstrap/css/bootstrap.css +5774/−0
- public/bootstrap/css/bootstrap.min.css +9/−0
- public/bootstrap/img/glyphicons-halflings-white.png binary
- public/bootstrap/js/bootstrap.js +2027/−0
- public/bootstrap/js/bootstrap.min.js +6/−0
- public/codemirror-3.14/LICENSE +23/−0
- public/codemirror-3.14/lib/codemirror-compressed.js +12/−0
- public/codemirror-3.14/lib/codemirror.css +248/−0
- public/codemirror-3.14/theme/elegant.css +10/−0
- public/css/highlight.css +60/−0
- public/css/main.css +1128/−0
- public/images/added.gif binary
- public/images/delete-small.gif binary
- public/images/delete.gif binary
- public/images/edit.gif binary
- public/images/edit.xcf binary
- public/images/explore.gif binary
- public/images/explore.xcf binary
- public/images/favicon.ico binary
- public/images/favicon.png binary
- public/images/favicon.xcf binary
- public/images/file.gif binary
- public/images/folder.gif binary
- public/images/fork.gif binary
- public/images/forkgif.xcf binary
- public/images/home.gif binary
- public/images/issues.gif binary
- public/images/issues.xcf binary
- public/images/log.gif binary
- public/images/login.gif binary
- public/images/logout.gif binary
- public/images/modified.gif binary
- public/images/new.gif binary
- public/images/new.xcf binary
- public/images/patches.gif binary
- public/images/patches.xcf binary
- public/images/preference.gif binary
- public/images/private.gif binary
- public/images/register.gif binary
- public/images/removed.gif binary
- public/images/spinner.gif binary
- public/images/up.gif binary
- public/js/jquery-1.8.1.min.js +2/−0
- public/js/main.js +184/−0
- public/js/relatize.js +94/−0
- public/robots.txt +2/−0
- public/uptime.txt +1/−0
- src/DarcsDen/Darcs.hs +51/−0
- src/DarcsDen/Debug.hs +36/−0
- src/DarcsDen/Github/Handler.hs +77/−0
- src/DarcsDen/Github/Paths.hs +17/−0
- src/DarcsDen/Github/Util.hs +12/−0
- src/DarcsDen/Google/Handler.hs +52/−0
- src/DarcsDen/Google/Paths.hs +11/−0
- src/DarcsDen/Google/Util.hs +12/−0
- src/DarcsDen/Handler.hs +178/−0
- src/DarcsDen/Handler/Repository.hs +781/−0
- src/DarcsDen/Handler/Repository/Browse.hs +117/−0
- src/DarcsDen/Handler/Repository/Changes.hs +289/−0
- src/DarcsDen/Handler/Repository/Forks.hs +145/−0
- src/DarcsDen/Handler/Repository/Util.hs +80/−0
- src/DarcsDen/Handler/User.hs +461/−0
- src/DarcsDen/Pages/Base.hs +191/−0
- src/DarcsDen/Pages/HSPage.hs +6/−0
- src/DarcsDen/Pages/Repository.hs +953/−0
- src/DarcsDen/Pages/User.hs +167/−0
- src/DarcsDen/Pages/Util.hs +61/−0
- src/DarcsDen/Settings.hs +103/−0
- src/DarcsDen/State/Comment.hs +162/−0
- src/DarcsDen/State/ForgotPassword.hs +28/−0
- src/DarcsDen/State/Issue.hs +166/−0
- src/DarcsDen/State/Repository.hs +269/−0
- src/DarcsDen/State/Schema.hs +109/−0
- src/DarcsDen/State/Session.hs +152/−0
- src/DarcsDen/State/User.hs +221/−0
- src/DarcsDen/State/Util.hs +120/−0
- src/DarcsDen/Util.hs +143/−0
- src/DarcsDen/Validate.hs +147/−0
- src/DarcsDen/WebUtils.hs +180/−0
- src/SSHServer.hs +33/−15
- src/Test.hs +95/−0
- src/Test/Github.hs +26/−0
- src/Test/Google.hs +30/−0
- src/Test/Repository.hs +49/−0
- src/Test/User.hs +53/−0
- src/WebServer.hs +38/−35
@@ -0,0 +1,858 @@+# All changes by release+++## darcsden 1.1 (2013/07/20)++ * finalise docs some more+ * bump hsp dependency to the ghc 7.6 compatible version+ * speed up user list on front page+ * add missing web app files to cabal file+ * consistent heading+ * add missing web app files to cabal file+ * update contributing/credits in the readme+ * disable repo packing with darcs 2.8 to fix a build problem+ * depend on darcs 2.8.4+ or darcs 2.9++ * add missing modules to cabal file+ * bump version to 1.1+ * finalise changelog+ * finalise announcement+ * add "built" in footer+ * auto2 target, workaround for running dev builds as right user+ * update 1.1 announcement+ * changelog update+ * small clarifications to register screen+ * note the -E required to preserve env vars with sudo+ * Remove charset parameter from mime if present+ * Add test for edit/add file+ * Put the codemirror object into window+ * Add ability to create files+ * Resolve ambiguty of edit button, by+ * Add instructions for running tests+ * Add tests for Github OAuth, and + * Give more appropriate test failure messages+ * Add test for google sync+ * Add test for google login+ * Add test for creating account using google+ * When resetting state, remove userDir only if it exists+ * Reset state before running create user test+ * Add function to reset redis and couchdb states + * Move couchdb datbase creation from WebServer to State Util+ * Basic test for darcsden,+ * Cabal entry for darcsden-test+ * Configuration instructions for OAuth, Forgot Password, and File Edit+ * Add xdgMimePath to Settings,+ * If xdg-mime fails somehow, default mime to text/plain+ * Remove carriage returns before saving the file in file edit+ * Edit link when browsing a file will direct to edit file+ * Add repoBase', which allows custom pagenav+ * Create a page for edit file feature+ * Import codemirror 3.14 for edit file feature+ * Add the javascript to load codemirror editor into the edit file page+ * Add css rules for proper alignment of the editor form+ * Create handlers for edit file+ * markdown line break, test through the web editing+ * depend on newer ssh which builds with latest libs+ * add CHANGES.md showing all changes by release+ * 1.1 announcement WIP+ * update author spellings to improve darcs show authors+ * tools: a place to configure OAuth env vars for dev build+ * display "DEV" not "DEBUG" for developer builds+ * set version back for a bit, 1.1 release delayed+ * Use updated session variables if redirecting to register+ * Give option to build packs in repository settings page, and+ * Add a handler for creating packs to a repository+ * Initialize rBuiltPacks to Nothing when creating a repository+ * Add a field to the Repository model indicating the last time packs was built+ * Show a current password field in user settings only if the user has a password+ * Insist on old password when changing passwords only if the account has a password+ * Change OAuth access functions to use http-conduit+ * Use the new OAuth paths in user handlers+ * Change OAuth paths to use http-conduit+ * Switch to http-conduit instead of http-streams+ * Remove ghc option threaded from executable darcsden+ * Resolve conflict between branches+ * Add buttons for OAuth functions to the pages+ * Add handlers for OAuth registration, login, and link+ * Add a variable for oauth reg to Session+ * Add OAuth utility functions, which:+ * Update darcs import to match the latest API of screened+ * Start OpenSSL when starting the webserver + * Add names of the environment variables storing OAuth app authentication to+ * Add dependencies HSOpenSSL, network, http-streams for OAuth feature+ * Create HSPages for forgot password feature, and+ * Add handlers for Forgot password feature+ * Add mime-mail to darcsden's dependency list for sending mails+ * Add utility functions for forgot password:+ * Add settings sendEmail, and sendName. You should be able to+ * return the updated session with setUser+ * Add OAuth identities to User feild, and add utility functions+ * Change user handlers to the new password field+ * Change the password fields of the user, so that they are optional+ * Load repository page after logging in+ * bump version and tested-with+ * tools: fix http port option+ * fix blaze-html warning, clarify dependency+ * fix WebServer warning+ * tools: use current ghc for dev builds, add ghci rule, don't use dev darcs/ssh by default+ * support current blaze-*+ * support/require pandoc 1.10++ * document a couple of arguments to patches+ * stop Snap being verbose when running as a service+ * specify imports+ * conditionalise Windows service+ * document darcsden on Windows+ * document new options+ * renamed Win32-services-utils package+ * run as service+ * more debug utils+ * recognise OWNER/repo path in some case or other+ * add tested-with to cabal file+ * more updates for latest darcs+ * log accesses to ./access.log not console with a dev build+ * require newer ssh (#46)+ * we don't support pandoc 1.10 yet+ * tools: build all of darcsden, darcs and ssh in dev builds, for easier debugging+ * update for latest darcs+ * Rename repositories when forking, if neccessary+ * Support for Vagrant+ * getUsersWithRepos placeholder+ * old: disable hard-coded assignment & issue type fields, don't want to encourage enhancement issues right now+ * support/require blaze 0.5+ * check security question answer case-insensitively+ * drop some debug helpers now in the lib+ * 29: disconnect after ssh/scp to a bad path+ * 28: when forking, handle an existing private repo with the same name properly+ * 28: make bootstrapRepository less likely to put fs and db out of sync+ * make most headings bold again, I guess it is better+ * plain text readmes (and literal blocks in change notes) no longer have the gray bg & border+ * hide branches button when there are no forks+ * add bootstrap responsive design (width-adapting) styles, commented+ * front page: widen users column to reduce overlap in narrow windows+ * reduce source code font size a notch+ * show a border below file list; drop unnecessary readme heading+ * reduce heading sizes back towards normal browser defaults+ * set body font-size to 100% not 16px to respect browser settings better (per donri)+ * more robust layout of front page content and markdown lists generally+ * roll back some accidentally committed hunks+ * branches: use the "name's repo" format like all repos+ * changes: prevent line breaks in author name too+ * consistent change layout on changes and branches pages+ * drop unnecessary changes page header+ * use consistent style for next/prev buttons+ * all repos: whitespace fix+ * all repos: link "forks" to the parent repo's branches page as a convenience+ * all repos: show page controls at top also; increase page size from 50 to 500+ * don't show page controls if there is only one page+ * don't buttonize forks on branches page+ * another page layout: content at left, repo buttons at right, site buttons at top right (#16)+ * don't bother linking reporter name in issue list+ * use tables for more robust issue list layout with long issue names+ * allow prettier monospace font in markdown areas+ * let wide source code overflow to right as before+ * fix line numbers wrapping, enlarge & lighten source code+ * fix issue form bg color+ * don't gray out repo description+ * make issue page revise form layout a little more robust+ * lighten issues list+ * lighten branches list+ * fix branches page title+ * fluid page layout using bootstrap columns (#16)+ * lighten form styles+ * lighten headings+ * demote some more h1s I missed+ * begin using bootstrap's grid for page layout+ * adjust button icon alignment+ * make hyperlinks (other than main navigation links) blue+ * bump footer font size+ * where can I put this.. expose global layout more+ * drop the monospace font !+ * consistent non-dotted borders+ * drop excess heading line height+ * use bootstrap's default font family & size+ * restore patch page subheader+ * demote patch section headings and branch names to h3+ * more compact non-heading style for changes, issues, and patch file names+ * change secondary page headings to h2+ * remove dead code+ * keep bootstrap's pagination styles out of our pagination controls, minor cleanups+ * enable bootstrap css/js along with the rest+ * add bootstrap css/js to project+ * bump version description in footer+ * switch to 8901 for default dev instance port+ * include highlight.css only when built with highlighter+ * move javascripts back to the top, order matters+ * drop media=screen for consistency, till there's a clear need+ * move js scripts to end of page+ * bump jquery to latest release++## darcsden 1.0-hub (2012/09/19)++ * sync with latest docs/cabal file from 1.0+ * port the alternate highlightingkate/highlighter flags from 1.0+ * switch highlighting theme from kate to pygments+ * remove disabled font size styles+ * hcar participants update+ * move repos below users on the front page for now as suggested+ * Give better errors on SSH command misuse+ * Give better error on missing SSH key+ * bring HCAR up to date+ * bring draft announcement up to date+ * fix numbered list style in markdown+ * doMarkdown variant that doesn't escape html+ * clarify fixEscapes+ * remove unnecessary import from Base+ * indent list items in markdown+ * add moz and opera transition styles as for webkit+ * remove obsolete browser prefixes on border-radius, box-shadow styles+ * disable 36 of 40 font size adjustments, simplifying styling+ * remove unused .error class+ * unnecessary inline style+ * settings cleanup++The darcsden 1.0 and 1.0.1 releases diverged from this branch, here+are their approximate change logs:++> ## darcsden 1.0.1 (2012/09/20)+> +> * bump version+> * readme/release note links for hackage+> * point to 1.0 source repo+> * restore missing highlightingkate/highlighter flags+> * update HCAR+> +> ## darcsden 1.0 (2012/09/15)+> +> * final 1.0 docs+> * latest draft of cabal file from hub branch+> * latest draft of release docs from hub branch+> * fix numbered list style in markdown+> * replace "highlighting" flag with "highlightingkate" (default) and "highlighter", to select one or other+> * indent list items in markdown+> * add moz and opera transition styles as for webkit+> * remove obsolete browser prefixes on border-radius, box-shadow styles+> * fix Control.Monad.Trans warning+> * available patches -> branches button+> * shorten explore button name+> * revert many UI style changes from darcsden-hub branch, restoring "square" style++## darcsden-hub/-1.0 fork++ * create a repo -> new repo button+ * render markdown files to html instead of highlighting them+ * extract isMarkdown+ * don't show non-viewable private branches in branches view+ * try a little whitespace separating repo "view" and "action" buttons+ * try "branches" instead of "available patches" button+ * list all related repos on the patches page, even with nothing to merge+ * make Fork showable for debugging+ * small refactor in repoPatches+ * getForkChanges formatting+ * allow repo members to merge patches+ * add owst to credits+ * simplify flags description+ * clarify draft status of release announcement+ * add build flags to makefile+ * fix compilation warnings+ * Abstract out forked-from string generation. Now use it on users' repo listings+ * Fix build against current screeened darcslib+ * Fix build error due to missing definition of frontPageContent+ * cabal file updates+ * readme, announce updates+ * move db hosts/ports to Settings.hs+ * drop --readme option+ * tweak default settings+ * update release notes+ * re-enable new issue form's assignment and type fields in default build+ * draft 1.0 announcement, in progress+ * add .authorspellings to clean up darcs show authors+ * streamline front page layout, compress user/repo lists a little+ * code cleanup+ * tweak patch timeout error msg+ * show an error message on the patch page if fetching the patch times out+ * show the patch page right away, and the patch data when it's ready+ * fix compilation issues+ * potential fix for #12 - private repos being darcs gettable+ * set up the db view for browsing issues by tag+ * don't bother logging the full request in error log even in DEBUG mode+ * fix compilation warnings+ * drop unnecessary curly braces in cabal file+ * fix cabal build failure when ssh is enabled+ * update error message humanisations+ * add compile-time flag to control auto-closing of issues+ * add a flag to enable the ssh server+ * add flag to enable highlighting+ * use DARCS28 flag for subsidiary executables too+ * darcs 2.8 build fixes+ * fix favicon+ * fix clipped file/folder icons in files list+ * fix reversed file order in patch summary+ * 10: fix patch view hunk reverse-order regression+ * 7: give a proper 404 when viewing a nonexistent patch id+ * disable h-k's blue .fu style that is mysterious in haskell source+ * increase readme font size+ * let long source lines overflow right if they want+ * reorganise styles a bit+ * switch to "kate" highlighting theme+ * increase source code font size+ * /delay/SECS route for testing timeouts, prints a message after the specified delay up to 300s+ * more user-friendly error messages+ * enable line anchors in highlighted source+ * "patches from others" -> "available patches", fix button alignment+ * takeUpTo cleanups+ * elide large patches; reduce max request time to 10s and max file/patch display size to 200K+ * import both highlighting libs, make it easy to switch between them for testing+ * sync with latest darcs-screened+ * Darcs.Util renamed to Darcs.Util in latest darcs (respects DARCS28)+ * move log files to a subdirectory+ * keep user files in a subdirectory+ * fix a warning+ * Fix missing whitespace on replace summary+ * Remove extra whitespace+ * fix markdown pre/code block colours, second attempt+ * fix h-k styles interfering with markdown code blocks+ * keep line numbers aligned with highlighted lines+ * add the remaining h-k styles, use tango+ * add some more highlighting-kate styles, use "pygments" for now+ * use same source code font size in changes+ * simplify highlighting error handling, let it render binary since it seems able+ * bump source code font size a bit+ * mention utf8-string dependency+ * begin switch from highlighter to highlighting-kate+ * Fix background overflow on code blocks+ * Fix merging upstream patches+ * Fix indenting on withParent+ * Make /patches link active on forked repos+ * Show upstream changes on /patches+ * latest developer makefile+ * make request timeout a setting+ * 6: show logged-in users their private repos+ * refactor error pages, use same layout for 404, intentional 500, and exceptions+ * move exception handler's error page to WebUtils with the rest+ * move db schemas to their own module+ * give a prettier error page (and log message) when exceptions happen. First cut.+ * adjust darcs-screened api options following chat with gh+ * build with latest darcs-screened, if the on-by-default "darcs28" cabal flag is turned off+ * fix issue tracker flag warning in SSHServer+ * hide repo settings issue tracker checkbox when when issue trackers are disabled globally+ * alphabetise users+ * make page heading more consistent when browsing files+ * explore -> all repos button+ * refactor issues button+ * reword the patches button and gray it out when there are no forks+ * add an "all issues" view, keep issue view buttons visible+ * rounded button corners+ * tweak my repos, settings button icons+ * set NOINDEX meta tag on patch and misc. form pages to discourage search indexing+ * \#3: show a message instead of an error when browsing a file that can't be highlighted (eg images)+ * switch to underlining links by default+ * clarify renderHtml's source, import debug helpers+ * switch order of private and issue tracker checkboxes in repo settings+ * underlink links in issues+ * switch fork and issues buttons, keeping views and actions grouped+ * make the issue comment form consistent+ * fix clipping of issue comment headings+ * remove hard-coded issue assignment, type fields for now+ * let issue trackers be enabled/disabled per-repo+ * issues need the by_repository_and_number view now, update the db designs accordingly+ * when issues trackers are disabled disable url handlers as well+ * add a "my repos" button when logged in+ * drop cabal build flags since you have to edit Settings in any case+ * add DEBUG to version string in footer for debug builds+ * clearer elided message when viewing a patch with many hunks+ * Fix DSA public key identifier.+ * partial workaround for errors viewing too-large patches+ * README updates+ * footer layout; underline links there and in a few other places+ * move type signatures to the end of settings, and log everything to console in debug mode+ * add a footer with version and contact info, and debug build options, to settings+ * more messing around with changes font sizes+ * fix excessive borders in lists in patch notes, keep patch list font size consistent+ * increase maxlength of input fields to 1000+ * serve a /robots.txt, allowing all bots by default+ * build unthreaded by default, to avoid intermittent errors and eventual stylesheet loss due to non-threadsafe cwd setting by libdarcs+ * serve the public directory with an absolute path to be robust against thread cwd issues+ * move log file paths to Settings+ * don't hide fork/patches buttons in single-user builds+ * fix display of non-user patch authors with no real name part, showing email address up to @+ * replace patch author email addresses with usernames more reliably, eg in changes+ * make user list bold, again+ * keep log in/out buttons on one line+ * underline hyperlinks in the front page intro text+ * de-bold website links in repo list+ * show create repo button only on the user's own repo list+ * smoother change borders+ * show repo website link with consistent style+ * underlined hyperlinks, begone+ * embolden user list, directories in files view+ * lighten explore page styles+ * add a files button to repo sidebar+ * miscellaneous old and new style tweaks.. site font, whitespace, emphasize repo & patch names+ * improve pagination controls layout, show at top as well+ * less whitespace and decoration for changes and markdown content+ * disable the bootstrap feature, it is too slow/fragile for now+ * make user page repo links absolute so they work when url has a trailing slash+ * show create repo button only when logged in+ * move explore repos button to the front page only+ * move create repo link to a sidebar button+ * don't hide the front page from logged-in users+ * fix setting TCP port on the command-line+ * three cabal build flags for personal use (multiuser, deletefiles, issuetrackers)+ * list users on front page+ * make breadcrumbs' site link and front page content configurable+ * make hostname, base path and base url configurable in Settings.hs+ * clean up cabal file a little, forget about ghc 6.12+ * fix remaining warnings+ * fix redundant imports+ * fix more Snap.Types warnings+ * fix a snap types warning+ * make text fields bigger+ * fix redirect after merging+ * extract global Settings.hs+ * centralise userRoot setting and change it to /home/darcsden+ * provide debug helpers from DarcsDen.Util+ * allow latest snap (0.9)+ * require darcs > 2.8.1 (with prim v1 job patch)+ * bump version to "0.6 alpha"+ * support latest GHC, darcs, and snap, aggregating previous work+ * discourage spam registrations with a security question similar to darcs wiki+ * disable browser autofill on register form fields+ * fix emailFrom with blank author info++## darcsden 0.5 (2012/04/14)++ * version 0.5+ * ignore LC_* env var set requests+ * add initial high-level darcslib wrapper+ * add favicon png+ * constrain snap version number+ * cabal file version updates+ * updates for latest darcs/blaze-html/snap+ * PostHook.hs takes into account the case where the repository is private+ * a less-scary error message when $DARCS_PATCHES_XML isn't set+ * use `get` for forking and bootstrapping rather than `init` and `pull`+ * added getOneOf for getting alternative attributes (i.e. if one was renamed); fixes changes made in an issue comment that changed something to an empty value+ * allow obliterate over ssh+ * allow scp -f without --+ * footer cleanups; added a donate button+ * sort in alphabetical order at /explore+ * corrected user name displayed in issue body+ * oi. really corrected commenting. note to self: don't read other things while I'm typing.+ * corrected commenting+ * bump up font size for inline code in markdown+ * correct double-escaping+ * show issue number in page title+ * use issue number for its URL. closes #9.+ * viewing issues by tag; use ^ for "and" and ~ for "or". closes #1.+ * keep track of "from" values in comment changes+ * allow revising an issue's description. closes #3.+ * minor change, again to test post-hooks (use strip in authorFrom). closes #5 (not really).+ * corrected post-hook+ * tiny meaningless change so I can test the closing mechanism. closes #5.+ * corrected getIssueByNumber+ * add comments for closing issues. closes #5.+ * allow a few other phrases for post-hook+ * added initial post-hook for closing issues+ * list issues with newest up top+ * corrected double shadow in blob view+ * woops; save issue numbers+ * a few defaults for some state object fields+ * update the "updated" field when updating an issue+ * issue numbers + some cleanups+ * use getAttr for other state objects, added getAttrOr/getTime/getID/getRev+ * list issues in reverse-chronological order+ * corrected comment author name+ * slight tweak for add-tag form+ * spruced up the new-issue form, implemented adding arbitrary tags+ * corrected issue closing, added reopening+ * correct issue comment gravatar sizes+ * sort issues and their comments by their updated date+ * properly escape text before markdown'ing it+ * any logged-in user can update issues+ * css fixes+ * --install now sets up issues and comments databases+ * initial work on issue commenting/updating+ * added getAttr helper for reading a value from a JSON object+ * normalize line endings before using pandoc for markdown+ * rMember record field is now a list of usernames, not user IDs (any repositories with members must be updated to reflect this)+ * don't set uid/gid/ just start it as the user+ * password changing+ * ensure we're only bootstrapping http/https urls, corrected `Or' validation, and added isEmpty validator+ * init ssh command with a given repository description+ * cleanups+ * shrunk the favicon a bit+ * added favicon+ * correct $PATH for darcsden god config+ * corrected SSH authorization, and log login attempts+ * added god file+ * hspygments -> highlighter, cleaned up DarcsDen.Handler.Repository.Util+ * issues system updates+ * use hspygments and text for highlighting and bytestring <-> string conversion, respectively+ * progress on the issues system, plus some cleanups+ * orphan a repository's forks when deleting it+ * /forks -> /patches, removed console.logs, plus other fixes to make /patches usable+ * improved checkbox ticking in forks view+ * corrected repo links being shadowed by the canvas+ * updated boringfile+ * update to darcs 2.5.1+, mtl, and snap 0.3+, correcting forks view along the way (thanks Heffalump!)+ * cleaned up main.js+ * cleaned up findAllDeps/etc.; removed HiddenFrom+ * removed QuickCheck dependency++## darcsden 0.4 (2010/12/20)++ * updated synopsis+ * updated description+ * added Setup.hs, version bumped to 0.4, bumped cabal-version+ * corrected non-markdown READMES getting the white-on-black treatment+ * don't check DBs for --readme or --install, and just generate a README from --readme+ * added a note to the README about --readme+ * moved INSTALL file to a --readme flag+ * added --install, which sets up CouchDB for you+ * tweaked location for keypair+ * UI tweaks+ * use new rsaKeyPairFromFile function in ssh 0.2.5 rather than convoluted .keypair format+ * corrected login button background CSS+ * /browse -> /explore, added button for it, and changed the main links to the button-style+ * corrected repository grouping at /browse+ * corrected changes list when there's a `darcs replace` log+ * highlight patch hunks in parallel+ * big ol' code style update+ * reorganization & cabal file cleanups+ * need ssh 0.2.4++ * removed unused variable+ * corrected highlighting of source code containing utf8+ * atomo pygments lexer updates+ * corrected pygments highlighter; kills runaway processes+ * added Atomo lexer for pygments+ * corrected fallback highlighting+ * use Pygments for highlighting+ * slight forks list correction+ * /browse corrections; show forks of forks on their own for now+ * teeny tiny tweak+ * bumped ssh dependency to 0.2.2, which uses transformers+ * moved repository control links over to the left+ * reorganized breadcrumb for file browsing+ * group repository forks together at /browse+ * split the darcsden ssh server into another executable, plus misc. cleanups+ * improved scp security+ * use SHA512 for passwords+ * specify /srv/darcs for http logs+ * don't allow any tomfoolery with the scp path+ * corrected response for unknown requests, bumped ssh dependency number+ * ignore LANG env requests+ * handle scp requests+ * allow debug commands+ * removed Crypto and uuid dependency+ * updated darcs dependency version+ * split SSH server into its own package: http://darcsden.com/alex/ssh+ * bumped up snap versions+ * output invalid requests+ * ensure that redis/couchdb are usable at startup+ * use 127.0.0.1 rather than localhost+ * corrected notifications added during same response that shows the page+ * Corrected empty repository logic and fixed whitespace.+ * Corrected Python import in INSTALL file.+ * More INSTALL file stuff.+ * Updated INSTALL file.+ * Only show the "remove members" field if there are members to remove.+ * Show 404 pages rather than warnings for invalid repository views.+ * Show different messages with the proper push URLs when vieweing an empty repository.+ * Fixed SSH stuff using getRepository rather than getOwnerRepository.+ * Fixed repository viewing logic.+ * Members of private repositories can now access the repository.+ * Ability to edit repository private status.+ * Tweaked icon positioning for private repositories in user repo list.+ * Added repository public/private classes to user repository listings.+ * Don't include private repositories in getRepositories.+ * Fixed .private-repo class showing edit icon, tweaked icon positioning.+ * Save rIsPrivate as is_private in JSON Repository instance.+ * Private repositories.+ * Take HTTP/SSH port numbers as arguments.+ * Fixed getRepositories.+ * Cleanups.+ * Removed bin directory.+ * Specify cookie path as /; fixes weird logged in/logged out state possibly changing while browsing around.+ * Cleaned up DarcsDen's SSH request handling and verification; added init command for quick repository creation.+ * Channel cleanups and helper functions.+ * Use Redis for storing sessions.+ * Removed ssOutSeq (no longer used), cleaned up a few minor warnings.+ * Preemptively check if the handle is closed to prevent "end of file" messages.+ * Might as well bump up the version number (twice; once for the Snap changeover, another for the new SSH server).+ * Swapped a few lingering putStrLns that were used for debugging.+ * Woops, added DarcsDen.Debug module.+ * Converted print debugging statements to calls to a new DarcsDen.Debug.dump function.+ * Tweaked saneRepo to catch more odd cases.+ * Added KeyPair to SessionConfig for the server's private/public key.+ * Removed redundant rprivN; it's always in the pubkey anyway.+ * Removed CTR TODOs.+ * Initial integration of the new SSH server into DarcsDen, removed old Python server.+ * Tweaked PublicKey authentication to just contain a username and PublicKey.+ * Generalized read functions into NetReader, added blobToKey, plus various cleanups.+ * Added ssh-dss (DSA) public/private key support.+ * Send random bytes as padding.+ * Handle other AES key sizes.+ * Proper channel handling and reorganization to accomodate it.+ * Made SSH more flexible; authentication and channel requests are now handled by a configuration.+ * Keep track of window size and send WINDOW_ADJUST when we need to so that gigantic data transfers work.+ * Improved process I/O redirecting, fixed sending EOF in response to EOF, plus misc. cleanups.+ * Print a message when we lose the connection.+ * Ensure packets are sent sequentially by having a single "sender" thread that reads from a channel. Also added initial exec channel request support.+ * Naming convention tweaks for Packet monad and packet handlers.+ * Fixed `unmpint` and `toBlocks` overflow.+ * A much-needed cleanup.+ * Cryptography overhaul; proper CBC stream decryption/encryption, and use Crypto package instead of AES.+ * Initial SSH server work; transport layer (RFC 4253) functional.+ * Added CouchDB to required packages list for darcs-ssh.py.+ * Removed "code" class wrapping markdown patch notes.+ * Markdown patch notes, removed patch notes from atom feed summaries.+ * CSS tweaks for repository READMEs.+ * Fixed settings page.+ * Added access/error logging.+ * Fixed user viewing, this time keeping repository actions working.+ * Rolled back previous record since it breaks repo viewing instead.+ * Fixed / and /(user) conflicting.+ * Updated SSH server CouchDB URL.+ * fixed CSS class for preference changes in summary+ * No more warnings.+ * Serve static files without grabbing the user's session.+ * Fixed repository browsing, raw file viewing, and darcs get over HTTP.+ * Minor fixes for Snap, bumped required Snap version to 0.1.3, and changed the CouchDB port to 5984.+ * Initial Snap conversion work.+ * Fixed duplicates in patch summaries.+ * Added initial structure for private repositories. Not enabled or complete yet.+ * Tweaked ID for code lines; #L123 looks nicer than #LC123 in urls.+ * Fixed doubled title at user index.+ * Fixed "again" text on registration form.+ * Fixed viewing un-parseable source, and added clickable line numbers.+ * Fixed source code leaving `highlight' unescaped if the parse fails.+ * Refactored getReadme and added an isTooLarge function for checking blob source.+ * Added a filesize check to blob viewing, and added raw file viewing.+ * Fixed darcsden :: darcsden as title for /.+ * Fixed a few warnings.+ * Fixed some spots where raw authors would be displayed for patches, and fixed repositories with no changes showing up at /forks.+ * Small fixes in the ssh server.+ * Changed ssh server to run on a higher port number.+ * Use python 2.x syntax for exception catching.+ * More SSH server fixes and tweaks.+ * Updated the SSH server a bit.+ * Fixed full name in website field on settings page.+ * More readJSON cleanups and tweaks.+ * Fixed merge checkbox names, changed to merge:(rid):(pid).+ * Added initial installation instructions.+ * Fixed main updated tag in changes atom feed, and changed PatchLogs to contain UTCTimes instead of Strings for pDate.+ * Added member stuff back in; stored per repository. Also cleaned up Repository.readJSON.+ * Added getUserByID.+ * Grab the latest session when notifying the user of something so they don't just replace each other if more than one is displayed on a page.+ * Redirect to / after deleting a repository, rather than the user's profile.+ * Don't grab the session when we don't need to (e.g. /public). Also removed unneeded arguments from notFound and errorPage.+ * Moved the user-grabbing parts of toLog into a separate function that goes over the log and checks users only if they haven't already been checked. (30 CouchDB requests per page in the changelog -> number of different users in the log)+ * Fixed getRepositoryByID and repository forking.+ * Added old-time to cabal file (boo!), added a startup message so I don't sit there like a fool waiting for it to say something before I realize it doesn't, plus some more minor cleanups.+ * Re-added bootstrapping.+ * Grab forked repos much more effectively and less-crashingly. Also fixed some more whitespace quirks.+ * Cleaned up handler function.+ * Fixed serveDirectory for /public.+ * Lots of page serving tweaks.+ * Re-added serveDirectory (without MIME stuff) for serving public/ and _darcs directories, and cleaned up Main.hs.+ * Fixed double escaping and removed old commented-out code.+ * Bumped the version number.+ * Initial code for the rest of the repo pages, plus some helper functions for user/repo URLs.+ * Cleaned up and cabalized.+ * Lots o' cleanups.+ * Removed some more old unix stuff.+ * Removed setRepoPermissions.+ * Added submit button to init page.+ * Initial repo init and browse pages.+ * Fixed stale session being passed to pages.+ * Fixed settings form and tweaked register form for internal consistency.+ * Fixed User.showJSON+ * Only update the session if it has notifications to wipe.+ * Read the inputs and cookies once, and then store them in an Env. Fixes blocking on a second attempted input read.+ * Expanded that debug info.+ * Added base page wrapper around user pages.+ * Fixed the nav showing the wrong stuff for logged in/logged out.+ * Initial move to HSP and WAI, plus tons of other vaguely related stuff.+ * Removed defunct Darcsden.State module.+ * Initial conversion to CouchDB.+ * Added initial SSH server.+ * Added some styling for code in READMEs.+ * Show token replaces on patch views.+ * show long comment on changes view+ * show long comment on patch view+ * Dependency indicators at the forks listing.+ * Removed some debugging code.+ * Added dependency information to id/classes in the fork log.+ * Fixed up fork merging.+ * Notices now return IO () instead of a new Session; the reason it was like that before no longer applies.+ * Removed `merge' from the global scope in DarcsDen.State.User; it's only used in hashPassword.+ * DarcsDen.Validate.when -> DarcsDen.Validate.iff+ * Added forks listing page, which lets repo admins bring in patches from forked repos.+ * Fixed forkRepository setting the wrong information, and fixed the console help dialogue being wrong with "exit".+ * refactor: gather instance declarations+ * preliminary devmode setting, change this to run without creating users/groups+ * refactor: gather settings in one place+ * Show repo members with 'get group'.+ * user -> owner+ * Shell cleanups.+ * Fixed a typo in the shell help dialogue.+ * Fixed up admin shell stuff, and added unset command.+ * Added user and repository editing to the admin shell.+ * Reorganized some State stuff, and added an initial admin shell.+ * Added MonadIO instance for Dirty.+ * Forked repositories now keep a reference to the original. Also updated the User and Repository records to remove rUsers and uPubkeys, which are not used.+ * Added pubkeys to the registration form, plus slight cleanups.+ * Fixed checking if there are any repositories to show; show a message when viewing a user with no repositories.+ * Ignore case when sorting repositories.+ * HLint changes.+ * Sort repositories at /browse by their name rather than their owner.+ * Added public repository browsing.+ * Kill the web server thread on shutdown. Helpful for debugging in GHCi.+ * Fixed getting members of a repository.+ * Fixed removeMember.+ * Cleaned up Dirty usage and running shell commands.+ * Compile with -threaded to avoid blocking system calls.+ * New repositories can now be bootstrapped from a URL.+ * Added a improved system of working with shell commands and error handling.+ * Fixed others not being able to read public directories.+ * Added a repository fixer.+ * Change repository permissions so that others can read them.+ * Removed DarcsDen.Data; no longer needed.+ * workaround for "no instance ToSElem ClockTime" with ghc 6.10+ * feeds: various fixes to make the changes feed more valid+ * feeds: link to changes feed from repo and changes pages+ * add "extrahead" field to the base template+ * feeds: fix repo name+ * indentation+ * provide a .../changes/atom feed+ * restore the Makefile with tag/clean/ci rules for cleaning/tagging/auto-recompiling+ * fix "no instance ToSElem String" with 6.10+ * Removed the silly shell scripting in removeMember; use System.Posix again.+ * Slight cleanups.+ * Fixed empty file listings being shown.+ * Ensure that darcsden is run as root.+ * Replaced as many System.Cmd.system calls as possible with System.Posix usage.+ * add missing ghc option in Data.hs+ * adapt ghc-options to 6.10 also+ * Added ghc-options to cabal file and removed Makefile.+ * Fixed patch summaries.+ * Initial cabalization.+ * Switched to HStringTemplate.+ * Use Data.List.Split in State.Repository.+ * Heeded HLint.+ * Hash group names.+ * Oodles of icons.+ * When forking and the target repository name is already in use by the user, ask for a different one.+ * Removed chgrp hack; use setgid.+ * Cleanups.+ * Fixed up repository editing and renaming.+ * Fixed getInputs breaking with empty fields.+ * Notices will now re-grab the session to make sure nothing gets lost (e.g. repeated notices in a loop overwriting each other).+ * Use wordsBy rather than splitOn.+ * Moved a couple more functions to DarcsDen.Handler.Repository.Changes.+ * Added exhaustive pattern-match for pageFor.+ * Fixed index match for splitOn behaviour.+ * Split up Darcs.Handler.Repository a bit.+ * Use split package.+ * Fixed footer being smashed up against forms and other floating elements.+ * Handler cleanups.+ * Tweaked repository verification to only check if a repository is valid if it exists.+ * Added a footer.+ * Make repository directories unreadable by others.+ * Adding and removing members to/from repositories.+ * Removed redundant repository description from blob view.+ * Delete a repository's group when destroying it.+ * Added per-repository user groups; this will be the backbone of adding committers to repositories.+ * notFound now serves the proper error code.+ * Tweaked serveDirectory to take absolute paths.+ * Repository forking.+ * Handler reorganization; added a general handleRepo which does the common validations and moved to Handler.Repository, and moved serveDirectory to HackUtils.+ * Added a default crumb to repo-base.+ * Added edit/delete links.+ * Shortened repository handler names and removed some redundant definitions.+ * Moved repo desc/nav to a repo-base for all repo pages to extend.+ * make clean now removes Main+ * Fixed up patch view; summary links work, removed links for removed files, added files link to the files in the repo, and patch diffs link to the file they modify.+ * Removed ./ part of filenames in patch view.+ * Added Makefile.+ * Cleaned up all warnings.+ * Added GPL3 license.+ * Tweaked the intro page.+ * Repository editing and deleting.+ * Added some content to the index page when not logged in.+ * Shorter patch view URLs.+ * Only show the summary section if there's stuff to show.+ * Show preference changes in patch summaries.+ * Removed lib directory (highlighting-kate now has its own repository)+ * Removed text-press from lib/ (has its own repository now)+ * Added pagination links.+ * Fixed build-depends for text-press.+ * Repository handler cleanups.+ * Repository changes pagination.+ * Removed dist directories from tree.+ * Ignore dist directories.+ * Added Go syntax highlighting.+ * Change ownership of new repositories to its owner.+ * Added a few warning displays to failed validation branches, and automatically log the user in after successful registration.+ * Proper name sanity checking and filtering.+ * Cleaned up HackUtils.+ * Serve darcs repositories with HTTP at the repo's URL.+ * Added a little message to empty repositories so the user knows what the push target is.+ * Bumped up source code size a notch.+ * If a user's pubkey does not exist, return "".+ * Added settings link.+ * Redirect to login if they try to create a repo while not logged in.+ * Added user settings page and pubkey updating.+ * Added a README.+ * User registration now creates the user on the system.+ * Removed Hack.Contrib.Press dependency for now.+ * Sanitize repository paths.+ * Redirect and show errors on repository viewing failure.+ * Added repoDir for getting the path for a directory with a given user/repo name, changed repo dir to /jail/home/(username)/(reponame), and removed no-longer-needed withDirectory.+ * log -> changes+ * Added some basic navigation.+ * Add entire session for page context, not just notifications.+ * Use relatize-dates instead of building up a wonky string from a CalendarTime.+ * No need for the log description to link to the page we're already on.+ * Added notification system, and updated most templates to reflect the new style (especially form stuff).+ * Spruced up the index and user viewing pages, added a base template, and thinned up the diff add/remove indicators.+ * Added modified text-press library pending cleanup and sending patches back to creator.+ * {{var}} escapes var for safe output.+ * Added {{{var}}} for unescaped output.+ * Fixed {% if foo.bar %} being parsed as {% if foo.bar.baz %}+ * Make sure requested paths to public/ are sane.+ * Cleanups.+ * Get a user by a log's author's email address and use it (if a user exists for it) for log pages, etc. Also misc. css tweaks.+ * Added handling for Binary changes.+ * Initial patch viewing.+ * Initial site design, repository browsing, and initial log viewing.+ * Split User stuff into its own handler.+ * Reorganization; moved some things from Handler to HackUtils. Also added repository viewing and browsing.+ * Ignore boring repos dir.+ * Redirect to index on repo init.+ * Added repository viewing, and flipped how repository keys are stored: (name, user) -> (user, name)+ * Redirect to / on succesful registration, and only show your repositories at the index if you have any.+ * Added sessions, logging in, and repository creation, and repository listing.+ * Added basic logging-in (not actually functioning yet; no sessions), and cleaned up some debugging junk.+ * Fixed If validation not collecting the validations from the predicate.+ * Added Show instances for OK, Valid, and Invalid. (show Valid is just explain since some things are not easily Showable)+ * Swapped arguments for IOPred / io to make using them a bit nicer.+ * Added cookie setting/getting HackUtils.+ * Split Invalid and OK into their own types, Result is now an Either on both.+ * Removed listToOctets use, refactored password hashing to intersperse the salt through the password.+ * No need to use `show' on a string when explaining it.+ * Refactored validation, simplfying code and adding IO capabilities. Added username existence validation.+ * Added passwords to users, with a migration from the old form (mostly for practice).+ * Added a slightly prettier and less confusing naming for If validation.+ * Ignore my TODO file.+ * Initial user registration.+ * Added initial input validation system.+ * Added HackUtils module, moved getInput(s) to it.+ * Ignore compiled Main.+ * Slight State tweaks.+ * Added highlighting-kate library for later.+ * State updates; added main State type that is a combination of everything.+ * Slight cleanup for Handler.+ * Added .boring file.+ * Initial state structure.+ * Cleaned up DarcsDen.Handler a little bit.+ * Initial record.
@@ -0,0 +1,203 @@+darcsden is a darcs repository hosting platform, providing a web+application for browsing and managing repos, users, and issues, and a SSH+server for push/pull and quick repository creation.++Home: http://hackage.haskell.org/package/darcsden++To install:+-----------++"cabal install darcsden" will install darcsden and darcsden-ssh+executables with generic settings. In particular, the web app's base url+will be "http://localhost:8900", and multi-user features will be enabled.++For more control, get the darcsden source, adjust+src/DarcsDen/Settings.hs, and run "cabal install" in the top source+directory. There are also several optional build flags in darcsden.cabal,+mainly to assist with building on windows.++To run darcsden you also need:++- Redis (for storing web session data)+- CouchDB (for storing user/repo/repository data)++Both should be running on their default port, or you can change that in+Settings.hs. You should configure them by running:++ darcsden --install++You should have a "darcsden" user account (for running the app and owning+the files), with a ssh key:++ adduser --system --home /home/darcsden --shell /bin/bash --group --gecos DarcsDen darcsden+ sudo -u darcsden ssh-keygen++To avoid obscure errors due to mixed file ownership in ~/.darcs/cache,+always run darcsden as the darcsden user, with $HOME set properly.+So if using sudo, include the -H flag, like this:++ sudo -Hu darcsden COMMAND...++The directory where you start the web app should contain darcsden's+public/ directory. Or you can run it behind a web server that'll serve+/public/* requests from that directory.++Some features require extra configuration to work:++- OAuth:++ - Create developer applications for the oauth services:+ - Github: https://github.com/settings/applications+ - Google: https://code.google.com/apis/console+ - Set callback urls:+ - Github: same as your baseUrl+ - Google: multiple callbacks:+ - baseUrl ++ "register/google/response"+ - baseUrl ++ "login/google/response"+ - baseUrl ++ "sync/google/response"+ - Enter Client ID and Client secret into environment variables:+ - Github: Add these lines to your shell startup+ export GITHUB_CLIENT_ID=your_client_id+ export GITHUB_CLIENT_SECRET=your_client_secret+ - Google: Add these lines to your shell startup+ export GOOGLE_CLIENT_ID=your_client_id+ export GOOGLE_CLIENT_SECRET=your_client_secret++- Forgot Password:+ - Configure your default sendmail to be able to send emails+ - Edit sendEmail, and sendName to the email address you can use++- File edit:+ - For proper file type detection, ensure that you have xdg-utils installed.+ - Set xdgMimePath appropriately if xdg-mime is not in PATH++- Webdriver Tests:+ - Download and start selenium server from http://docs.seleniumhq.org/download/+ - Ensure that you have configured OAuth+ - You need a test google and github account:+ - export GOOGLE_USERNAME, GOOGLE_PASSWORD, GITHUB_USERNAME,+ GITHUB_PASSWORD.+ - run ./dist/build/darcsden-test/darcsden-test+++To start:+---------++For a quick test, run:++ sudo -Hu darcsden darcsden++and visit http://localhost:8900 (or other url configured in Settings.hs)+in your web browser.++This package provides separate executables for the web and SSH servers,+`darcsden` and `darcsden-ssh` respectively. You could run them manually+while logged in as the `darcsden` user via screen or dtach. Or, configure them+as daemons. See `darcsden.god`, or these sample supervisord.conf entries:++ [program:darcsden]+ command=sudo -EHu darcsden /path/to/darcsden --port 8900+ directory=/home/darcsden+ priority=3+ redirect_stderr=true+ autostart=true+ autorestart=true+ environment=LANG="en_US.UTF-8"++ [program:darcsden-ssh]+ command=sudo -EHu darcsden /path/to/darcsden-ssh 22+ directory=/home/darcsden+ priority=3+ redirect_stderr=true+ autostart=true+ autorestart=true+ environment=LANG="en_US.UTF-8"++Here's a sample apache vhost config:++ <VirtualHost *:80>+ ServerName my.host.name+ RewriteEngine on+ ProxyPreserveHost On+ ProxyErrorOverride On+ RewriteRule ^/(.*) http://127.0.0.1:8900/$1 [P]+ </VirtualHost>++Windows:+--------++darcsden indirectly depends on two external libraries: OpenSSL and pcre.++The -f-ssh flag can be used to disable the ssh server and remove the+dependency on OpenSSL.++The -f-closing flag disables the ability for checkins to automatically+close issues, removing the dependency on pcre.++OpenSSL can be installed from http://slproweb.com/products/Win32OpenSSL.html -+download "Win32 OpenSSL v1.0.1e" or whatever similar version is current.+[At the time of writing, darcs doesn't work with 64 bit Windows, but+if this changes then a 64 bit version can be downloaded from the same location.]++Pick a directory to install it to, e.g. c:/OpenSSL-Win32 - and install HsOpenSSL+with+cabal install HsOpenSSL --extra-include-dirs="c:/OpenSSL-Win32/include" --extra-lib-dirs="c:/Win32OpenSSL"++Running as a Windows service:+-----------------------------++darcsden depends on having CouchDB and redis running, so it also+makes sense to install these as services, though it's not essential.++redis can be setup as a Windows service using+https://github.com/kcherenkov/redis-windows-service++The redis service name is redis-instance.++CouchDB comes as a service already.++The CouchDB service name is something like+"Apache CouchDB01cd861ad1dbd850", look for "CouchDB" in the output+of "sc query" to get the exact name.++To install darcsden as a Windows service given the above names for+the redis and CouchDB services, identify the path to darcsden.exe+and to the darcsden source tree. Then alter the following command+appropriately and run it all on one line:++sc create DarcsDen+ binPath= "c:\path\to\darcsden.exe --root c:\path\to\source\of\darcsden --service"+ start= auto+ depend= redis-instance/"Apache CouchDB01cd861ad1dbd850"++To uninstall the service, use "sc delete DarcsDen".+++Contributing:+-------------++darcsden is a small, clean codebase that is fun to hack on. Discussion+takes place on the #darcs IRC channel, and useful changes will quickly+be deployed at hub.darcs.net, providing a tight dogfooding/feedback+loop. Here's how to contribute a patch there:++1. register at hub.darcs.net+2. add your ssh key in settings so you can push+3. fork your own branch: http://hub.darcs.net/simon/darcsden , fork+4. copy to your machine: darcs get http://hub.darcs.net/yourname/darcsden+5. make changes, darcs record+6. push to hub: darcs push yourname@hub.darcs.net:darcsden --set-default+7. your change will appear at http://hub.darcs.net/simon/darcsden/patches+8. discuss on #darcs, or ping me (sm, simon@joyful.com) to merge it++Credits:+--------++Alex Suraci created darcsden. Simon Michael led this release, which+includes contributions from Alp Mestanogullari, Jeffrey Chu, Ganesh+Sittampalam, and BSRK Aditya (sponsored by Google's Summer of Code).+And last time I forgot to mention two 1.0 contributors: Bertram+Felgenhauer and Alex Suraci.++darcsden depends on Darcs, Snap, GHC, and other fine projects from the+Haskell ecosystem, as well as Twitter Bootstrap, JQuery, and many more.
@@ -1,19 +1,13 @@ name: darcsden-version: 1.0.1-synopsis: Darcs repository UI and hosting/collaboration app.+version: 1.1+synopsis: Darcs repository UI and hosting/collaboration app (hub.darcs.net branch). description: A web application and SSH server for browsing and hosting darcs repositories and collaborating with others. .- Installation: http://hub.darcs.net/simon/darcsden-1.0/README- .- 1.0 release notes: http://hub.darcs.net/simon/darcsden-1.0/ANNOUNCE.md- .- 1.0.1 changes:- .- * cabal file now includes the required highlightingkate/highlighter build flags+ Installation: http://hub.darcs.net/simon/darcsden/README.md .- * cabal file points to a darcsden 1.0 source repo+ Release notes: http://hub.darcs.net/simon/darcsden/ANNOUNCE.md cabal-version: >=1.6 build-type: Simple@@ -23,32 +17,85 @@ maintainer: Alex Suraci <suraci.alex@gmail.com>, Simon Michael <simon@joyful.com> homepage: http://hackage.haskell.org/package/darcsden category: Development, Distribution, Web+tested-with: GHC==7.6.3+extra-source-files: + CHANGES.md+ LICENSE+ README.md+ public/js/relatize.js+ public/js/main.js+ public/js/jquery-1.8.1.min.js+ public/images/explore.xcf+ public/images/favicon.ico+ public/images/added.gif+ public/images/spinner.gif+ public/images/preference.gif+ public/images/favicon.xcf+ public/images/modified.gif+ public/images/delete-small.gif+ public/images/up.gif+ public/images/log.gif+ public/images/login.gif+ public/images/edit.xcf+ public/images/patches.gif+ public/images/fork.gif+ public/images/issues.gif+ public/images/patches.xcf+ public/images/new.xcf+ public/images/delete.gif+ public/images/new.gif+ public/images/home.gif+ public/images/issues.xcf+ public/images/folder.gif+ public/images/logout.gif+ public/images/file.gif+ public/images/register.gif+ public/images/explore.gif+ public/images/forkgif.xcf+ public/images/edit.gif+ public/images/private.gif+ public/images/removed.gif+ public/images/favicon.png+ public/codemirror-3.14/theme/elegant.css+ public/codemirror-3.14/LICENSE+ public/codemirror-3.14/lib/codemirror.css+ public/codemirror-3.14/lib/codemirror-compressed.js+ public/uptime.txt+ public/robots.txt+ public/css/main.css+ public/css/highlight.css+ public/bootstrap/js/bootstrap.js+ public/bootstrap/js/bootstrap.min.js+ public/bootstrap/img/glyphicons-halflings-white.png+ public/bootstrap/css/bootstrap.min.css+ public/bootstrap/css/bootstrap.css+ public/bootstrap/css/bootstrap-responsive.css+ public/bootstrap/css/bootstrap-responsive.min.css source-repository head type: darcs - -- Alex's original darcsden trunk, currently at 0.5- -- location: http://darcsden.com/alex/darcsden+ -- latest development branch, used to run hub.darcs.net+ location: http://hub.darcs.net/simon/darcsden -- the 1.0 release branch- location: http://hub.darcs.net/simon/darcsden-1.0+ -- location: http://hub.darcs.net/simon/darcsden-1.0 - -- latest development branch, used to run hub.darcs.net- -- location: http://hub.darcs.net/simon/darcsden+ -- Alex's original darcsden trunk+ -- location: http://darcsden.com/alex/darcsden flag darcs28- Description: Build with released darcs 2.8.2+, not the latest darcs-screened.+ Description: Build with the released darcs 2.8.x, not the unreleased 2.9.x. Default: True -- Several flags just to help with building on windows in the short term. -- Disable these to skip the highlighting-kate/highlighter, pcre-light,--- and ssh dependencies:+-- and ssh dependencies. --- Enable at most one of these two: flag highlightingkate Description: Enable source code highlighting, using highlighting-kate (faster). Default: True- flag highlighter Description: Enable source code highlighting, using highlighter. Default: False@@ -65,28 +112,68 @@ executable darcsden hs-source-dirs: src main-is: WebServer.hs+ other-modules:+ DarcsDen.Darcs+ DarcsDen.Debug+ DarcsDen.Github.Handler+ DarcsDen.Github.Paths+ DarcsDen.Github.Util+ DarcsDen.Google.Handler+ DarcsDen.Google.Paths+ DarcsDen.Google.Util+ DarcsDen.Handler+ DarcsDen.Handler.Repository+ DarcsDen.Handler.Repository.Browse+ DarcsDen.Handler.Repository.Changes+ DarcsDen.Handler.Repository.Forks+ DarcsDen.Handler.Repository.Util+ DarcsDen.Handler.User+ DarcsDen.Pages.Base+ DarcsDen.Pages.HSPage+ DarcsDen.Pages.Repository+ DarcsDen.Pages.User+ DarcsDen.Pages.Util+ DarcsDen.Settings+ DarcsDen.State.Comment+ DarcsDen.State.ForgotPassword+ DarcsDen.State.Issue+ DarcsDen.State.Repository+ DarcsDen.State.Schema+ DarcsDen.State.Session+ DarcsDen.State.User+ DarcsDen.State.Util+ DarcsDen.Util+ DarcsDen.Validate+ DarcsDen.WebUtils+ -- not -threaded until libdarcs is working directory thread safe ghc-options: -Wall -fno-warn-unused-do-bind+ if flag(darcs28) cpp-options: -DDARCS28- build-depends: darcs >= 2.8.2 && < 2.9+ build-depends: darcs >= 2.8.4 && < 2.9 else- build-depends: darcs > 2.9 && < 2.10+ build-depends: darcs >= 2.9 && < 2.10+ if flag(highlightingkate) cpp-options: -DHIGHLIGHTINGKATE build-depends: highlighting-kate+ if flag(highlighter) cpp-options: -DHIGHLIGHTER build-depends: highlighter+ if flag(ssh) cpp-options: -DSSH_FLAG build-depends:- ssh >= 0.2.6+ ssh >= 0.2.12+ build-depends: base >= 4 && < 5 , base64-string- , blaze-builder >= 0.3.1.0 && < 0.4- , blaze-html >= 0.4.0.0 && < 0.5+ , blaze-builder+ , blaze-html >= 0.5 && < 0.7+ , blaze-markup , bytestring , CouchDB , containers@@ -94,12 +181,15 @@ , filepath , harp , hashed-storage- , hsp >= 0.7 && < 0.8+ , HsOpenSSL+ , hsp >= 0.7.3 && < 0.8+ , http-conduit , json , mtl >= 2 && < 2.2+ , mime-mail , old-locale , old-time- , pandoc+ , pandoc >= 1.10 && < 1.12 , pureMD5 , process , random@@ -116,32 +206,156 @@ , xhtml , xml + if os(windows)+ cpp-options: -DWIN32+ build-depends:+ Win32-services-wrapper >= 0.1 && < 0.2+ executable darcsden-ssh hs-source-dirs: src main-is: SSHServer.hs+ other-modules:+ DarcsDen.Darcs+ DarcsDen.Debug+ DarcsDen.Github.Handler+ DarcsDen.Github.Paths+ DarcsDen.Github.Util+ DarcsDen.Google.Handler+ DarcsDen.Google.Paths+ DarcsDen.Google.Util+ DarcsDen.Handler+ DarcsDen.Handler.Repository+ DarcsDen.Handler.Repository.Browse+ DarcsDen.Handler.Repository.Changes+ DarcsDen.Handler.Repository.Forks+ DarcsDen.Handler.Repository.Util+ DarcsDen.Handler.User+ DarcsDen.Pages.Base+ DarcsDen.Pages.HSPage+ DarcsDen.Pages.Repository+ DarcsDen.Pages.User+ DarcsDen.Pages.Util+ DarcsDen.Settings+ DarcsDen.State.Comment+ DarcsDen.State.ForgotPassword+ DarcsDen.State.Issue+ DarcsDen.State.Repository+ DarcsDen.State.Schema+ DarcsDen.State.Session+ DarcsDen.State.User+ DarcsDen.State.Util+ DarcsDen.Util+ DarcsDen.Validate+ DarcsDen.WebUtils+ ghc-options: -Wall -threaded -fno-warn-unused-do-bind if flag(darcs28) cpp-options: -DDARCS28- build-depends: darcs > 2.8.1 && < 2.9+ build-depends: darcs >= 2.8.4 && < 2.9 else- build-depends: darcs > 2.9 && < 2.10+ build-depends: darcs >= 2.9 && < 2.10 if flag(ssh) cpp-options: -DSSH_FLAG build-depends:- ssh >= 0.2.6+ ssh >= 0.2.12 executable darcsden-post-hook hs-source-dirs: src main-is: PostHook.hs+ other-modules:+ DarcsDen.Darcs+ DarcsDen.Debug+ DarcsDen.Github.Handler+ DarcsDen.Github.Paths+ DarcsDen.Github.Util+ DarcsDen.Google.Handler+ DarcsDen.Google.Paths+ DarcsDen.Google.Util+ DarcsDen.Handler+ DarcsDen.Handler.Repository+ DarcsDen.Handler.Repository.Browse+ DarcsDen.Handler.Repository.Changes+ DarcsDen.Handler.Repository.Forks+ DarcsDen.Handler.Repository.Util+ DarcsDen.Handler.User+ DarcsDen.Pages.Base+ DarcsDen.Pages.HSPage+ DarcsDen.Pages.Repository+ DarcsDen.Pages.User+ DarcsDen.Pages.Util+ DarcsDen.Settings+ DarcsDen.State.Comment+ DarcsDen.State.ForgotPassword+ DarcsDen.State.Issue+ DarcsDen.State.Repository+ DarcsDen.State.Schema+ DarcsDen.State.Session+ DarcsDen.State.User+ DarcsDen.State.Util+ DarcsDen.Util+ DarcsDen.Validate+ DarcsDen.WebUtils+ ghc-options: -Wall -threaded -fno-warn-unused-do-bind if flag(darcs28) cpp-options: -DDARCS28- build-depends: darcs > 2.8.1 && < 2.9+ build-depends: darcs >= 2.8.4 && < 2.9 else- build-depends: darcs > 2.9 && < 2.10+ build-depends: darcs >= 2.9 && < 2.10 if flag(ssh) cpp-options: -DSSH_FLAG if flag(closing) cpp-options: -DCLOSING build-depends: pcre-light++executable darcsden-test+ hs-source-dirs: src+ main-is: Test.hs+ other-modules:+ DarcsDen.Darcs+ DarcsDen.Debug+ DarcsDen.Github.Handler+ DarcsDen.Github.Paths+ DarcsDen.Github.Util+ DarcsDen.Google.Handler+ DarcsDen.Google.Paths+ DarcsDen.Google.Util+ DarcsDen.Handler+ DarcsDen.Handler.Repository+ DarcsDen.Handler.Repository.Browse+ DarcsDen.Handler.Repository.Changes+ DarcsDen.Handler.Repository.Forks+ DarcsDen.Handler.Repository.Util+ DarcsDen.Handler.User+ DarcsDen.Pages.Base+ DarcsDen.Pages.HSPage+ DarcsDen.Pages.Repository+ DarcsDen.Pages.User+ DarcsDen.Pages.Util+ DarcsDen.Settings+ DarcsDen.State.Comment+ DarcsDen.State.ForgotPassword+ DarcsDen.State.Issue+ DarcsDen.State.Repository+ DarcsDen.State.Schema+ DarcsDen.State.Session+ DarcsDen.State.User+ DarcsDen.State.Util+ DarcsDen.Util+ DarcsDen.Validate+ DarcsDen.WebUtils+ Test.Github+ Test.Google+ Test.Repository+ Test.User++ ghc-options: -Wall -threaded -fno-warn-unused-do-bind++ build-depends:+ aeson+ , CouchDB+ , HUnit+ , redis+ , text+ , webdriver
@@ -0,0 +1,1058 @@+/*!+ * Bootstrap Responsive v2.1.1+ *+ * 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.+ */++.clearfix {+ *zoom: 1;+}++.clearfix:before,+.clearfix:after {+ display: table;+ line-height: 0;+ content: "";+}++.clearfix:after {+ clear: both;+}++.hide-text {+ font: 0/0 a;+ color: transparent;+ text-shadow: none;+ background-color: transparent;+ border: 0;+}++.input-block-level {+ display: block;+ width: 100%;+ min-height: 30px;+ -webkit-box-sizing: border-box;+ -moz-box-sizing: border-box;+ box-sizing: border-box;+}++.hidden {+ display: none;+ visibility: hidden;+}++.visible-phone {+ display: none !important;+}++.visible-tablet {+ display: none !important;+}++.hidden-desktop {+ display: none !important;+}++.visible-desktop {+ display: inherit !important;+}++@media (min-width: 768px) and (max-width: 979px) {+ .hidden-desktop {+ display: inherit !important;+ }+ .visible-desktop {+ display: none !important ;+ }+ .visible-tablet {+ display: inherit !important;+ }+ .hidden-tablet {+ display: none !important;+ }+}++@media (max-width: 767px) {+ .hidden-desktop {+ display: inherit !important;+ }+ .visible-desktop {+ display: none !important;+ }+ .visible-phone {+ display: inherit !important;+ }+ .hidden-phone {+ display: none !important;+ }+}++@media (min-width: 1200px) {+ .row {+ margin-left: -30px;+ *zoom: 1;+ }+ .row:before,+ .row:after {+ display: table;+ line-height: 0;+ content: "";+ }+ .row:after {+ clear: both;+ }+ [class*="span"] {+ float: left;+ min-height: 1px;+ margin-left: 30px;+ }+ .container,+ .navbar-static-top .container,+ .navbar-fixed-top .container,+ .navbar-fixed-bottom .container {+ width: 1170px;+ }+ .span12 {+ width: 1170px;+ }+ .span11 {+ width: 1070px;+ }+ .span10 {+ width: 970px;+ }+ .span9 {+ width: 870px;+ }+ .span8 {+ width: 770px;+ }+ .span7 {+ width: 670px;+ }+ .span6 {+ width: 570px;+ }+ .span5 {+ width: 470px;+ }+ .span4 {+ width: 370px;+ }+ .span3 {+ width: 270px;+ }+ .span2 {+ width: 170px;+ }+ .span1 {+ width: 70px;+ }+ .offset12 {+ margin-left: 1230px;+ }+ .offset11 {+ margin-left: 1130px;+ }+ .offset10 {+ margin-left: 1030px;+ }+ .offset9 {+ margin-left: 930px;+ }+ .offset8 {+ margin-left: 830px;+ }+ .offset7 {+ margin-left: 730px;+ }+ .offset6 {+ margin-left: 630px;+ }+ .offset5 {+ margin-left: 530px;+ }+ .offset4 {+ margin-left: 430px;+ }+ .offset3 {+ margin-left: 330px;+ }+ .offset2 {+ margin-left: 230px;+ }+ .offset1 {+ margin-left: 130px;+ }+ .row-fluid {+ width: 100%;+ *zoom: 1;+ }+ .row-fluid:before,+ .row-fluid:after {+ display: table;+ line-height: 0;+ content: "";+ }+ .row-fluid:after {+ clear: both;+ }+ .row-fluid [class*="span"] {+ display: block;+ float: left;+ width: 100%;+ min-height: 30px;+ margin-left: 2.564102564102564%;+ *margin-left: 2.5109110747408616%;+ -webkit-box-sizing: border-box;+ -moz-box-sizing: border-box;+ box-sizing: border-box;+ }+ .row-fluid [class*="span"]:first-child {+ margin-left: 0;+ }+ .row-fluid .span12 {+ width: 100%;+ *width: 99.94680851063829%;+ }+ .row-fluid .span11 {+ width: 91.45299145299145%;+ *width: 91.39979996362975%;+ }+ .row-fluid .span10 {+ width: 82.90598290598291%;+ *width: 82.8527914166212%;+ }+ .row-fluid .span9 {+ width: 74.35897435897436%;+ *width: 74.30578286961266%;+ }+ .row-fluid .span8 {+ width: 65.81196581196582%;+ *width: 65.75877432260411%;+ }+ .row-fluid .span7 {+ width: 57.26495726495726%;+ *width: 57.21176577559556%;+ }+ .row-fluid .span6 {+ width: 48.717948717948715%;+ *width: 48.664757228587014%;+ }+ .row-fluid .span5 {+ width: 40.17094017094017%;+ *width: 40.11774868157847%;+ }+ .row-fluid .span4 {+ width: 31.623931623931625%;+ *width: 31.570740134569924%;+ }+ .row-fluid .span3 {+ width: 23.076923076923077%;+ *width: 23.023731587561375%;+ }+ .row-fluid .span2 {+ width: 14.52991452991453%;+ *width: 14.476723040552828%;+ }+ .row-fluid .span1 {+ width: 5.982905982905983%;+ *width: 5.929714493544281%;+ }+ .row-fluid .offset12 {+ margin-left: 105.12820512820512%;+ *margin-left: 105.02182214948171%;+ }+ .row-fluid .offset12:first-child {+ margin-left: 102.56410256410257%;+ *margin-left: 102.45771958537915%;+ }+ .row-fluid .offset11 {+ margin-left: 96.58119658119658%;+ *margin-left: 96.47481360247316%;+ }+ .row-fluid .offset11:first-child {+ margin-left: 94.01709401709402%;+ *margin-left: 93.91071103837061%;+ }+ .row-fluid .offset10 {+ margin-left: 88.03418803418803%;+ *margin-left: 87.92780505546462%;+ }+ .row-fluid .offset10:first-child {+ margin-left: 85.47008547008548%;+ *margin-left: 85.36370249136206%;+ }+ .row-fluid .offset9 {+ margin-left: 79.48717948717949%;+ *margin-left: 79.38079650845607%;+ }+ .row-fluid .offset9:first-child {+ margin-left: 76.92307692307693%;+ *margin-left: 76.81669394435352%;+ }+ .row-fluid .offset8 {+ margin-left: 70.94017094017094%;+ *margin-left: 70.83378796144753%;+ }+ .row-fluid .offset8:first-child {+ margin-left: 68.37606837606839%;+ *margin-left: 68.26968539734497%;+ }+ .row-fluid .offset7 {+ margin-left: 62.393162393162385%;+ *margin-left: 62.28677941443899%;+ }+ .row-fluid .offset7:first-child {+ margin-left: 59.82905982905982%;+ *margin-left: 59.72267685033642%;+ }+ .row-fluid .offset6 {+ margin-left: 53.84615384615384%;+ *margin-left: 53.739770867430444%;+ }+ .row-fluid .offset6:first-child {+ margin-left: 51.28205128205128%;+ *margin-left: 51.175668303327875%;+ }+ .row-fluid .offset5 {+ margin-left: 45.299145299145295%;+ *margin-left: 45.1927623204219%;+ }+ .row-fluid .offset5:first-child {+ margin-left: 42.73504273504273%;+ *margin-left: 42.62865975631933%;+ }+ .row-fluid .offset4 {+ margin-left: 36.75213675213675%;+ *margin-left: 36.645753773413354%;+ }+ .row-fluid .offset4:first-child {+ margin-left: 34.18803418803419%;+ *margin-left: 34.081651209310785%;+ }+ .row-fluid .offset3 {+ margin-left: 28.205128205128204%;+ *margin-left: 28.0987452264048%;+ }+ .row-fluid .offset3:first-child {+ margin-left: 25.641025641025642%;+ *margin-left: 25.53464266230224%;+ }+ .row-fluid .offset2 {+ margin-left: 19.65811965811966%;+ *margin-left: 19.551736679396257%;+ }+ .row-fluid .offset2:first-child {+ margin-left: 17.094017094017094%;+ *margin-left: 16.98763411529369%;+ }+ .row-fluid .offset1 {+ margin-left: 11.11111111111111%;+ *margin-left: 11.004728132387708%;+ }+ .row-fluid .offset1:first-child {+ margin-left: 8.547008547008547%;+ *margin-left: 8.440625568285142%;+ }+ input,+ textarea,+ .uneditable-input {+ margin-left: 0;+ }+ .controls-row [class*="span"] + [class*="span"] {+ margin-left: 30px;+ }+ input.span12,+ textarea.span12,+ .uneditable-input.span12 {+ width: 1156px;+ }+ input.span11,+ textarea.span11,+ .uneditable-input.span11 {+ width: 1056px;+ }+ input.span10,+ textarea.span10,+ .uneditable-input.span10 {+ width: 956px;+ }+ input.span9,+ textarea.span9,+ .uneditable-input.span9 {+ width: 856px;+ }+ input.span8,+ textarea.span8,+ .uneditable-input.span8 {+ width: 756px;+ }+ input.span7,+ textarea.span7,+ .uneditable-input.span7 {+ width: 656px;+ }+ input.span6,+ textarea.span6,+ .uneditable-input.span6 {+ width: 556px;+ }+ input.span5,+ textarea.span5,+ .uneditable-input.span5 {+ width: 456px;+ }+ input.span4,+ textarea.span4,+ .uneditable-input.span4 {+ width: 356px;+ }+ input.span3,+ textarea.span3,+ .uneditable-input.span3 {+ width: 256px;+ }+ input.span2,+ textarea.span2,+ .uneditable-input.span2 {+ width: 156px;+ }+ input.span1,+ textarea.span1,+ .uneditable-input.span1 {+ width: 56px;+ }+ .thumbnails {+ margin-left: -30px;+ }+ .thumbnails > li {+ margin-left: 30px;+ }+ .row-fluid .thumbnails {+ margin-left: 0;+ }+}++@media (min-width: 768px) and (max-width: 979px) {+ .row {+ margin-left: -20px;+ *zoom: 1;+ }+ .row:before,+ .row:after {+ display: table;+ line-height: 0;+ content: "";+ }+ .row:after {+ clear: both;+ }+ [class*="span"] {+ float: left;+ min-height: 1px;+ margin-left: 20px;+ }+ .container,+ .navbar-static-top .container,+ .navbar-fixed-top .container,+ .navbar-fixed-bottom .container {+ width: 724px;+ }+ .span12 {+ width: 724px;+ }+ .span11 {+ width: 662px;+ }+ .span10 {+ width: 600px;+ }+ .span9 {+ width: 538px;+ }+ .span8 {+ width: 476px;+ }+ .span7 {+ width: 414px;+ }+ .span6 {+ width: 352px;+ }+ .span5 {+ width: 290px;+ }+ .span4 {+ width: 228px;+ }+ .span3 {+ width: 166px;+ }+ .span2 {+ width: 104px;+ }+ .span1 {+ width: 42px;+ }+ .offset12 {+ margin-left: 764px;+ }+ .offset11 {+ margin-left: 702px;+ }+ .offset10 {+ margin-left: 640px;+ }+ .offset9 {+ margin-left: 578px;+ }+ .offset8 {+ margin-left: 516px;+ }+ .offset7 {+ margin-left: 454px;+ }+ .offset6 {+ margin-left: 392px;+ }+ .offset5 {+ margin-left: 330px;+ }+ .offset4 {+ margin-left: 268px;+ }+ .offset3 {+ margin-left: 206px;+ }+ .offset2 {+ margin-left: 144px;+ }+ .offset1 {+ margin-left: 82px;+ }+ .row-fluid {+ width: 100%;+ *zoom: 1;+ }+ .row-fluid:before,+ .row-fluid:after {+ display: table;+ line-height: 0;+ content: "";+ }+ .row-fluid:after {+ clear: both;+ }+ .row-fluid [class*="span"] {+ display: block;+ float: left;+ width: 100%;+ min-height: 30px;+ margin-left: 2.7624309392265194%;+ *margin-left: 2.709239449864817%;+ -webkit-box-sizing: border-box;+ -moz-box-sizing: border-box;+ box-sizing: border-box;+ }+ .row-fluid [class*="span"]:first-child {+ margin-left: 0;+ }+ .row-fluid .span12 {+ width: 100%;+ *width: 99.94680851063829%;+ }+ .row-fluid .span11 {+ width: 91.43646408839778%;+ *width: 91.38327259903608%;+ }+ .row-fluid .span10 {+ width: 82.87292817679558%;+ *width: 82.81973668743387%;+ }+ .row-fluid .span9 {+ width: 74.30939226519337%;+ *width: 74.25620077583166%;+ }+ .row-fluid .span8 {+ width: 65.74585635359117%;+ *width: 65.69266486422946%;+ }+ .row-fluid .span7 {+ width: 57.18232044198895%;+ *width: 57.12912895262725%;+ }+ .row-fluid .span6 {+ width: 48.61878453038674%;+ *width: 48.56559304102504%;+ }+ .row-fluid .span5 {+ width: 40.05524861878453%;+ *width: 40.00205712942283%;+ }+ .row-fluid .span4 {+ width: 31.491712707182323%;+ *width: 31.43852121782062%;+ }+ .row-fluid .span3 {+ width: 22.92817679558011%;+ *width: 22.87498530621841%;+ }+ .row-fluid .span2 {+ width: 14.3646408839779%;+ *width: 14.311449394616199%;+ }+ .row-fluid .span1 {+ width: 5.801104972375691%;+ *width: 5.747913483013988%;+ }+ .row-fluid .offset12 {+ margin-left: 105.52486187845304%;+ *margin-left: 105.41847889972962%;+ }+ .row-fluid .offset12:first-child {+ margin-left: 102.76243093922652%;+ *margin-left: 102.6560479605031%;+ }+ .row-fluid .offset11 {+ margin-left: 96.96132596685082%;+ *margin-left: 96.8549429881274%;+ }+ .row-fluid .offset11:first-child {+ margin-left: 94.1988950276243%;+ *margin-left: 94.09251204890089%;+ }+ .row-fluid .offset10 {+ margin-left: 88.39779005524862%;+ *margin-left: 88.2914070765252%;+ }+ .row-fluid .offset10:first-child {+ margin-left: 85.6353591160221%;+ *margin-left: 85.52897613729868%;+ }+ .row-fluid .offset9 {+ margin-left: 79.8342541436464%;+ *margin-left: 79.72787116492299%;+ }+ .row-fluid .offset9:first-child {+ margin-left: 77.07182320441989%;+ *margin-left: 76.96544022569647%;+ }+ .row-fluid .offset8 {+ margin-left: 71.2707182320442%;+ *margin-left: 71.16433525332079%;+ }+ .row-fluid .offset8:first-child {+ margin-left: 68.50828729281768%;+ *margin-left: 68.40190431409427%;+ }+ .row-fluid .offset7 {+ margin-left: 62.70718232044199%;+ *margin-left: 62.600799341718584%;+ }+ .row-fluid .offset7:first-child {+ margin-left: 59.94475138121547%;+ *margin-left: 59.838368402492065%;+ }+ .row-fluid .offset6 {+ margin-left: 54.14364640883978%;+ *margin-left: 54.037263430116376%;+ }+ .row-fluid .offset6:first-child {+ margin-left: 51.38121546961326%;+ *margin-left: 51.27483249088986%;+ }+ .row-fluid .offset5 {+ margin-left: 45.58011049723757%;+ *margin-left: 45.47372751851417%;+ }+ .row-fluid .offset5:first-child {+ margin-left: 42.81767955801105%;+ *margin-left: 42.71129657928765%;+ }+ .row-fluid .offset4 {+ margin-left: 37.01657458563536%;+ *margin-left: 36.91019160691196%;+ }+ .row-fluid .offset4:first-child {+ margin-left: 34.25414364640884%;+ *margin-left: 34.14776066768544%;+ }+ .row-fluid .offset3 {+ margin-left: 28.45303867403315%;+ *margin-left: 28.346655695309746%;+ }+ .row-fluid .offset3:first-child {+ margin-left: 25.69060773480663%;+ *margin-left: 25.584224756083227%;+ }+ .row-fluid .offset2 {+ margin-left: 19.88950276243094%;+ *margin-left: 19.783119783707537%;+ }+ .row-fluid .offset2:first-child {+ margin-left: 17.12707182320442%;+ *margin-left: 17.02068884448102%;+ }+ .row-fluid .offset1 {+ margin-left: 11.32596685082873%;+ *margin-left: 11.219583872105325%;+ }+ .row-fluid .offset1:first-child {+ margin-left: 8.56353591160221%;+ *margin-left: 8.457152932878806%;+ }+ input,+ textarea,+ .uneditable-input {+ margin-left: 0;+ }+ .controls-row [class*="span"] + [class*="span"] {+ margin-left: 20px;+ }+ input.span12,+ textarea.span12,+ .uneditable-input.span12 {+ width: 710px;+ }+ input.span11,+ textarea.span11,+ .uneditable-input.span11 {+ width: 648px;+ }+ input.span10,+ textarea.span10,+ .uneditable-input.span10 {+ width: 586px;+ }+ input.span9,+ textarea.span9,+ .uneditable-input.span9 {+ width: 524px;+ }+ input.span8,+ textarea.span8,+ .uneditable-input.span8 {+ width: 462px;+ }+ input.span7,+ textarea.span7,+ .uneditable-input.span7 {+ width: 400px;+ }+ input.span6,+ textarea.span6,+ .uneditable-input.span6 {+ width: 338px;+ }+ input.span5,+ textarea.span5,+ .uneditable-input.span5 {+ width: 276px;+ }+ input.span4,+ textarea.span4,+ .uneditable-input.span4 {+ width: 214px;+ }+ input.span3,+ textarea.span3,+ .uneditable-input.span3 {+ width: 152px;+ }+ input.span2,+ textarea.span2,+ .uneditable-input.span2 {+ width: 90px;+ }+ input.span1,+ textarea.span1,+ .uneditable-input.span1 {+ width: 28px;+ }+}++@media (max-width: 767px) {+ body {+ padding-right: 20px;+ padding-left: 20px;+ }+ .navbar-fixed-top,+ .navbar-fixed-bottom,+ .navbar-static-top {+ margin-right: -20px;+ margin-left: -20px;+ }+ .container-fluid {+ padding: 0;+ }+ .dl-horizontal dt {+ float: none;+ width: auto;+ clear: none;+ text-align: left;+ }+ .dl-horizontal dd {+ margin-left: 0;+ }+ .container {+ width: auto;+ }+ .row-fluid {+ width: 100%;+ }+ .row,+ .thumbnails {+ margin-left: 0;+ }+ .thumbnails > li {+ float: none;+ margin-left: 0;+ }+ [class*="span"],+ .row-fluid [class*="span"] {+ display: block;+ float: none;+ width: 100%;+ margin-left: 0;+ -webkit-box-sizing: border-box;+ -moz-box-sizing: border-box;+ box-sizing: border-box;+ }+ .span12,+ .row-fluid .span12 {+ width: 100%;+ -webkit-box-sizing: border-box;+ -moz-box-sizing: border-box;+ box-sizing: border-box;+ }+ .input-large,+ .input-xlarge,+ .input-xxlarge,+ input[class*="span"],+ select[class*="span"],+ textarea[class*="span"],+ .uneditable-input {+ display: block;+ width: 100%;+ min-height: 30px;+ -webkit-box-sizing: border-box;+ -moz-box-sizing: border-box;+ box-sizing: border-box;+ }+ .input-prepend input,+ .input-append input,+ .input-prepend input[class*="span"],+ .input-append input[class*="span"] {+ display: inline-block;+ width: auto;+ }+ .controls-row [class*="span"] + [class*="span"] {+ margin-left: 0;+ }+ .modal {+ position: fixed;+ top: 20px;+ right: 20px;+ left: 20px;+ width: auto;+ margin: 0;+ }+ .modal.fade.in {+ top: auto;+ }+}++@media (max-width: 480px) {+ .nav-collapse {+ -webkit-transform: translate3d(0, 0, 0);+ }+ .page-header h1 small {+ display: block;+ line-height: 20px;+ }+ input[type="checkbox"],+ input[type="radio"] {+ border: 1px solid #ccc;+ }+ .form-horizontal .control-label {+ float: none;+ width: auto;+ padding-top: 0;+ text-align: left;+ }+ .form-horizontal .controls {+ margin-left: 0;+ }+ .form-horizontal .control-list {+ padding-top: 0;+ }+ .form-horizontal .form-actions {+ padding-right: 10px;+ padding-left: 10px;+ }+ .modal {+ top: 10px;+ right: 10px;+ left: 10px;+ }+ .modal-header .close {+ padding: 10px;+ margin: -10px;+ }+ .carousel-caption {+ position: static;+ }+}++@media (max-width: 979px) {+ body {+ padding-top: 0;+ }+ .navbar-fixed-top,+ .navbar-fixed-bottom {+ position: static;+ }+ .navbar-fixed-top {+ margin-bottom: 20px;+ }+ .navbar-fixed-bottom {+ margin-top: 20px;+ }+ .navbar-fixed-top .navbar-inner,+ .navbar-fixed-bottom .navbar-inner {+ padding: 5px;+ }+ .navbar .container {+ width: auto;+ padding: 0;+ }+ .navbar .brand {+ padding-right: 10px;+ padding-left: 10px;+ margin: 0 0 0 -5px;+ }+ .nav-collapse {+ clear: both;+ }+ .nav-collapse .nav {+ float: none;+ margin: 0 0 10px;+ }+ .nav-collapse .nav > li {+ float: none;+ }+ .nav-collapse .nav > li > a {+ margin-bottom: 2px;+ }+ .nav-collapse .nav > .divider-vertical {+ display: none;+ }+ .nav-collapse .nav .nav-header {+ color: #777777;+ text-shadow: none;+ }+ .nav-collapse .nav > li > a,+ .nav-collapse .dropdown-menu a {+ padding: 9px 15px;+ font-weight: bold;+ color: #777777;+ -webkit-border-radius: 3px;+ -moz-border-radius: 3px;+ border-radius: 3px;+ }+ .nav-collapse .btn {+ padding: 4px 10px 4px;+ font-weight: normal;+ -webkit-border-radius: 4px;+ -moz-border-radius: 4px;+ border-radius: 4px;+ }+ .nav-collapse .dropdown-menu li + li a {+ margin-bottom: 2px;+ }+ .nav-collapse .nav > li > a:hover,+ .nav-collapse .dropdown-menu a:hover {+ background-color: #f2f2f2;+ }+ .navbar-inverse .nav-collapse .nav > li > a:hover,+ .navbar-inverse .nav-collapse .dropdown-menu a:hover {+ background-color: #111111;+ }+ .nav-collapse.in .btn-group {+ padding: 0;+ margin-top: 5px;+ }+ .nav-collapse .dropdown-menu {+ position: static;+ top: auto;+ left: auto;+ display: block;+ float: none;+ max-width: none;+ padding: 0;+ margin: 0 15px;+ background-color: transparent;+ border: none;+ -webkit-border-radius: 0;+ -moz-border-radius: 0;+ border-radius: 0;+ -webkit-box-shadow: none;+ -moz-box-shadow: none;+ box-shadow: none;+ }+ .nav-collapse .dropdown-menu:before,+ .nav-collapse .dropdown-menu:after {+ display: none;+ }+ .nav-collapse .dropdown-menu .divider {+ display: none;+ }+ .nav-collapse .nav > li > .dropdown-menu:before,+ .nav-collapse .nav > li > .dropdown-menu:after {+ display: none;+ }+ .nav-collapse .navbar-form,+ .nav-collapse .navbar-search {+ float: none;+ padding: 10px 15px;+ margin: 10px 0;+ border-top: 1px solid #f2f2f2;+ border-bottom: 1px solid #f2f2f2;+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);+ -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);+ }+ .navbar-inverse .nav-collapse .navbar-form,+ .navbar-inverse .nav-collapse .navbar-search {+ border-top-color: #111111;+ border-bottom-color: #111111;+ }+ .navbar .nav-collapse .nav.pull-right {+ float: none;+ margin-left: 0;+ }+ .nav-collapse,+ .nav-collapse.collapse {+ height: 0;+ overflow: hidden;+ }+ .navbar .btn-navbar {+ display: block;+ }+ .navbar-static .navbar-inner {+ padding-right: 10px;+ padding-left: 10px;+ }+}++@media (min-width: 980px) {+ .nav-collapse.collapse {+ height: auto !important;+ overflow: visible !important;+ }+}
@@ -0,0 +1,9 @@+/*!+ * Bootstrap Responsive v2.1.1+ *+ * 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.+ */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.hidden{display:none;visibility:hidden}.visible-phone{display:none!important}.visible-tablet{display:none!important}.hidden-desktop{display:none!important}.visible-desktop{display:inherit!important}@media(min-width:768px) and (max-width:979px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-tablet{display:inherit!important}.hidden-tablet{display:none!important}}@media(max-width:767px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-phone{display:inherit!important}.hidden-phone{display:none!important}}@media(min-width:1200px){.row{margin-left:-30px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:30px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:1170px}.span12{width:1170px}.span11{width:1070px}.span10{width:970px}.span9{width:870px}.span8{width:770px}.span7{width:670px}.span6{width:570px}.span5{width:470px}.span4{width:370px}.span3{width:270px}.span2{width:170px}.span1{width:70px}.offset12{margin-left:1230px}.offset11{margin-left:1130px}.offset10{margin-left:1030px}.offset9{margin-left:930px}.offset8{margin-left:830px}.offset7{margin-left:730px}.offset6{margin-left:630px}.offset5{margin-left:530px}.offset4{margin-left:430px}.offset3{margin-left:330px}.offset2{margin-left:230px}.offset1{margin-left:130px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.564102564102564%;*margin-left:2.5109110747408616%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.45299145299145%;*width:91.39979996362975%}.row-fluid .span10{width:82.90598290598291%;*width:82.8527914166212%}.row-fluid .span9{width:74.35897435897436%;*width:74.30578286961266%}.row-fluid .span8{width:65.81196581196582%;*width:65.75877432260411%}.row-fluid .span7{width:57.26495726495726%;*width:57.21176577559556%}.row-fluid .span6{width:48.717948717948715%;*width:48.664757228587014%}.row-fluid .span5{width:40.17094017094017%;*width:40.11774868157847%}.row-fluid .span4{width:31.623931623931625%;*width:31.570740134569924%}.row-fluid .span3{width:23.076923076923077%;*width:23.023731587561375%}.row-fluid .span2{width:14.52991452991453%;*width:14.476723040552828%}.row-fluid .span1{width:5.982905982905983%;*width:5.929714493544281%}.row-fluid .offset12{margin-left:105.12820512820512%;*margin-left:105.02182214948171%}.row-fluid .offset12:first-child{margin-left:102.56410256410257%;*margin-left:102.45771958537915%}.row-fluid .offset11{margin-left:96.58119658119658%;*margin-left:96.47481360247316%}.row-fluid .offset11:first-child{margin-left:94.01709401709402%;*margin-left:93.91071103837061%}.row-fluid .offset10{margin-left:88.03418803418803%;*margin-left:87.92780505546462%}.row-fluid .offset10:first-child{margin-left:85.47008547008548%;*margin-left:85.36370249136206%}.row-fluid .offset9{margin-left:79.48717948717949%;*margin-left:79.38079650845607%}.row-fluid .offset9:first-child{margin-left:76.92307692307693%;*margin-left:76.81669394435352%}.row-fluid .offset8{margin-left:70.94017094017094%;*margin-left:70.83378796144753%}.row-fluid .offset8:first-child{margin-left:68.37606837606839%;*margin-left:68.26968539734497%}.row-fluid .offset7{margin-left:62.393162393162385%;*margin-left:62.28677941443899%}.row-fluid .offset7:first-child{margin-left:59.82905982905982%;*margin-left:59.72267685033642%}.row-fluid .offset6{margin-left:53.84615384615384%;*margin-left:53.739770867430444%}.row-fluid .offset6:first-child{margin-left:51.28205128205128%;*margin-left:51.175668303327875%}.row-fluid .offset5{margin-left:45.299145299145295%;*margin-left:45.1927623204219%}.row-fluid .offset5:first-child{margin-left:42.73504273504273%;*margin-left:42.62865975631933%}.row-fluid .offset4{margin-left:36.75213675213675%;*margin-left:36.645753773413354%}.row-fluid .offset4:first-child{margin-left:34.18803418803419%;*margin-left:34.081651209310785%}.row-fluid .offset3{margin-left:28.205128205128204%;*margin-left:28.0987452264048%}.row-fluid .offset3:first-child{margin-left:25.641025641025642%;*margin-left:25.53464266230224%}.row-fluid .offset2{margin-left:19.65811965811966%;*margin-left:19.551736679396257%}.row-fluid .offset2:first-child{margin-left:17.094017094017094%;*margin-left:16.98763411529369%}.row-fluid .offset1{margin-left:11.11111111111111%;*margin-left:11.004728132387708%}.row-fluid .offset1:first-child{margin-left:8.547008547008547%;*margin-left:8.440625568285142%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:30px}input.span12,textarea.span12,.uneditable-input.span12{width:1156px}input.span11,textarea.span11,.uneditable-input.span11{width:1056px}input.span10,textarea.span10,.uneditable-input.span10{width:956px}input.span9,textarea.span9,.uneditable-input.span9{width:856px}input.span8,textarea.span8,.uneditable-input.span8{width:756px}input.span7,textarea.span7,.uneditable-input.span7{width:656px}input.span6,textarea.span6,.uneditable-input.span6{width:556px}input.span5,textarea.span5,.uneditable-input.span5{width:456px}input.span4,textarea.span4,.uneditable-input.span4{width:356px}input.span3,textarea.span3,.uneditable-input.span3{width:256px}input.span2,textarea.span2,.uneditable-input.span2{width:156px}input.span1,textarea.span1,.uneditable-input.span1{width:56px}.thumbnails{margin-left:-30px}.thumbnails>li{margin-left:30px}.row-fluid .thumbnails{margin-left:0}}@media(min-width:768px) and (max-width:979px){.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:724px}.span12{width:724px}.span11{width:662px}.span10{width:600px}.span9{width:538px}.span8{width:476px}.span7{width:414px}.span6{width:352px}.span5{width:290px}.span4{width:228px}.span3{width:166px}.span2{width:104px}.span1{width:42px}.offset12{margin-left:764px}.offset11{margin-left:702px}.offset10{margin-left:640px}.offset9{margin-left:578px}.offset8{margin-left:516px}.offset7{margin-left:454px}.offset6{margin-left:392px}.offset5{margin-left:330px}.offset4{margin-left:268px}.offset3{margin-left:206px}.offset2{margin-left:144px}.offset1{margin-left:82px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.7624309392265194%;*margin-left:2.709239449864817%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.43646408839778%;*width:91.38327259903608%}.row-fluid .span10{width:82.87292817679558%;*width:82.81973668743387%}.row-fluid .span9{width:74.30939226519337%;*width:74.25620077583166%}.row-fluid .span8{width:65.74585635359117%;*width:65.69266486422946%}.row-fluid .span7{width:57.18232044198895%;*width:57.12912895262725%}.row-fluid .span6{width:48.61878453038674%;*width:48.56559304102504%}.row-fluid .span5{width:40.05524861878453%;*width:40.00205712942283%}.row-fluid .span4{width:31.491712707182323%;*width:31.43852121782062%}.row-fluid .span3{width:22.92817679558011%;*width:22.87498530621841%}.row-fluid .span2{width:14.3646408839779%;*width:14.311449394616199%}.row-fluid .span1{width:5.801104972375691%;*width:5.747913483013988%}.row-fluid .offset12{margin-left:105.52486187845304%;*margin-left:105.41847889972962%}.row-fluid .offset12:first-child{margin-left:102.76243093922652%;*margin-left:102.6560479605031%}.row-fluid .offset11{margin-left:96.96132596685082%;*margin-left:96.8549429881274%}.row-fluid .offset11:first-child{margin-left:94.1988950276243%;*margin-left:94.09251204890089%}.row-fluid .offset10{margin-left:88.39779005524862%;*margin-left:88.2914070765252%}.row-fluid .offset10:first-child{margin-left:85.6353591160221%;*margin-left:85.52897613729868%}.row-fluid .offset9{margin-left:79.8342541436464%;*margin-left:79.72787116492299%}.row-fluid .offset9:first-child{margin-left:77.07182320441989%;*margin-left:76.96544022569647%}.row-fluid .offset8{margin-left:71.2707182320442%;*margin-left:71.16433525332079%}.row-fluid .offset8:first-child{margin-left:68.50828729281768%;*margin-left:68.40190431409427%}.row-fluid .offset7{margin-left:62.70718232044199%;*margin-left:62.600799341718584%}.row-fluid .offset7:first-child{margin-left:59.94475138121547%;*margin-left:59.838368402492065%}.row-fluid .offset6{margin-left:54.14364640883978%;*margin-left:54.037263430116376%}.row-fluid .offset6:first-child{margin-left:51.38121546961326%;*margin-left:51.27483249088986%}.row-fluid .offset5{margin-left:45.58011049723757%;*margin-left:45.47372751851417%}.row-fluid .offset5:first-child{margin-left:42.81767955801105%;*margin-left:42.71129657928765%}.row-fluid .offset4{margin-left:37.01657458563536%;*margin-left:36.91019160691196%}.row-fluid .offset4:first-child{margin-left:34.25414364640884%;*margin-left:34.14776066768544%}.row-fluid .offset3{margin-left:28.45303867403315%;*margin-left:28.346655695309746%}.row-fluid .offset3:first-child{margin-left:25.69060773480663%;*margin-left:25.584224756083227%}.row-fluid .offset2{margin-left:19.88950276243094%;*margin-left:19.783119783707537%}.row-fluid .offset2:first-child{margin-left:17.12707182320442%;*margin-left:17.02068884448102%}.row-fluid .offset1{margin-left:11.32596685082873%;*margin-left:11.219583872105325%}.row-fluid .offset1:first-child{margin-left:8.56353591160221%;*margin-left:8.457152932878806%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:710px}input.span11,textarea.span11,.uneditable-input.span11{width:648px}input.span10,textarea.span10,.uneditable-input.span10{width:586px}input.span9,textarea.span9,.uneditable-input.span9{width:524px}input.span8,textarea.span8,.uneditable-input.span8{width:462px}input.span7,textarea.span7,.uneditable-input.span7{width:400px}input.span6,textarea.span6,.uneditable-input.span6{width:338px}input.span5,textarea.span5,.uneditable-input.span5{width:276px}input.span4,textarea.span4,.uneditable-input.span4{width:214px}input.span3,textarea.span3,.uneditable-input.span3{width:152px}input.span2,textarea.span2,.uneditable-input.span2{width:90px}input.span1,textarea.span1,.uneditable-input.span1{width:28px}}@media(max-width:767px){body{padding-right:20px;padding-left:20px}.navbar-fixed-top,.navbar-fixed-bottom,.navbar-static-top{margin-right:-20px;margin-left:-20px}.container-fluid{padding:0}.dl-horizontal dt{float:none;width:auto;clear:none;text-align:left}.dl-horizontal dd{margin-left:0}.container{width:auto}.row-fluid{width:100%}.row,.thumbnails{margin-left:0}.thumbnails>li{float:none;margin-left:0}[class*="span"],.row-fluid [class*="span"]{display:block;float:none;width:100%;margin-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.span12,.row-fluid .span12{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.input-large,.input-xlarge,.input-xxlarge,input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.input-prepend input,.input-append input,.input-prepend input[class*="span"],.input-append input[class*="span"]{display:inline-block;width:auto}.controls-row [class*="span"]+[class*="span"]{margin-left:0}.modal{position:fixed;top:20px;right:20px;left:20px;width:auto;margin:0}.modal.fade.in{top:auto}}@media(max-width:480px){.nav-collapse{-webkit-transform:translate3d(0,0,0)}.page-header h1 small{display:block;line-height:20px}input[type="checkbox"],input[type="radio"]{border:1px solid #ccc}.form-horizontal .control-label{float:none;width:auto;padding-top:0;text-align:left}.form-horizontal .controls{margin-left:0}.form-horizontal .control-list{padding-top:0}.form-horizontal .form-actions{padding-right:10px;padding-left:10px}.modal{top:10px;right:10px;left:10px}.modal-header .close{padding:10px;margin:-10px}.carousel-caption{position:static}}@media(max-width:979px){body{padding-top:0}.navbar-fixed-top,.navbar-fixed-bottom{position:static}.navbar-fixed-top{margin-bottom:20px}.navbar-fixed-bottom{margin-top:20px}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding:5px}.navbar .container{width:auto;padding:0}.navbar .brand{padding-right:10px;padding-left:10px;margin:0 0 0 -5px}.nav-collapse{clear:both}.nav-collapse .nav{float:none;margin:0 0 10px}.nav-collapse .nav>li{float:none}.nav-collapse .nav>li>a{margin-bottom:2px}.nav-collapse .nav>.divider-vertical{display:none}.nav-collapse .nav .nav-header{color:#777;text-shadow:none}.nav-collapse .nav>li>a,.nav-collapse .dropdown-menu a{padding:9px 15px;font-weight:bold;color:#777;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.nav-collapse .btn{padding:4px 10px 4px;font-weight:normal;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.nav-collapse .dropdown-menu li+li a{margin-bottom:2px}.nav-collapse .nav>li>a:hover,.nav-collapse .dropdown-menu a:hover{background-color:#f2f2f2}.navbar-inverse .nav-collapse .nav>li>a:hover,.navbar-inverse .nav-collapse .dropdown-menu a:hover{background-color:#111}.nav-collapse.in .btn-group{padding:0;margin-top:5px}.nav-collapse .dropdown-menu{position:static;top:auto;left:auto;display:block;float:none;max-width:none;padding:0;margin:0 15px;background-color:transparent;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.nav-collapse .dropdown-menu:before,.nav-collapse .dropdown-menu:after{display:none}.nav-collapse .dropdown-menu .divider{display:none}.nav-collapse .nav>li>.dropdown-menu:before,.nav-collapse .nav>li>.dropdown-menu:after{display:none}.nav-collapse .navbar-form,.nav-collapse .navbar-search{float:none;padding:10px 15px;margin:10px 0;border-top:1px solid #f2f2f2;border-bottom:1px solid #f2f2f2;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1)}.navbar-inverse .nav-collapse .navbar-form,.navbar-inverse .nav-collapse .navbar-search{border-top-color:#111;border-bottom-color:#111}.navbar .nav-collapse .nav.pull-right{float:none;margin-left:0}.nav-collapse,.nav-collapse.collapse{height:0;overflow:hidden}.navbar .btn-navbar{display:block}.navbar-static .navbar-inner{padding-right:10px;padding-left:10px}}@media(min-width:980px){.nav-collapse.collapse{height:auto!important;overflow:visible!important}}
@@ -0,0 +1,5774 @@+/*!+ * Bootstrap v2.1.1+ *+ * 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 {+ width: auto\9;+ height: auto;+ max-width: 100%;+ vertical-align: middle;+ border: 0;+ -ms-interpolation-mode: bicubic;+}++#map_canvas img {+ max-width: none;+}++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-box-sizing: content-box;+ -moz-box-sizing: content-box;+ box-sizing: content-box;+ -webkit-appearance: textfield;+}++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;+ line-height: 0;+ content: "";+}++.clearfix:after {+ clear: both;+}++.hide-text {+ font: 0/0 a;+ color: transparent;+ text-shadow: none;+ background-color: transparent;+ border: 0;+}++.input-block-level {+ display: block;+ width: 100%;+ min-height: 30px;+ -webkit-box-sizing: border-box;+ -moz-box-sizing: border-box;+ box-sizing: border-box;+}++body {+ margin: 0;+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;+ font-size: 14px;+ line-height: 20px;+ color: #333333;+ background-color: #ffffff;+}++a {+ color: #0088cc;+ text-decoration: none;+}++a:hover {+ color: #005580;+ text-decoration: underline;+}++.img-rounded {+ -webkit-border-radius: 6px;+ -moz-border-radius: 6px;+ border-radius: 6px;+}++.img-polaroid {+ padding: 4px;+ background-color: #fff;+ border: 1px solid #ccc;+ border: 1px solid rgba(0, 0, 0, 0.2);+ -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);+ -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);+}++.img-circle {+ -webkit-border-radius: 500px;+ -moz-border-radius: 500px;+ border-radius: 500px;+}++.row {+ margin-left: -20px;+ *zoom: 1;+}++.row:before,+.row:after {+ display: table;+ line-height: 0;+ content: "";+}++.row:after {+ clear: both;+}++[class*="span"] {+ float: left;+ min-height: 1px;+ margin-left: 20px;+}++.container,+.navbar-static-top .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;+ line-height: 0;+ content: "";+}++.row-fluid:after {+ clear: both;+}++.row-fluid [class*="span"] {+ display: block;+ float: left;+ width: 100%;+ min-height: 30px;+ margin-left: 2.127659574468085%;+ *margin-left: 2.074468085106383%;+ -webkit-box-sizing: border-box;+ -moz-box-sizing: border-box;+ box-sizing: border-box;+}++.row-fluid [class*="span"]:first-child {+ margin-left: 0;+}++.row-fluid .span12 {+ width: 100%;+ *width: 99.94680851063829%;+}++.row-fluid .span11 {+ width: 91.48936170212765%;+ *width: 91.43617021276594%;+}++.row-fluid .span10 {+ width: 82.97872340425532%;+ *width: 82.92553191489361%;+}++.row-fluid .span9 {+ width: 74.46808510638297%;+ *width: 74.41489361702126%;+}++.row-fluid .span8 {+ width: 65.95744680851064%;+ *width: 65.90425531914893%;+}++.row-fluid .span7 {+ width: 57.44680851063829%;+ *width: 57.39361702127659%;+}++.row-fluid .span6 {+ width: 48.93617021276595%;+ *width: 48.88297872340425%;+}++.row-fluid .span5 {+ width: 40.42553191489362%;+ *width: 40.37234042553192%;+}++.row-fluid .span4 {+ width: 31.914893617021278%;+ *width: 31.861702127659576%;+}++.row-fluid .span3 {+ width: 23.404255319148934%;+ *width: 23.351063829787233%;+}++.row-fluid .span2 {+ width: 14.893617021276595%;+ *width: 14.840425531914894%;+}++.row-fluid .span1 {+ width: 6.382978723404255%;+ *width: 6.329787234042553%;+}++.row-fluid .offset12 {+ margin-left: 104.25531914893617%;+ *margin-left: 104.14893617021275%;+}++.row-fluid .offset12:first-child {+ margin-left: 102.12765957446808%;+ *margin-left: 102.02127659574467%;+}++.row-fluid .offset11 {+ margin-left: 95.74468085106382%;+ *margin-left: 95.6382978723404%;+}++.row-fluid .offset11:first-child {+ margin-left: 93.61702127659574%;+ *margin-left: 93.51063829787232%;+}++.row-fluid .offset10 {+ margin-left: 87.23404255319149%;+ *margin-left: 87.12765957446807%;+}++.row-fluid .offset10:first-child {+ margin-left: 85.1063829787234%;+ *margin-left: 84.99999999999999%;+}++.row-fluid .offset9 {+ margin-left: 78.72340425531914%;+ *margin-left: 78.61702127659572%;+}++.row-fluid .offset9:first-child {+ margin-left: 76.59574468085106%;+ *margin-left: 76.48936170212764%;+}++.row-fluid .offset8 {+ margin-left: 70.2127659574468%;+ *margin-left: 70.10638297872339%;+}++.row-fluid .offset8:first-child {+ margin-left: 68.08510638297872%;+ *margin-left: 67.9787234042553%;+}++.row-fluid .offset7 {+ margin-left: 61.70212765957446%;+ *margin-left: 61.59574468085106%;+}++.row-fluid .offset7:first-child {+ margin-left: 59.574468085106375%;+ *margin-left: 59.46808510638297%;+}++.row-fluid .offset6 {+ margin-left: 53.191489361702125%;+ *margin-left: 53.085106382978715%;+}++.row-fluid .offset6:first-child {+ margin-left: 51.063829787234035%;+ *margin-left: 50.95744680851063%;+}++.row-fluid .offset5 {+ margin-left: 44.68085106382979%;+ *margin-left: 44.57446808510638%;+}++.row-fluid .offset5:first-child {+ margin-left: 42.5531914893617%;+ *margin-left: 42.4468085106383%;+}++.row-fluid .offset4 {+ margin-left: 36.170212765957444%;+ *margin-left: 36.06382978723405%;+}++.row-fluid .offset4:first-child {+ margin-left: 34.04255319148936%;+ *margin-left: 33.93617021276596%;+}++.row-fluid .offset3 {+ margin-left: 27.659574468085104%;+ *margin-left: 27.5531914893617%;+}++.row-fluid .offset3:first-child {+ margin-left: 25.53191489361702%;+ *margin-left: 25.425531914893618%;+}++.row-fluid .offset2 {+ margin-left: 19.148936170212764%;+ *margin-left: 19.04255319148936%;+}++.row-fluid .offset2:first-child {+ margin-left: 17.02127659574468%;+ *margin-left: 16.914893617021278%;+}++.row-fluid .offset1 {+ margin-left: 10.638297872340425%;+ *margin-left: 10.53191489361702%;+}++.row-fluid .offset1:first-child {+ margin-left: 8.51063829787234%;+ *margin-left: 8.404255319148938%;+}++[class*="span"].hide,+.row-fluid [class*="span"].hide {+ display: none;+}++[class*="span"].pull-right,+.row-fluid [class*="span"].pull-right {+ float: right;+}++.container {+ margin-right: auto;+ margin-left: auto;+ *zoom: 1;+}++.container:before,+.container:after {+ display: table;+ line-height: 0;+ content: "";+}++.container:after {+ clear: both;+}++.container-fluid {+ padding-right: 20px;+ padding-left: 20px;+ *zoom: 1;+}++.container-fluid:before,+.container-fluid:after {+ display: table;+ line-height: 0;+ content: "";+}++.container-fluid:after {+ clear: both;+}++p {+ margin: 0 0 10px;+}++.lead {+ margin-bottom: 20px;+ font-size: 21px;+ font-weight: 200;+ line-height: 30px;+}++small {+ font-size: 85%;+}++strong {+ font-weight: bold;+}++em {+ font-style: italic;+}++cite {+ font-style: normal;+}++.muted {+ color: #999999;+}++.text-warning {+ color: #c09853;+}++.text-error {+ color: #b94a48;+}++.text-info {+ color: #3a87ad;+}++.text-success {+ color: #468847;+}++h1,+h2,+h3,+h4,+h5,+h6 {+ margin: 10px 0;+ font-family: inherit;+ font-weight: bold;+ line-height: 1;+ color: inherit;+ text-rendering: optimizelegibility;+}++h1 small,+h2 small,+h3 small,+h4 small,+h5 small,+h6 small {+ font-weight: normal;+ line-height: 1;+ color: #999999;+}++h1 {+ font-size: 36px;+ line-height: 40px;+}++h2 {+ font-size: 30px;+ line-height: 40px;+}++h3 {+ font-size: 24px;+ line-height: 40px;+}++h4 {+ font-size: 18px;+ line-height: 20px;+}++h5 {+ font-size: 14px;+ line-height: 20px;+}++h6 {+ font-size: 12px;+ line-height: 20px;+}++h1 small {+ font-size: 24px;+}++h2 small {+ font-size: 18px;+}++h3 small {+ font-size: 14px;+}++h4 small {+ font-size: 14px;+}++.page-header {+ padding-bottom: 9px;+ margin: 20px 0 30px;+ border-bottom: 1px solid #eeeeee;+}++ul,+ol {+ padding: 0;+ margin: 0 0 10px 25px;+}++ul ul,+ul ol,+ol ol,+ol ul {+ margin-bottom: 0;+}++li {+ line-height: 20px;+}++ul.unstyled,+ol.unstyled {+ margin-left: 0;+ list-style: none;+}++dl {+ margin-bottom: 20px;+}++dt,+dd {+ line-height: 20px;+}++dt {+ font-weight: bold;+}++dd {+ margin-left: 10px;+}++.dl-horizontal {+ *zoom: 1;+}++.dl-horizontal:before,+.dl-horizontal:after {+ display: table;+ line-height: 0;+ content: "";+}++.dl-horizontal:after {+ clear: both;+}++.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;+}++hr {+ margin: 20px 0;+ border: 0;+ border-top: 1px solid #eeeeee;+ border-bottom: 1px solid #ffffff;+}++abbr[title] {+ cursor: help;+ border-bottom: 1px dotted #999999;+}++abbr.initialism {+ font-size: 90%;+ text-transform: uppercase;+}++blockquote {+ padding: 0 0 0 15px;+ margin: 0 0 20px;+ border-left: 5px solid #eeeeee;+}++blockquote p {+ margin-bottom: 0;+ font-size: 16px;+ font-weight: 300;+ line-height: 25px;+}++blockquote small {+ display: block;+ line-height: 20px;+ color: #999999;+}++blockquote small:before {+ content: '\2014 \00A0';+}++blockquote.pull-right {+ float: right;+ padding-right: 15px;+ padding-left: 0;+ border-right: 5px solid #eeeeee;+ border-left: 0;+}++blockquote.pull-right p,+blockquote.pull-right small {+ text-align: right;+}++blockquote.pull-right small:before {+ content: '';+}++blockquote.pull-right small:after {+ content: '\00A0 \2014';+}++q:before,+q:after,+blockquote:before,+blockquote:after {+ content: "";+}++address {+ display: block;+ margin-bottom: 20px;+ font-style: normal;+ line-height: 20px;+}++code,+pre {+ padding: 0 3px 2px;+ font-family: Monaco, Menlo, Consolas, "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: 9.5px;+ margin: 0 0 10px;+ font-size: 13px;+ line-height: 20px;+ word-break: break-all;+ word-wrap: break-word;+ white-space: pre;+ white-space: pre-wrap;+ 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;+}++pre.prettyprint {+ margin-bottom: 20px;+}++pre code {+ padding: 0;+ color: inherit;+ background-color: transparent;+ border: 0;+}++.pre-scrollable {+ max-height: 340px;+ overflow-y: scroll;+}++form {+ margin: 0 0 20px;+}++fieldset {+ padding: 0;+ margin: 0;+ border: 0;+}++legend {+ display: block;+ width: 100%;+ padding: 0;+ margin-bottom: 20px;+ font-size: 21px;+ line-height: 40px;+ color: #333333;+ border: 0;+ border-bottom: 1px solid #e5e5e5;+}++legend small {+ font-size: 15px;+ color: #999999;+}++label,+input,+button,+select,+textarea {+ font-size: 14px;+ font-weight: normal;+ line-height: 20px;+}++input,+button,+select,+textarea {+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;+}++label {+ display: block;+ margin-bottom: 5px;+}++select,+textarea,+input[type="text"],+input[type="password"],+input[type="datetime"],+input[type="datetime-local"],+input[type="date"],+input[type="month"],+input[type="time"],+input[type="week"],+input[type="number"],+input[type="email"],+input[type="url"],+input[type="search"],+input[type="tel"],+input[type="color"],+.uneditable-input {+ display: inline-block;+ height: 20px;+ padding: 4px 6px;+ margin-bottom: 9px;+ font-size: 14px;+ line-height: 20px;+ color: #555555;+ -webkit-border-radius: 3px;+ -moz-border-radius: 3px;+ border-radius: 3px;+}++input,+textarea,+.uneditable-input {+ width: 206px;+}++textarea {+ height: auto;+}++textarea,+input[type="text"],+input[type="password"],+input[type="datetime"],+input[type="datetime-local"],+input[type="date"],+input[type="month"],+input[type="time"],+input[type="week"],+input[type="number"],+input[type="email"],+input[type="url"],+input[type="search"],+input[type="tel"],+input[type="color"],+.uneditable-input {+ background-color: #ffffff;+ border: 1px solid #cccccc;+ -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;+ -o-transition: border linear 0.2s, box-shadow linear 0.2s;+ transition: border linear 0.2s, box-shadow linear 0.2s;+}++textarea:focus,+input[type="text"]:focus,+input[type="password"]:focus,+input[type="datetime"]:focus,+input[type="datetime-local"]:focus,+input[type="date"]:focus,+input[type="month"]:focus,+input[type="time"]:focus,+input[type="week"]:focus,+input[type="number"]:focus,+input[type="email"]:focus,+input[type="url"]:focus,+input[type="search"]:focus,+input[type="tel"]:focus,+input[type="color"]:focus,+.uneditable-input:focus {+ border-color: rgba(82, 168, 236, 0.8);+ outline: 0;+ outline: thin dotted \9;+ /* IE6-9 */++ -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);+}++input[type="radio"],+input[type="checkbox"] {+ margin: 4px 0 0;+ margin-top: 1px \9;+ *margin-top: 0;+ line-height: normal;+ cursor: pointer;+}++input[type="file"],+input[type="image"],+input[type="submit"],+input[type="reset"],+input[type="button"],+input[type="radio"],+input[type="checkbox"] {+ width: auto;+}++select,+input[type="file"] {+ height: 30px;+ /* 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: 30px;+}++select {+ width: 220px;+ background-color: #ffffff;+ border: 1px solid #cccccc;+}++select[multiple],+select[size] {+ height: auto;+}++select:focus,+input[type="file"]:focus,+input[type="radio"]:focus,+input[type="checkbox"]:focus {+ outline: thin dotted #333;+ outline: 5px auto -webkit-focus-ring-color;+ outline-offset: -2px;+}++.uneditable-input,+.uneditable-textarea {+ color: #999999;+ cursor: not-allowed;+ background-color: #fcfcfc;+ border-color: #cccccc;+ -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);+}++.uneditable-input {+ overflow: hidden;+ white-space: nowrap;+}++.uneditable-textarea {+ width: auto;+ height: auto;+}++input:-moz-placeholder,+textarea:-moz-placeholder {+ color: #999999;+}++input:-ms-input-placeholder,+textarea:-ms-input-placeholder {+ color: #999999;+}++input::-webkit-input-placeholder,+textarea::-webkit-input-placeholder {+ color: #999999;+}++.radio,+.checkbox {+ min-height: 18px;+ 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-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[class*="span"],+.row-fluid input[class*="span"],+.row-fluid select[class*="span"],+.row-fluid textarea[class*="span"],+.row-fluid .uneditable-input[class*="span"] {+ float: none;+ margin-left: 0;+}++.input-append input[class*="span"],+.input-append .uneditable-input[class*="span"],+.input-prepend input[class*="span"],+.input-prepend .uneditable-input[class*="span"],+.row-fluid input[class*="span"],+.row-fluid select[class*="span"],+.row-fluid textarea[class*="span"],+.row-fluid .uneditable-input[class*="span"],+.row-fluid .input-prepend [class*="span"],+.row-fluid .input-append [class*="span"] {+ display: inline-block;+}++input,+textarea,+.uneditable-input {+ margin-left: 0;+}++.controls-row [class*="span"] + [class*="span"] {+ margin-left: 20px;+}++input.span12,+textarea.span12,+.uneditable-input.span12 {+ width: 926px;+}++input.span11,+textarea.span11,+.uneditable-input.span11 {+ width: 846px;+}++input.span10,+textarea.span10,+.uneditable-input.span10 {+ width: 766px;+}++input.span9,+textarea.span9,+.uneditable-input.span9 {+ width: 686px;+}++input.span8,+textarea.span8,+.uneditable-input.span8 {+ width: 606px;+}++input.span7,+textarea.span7,+.uneditable-input.span7 {+ width: 526px;+}++input.span6,+textarea.span6,+.uneditable-input.span6 {+ width: 446px;+}++input.span5,+textarea.span5,+.uneditable-input.span5 {+ width: 366px;+}++input.span4,+textarea.span4,+.uneditable-input.span4 {+ width: 286px;+}++input.span3,+textarea.span3,+.uneditable-input.span3 {+ width: 206px;+}++input.span2,+textarea.span2,+.uneditable-input.span2 {+ width: 126px;+}++input.span1,+textarea.span1,+.uneditable-input.span1 {+ width: 46px;+}++.controls-row {+ *zoom: 1;+}++.controls-row:before,+.controls-row:after {+ display: table;+ line-height: 0;+ content: "";+}++.controls-row:after {+ clear: both;+}++.controls-row [class*="span"] {+ float: left;+}++input[disabled],+select[disabled],+textarea[disabled],+input[readonly],+select[readonly],+textarea[readonly] {+ cursor: not-allowed;+ background-color: #eeeeee;+}++input[type="radio"][disabled],+input[type="checkbox"][disabled],+input[type="radio"][readonly],+input[type="checkbox"][readonly] {+ background-color: transparent;+}++.control-group.warning > label,+.control-group.warning .help-block,+.control-group.warning .help-inline {+ color: #c09853;+}++.control-group.warning .checkbox,+.control-group.warning .radio,+.control-group.warning input,+.control-group.warning select,+.control-group.warning textarea {+ color: #c09853;+}++.control-group.warning input,+.control-group.warning select,+.control-group.warning textarea {+ border-color: #c09853;+ -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);+}++.control-group.warning input:focus,+.control-group.warning select:focus,+.control-group.warning textarea:focus {+ border-color: #a47e3c;+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e;+ -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e;+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 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 .checkbox,+.control-group.error .radio,+.control-group.error input,+.control-group.error select,+.control-group.error textarea {+ color: #b94a48;+}++.control-group.error input,+.control-group.error select,+.control-group.error textarea {+ border-color: #b94a48;+ -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);+}++.control-group.error input:focus,+.control-group.error select:focus,+.control-group.error textarea:focus {+ border-color: #953b39;+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392;+ -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392;+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 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 .checkbox,+.control-group.success .radio,+.control-group.success input,+.control-group.success select,+.control-group.success textarea {+ color: #468847;+}++.control-group.success input,+.control-group.success select,+.control-group.success textarea {+ border-color: #468847;+ -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);+}++.control-group.success input:focus,+.control-group.success select:focus,+.control-group.success textarea:focus {+ border-color: #356635;+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b;+ -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b;+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 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;+}++.control-group.info > label,+.control-group.info .help-block,+.control-group.info .help-inline {+ color: #3a87ad;+}++.control-group.info .checkbox,+.control-group.info .radio,+.control-group.info input,+.control-group.info select,+.control-group.info textarea {+ color: #3a87ad;+}++.control-group.info input,+.control-group.info select,+.control-group.info textarea {+ border-color: #3a87ad;+ -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);+}++.control-group.info input:focus,+.control-group.info select:focus,+.control-group.info textarea:focus {+ border-color: #2d6987;+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3;+ -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3;+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3;+}++.control-group.info .input-prepend .add-on,+.control-group.info .input-append .add-on {+ color: #3a87ad;+ background-color: #d9edf7;+ border-color: #3a87ad;+}++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: 19px 20px 20px;+ margin-top: 20px;+ margin-bottom: 20px;+ background-color: #f5f5f5;+ border-top: 1px solid #e5e5e5;+ *zoom: 1;+}++.form-actions:before,+.form-actions:after {+ display: table;+ line-height: 0;+ content: "";+}++.form-actions:after {+ clear: both;+}++.help-block,+.help-inline {+ color: #595959;+}++.help-block {+ display: block;+ margin-bottom: 10px;+}++.help-inline {+ display: inline-block;+ *display: inline;+ padding-left: 5px;+ vertical-align: middle;+ *zoom: 1;+}++.input-append,+.input-prepend {+ margin-bottom: 5px;+ font-size: 0;+ white-space: nowrap;+}++.input-append input,+.input-prepend input,+.input-append select,+.input-prepend select,+.input-append .uneditable-input,+.input-prepend .uneditable-input {+ position: relative;+ margin-bottom: 0;+ *margin-left: 0;+ font-size: 14px;+ vertical-align: top;+ -webkit-border-radius: 0 3px 3px 0;+ -moz-border-radius: 0 3px 3px 0;+ border-radius: 0 3px 3px 0;+}++.input-append input:focus,+.input-prepend input:focus,+.input-append select:focus,+.input-prepend select:focus,+.input-append .uneditable-input:focus,+.input-prepend .uneditable-input:focus {+ z-index: 2;+}++.input-append .add-on,+.input-prepend .add-on {+ display: inline-block;+ width: auto;+ height: 20px;+ min-width: 16px;+ padding: 4px 5px;+ font-size: 14px;+ font-weight: normal;+ line-height: 20px;+ text-align: center;+ text-shadow: 0 1px 0 #ffffff;+ background-color: #eeeeee;+ border: 1px solid #ccc;+}++.input-append .add-on,+.input-prepend .add-on,+.input-append .btn,+.input-prepend .btn {+ vertical-align: top;+ -webkit-border-radius: 0;+ -moz-border-radius: 0;+ border-radius: 0;+}++.input-append .active,+.input-prepend .active {+ background-color: #a9dba9;+ border-color: #46a546;+}++.input-prepend .add-on,+.input-prepend .btn {+ margin-right: -1px;+}++.input-prepend .add-on:first-child,+.input-prepend .btn:first-child {+ -webkit-border-radius: 3px 0 0 3px;+ -moz-border-radius: 3px 0 0 3px;+ border-radius: 3px 0 0 3px;+}++.input-append input,+.input-append select,+.input-append .uneditable-input {+ -webkit-border-radius: 3px 0 0 3px;+ -moz-border-radius: 3px 0 0 3px;+ border-radius: 3px 0 0 3px;+}++.input-append .add-on,+.input-append .btn {+ margin-left: -1px;+}++.input-append .add-on:last-child,+.input-append .btn:last-child {+ -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;+}++input.search-query {+ padding-right: 14px;+ padding-right: 4px \9;+ padding-left: 14px;+ padding-left: 4px \9;+ /* IE7-8 doesn't have border-radius, so don't indent the padding */++ margin-bottom: 0;+ -webkit-border-radius: 15px;+ -moz-border-radius: 15px;+ border-radius: 15px;+}++/* Allow for input prepend/append in search forms */++.form-search .input-append .search-query,+.form-search .input-prepend .search-query {+ -webkit-border-radius: 0;+ -moz-border-radius: 0;+ border-radius: 0;+}++.form-search .input-append .search-query {+ -webkit-border-radius: 14px 0 0 14px;+ -moz-border-radius: 14px 0 0 14px;+ border-radius: 14px 0 0 14px;+}++.form-search .input-append .btn {+ -webkit-border-radius: 0 14px 14px 0;+ -moz-border-radius: 0 14px 14px 0;+ border-radius: 0 14px 14px 0;+}++.form-search .input-prepend .search-query {+ -webkit-border-radius: 0 14px 14px 0;+ -moz-border-radius: 0 14px 14px 0;+ border-radius: 0 14px 14px 0;+}++.form-search .input-prepend .btn {+ -webkit-border-radius: 14px 0 0 14px;+ -moz-border-radius: 14px 0 0 14px;+ border-radius: 14px 0 0 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;+ *display: inline;+ margin-bottom: 0;+ vertical-align: middle;+ *zoom: 1;+}++.form-search .hide,+.form-inline .hide,+.form-horizontal .hide {+ display: none;+}++.form-search label,+.form-inline label,+.form-search .btn-group,+.form-inline .btn-group {+ 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-right: 3px;+ margin-left: 0;+}++.control-group {+ margin-bottom: 10px;+}++legend + .control-group {+ margin-top: 20px;+ -webkit-margin-top-collapse: separate;+}++.form-horizontal .control-group {+ margin-bottom: 20px;+ *zoom: 1;+}++.form-horizontal .control-group:before,+.form-horizontal .control-group:after {+ display: table;+ line-height: 0;+ content: "";+}++.form-horizontal .control-group:after {+ clear: both;+}++.form-horizontal .control-label {+ float: left;+ width: 160px;+ padding-top: 5px;+ text-align: right;+}++.form-horizontal .controls {+ *display: inline-block;+ *padding-left: 20px;+ margin-left: 180px;+ *margin-left: 0;+}++.form-horizontal .controls:first-child {+ *padding-left: 180px;+}++.form-horizontal .help-block {+ margin-bottom: 0;+}++.form-horizontal input + .help-block,+.form-horizontal select + .help-block,+.form-horizontal textarea + .help-block {+ margin-top: 10px;+}++.form-horizontal .form-actions {+ padding-left: 180px;+}++table {+ max-width: 100%;+ background-color: transparent;+ border-collapse: collapse;+ border-spacing: 0;+}++.table {+ width: 100%;+ margin-bottom: 20px;+}++.table th,+.table td {+ padding: 8px;+ line-height: 20px;+ text-align: left;+ vertical-align: top;+ border-top: 1px solid #dddddd;+}++.table th {+ font-weight: bold;+}++.table thead th {+ vertical-align: bottom;+}++.table caption + thead tr:first-child th,+.table caption + thead tr:first-child td,+.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-collapse: separate;+ *border-collapse: collapse;+ border-left: 0;+ -webkit-border-radius: 4px;+ -moz-border-radius: 4px;+ border-radius: 4px;+}++.table-bordered th,+.table-bordered td {+ border-left: 1px solid #dddddd;+}++.table-bordered caption + thead tr:first-child th,+.table-bordered caption + tbody tr:first-child th,+.table-bordered caption + tbody tr:first-child td,+.table-bordered colgroup + thead tr:first-child th,+.table-bordered colgroup + tbody tr:first-child th,+.table-bordered colgroup + tbody tr:first-child td,+.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-top-left-radius: 4px;+ border-top-left-radius: 4px;+ -moz-border-radius-topleft: 4px;+}++.table-bordered thead:first-child tr:first-child th:last-child,+.table-bordered tbody:first-child tr:first-child td:last-child {+ -webkit-border-top-right-radius: 4px;+ border-top-right-radius: 4px;+ -moz-border-radius-topright: 4px;+}++.table-bordered thead:last-child tr:last-child th:first-child,+.table-bordered tbody:last-child tr:last-child td:first-child,+.table-bordered tfoot: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;+ -webkit-border-bottom-left-radius: 4px;+ border-bottom-left-radius: 4px;+ -moz-border-radius-bottomleft: 4px;+}++.table-bordered thead:last-child tr:last-child th:last-child,+.table-bordered tbody:last-child tr:last-child td:last-child,+.table-bordered tfoot:last-child tr:last-child td:last-child {+ -webkit-border-bottom-right-radius: 4px;+ border-bottom-right-radius: 4px;+ -moz-border-radius-bottomright: 4px;+}++.table-bordered caption + thead tr:first-child th:first-child,+.table-bordered caption + tbody tr:first-child td:first-child,+.table-bordered colgroup + thead tr:first-child th:first-child,+.table-bordered colgroup + tbody tr:first-child td:first-child {+ -webkit-border-top-left-radius: 4px;+ border-top-left-radius: 4px;+ -moz-border-radius-topleft: 4px;+}++.table-bordered caption + thead tr:first-child th:last-child,+.table-bordered caption + tbody tr:first-child td:last-child,+.table-bordered colgroup + thead tr:first-child th:last-child,+.table-bordered colgroup + tbody tr:first-child td:last-child {+ -webkit-border-top-right-radius: 4px;+ border-top-right-radius: 4px;+ -moz-border-radius-topleft: 4px;+}++.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 [class*=span],+.row-fluid table [class*=span] {+ display: table-cell;+ float: none;+ margin-left: 0;+}++.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;+}++.table tbody tr.success td {+ background-color: #dff0d8;+}++.table tbody tr.error td {+ background-color: #f2dede;+}++.table tbody tr.warning td {+ background-color: #fcf8e3;+}++.table tbody tr.info td {+ background-color: #d9edf7;+}++.table-hover tbody tr.success:hover td {+ background-color: #d0e9c6;+}++.table-hover tbody tr.error:hover td {+ background-color: #ebcccc;+}++.table-hover tbody tr.warning:hover td {+ background-color: #faf2cc;+}++.table-hover tbody tr.info:hover td {+ background-color: #c4e3f3;+}++[class^="icon-"],+[class*=" icon-"] {+ display: inline-block;+ width: 14px;+ height: 14px;+ margin-top: 1px;+ *margin-right: .3em;+ line-height: 14px;+ vertical-align: text-top;+ background-image: url("../img/glyphicons-halflings.png");+ background-position: 14px 14px;+ background-repeat: no-repeat;+}++/* White icons with optional class, or on hover/active states of certain elements */++.icon-white,+.nav-tabs > .active > a > [class^="icon-"],+.nav-tabs > .active > a > [class*=" icon-"],+.nav-pills > .active > a > [class^="icon-"],+.nav-pills > .active > a > [class*=" icon-"],+.nav-list > .active > a > [class^="icon-"],+.nav-list > .active > a > [class*=" icon-"],+.navbar-inverse .nav > .active > a > [class^="icon-"],+.navbar-inverse .nav > .active > a > [class*=" icon-"],+.dropdown-menu > li > a:hover > [class^="icon-"],+.dropdown-menu > li > a:hover > [class*=" icon-"],+.dropdown-menu > .active > a > [class^="icon-"],+.dropdown-menu > .active > a > [class*=" icon-"] {+ 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 {+ width: 16px;+ 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 {+ width: 16px;+ background-position: -408px -120px;+}++.icon-resize-vertical {+ background-position: -432px -119px;+}++.icon-resize-horizontal {+ background-position: -456px -118px;+}++.icon-hdd {+ background-position: 0 -144px;+}++.icon-bullhorn {+ background-position: -24px -144px;+}++.icon-bell {+ background-position: -48px -144px;+}++.icon-certificate {+ background-position: -72px -144px;+}++.icon-thumbs-up {+ background-position: -96px -144px;+}++.icon-thumbs-down {+ background-position: -120px -144px;+}++.icon-hand-right {+ background-position: -144px -144px;+}++.icon-hand-left {+ background-position: -168px -144px;+}++.icon-hand-up {+ background-position: -192px -144px;+}++.icon-hand-down {+ background-position: -216px -144px;+}++.icon-circle-arrow-right {+ background-position: -240px -144px;+}++.icon-circle-arrow-left {+ background-position: -264px -144px;+}++.icon-circle-arrow-up {+ background-position: -288px -144px;+}++.icon-circle-arrow-down {+ background-position: -312px -144px;+}++.icon-globe {+ background-position: -336px -144px;+}++.icon-wrench {+ background-position: -360px -144px;+}++.icon-tasks {+ background-position: -384px -144px;+}++.icon-filter {+ background-position: -408px -144px;+}++.icon-briefcase {+ background-position: -432px -144px;+}++.icon-fullscreen {+ background-position: -456px -144px;+}++.dropup,+.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-top: 4px solid #000000;+ border-right: 4px solid transparent;+ border-left: 4px solid transparent;+ content: "";+}++.dropdown .caret {+ margin-top: 8px;+ margin-left: 2px;+}++.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;+ list-style: none;+ background-color: #ffffff;+ border: 1px solid #ccc;+ border: 1px solid rgba(0, 0, 0, 0.2);+ *border-right-width: 2px;+ *border-bottom-width: 2px;+ -webkit-border-radius: 6px;+ -moz-border-radius: 6px;+ border-radius: 6px;+ -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;+}++.dropdown-menu.pull-right {+ right: 0;+ left: auto;+}++.dropdown-menu .divider {+ *width: 100%;+ height: 1px;+ margin: 9px 1px;+ *margin: -5px 0 5px;+ overflow: hidden;+ background-color: #e5e5e5;+ border-bottom: 1px solid #ffffff;+}++.dropdown-menu a {+ display: block;+ padding: 3px 20px;+ clear: both;+ font-weight: normal;+ line-height: 20px;+ color: #333333;+ white-space: nowrap;+}++.dropdown-menu li > a:hover,+.dropdown-menu li > a:focus,+.dropdown-submenu:hover > a {+ color: #ffffff;+ text-decoration: none;+ background-color: #0088cc;+ background-color: #0081c2;+ background-image: -moz-linear-gradient(top, #0088cc, #0077b3);+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3));+ background-image: -webkit-linear-gradient(top, #0088cc, #0077b3);+ background-image: -o-linear-gradient(top, #0088cc, #0077b3);+ background-image: linear-gradient(to bottom, #0088cc, #0077b3);+ background-repeat: repeat-x;+ filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0);+}++.dropdown-menu .active > a,+.dropdown-menu .active > a:hover {+ color: #ffffff;+ text-decoration: none;+ background-color: #0088cc;+ background-color: #0081c2;+ background-image: linear-gradient(to bottom, #0088cc, #0077b3);+ background-image: -moz-linear-gradient(top, #0088cc, #0077b3);+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3));+ background-image: -webkit-linear-gradient(top, #0088cc, #0077b3);+ background-image: -o-linear-gradient(top, #0088cc, #0077b3);+ background-repeat: repeat-x;+ outline: 0;+ filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0);+}++.dropdown-menu .disabled > a,+.dropdown-menu .disabled > a:hover {+ color: #999999;+}++.dropdown-menu .disabled > a:hover {+ text-decoration: none;+ cursor: default;+ background-color: transparent;+}++.open {+ *z-index: 1000;+}++.open > .dropdown-menu {+ display: block;+}++.pull-right > .dropdown-menu {+ right: 0;+ left: auto;+}++.dropup .caret,+.navbar-fixed-bottom .dropdown .caret {+ border-top: 0;+ border-bottom: 4px solid #000000;+ content: "";+}++.dropup .dropdown-menu,+.navbar-fixed-bottom .dropdown .dropdown-menu {+ top: auto;+ bottom: 100%;+ margin-bottom: 1px;+}++.dropdown-submenu {+ position: relative;+}++.dropdown-submenu > .dropdown-menu {+ top: 0;+ left: 100%;+ margin-top: -6px;+ margin-left: -1px;+ -webkit-border-radius: 0 6px 6px 6px;+ -moz-border-radius: 0 6px 6px 6px;+ border-radius: 0 6px 6px 6px;+}++.dropdown-submenu:hover > .dropdown-menu {+ display: block;+}++.dropdown-submenu > a:after {+ display: block;+ float: right;+ width: 0;+ height: 0;+ margin-top: 5px;+ margin-right: -10px;+ border-color: transparent;+ border-left-color: #cccccc;+ border-style: solid;+ border-width: 5px 0 5px 5px;+ content: " ";+}++.dropdown-submenu:hover > a:after {+ border-left-color: #ffffff;+}++.dropdown .dropdown-menu .nav-header {+ padding-right: 20px;+ padding-left: 20px;+}++.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 #e3e3e3;+ -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 {+ opacity: 0;+ -webkit-transition: opacity 0.15s linear;+ -moz-transition: opacity 0.15s linear;+ -o-transition: opacity 0.15s linear;+ transition: opacity 0.15s linear;+}++.fade.in {+ opacity: 1;+}++.collapse {+ position: relative;+ height: 0;+ overflow: hidden;+ -webkit-transition: height 0.35s ease;+ -moz-transition: height 0.35s ease;+ -o-transition: height 0.35s ease;+ transition: height 0.35s ease;+}++.collapse.in {+ height: auto;+}++.close {+ float: right;+ font-size: 20px;+ font-weight: bold;+ line-height: 20px;+ color: #000000;+ text-shadow: 0 1px 0 #ffffff;+ opacity: 0.2;+ filter: alpha(opacity=20);+}++.close:hover {+ color: #000000;+ text-decoration: none;+ cursor: pointer;+ opacity: 0.4;+ filter: alpha(opacity=40);+}++button.close {+ padding: 0;+ cursor: pointer;+ background: transparent;+ border: 0;+ -webkit-appearance: none;+}++.btn {+ display: inline-block;+ *display: inline;+ padding: 4px 14px;+ margin-bottom: 0;+ *margin-left: .3em;+ font-size: 14px;+ line-height: 20px;+ *line-height: 20px;+ color: #333333;+ text-align: center;+ text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);+ vertical-align: middle;+ cursor: pointer;+ background-color: #f5f5f5;+ *background-color: #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(to bottom, #ffffff, #e6e6e6);+ background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6);+ background-repeat: repeat-x;+ border: 1px solid #bbbbbb;+ *border: 0;+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);+ border-color: #e6e6e6 #e6e6e6 #bfbfbf;+ border-bottom-color: #a2a2a2;+ -webkit-border-radius: 4px;+ -moz-border-radius: 4px;+ border-radius: 4px;+ filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0);+ filter: progid:dximagetransform.microsoft.gradient(enabled=false);+ *zoom: 1;+ -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);+}++.btn:hover,+.btn:active,+.btn.active,+.btn.disabled,+.btn[disabled] {+ color: #333333;+ background-color: #e6e6e6;+ *background-color: #d9d9d9;+}++.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-color: #d9d9d9;+ /* Buttons in IE7 don't get borders, so darken on hover */++ background-position: 0 -15px;+ -webkit-transition: background-position 0.1s linear;+ -moz-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-color: #e6e6e6;+ background-color: #d9d9d9 \9;+ background-image: none;+ outline: 0;+ -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);+}++.btn.disabled,+.btn[disabled] {+ cursor: default;+ background-color: #e6e6e6;+ background-image: none;+ 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: 16px;+ line-height: normal;+ -webkit-border-radius: 5px;+ -moz-border-radius: 5px;+ border-radius: 5px;+}++.btn-large [class^="icon-"] {+ margin-top: 2px;+}++.btn-small {+ padding: 3px 9px;+ font-size: 12px;+ line-height: 18px;+}++.btn-small [class^="icon-"] {+ margin-top: 0;+}++.btn-mini {+ padding: 2px 6px;+ font-size: 11px;+ line-height: 17px;+}++.btn-block {+ display: block;+ width: 100%;+ padding-right: 0;+ padding-left: 0;+ -webkit-box-sizing: border-box;+ -moz-box-sizing: border-box;+ box-sizing: border-box;+}++.btn-block + .btn-block {+ margin-top: 5px;+}++input[type="submit"].btn-block,+input[type="reset"].btn-block,+input[type="button"].btn-block {+ width: 100%;+}++.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 {+ border-color: #c5c5c5;+ border-color: rgba(0, 0, 0, 0.15) rgba(0, 0, 0, 0.15) rgba(0, 0, 0, 0.25);+}++.btn-primary {+ color: #ffffff;+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);+ background-color: #006dcc;+ *background-color: #0044cc;+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));+ background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);+ background-image: -o-linear-gradient(top, #0088cc, #0044cc);+ background-image: linear-gradient(to bottom, #0088cc, #0044cc);+ background-image: -moz-linear-gradient(top, #0088cc, #0044cc);+ background-repeat: repeat-x;+ border-color: #0044cc #0044cc #002a80;+ 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(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0);+ filter: progid:dximagetransform.microsoft.gradient(enabled=false);+}++.btn-primary:hover,+.btn-primary:active,+.btn-primary.active,+.btn-primary.disabled,+.btn-primary[disabled] {+ color: #ffffff;+ background-color: #0044cc;+ *background-color: #003bb3;+}++.btn-primary:active,+.btn-primary.active {+ background-color: #003399 \9;+}++.btn-warning {+ color: #ffffff;+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);+ background-color: #faa732;+ *background-color: #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(to bottom, #fbb450, #f89406);+ background-image: -moz-linear-gradient(top, #fbb450, #f89406);+ background-repeat: repeat-x;+ 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(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0);+ filter: progid:dximagetransform.microsoft.gradient(enabled=false);+}++.btn-warning:hover,+.btn-warning:active,+.btn-warning.active,+.btn-warning.disabled,+.btn-warning[disabled] {+ color: #ffffff;+ background-color: #f89406;+ *background-color: #df8505;+}++.btn-warning:active,+.btn-warning.active {+ background-color: #c67605 \9;+}++.btn-danger {+ color: #ffffff;+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);+ background-color: #da4f49;+ *background-color: #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(to bottom, #ee5f5b, #bd362f);+ background-image: -moz-linear-gradient(top, #ee5f5b, #bd362f);+ background-repeat: repeat-x;+ 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(startColorstr='#ffee5f5b', endColorstr='#ffbd362f', GradientType=0);+ filter: progid:dximagetransform.microsoft.gradient(enabled=false);+}++.btn-danger:hover,+.btn-danger:active,+.btn-danger.active,+.btn-danger.disabled,+.btn-danger[disabled] {+ color: #ffffff;+ background-color: #bd362f;+ *background-color: #a9302a;+}++.btn-danger:active,+.btn-danger.active {+ background-color: #942a25 \9;+}++.btn-success {+ color: #ffffff;+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);+ background-color: #5bb75b;+ *background-color: #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(to bottom, #62c462, #51a351);+ background-image: -moz-linear-gradient(top, #62c462, #51a351);+ background-repeat: repeat-x;+ 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(startColorstr='#ff62c462', endColorstr='#ff51a351', GradientType=0);+ filter: progid:dximagetransform.microsoft.gradient(enabled=false);+}++.btn-success:hover,+.btn-success:active,+.btn-success.active,+.btn-success.disabled,+.btn-success[disabled] {+ color: #ffffff;+ background-color: #51a351;+ *background-color: #499249;+}++.btn-success:active,+.btn-success.active {+ background-color: #408140 \9;+}++.btn-info {+ color: #ffffff;+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);+ background-color: #49afcd;+ *background-color: #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(to bottom, #5bc0de, #2f96b4);+ background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4);+ background-repeat: repeat-x;+ 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(startColorstr='#ff5bc0de', endColorstr='#ff2f96b4', GradientType=0);+ filter: progid:dximagetransform.microsoft.gradient(enabled=false);+}++.btn-info:hover,+.btn-info:active,+.btn-info.active,+.btn-info.disabled,+.btn-info[disabled] {+ color: #ffffff;+ background-color: #2f96b4;+ *background-color: #2a85a0;+}++.btn-info:active,+.btn-info.active {+ background-color: #24748c \9;+}++.btn-inverse {+ color: #ffffff;+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);+ background-color: #363636;+ *background-color: #222222;+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#444444), to(#222222));+ background-image: -webkit-linear-gradient(top, #444444, #222222);+ background-image: -o-linear-gradient(top, #444444, #222222);+ background-image: linear-gradient(to bottom, #444444, #222222);+ background-image: -moz-linear-gradient(top, #444444, #222222);+ background-repeat: repeat-x;+ 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(startColorstr='#ff444444', endColorstr='#ff222222', GradientType=0);+ filter: progid:dximagetransform.microsoft.gradient(enabled=false);+}++.btn-inverse:hover,+.btn-inverse:active,+.btn-inverse.active,+.btn-inverse.disabled,+.btn-inverse[disabled] {+ color: #ffffff;+ background-color: #222222;+ *background-color: #151515;+}++.btn-inverse:active,+.btn-inverse.active {+ background-color: #080808 \9;+}++button.btn,+input[type="submit"].btn {+ *padding-top: 3px;+ *padding-bottom: 3px;+}++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-link,+.btn-link:active,+.btn-link[disabled] {+ background-color: transparent;+ background-image: none;+ -webkit-box-shadow: none;+ -moz-box-shadow: none;+ box-shadow: none;+}++.btn-link {+ color: #0088cc;+ cursor: pointer;+ border-color: transparent;+ -webkit-border-radius: 0;+ -moz-border-radius: 0;+ border-radius: 0;+}++.btn-link:hover {+ color: #005580;+ text-decoration: underline;+ background-color: transparent;+}++.btn-link[disabled]:hover {+ color: #333333;+ text-decoration: none;+}++.btn-group {+ position: relative;+ *margin-left: .3em;+ font-size: 0;+ white-space: nowrap;+ vertical-align: middle;+}++.btn-group:first-child {+ *margin-left: 0;+}++.btn-group + .btn-group {+ margin-left: 5px;+}++.btn-toolbar {+ margin-top: 10px;+ margin-bottom: 10px;+ font-size: 0;+}++.btn-toolbar .btn-group {+ display: inline-block;+ *display: inline;+ /* IE7 inline-block hack */++ *zoom: 1;+}++.btn-toolbar .btn + .btn,+.btn-toolbar .btn-group + .btn,+.btn-toolbar .btn + .btn-group {+ margin-left: 5px;+}++.btn-group > .btn {+ position: relative;+ -webkit-border-radius: 0;+ -moz-border-radius: 0;+ border-radius: 0;+}++.btn-group > .btn + .btn {+ margin-left: -1px;+}++.btn-group > .btn,+.btn-group > .dropdown-menu {+ font-size: 14px;+}++.btn-group > .btn-mini {+ font-size: 11px;+}++.btn-group > .btn-small {+ font-size: 12px;+}++.btn-group > .btn-large {+ font-size: 16px;+}++.btn-group > .btn:first-child {+ margin-left: 0;+ -webkit-border-bottom-left-radius: 4px;+ border-bottom-left-radius: 4px;+ -webkit-border-top-left-radius: 4px;+ border-top-left-radius: 4px;+ -moz-border-radius-bottomleft: 4px;+ -moz-border-radius-topleft: 4px;+}++.btn-group > .btn:last-child,+.btn-group > .dropdown-toggle {+ -webkit-border-top-right-radius: 4px;+ border-top-right-radius: 4px;+ -webkit-border-bottom-right-radius: 4px;+ border-bottom-right-radius: 4px;+ -moz-border-radius-topright: 4px;+ -moz-border-radius-bottomright: 4px;+}++.btn-group > .btn.large:first-child {+ margin-left: 0;+ -webkit-border-bottom-left-radius: 6px;+ border-bottom-left-radius: 6px;+ -webkit-border-top-left-radius: 6px;+ border-top-left-radius: 6px;+ -moz-border-radius-bottomleft: 6px;+ -moz-border-radius-topleft: 6px;+}++.btn-group > .btn.large:last-child,+.btn-group > .large.dropdown-toggle {+ -webkit-border-top-right-radius: 6px;+ border-top-right-radius: 6px;+ -webkit-border-bottom-right-radius: 6px;+ border-bottom-right-radius: 6px;+ -moz-border-radius-topright: 6px;+ -moz-border-radius-bottomright: 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 > .btn + .dropdown-toggle {+ *padding-top: 5px;+ padding-right: 8px;+ *padding-bottom: 5px;+ padding-left: 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);+}++.btn-group > .btn-mini + .dropdown-toggle {+ *padding-top: 2px;+ padding-right: 5px;+ *padding-bottom: 2px;+ padding-left: 5px;+}++.btn-group > .btn-small + .dropdown-toggle {+ *padding-top: 5px;+ *padding-bottom: 4px;+}++.btn-group > .btn-large + .dropdown-toggle {+ *padding-top: 7px;+ padding-right: 12px;+ *padding-bottom: 7px;+ padding-left: 12px;+}++.btn-group.open .dropdown-toggle {+ 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);+}++.btn-group.open .btn.dropdown-toggle {+ background-color: #e6e6e6;+}++.btn-group.open .btn-primary.dropdown-toggle {+ background-color: #0044cc;+}++.btn-group.open .btn-warning.dropdown-toggle {+ background-color: #f89406;+}++.btn-group.open .btn-danger.dropdown-toggle {+ background-color: #bd362f;+}++.btn-group.open .btn-success.dropdown-toggle {+ background-color: #51a351;+}++.btn-group.open .btn-info.dropdown-toggle {+ background-color: #2f96b4;+}++.btn-group.open .btn-inverse.dropdown-toggle {+ background-color: #222222;+}++.btn .caret {+ margin-top: 8px;+ margin-left: 0;+}++.btn-mini .caret,+.btn-small .caret,+.btn-large .caret {+ margin-top: 6px;+}++.btn-large .caret {+ border-top-width: 5px;+ border-right-width: 5px;+ border-left-width: 5px;+}++.dropup .btn-large .caret {+ border-top: 0;+ border-bottom: 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;+}++.btn-group-vertical {+ display: inline-block;+ *display: inline;+ /* IE7 inline-block hack */++ *zoom: 1;+}++.btn-group-vertical .btn {+ display: block;+ float: none;+ width: 100%;+ -webkit-border-radius: 0;+ -moz-border-radius: 0;+ border-radius: 0;+}++.btn-group-vertical .btn + .btn {+ margin-top: -1px;+ margin-left: 0;+}++.btn-group-vertical .btn:first-child {+ -webkit-border-radius: 4px 4px 0 0;+ -moz-border-radius: 4px 4px 0 0;+ border-radius: 4px 4px 0 0;+}++.btn-group-vertical .btn:last-child {+ -webkit-border-radius: 0 0 4px 4px;+ -moz-border-radius: 0 0 4px 4px;+ border-radius: 0 0 4px 4px;+}++.btn-group-vertical .btn-large:first-child {+ -webkit-border-radius: 6px 6px 0 0;+ -moz-border-radius: 6px 6px 0 0;+ border-radius: 6px 6px 0 0;+}++.btn-group-vertical .btn-large:last-child {+ -webkit-border-radius: 0 0 6px 6px;+ -moz-border-radius: 0 0 6px 6px;+ border-radius: 0 0 6px 6px;+}++.alert {+ padding: 8px 35px 8px 14px;+ margin-bottom: 20px;+ color: #c09853;+ 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;+}++.alert h4 {+ margin: 0;+}++.alert .close {+ position: relative;+ top: -2px;+ right: -21px;+ line-height: 20px;+}++.alert-success {+ color: #468847;+ background-color: #dff0d8;+ border-color: #d6e9c6;+}++.alert-danger,+.alert-error {+ color: #b94a48;+ background-color: #f2dede;+ border-color: #eed3d7;+}++.alert-info {+ color: #3a87ad;+ background-color: #d9edf7;+ border-color: #bce8f1;+}++.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-bottom: 20px;+ margin-left: 0;+ list-style: none;+}++.nav > li > a {+ display: block;+}++.nav > li > a:hover {+ text-decoration: none;+ background-color: #eeeeee;+}++.nav > .pull-right {+ float: right;+}++.nav-header {+ display: block;+ padding: 3px 15px;+ font-size: 11px;+ font-weight: bold;+ line-height: 20px;+ 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-right: 15px;+ padding-left: 15px;+ margin-bottom: 0;+}++.nav-list > li > a,+.nav-list .nav-header {+ margin-right: -15px;+ margin-left: -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 {+ *width: 100%;+ height: 1px;+ margin: 9px 1px;+ *margin: -5px 0 5px;+ overflow: hidden;+ background-color: #e5e5e5;+ border-bottom: 1px solid #ffffff;+}++.nav-tabs,+.nav-pills {+ *zoom: 1;+}++.nav-tabs:before,+.nav-pills:before,+.nav-tabs:after,+.nav-pills:after {+ display: table;+ line-height: 0;+ 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: 20px;+ 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;+ cursor: default;+ background-color: #ffffff;+ border: 1px solid #ddd;+ border-bottom-color: transparent;+}++.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-top-right-radius: 4px;+ border-top-right-radius: 4px;+ -webkit-border-top-left-radius: 4px;+ border-top-left-radius: 4px;+ -moz-border-radius-topright: 4px;+ -moz-border-radius-topleft: 4px;+}++.nav-tabs.nav-stacked > li:last-child > a {+ -webkit-border-bottom-right-radius: 4px;+ border-bottom-right-radius: 4px;+ -webkit-border-bottom-left-radius: 4px;+ border-bottom-left-radius: 4px;+ -moz-border-radius-bottomright: 4px;+ -moz-border-radius-bottomleft: 4px;+}++.nav-tabs.nav-stacked > li > a:hover {+ z-index: 2;+ border-color: #ddd;+}++.nav-pills.nav-stacked > li > a {+ margin-bottom: 3px;+}++.nav-pills.nav-stacked > li:last-child > a {+ margin-bottom: 1px;+}++.nav-tabs .dropdown-menu {+ -webkit-border-radius: 0 0 6px 6px;+ -moz-border-radius: 0 0 6px 6px;+ border-radius: 0 0 6px 6px;+}++.nav-pills .dropdown-menu {+ -webkit-border-radius: 6px;+ -moz-border-radius: 6px;+ border-radius: 6px;+}++.nav .dropdown-toggle .caret {+ margin-top: 6px;+ border-top-color: #0088cc;+ border-bottom-color: #0088cc;+}++.nav .dropdown-toggle:hover .caret {+ border-top-color: #005580;+ border-bottom-color: #005580;+}++/* move down carets for tabs */++.nav-tabs .dropdown-toggle .caret {+ margin-top: 8px;+}++.nav .active .dropdown-toggle .caret {+ border-top-color: #fff;+ border-bottom-color: #fff;+}++.nav-tabs .active .dropdown-toggle .caret {+ border-top-color: #555555;+ border-bottom-color: #555555;+}++.nav > .dropdown.active > a:hover {+ cursor: pointer;+}++.nav-tabs .open .dropdown-toggle,+.nav-pills .open .dropdown-toggle,+.nav > li.dropdown.open.active > a:hover {+ color: #ffffff;+ background-color: #999999;+ border-color: #999999;+}++.nav li.dropdown.open .caret,+.nav li.dropdown.open.active .caret,+.nav li.dropdown.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;+ line-height: 0;+ content: "";+}++.tabbable:after {+ clear: both;+}++.tab-content {+ overflow: auto;+}++.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-top-color: #ddd;+ border-bottom-color: transparent;+}++.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;+}++.nav > .disabled > a {+ color: #999999;+}++.nav > .disabled > a:hover {+ text-decoration: none;+ cursor: default;+ background-color: transparent;+}++.navbar {+ *position: relative;+ *z-index: 2;+ margin-bottom: 20px;+ overflow: visible;+ color: #777777;+}++.navbar-inner {+ min-height: 40px;+ padding-right: 20px;+ padding-left: 20px;+ background-color: #fafafa;+ background-image: -moz-linear-gradient(top, #ffffff, #f2f2f2);+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f2f2f2));+ background-image: -webkit-linear-gradient(top, #ffffff, #f2f2f2);+ background-image: -o-linear-gradient(top, #ffffff, #f2f2f2);+ background-image: linear-gradient(to bottom, #ffffff, #f2f2f2);+ background-repeat: repeat-x;+ border: 1px solid #d4d4d4;+ -webkit-border-radius: 4px;+ -moz-border-radius: 4px;+ border-radius: 4px;+ filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0);+ *zoom: 1;+ -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065);+ -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065);+ box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065);+}++.navbar-inner:before,+.navbar-inner:after {+ display: table;+ line-height: 0;+ content: "";+}++.navbar-inner:after {+ clear: both;+}++.navbar .container {+ width: auto;+}++.nav-collapse.collapse {+ height: auto;+}++.navbar .brand {+ display: block;+ float: left;+ padding: 10px 20px 10px;+ margin-left: -20px;+ font-size: 20px;+ font-weight: 200;+ color: #777777;+ text-shadow: 0 1px 0 #ffffff;+}++.navbar .brand:hover {+ text-decoration: none;+}++.navbar-text {+ margin-bottom: 0;+ line-height: 40px;+}++.navbar-link {+ color: #777777;+}++.navbar-link:hover {+ color: #333333;+}++.navbar .divider-vertical {+ height: 40px;+ margin: 0 9px;+ border-right: 1px solid #ffffff;+ border-left: 1px solid #f2f2f2;+}++.navbar .btn,+.navbar .btn-group {+ margin-top: 5px;+}++.navbar .btn-group .btn,+.navbar .input-prepend .btn,+.navbar .input-append .btn {+ margin-top: 0;+}++.navbar-form {+ margin-bottom: 0;+ *zoom: 1;+}++.navbar-form:before,+.navbar-form:after {+ display: table;+ line-height: 0;+ 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,+.navbar-form .btn {+ 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: 5px;+ margin-bottom: 0;+}++.navbar-search .search-query {+ padding: 4px 14px;+ margin-bottom: 0;+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;+ font-size: 13px;+ font-weight: normal;+ line-height: 1;+ -webkit-border-radius: 15px;+ -moz-border-radius: 15px;+ border-radius: 15px;+}++.navbar-static-top {+ position: static;+ width: 100%;+ margin-bottom: 0;+}++.navbar-static-top .navbar-inner {+ -webkit-border-radius: 0;+ -moz-border-radius: 0;+ border-radius: 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-static-top .navbar-inner {+ border-width: 0 0 1px;+}++.navbar-fixed-bottom .navbar-inner {+ border-width: 1px 0 0;+}++.navbar-fixed-top .navbar-inner,+.navbar-fixed-bottom .navbar-inner {+ padding-right: 0;+ padding-left: 0;+ -webkit-border-radius: 0;+ -moz-border-radius: 0;+ border-radius: 0;+}++.navbar-static-top .container,+.navbar-fixed-top .container,+.navbar-fixed-bottom .container {+ width: 940px;+}++.navbar-fixed-top {+ top: 0;+}++.navbar-fixed-top .navbar-inner,+.navbar-static-top .navbar-inner {+ -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.1), 0 1px 10px rgba(0, 0, 0, 0.1);+ -moz-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.1), 0 1px 10px rgba(0, 0, 0, 0.1);+ box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.1), 0 1px 10px rgba(0, 0, 0, 0.1);+}++.navbar-fixed-bottom {+ bottom: 0;+}++.navbar-fixed-bottom .navbar-inner {+ -webkit-box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.1), 0 -1px 10px rgba(0, 0, 0, 0.1);+ -moz-box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.1), 0 -1px 10px rgba(0, 0, 0, 0.1);+ box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.1), 0 -1px 10px rgba(0, 0, 0, 0.1);+}++.navbar .nav {+ position: relative;+ left: 0;+ display: block;+ float: left;+ margin: 0 10px 0 0;+}++.navbar .nav.pull-right {+ float: right;+ margin-right: 0;+}++.navbar .nav > li {+ float: left;+}++.navbar .nav > li > a {+ float: none;+ padding: 10px 15px 10px;+ color: #777777;+ text-decoration: none;+ text-shadow: 0 1px 0 #ffffff;+}++.navbar .nav .dropdown-toggle .caret {+ margin-top: 8px;+}++.navbar .nav > li > a:focus,+.navbar .nav > li > a:hover {+ color: #333333;+ text-decoration: none;+ background-color: transparent;+}++.navbar .nav > .active > a,+.navbar .nav > .active > a:hover,+.navbar .nav > .active > a:focus {+ color: #555555;+ text-decoration: none;+ background-color: #e5e5e5;+ -webkit-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125);+ -moz-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125);+ box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125);+}++.navbar .btn-navbar {+ display: none;+ float: right;+ padding: 7px 10px;+ margin-right: 5px;+ margin-left: 5px;+ color: #ffffff;+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);+ background-color: #ededed;+ *background-color: #e5e5e5;+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), to(#e5e5e5));+ background-image: -webkit-linear-gradient(top, #f2f2f2, #e5e5e5);+ background-image: -o-linear-gradient(top, #f2f2f2, #e5e5e5);+ background-image: linear-gradient(to bottom, #f2f2f2, #e5e5e5);+ background-image: -moz-linear-gradient(top, #f2f2f2, #e5e5e5);+ background-repeat: repeat-x;+ border-color: #e5e5e5 #e5e5e5 #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(startColorstr='#fff2f2f2', endColorstr='#ffe5e5e5', GradientType=0);+ 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);+}++.navbar .btn-navbar:hover,+.navbar .btn-navbar:active,+.navbar .btn-navbar.active,+.navbar .btn-navbar.disabled,+.navbar .btn-navbar[disabled] {+ color: #ffffff;+ background-color: #e5e5e5;+ *background-color: #d9d9d9;+}++.navbar .btn-navbar:active,+.navbar .btn-navbar.active {+ background-color: #cccccc \9;+}++.navbar .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;+}++.navbar .nav > li > .dropdown-menu:before {+ position: absolute;+ top: -7px;+ left: 9px;+ display: inline-block;+ border-right: 7px solid transparent;+ border-bottom: 7px solid #ccc;+ border-left: 7px solid transparent;+ border-bottom-color: rgba(0, 0, 0, 0.2);+ content: '';+}++.navbar .nav > li > .dropdown-menu:after {+ position: absolute;+ top: -6px;+ left: 10px;+ display: inline-block;+ border-right: 6px solid transparent;+ border-bottom: 6px solid #ffffff;+ border-left: 6px solid transparent;+ content: '';+}++.navbar-fixed-bottom .nav > li > .dropdown-menu:before {+ top: auto;+ bottom: -7px;+ border-top: 7px solid #ccc;+ border-bottom: 0;+ border-top-color: rgba(0, 0, 0, 0.2);+}++.navbar-fixed-bottom .nav > li > .dropdown-menu:after {+ top: auto;+ bottom: -6px;+ border-top: 6px solid #ffffff;+ border-bottom: 0;+}++.navbar .nav li.dropdown.open > .dropdown-toggle,+.navbar .nav li.dropdown.active > .dropdown-toggle,+.navbar .nav li.dropdown.open.active > .dropdown-toggle {+ color: #555555;+ background-color: #e5e5e5;+}++.navbar .nav li.dropdown > .dropdown-toggle .caret {+ border-top-color: #777777;+ border-bottom-color: #777777;+}++.navbar .nav li.dropdown.open > .dropdown-toggle .caret,+.navbar .nav li.dropdown.active > .dropdown-toggle .caret,+.navbar .nav li.dropdown.open.active > .dropdown-toggle .caret {+ border-top-color: #555555;+ border-bottom-color: #555555;+}++.navbar .pull-right > li > .dropdown-menu,+.navbar .nav > li > .dropdown-menu.pull-right {+ right: 0;+ left: auto;+}++.navbar .pull-right > li > .dropdown-menu:before,+.navbar .nav > li > .dropdown-menu.pull-right:before {+ right: 12px;+ left: auto;+}++.navbar .pull-right > li > .dropdown-menu:after,+.navbar .nav > li > .dropdown-menu.pull-right:after {+ right: 13px;+ left: auto;+}++.navbar .pull-right > li > .dropdown-menu .dropdown-menu,+.navbar .nav > li > .dropdown-menu.pull-right .dropdown-menu {+ right: 100%;+ left: auto;+ margin-right: -1px;+ margin-left: 0;+ -webkit-border-radius: 6px 0 6px 6px;+ -moz-border-radius: 6px 0 6px 6px;+ border-radius: 6px 0 6px 6px;+}++.navbar-inverse {+ color: #999999;+}++.navbar-inverse .navbar-inner {+ background-color: #1b1b1b;+ background-image: -moz-linear-gradient(top, #222222, #111111);+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#222222), to(#111111));+ background-image: -webkit-linear-gradient(top, #222222, #111111);+ background-image: -o-linear-gradient(top, #222222, #111111);+ background-image: linear-gradient(to bottom, #222222, #111111);+ background-repeat: repeat-x;+ border-color: #252525;+ filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff111111', GradientType=0);+}++.navbar-inverse .brand,+.navbar-inverse .nav > li > a {+ color: #999999;+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);+}++.navbar-inverse .brand:hover,+.navbar-inverse .nav > li > a:hover {+ color: #ffffff;+}++.navbar-inverse .nav > li > a:focus,+.navbar-inverse .nav > li > a:hover {+ color: #ffffff;+ background-color: transparent;+}++.navbar-inverse .nav .active > a,+.navbar-inverse .nav .active > a:hover,+.navbar-inverse .nav .active > a:focus {+ color: #ffffff;+ background-color: #111111;+}++.navbar-inverse .navbar-link {+ color: #999999;+}++.navbar-inverse .navbar-link:hover {+ color: #ffffff;+}++.navbar-inverse .divider-vertical {+ border-right-color: #222222;+ border-left-color: #111111;+}++.navbar-inverse .nav li.dropdown.open > .dropdown-toggle,+.navbar-inverse .nav li.dropdown.active > .dropdown-toggle,+.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle {+ color: #ffffff;+ background-color: #111111;+}++.navbar-inverse .nav li.dropdown > .dropdown-toggle .caret {+ border-top-color: #999999;+ border-bottom-color: #999999;+}++.navbar-inverse .nav li.dropdown.open > .dropdown-toggle .caret,+.navbar-inverse .nav li.dropdown.active > .dropdown-toggle .caret,+.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle .caret {+ border-top-color: #ffffff;+ border-bottom-color: #ffffff;+}++.navbar-inverse .navbar-search .search-query {+ color: #ffffff;+ background-color: #515151;+ border-color: #111111;+ -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15);+ -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15);+ box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15);+ -webkit-transition: none;+ -moz-transition: none;+ -o-transition: none;+ transition: none;+}++.navbar-inverse .navbar-search .search-query:-moz-placeholder {+ color: #cccccc;+}++.navbar-inverse .navbar-search .search-query:-ms-input-placeholder {+ color: #cccccc;+}++.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder {+ color: #cccccc;+}++.navbar-inverse .navbar-search .search-query:focus,+.navbar-inverse .navbar-search .search-query.focused {+ padding: 5px 15px;+ color: #333333;+ text-shadow: 0 1px 0 #ffffff;+ background-color: #ffffff;+ border: 0;+ outline: 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);+}++.navbar-inverse .btn-navbar {+ color: #ffffff;+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);+ background-color: #0e0e0e;+ *background-color: #040404;+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#151515), to(#040404));+ background-image: -webkit-linear-gradient(top, #151515, #040404);+ background-image: -o-linear-gradient(top, #151515, #040404);+ background-image: linear-gradient(to bottom, #151515, #040404);+ background-image: -moz-linear-gradient(top, #151515, #040404);+ background-repeat: repeat-x;+ border-color: #040404 #040404 #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(startColorstr='#ff151515', endColorstr='#ff040404', GradientType=0);+ filter: progid:dximagetransform.microsoft.gradient(enabled=false);+}++.navbar-inverse .btn-navbar:hover,+.navbar-inverse .btn-navbar:active,+.navbar-inverse .btn-navbar.active,+.navbar-inverse .btn-navbar.disabled,+.navbar-inverse .btn-navbar[disabled] {+ color: #ffffff;+ background-color: #040404;+ *background-color: #000000;+}++.navbar-inverse .btn-navbar:active,+.navbar-inverse .btn-navbar.active {+ background-color: #000000 \9;+}++.breadcrumb {+ padding: 8px 15px;+ margin: 0 0 20px;+ list-style: none;+ background-color: #f5f5f5;+ -webkit-border-radius: 4px;+ -moz-border-radius: 4px;+ border-radius: 4px;+}++.breadcrumb li {+ display: inline-block;+ *display: inline;+ text-shadow: 0 1px 0 #ffffff;+ *zoom: 1;+}++.breadcrumb .divider {+ padding: 0 5px;+ color: #ccc;+}++.breadcrumb .active {+ color: #999999;+}++.pagination {+ height: 40px;+ margin: 20px 0;+}++.pagination ul {+ display: inline-block;+ *display: inline;+ margin-bottom: 0;+ margin-left: 0;+ -webkit-border-radius: 3px;+ -moz-border-radius: 3px;+ border-radius: 3px;+ *zoom: 1;+ -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 ul > li {+ display: inline;+}++.pagination ul > li > a,+.pagination ul > li > span {+ float: left;+ padding: 0 14px;+ line-height: 38px;+ text-decoration: none;+ background-color: #ffffff;+ border: 1px solid #dddddd;+ border-left-width: 0;+}++.pagination ul > li > a:hover,+.pagination ul > .active > a,+.pagination ul > .active > span {+ background-color: #f5f5f5;+}++.pagination ul > .active > a,+.pagination ul > .active > span {+ color: #999999;+ cursor: default;+}++.pagination ul > .disabled > span,+.pagination ul > .disabled > a,+.pagination ul > .disabled > a:hover {+ color: #999999;+ cursor: default;+ background-color: transparent;+}++.pagination ul > li:first-child > a,+.pagination ul > li:first-child > span {+ 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 ul > li:last-child > a,+.pagination ul > li:last-child > span {+ -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: 20px 0;+ text-align: center;+ list-style: none;+ *zoom: 1;+}++.pager:before,+.pager:after {+ display: table;+ line-height: 0;+ content: "";+}++.pager:after {+ clear: both;+}++.pager li {+ display: inline;+}++.pager a,+.pager span {+ 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,+.pager .next span {+ float: right;+}++.pager .previous a {+ float: left;+}++.pager .disabled a,+.pager .disabled a:hover,+.pager .disabled span {+ color: #999999;+ cursor: default;+ background-color: #fff;+}++.modal-open .modal .dropdown-menu {+ z-index: 2050;+}++.modal-open .modal .dropdown.open {+ *z-index: 2050;+}++.modal-open .modal .popover {+ z-index: 2060;+}++.modal-open .modal .tooltip {+ z-index: 2080;+}++.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;+ width: 560px;+ margin: -250px 0 0 -280px;+ overflow: auto;+ background-color: #ffffff;+ border: 1px solid #999;+ border: 1px solid rgba(0, 0, 0, 0.3);+ *border: 1px solid #999;+ -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 {+ top: -25%;+ -webkit-transition: opacity 0.3s linear, top 0.3s ease-out;+ -moz-transition: opacity 0.3s linear, top 0.3s ease-out;+ -o-transition: opacity 0.3s linear, top 0.3s ease-out;+ transition: opacity 0.3s linear, top 0.3s ease-out;+}++.modal.fade.in {+ top: 50%;+}++.modal-header {+ padding: 9px 15px;+ border-bottom: 1px solid #eee;+}++.modal-header .close {+ margin-top: 2px;+}++.modal-header h3 {+ margin: 0;+ line-height: 30px;+}++.modal-body {+ max-height: 400px;+ padding: 15px;+ overflow-y: auto;+}++.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;+ *zoom: 1;+ -webkit-box-shadow: inset 0 1px 0 #ffffff;+ -moz-box-shadow: inset 0 1px 0 #ffffff;+ box-shadow: inset 0 1px 0 #ffffff;+}++.modal-footer:before,+.modal-footer:after {+ display: table;+ line-height: 0;+ content: "";+}++.modal-footer:after {+ clear: both;+}++.modal-footer .btn + .btn {+ margin-bottom: 0;+ margin-left: 5px;+}++.modal-footer .btn-group .btn + .btn {+ margin-left: -1px;+}++.tooltip {+ position: absolute;+ z-index: 1030;+ display: block;+ padding: 5px;+ font-size: 11px;+ opacity: 0;+ filter: alpha(opacity=0);+ visibility: visible;+}++.tooltip.in {+ opacity: 0.8;+ filter: alpha(opacity=80);+}++.tooltip.top {+ margin-top: -3px;+}++.tooltip.right {+ margin-left: 3px;+}++.tooltip.bottom {+ margin-top: 3px;+}++.tooltip.left {+ margin-left: -3px;+}++.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;+ border-color: transparent;+ border-style: solid;+}++.tooltip.top .tooltip-arrow {+ bottom: 0;+ left: 50%;+ margin-left: -5px;+ border-top-color: #000000;+ border-width: 5px 5px 0;+}++.tooltip.right .tooltip-arrow {+ top: 50%;+ left: 0;+ margin-top: -5px;+ border-right-color: #000000;+ border-width: 5px 5px 5px 0;+}++.tooltip.left .tooltip-arrow {+ top: 50%;+ right: 0;+ margin-top: -5px;+ border-left-color: #000000;+ border-width: 5px 0 5px 5px;+}++.tooltip.bottom .tooltip-arrow {+ top: 0;+ left: 50%;+ margin-left: -5px;+ border-bottom-color: #000000;+ border-width: 0 5px 5px;+}++.popover {+ position: absolute;+ top: 0;+ left: 0;+ z-index: 1010;+ display: none;+ width: 236px;+ padding: 1px;+ background-color: #ffffff;+ border: 1px solid #ccc;+ border: 1px solid rgba(0, 0, 0, 0.2);+ -webkit-border-radius: 6px;+ -moz-border-radius: 6px;+ border-radius: 6px;+ -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;+}++.popover.top {+ margin-bottom: 10px;+}++.popover.right {+ margin-left: 10px;+}++.popover.bottom {+ margin-top: 10px;+}++.popover.left {+ margin-right: 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;+ -webkit-border-radius: 5px 5px 0 0;+ -moz-border-radius: 5px 5px 0 0;+ border-radius: 5px 5px 0 0;+}++.popover-content {+ padding: 9px 14px;+}++.popover-content p,+.popover-content ul,+.popover-content ol {+ margin-bottom: 0;+}++.popover .arrow,+.popover .arrow:after {+ position: absolute;+ display: inline-block;+ width: 0;+ height: 0;+ border-color: transparent;+ border-style: solid;+}++.popover .arrow:after {+ z-index: -1;+ content: "";+}++.popover.top .arrow {+ bottom: -10px;+ left: 50%;+ margin-left: -10px;+ border-top-color: #ffffff;+ border-width: 10px 10px 0;+}++.popover.top .arrow:after {+ bottom: -1px;+ left: -11px;+ border-top-color: rgba(0, 0, 0, 0.25);+ border-width: 11px 11px 0;+}++.popover.right .arrow {+ top: 50%;+ left: -10px;+ margin-top: -10px;+ border-right-color: #ffffff;+ border-width: 10px 10px 10px 0;+}++.popover.right .arrow:after {+ bottom: -11px;+ left: -1px;+ border-right-color: rgba(0, 0, 0, 0.25);+ border-width: 11px 11px 11px 0;+}++.popover.bottom .arrow {+ top: -10px;+ left: 50%;+ margin-left: -10px;+ border-bottom-color: #ffffff;+ border-width: 0 10px 10px;+}++.popover.bottom .arrow:after {+ top: -1px;+ left: -11px;+ border-bottom-color: rgba(0, 0, 0, 0.25);+ border-width: 0 11px 11px;+}++.popover.left .arrow {+ top: 50%;+ right: -10px;+ margin-top: -10px;+ border-left-color: #ffffff;+ border-width: 10px 0 10px 10px;+}++.popover.left .arrow:after {+ right: -1px;+ bottom: -11px;+ border-left-color: rgba(0, 0, 0, 0.25);+ border-width: 11px 0 11px 11px;+}++.thumbnails {+ margin-left: -20px;+ list-style: none;+ *zoom: 1;+}++.thumbnails:before,+.thumbnails:after {+ display: table;+ line-height: 0;+ content: "";+}++.thumbnails:after {+ clear: both;+}++.row-fluid .thumbnails {+ margin-left: 0;+}++.thumbnails > li {+ float: left;+ margin-bottom: 20px;+ margin-left: 20px;+}++.thumbnail {+ display: block;+ padding: 4px;+ line-height: 20px;+ border: 1px solid #ddd;+ -webkit-border-radius: 4px;+ -moz-border-radius: 4px;+ border-radius: 4px;+ -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055);+ -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055);+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055);+ -webkit-transition: all 0.2s ease-in-out;+ -moz-transition: all 0.2s ease-in-out;+ -o-transition: all 0.2s ease-in-out;+ transition: all 0.2s ease-in-out;+}++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-right: auto;+ margin-left: auto;+}++.thumbnail .caption {+ padding: 9px;+ color: #555555;+}++.label,+.badge {+ font-size: 11.844px;+ font-weight: bold;+ line-height: 14px;+ color: #ffffff;+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);+ white-space: nowrap;+ vertical-align: baseline;+ background-color: #999999;+}++.label {+ padding: 1px 4px 2px;+ -webkit-border-radius: 3px;+ -moz-border-radius: 3px;+ border-radius: 3px;+}++.badge {+ padding: 1px 9px 2px;+ -webkit-border-radius: 9px;+ -moz-border-radius: 9px;+ border-radius: 9px;+}++a.label:hover,+a.badge:hover {+ color: #ffffff;+ text-decoration: none;+ cursor: pointer;+}++.label-important,+.badge-important {+ background-color: #b94a48;+}++.label-important[href],+.badge-important[href] {+ background-color: #953b39;+}++.label-warning,+.badge-warning {+ background-color: #f89406;+}++.label-warning[href],+.badge-warning[href] {+ background-color: #c67605;+}++.label-success,+.badge-success {+ background-color: #468847;+}++.label-success[href],+.badge-success[href] {+ background-color: #356635;+}++.label-info,+.badge-info {+ background-color: #3a87ad;+}++.label-info[href],+.badge-info[href] {+ background-color: #2d6987;+}++.label-inverse,+.badge-inverse {+ background-color: #333333;+}++.label-inverse[href],+.badge-inverse[href] {+ background-color: #1a1a1a;+}++.btn .label,+.btn .badge {+ position: relative;+ top: -1px;+}++.btn-mini .label,+.btn-mini .badge {+ top: 0;+}++@-webkit-keyframes progress-bar-stripes {+ from {+ background-position: 40px 0;+ }+ to {+ background-position: 0 0;+ }+}++@-moz-keyframes progress-bar-stripes {+ from {+ background-position: 40px 0;+ }+ to {+ background-position: 0 0;+ }+}++@-ms-keyframes progress-bar-stripes {+ from {+ background-position: 40px 0;+ }+ to {+ background-position: 0 0;+ }+}++@-o-keyframes progress-bar-stripes {+ from {+ background-position: 0 0;+ }+ to {+ background-position: 40px 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: #f7f7f7;+ background-image: -moz-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(to bottom, #f5f5f5, #f9f9f9);+ background-repeat: repeat-x;+ -webkit-border-radius: 4px;+ -moz-border-radius: 4px;+ border-radius: 4px;+ filter: progid:dximagetransform.microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#fff9f9f9', 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);+}++.progress .bar {+ float: left;+ width: 0;+ height: 100%;+ font-size: 12px;+ color: #ffffff;+ 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: -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(to bottom, #149bdf, #0480be);+ background-repeat: repeat-x;+ filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ff149bdf', endColorstr='#ff0480be', 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;+ box-sizing: border-box;+ -webkit-transition: width 0.6s ease;+ -moz-transition: width 0.6s ease;+ -o-transition: width 0.6s ease;+ transition: width 0.6s ease;+}++.progress .bar + .bar {+ -webkit-box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15);+ -moz-box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15);+ box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15);+}++.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: -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;+ -ms-animation: progress-bar-stripes 2s linear infinite;+ -o-animation: progress-bar-stripes 2s linear infinite;+ animation: progress-bar-stripes 2s linear infinite;+}++.progress-danger .bar,+.progress .bar-danger {+ background-color: #dd514c;+ background-image: -moz-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(to bottom, #ee5f5b, #c43c35);+ background-repeat: repeat-x;+ filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffc43c35', GradientType=0);+}++.progress-danger.progress-striped .bar,+.progress-striped .bar-danger {+ 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: -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,+.progress .bar-success {+ background-color: #5eb95e;+ background-image: -moz-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(to bottom, #62c462, #57a957);+ background-repeat: repeat-x;+ filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff57a957', GradientType=0);+}++.progress-success.progress-striped .bar,+.progress-striped .bar-success {+ 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: -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,+.progress .bar-info {+ background-color: #4bb1cf;+ background-image: -moz-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(to bottom, #5bc0de, #339bb9);+ background-repeat: repeat-x;+ filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff339bb9', GradientType=0);+}++.progress-info.progress-striped .bar,+.progress-striped .bar-info {+ 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: -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,+.progress .bar-warning {+ background-color: #faa732;+ background-image: -moz-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(to bottom, #fbb450, #f89406);+ background-repeat: repeat-x;+ filter: progid:dximagetransform.microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0);+}++.progress-warning.progress-striped .bar,+.progress-striped .bar-warning {+ 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: -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: 20px;+}++.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-toggle {+ cursor: pointer;+}++.accordion-inner {+ padding: 9px 15px;+ border-top: 1px solid #e5e5e5;+}++.carousel {+ position: relative;+ margin-bottom: 20px;+ line-height: 1;+}++.carousel-inner {+ position: relative;+ width: 100%;+ overflow: hidden;+}++.carousel .item {+ position: relative;+ display: none;+ -webkit-transition: 0.6s ease-in-out left;+ -moz-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 {+ right: 15px;+ left: auto;+}++.carousel-control:hover {+ color: #ffffff;+ text-decoration: none;+ opacity: 0.9;+ filter: alpha(opacity=90);+}++.carousel-caption {+ position: absolute;+ right: 0;+ bottom: 0;+ left: 0;+ padding: 15px;+ background: #333333;+ background: rgba(0, 0, 0, 0.75);+}++.carousel-caption h4,+.carousel-caption p {+ line-height: 20px;+ color: #ffffff;+}++.carousel-caption h4 {+ margin: 0 0 5px;+}++.carousel-caption p {+ margin-bottom: 0;+}++.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;+ letter-spacing: -1px;+ color: inherit;+}++.hero-unit p {+ font-size: 18px;+ font-weight: 200;+ line-height: 30px;+ color: inherit;+}++.pull-right {+ float: right;+}++.pull-left {+ float: left;+}++.hide {+ display: none;+}++.show {+ display: block;+}++.invisible {+ visibility: hidden;+}++.affix {+ position: fixed;+}
@@ -0,0 +1,9 @@+/*!+ * Bootstrap v2.1.1+ *+ * 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{width:auto\9;height:auto;max-width:100%;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic}#map_canvas img{max-width:none}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-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}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;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:20px;color:#333;background-color:#fff}a{color:#08c;text-decoration:none}a:hover{color:#005580;text-decoration:underline}.img-rounded{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.img-polaroid{padding:4px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.1);box-shadow:0 1px 3px rgba(0,0,0,0.1)}.img-circle{-webkit-border-radius:500px;-moz-border-radius:500px;border-radius:500px}.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .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;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.127659574468085%;*margin-left:2.074468085106383%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.48936170212765%;*width:91.43617021276594%}.row-fluid .span10{width:82.97872340425532%;*width:82.92553191489361%}.row-fluid .span9{width:74.46808510638297%;*width:74.41489361702126%}.row-fluid .span8{width:65.95744680851064%;*width:65.90425531914893%}.row-fluid .span7{width:57.44680851063829%;*width:57.39361702127659%}.row-fluid .span6{width:48.93617021276595%;*width:48.88297872340425%}.row-fluid .span5{width:40.42553191489362%;*width:40.37234042553192%}.row-fluid .span4{width:31.914893617021278%;*width:31.861702127659576%}.row-fluid .span3{width:23.404255319148934%;*width:23.351063829787233%}.row-fluid .span2{width:14.893617021276595%;*width:14.840425531914894%}.row-fluid .span1{width:6.382978723404255%;*width:6.329787234042553%}.row-fluid .offset12{margin-left:104.25531914893617%;*margin-left:104.14893617021275%}.row-fluid .offset12:first-child{margin-left:102.12765957446808%;*margin-left:102.02127659574467%}.row-fluid .offset11{margin-left:95.74468085106382%;*margin-left:95.6382978723404%}.row-fluid .offset11:first-child{margin-left:93.61702127659574%;*margin-left:93.51063829787232%}.row-fluid .offset10{margin-left:87.23404255319149%;*margin-left:87.12765957446807%}.row-fluid .offset10:first-child{margin-left:85.1063829787234%;*margin-left:84.99999999999999%}.row-fluid .offset9{margin-left:78.72340425531914%;*margin-left:78.61702127659572%}.row-fluid .offset9:first-child{margin-left:76.59574468085106%;*margin-left:76.48936170212764%}.row-fluid .offset8{margin-left:70.2127659574468%;*margin-left:70.10638297872339%}.row-fluid .offset8:first-child{margin-left:68.08510638297872%;*margin-left:67.9787234042553%}.row-fluid .offset7{margin-left:61.70212765957446%;*margin-left:61.59574468085106%}.row-fluid .offset7:first-child{margin-left:59.574468085106375%;*margin-left:59.46808510638297%}.row-fluid .offset6{margin-left:53.191489361702125%;*margin-left:53.085106382978715%}.row-fluid .offset6:first-child{margin-left:51.063829787234035%;*margin-left:50.95744680851063%}.row-fluid .offset5{margin-left:44.68085106382979%;*margin-left:44.57446808510638%}.row-fluid .offset5:first-child{margin-left:42.5531914893617%;*margin-left:42.4468085106383%}.row-fluid .offset4{margin-left:36.170212765957444%;*margin-left:36.06382978723405%}.row-fluid .offset4:first-child{margin-left:34.04255319148936%;*margin-left:33.93617021276596%}.row-fluid .offset3{margin-left:27.659574468085104%;*margin-left:27.5531914893617%}.row-fluid .offset3:first-child{margin-left:25.53191489361702%;*margin-left:25.425531914893618%}.row-fluid .offset2{margin-left:19.148936170212764%;*margin-left:19.04255319148936%}.row-fluid .offset2:first-child{margin-left:17.02127659574468%;*margin-left:16.914893617021278%}.row-fluid .offset1{margin-left:10.638297872340425%;*margin-left:10.53191489361702%}.row-fluid .offset1:first-child{margin-left:8.51063829787234%;*margin-left:8.404255319148938%}[class*="span"].hide,.row-fluid [class*="span"].hide{display:none}[class*="span"].pull-right,.row-fluid [class*="span"].pull-right{float:right}.container{margin-right:auto;margin-left:auto;*zoom:1}.container:before,.container:after{display:table;line-height:0;content:""}.container:after{clear:both}.container-fluid{padding-right:20px;padding-left:20px;*zoom:1}.container-fluid:before,.container-fluid:after{display:table;line-height:0;content:""}.container-fluid:after{clear:both}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:21px;font-weight:200;line-height:30px}small{font-size:85%}strong{font-weight:bold}em{font-style:italic}cite{font-style:normal}.muted{color:#999}.text-warning{color:#c09853}.text-error{color:#b94a48}.text-info{color:#3a87ad}.text-success{color:#468847}h1,h2,h3,h4,h5,h6{margin:10px 0;font-family:inherit;font-weight:bold;line-height:1;color:inherit;text-rendering:optimizelegibility}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;line-height:1;color:#999}h1{font-size:36px;line-height:40px}h2{font-size:30px;line-height:40px}h3{font-size:24px;line-height:40px}h4{font-size:18px;line-height:20px}h5{font-size:14px;line-height:20px}h6{font-size:12px;line-height:20px}h1 small{font-size:24px}h2 small{font-size:18px}h3 small{font-size:14px}h4 small{font-size:14px}.page-header{padding-bottom:9px;margin:20px 0 30px;border-bottom:1px solid #eee}ul,ol{padding:0;margin:0 0 10px 25px}ul ul,ul ol,ol ol,ol ul{margin-bottom:0}li{line-height:20px}ul.unstyled,ol.unstyled{margin-left:0;list-style:none}dl{margin-bottom:20px}dt,dd{line-height:20px}dt{font-weight:bold}dd{margin-left:10px}.dl-horizontal{*zoom:1}.dl-horizontal:before,.dl-horizontal:after{display:table;line-height:0;content:""}.dl-horizontal:after{clear:both}.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}hr{margin:20px 0;border:0;border-top:1px solid #eee;border-bottom:1px solid #fff}abbr[title]{cursor:help;border-bottom:1px dotted #999}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:0 0 0 15px;margin:0 0 20px;border-left:5px solid #eee}blockquote p{margin-bottom:0;font-size:16px;font-weight:300;line-height:25px}blockquote small{display:block;line-height:20px;color:#999}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:20px;font-style:normal;line-height:20px}code,pre{padding:0 3px 2px;font-family:Monaco,Menlo,Consolas,"Courier New",monospace;font-size:12px;color:#333;-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:9.5px;margin:0 0 10px;font-size:13px;line-height:20px;word-break:break-all;word-wrap:break-word;white-space:pre;white-space:pre-wrap;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}pre.prettyprint{margin-bottom:20px}pre code{padding:0;color:inherit;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}form{margin:0 0 20px}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:40px;color:#333;border:0;border-bottom:1px solid #e5e5e5}legend small{font-size:15px;color:#999}label,input,button,select,textarea{font-size:14px;font-weight:normal;line-height:20px}input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}label{display:block;margin-bottom:5px}select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{display:inline-block;height:20px;padding:4px 6px;margin-bottom:9px;font-size:14px;line-height:20px;color:#555;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}input,textarea,.uneditable-input{width:206px}textarea{height:auto}textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{background-color:#fff;border:1px solid #ccc;-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 .2s,box-shadow linear .2s;-moz-transition:border linear .2s,box-shadow linear .2s;-o-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s}textarea:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus,.uneditable-input:focus{border-color:rgba(82,168,236,0.8);outline:0;outline:thin dotted \9;-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)}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;*margin-top:0;line-height:normal;cursor:pointer}input[type="file"],input[type="image"],input[type="submit"],input[type="reset"],input[type="button"],input[type="radio"],input[type="checkbox"]{width:auto}select,input[type="file"]{height:30px;*margin-top:4px;line-height:30px}select{width:220px;background-color:#fff;border:1px solid #ccc}select[multiple],select[size]{height:auto}select:focus,input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.uneditable-input,.uneditable-textarea{color:#999;cursor:not-allowed;background-color:#fcfcfc;border-color:#ccc;-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)}.uneditable-input{overflow:hidden;white-space:nowrap}.uneditable-textarea{width:auto;height:auto}input:-moz-placeholder,textarea:-moz-placeholder{color:#999}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#999}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999}.radio,.checkbox{min-height:18px;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-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[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"]{float:none;margin-left:0}.input-append input[class*="span"],.input-append .uneditable-input[class*="span"],.input-prepend input[class*="span"],.input-prepend .uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"],.row-fluid .input-prepend [class*="span"],.row-fluid .input-append [class*="span"]{display:inline-block}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:926px}input.span11,textarea.span11,.uneditable-input.span11{width:846px}input.span10,textarea.span10,.uneditable-input.span10{width:766px}input.span9,textarea.span9,.uneditable-input.span9{width:686px}input.span8,textarea.span8,.uneditable-input.span8{width:606px}input.span7,textarea.span7,.uneditable-input.span7{width:526px}input.span6,textarea.span6,.uneditable-input.span6{width:446px}input.span5,textarea.span5,.uneditable-input.span5{width:366px}input.span4,textarea.span4,.uneditable-input.span4{width:286px}input.span3,textarea.span3,.uneditable-input.span3{width:206px}input.span2,textarea.span2,.uneditable-input.span2{width:126px}input.span1,textarea.span1,.uneditable-input.span1{width:46px}.controls-row{*zoom:1}.controls-row:before,.controls-row:after{display:table;line-height:0;content:""}.controls-row:after{clear:both}.controls-row [class*="span"]{float:left}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#eee}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"][readonly],input[type="checkbox"][readonly]{background-color:transparent}.control-group.warning>label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#c09853}.control-group.warning .checkbox,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#c09853}.control-group.warning input,.control-group.warning select,.control-group.warning textarea{border-color:#c09853;-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)}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#a47e3c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),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 .checkbox,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{color:#b94a48}.control-group.error input,.control-group.error select,.control-group.error textarea{border-color:#b94a48;-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)}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),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 .checkbox,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{color:#468847}.control-group.success input,.control-group.success select,.control-group.success textarea{border-color:#468847;-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)}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),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}.control-group.info>label,.control-group.info .help-block,.control-group.info .help-inline{color:#3a87ad}.control-group.info .checkbox,.control-group.info .radio,.control-group.info input,.control-group.info select,.control-group.info textarea{color:#3a87ad}.control-group.info input,.control-group.info select,.control-group.info textarea{border-color:#3a87ad;-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)}.control-group.info input:focus,.control-group.info select:focus,.control-group.info textarea:focus{border-color:#2d6987;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3}.control-group.info .input-prepend .add-on,.control-group.info .input-append .add-on{color:#3a87ad;background-color:#d9edf7;border-color:#3a87ad}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:19px 20px 20px;margin-top:20px;margin-bottom:20px;background-color:#f5f5f5;border-top:1px solid #e5e5e5;*zoom:1}.form-actions:before,.form-actions:after{display:table;line-height:0;content:""}.form-actions:after{clear:both}.help-block,.help-inline{color:#595959}.help-block{display:block;margin-bottom:10px}.help-inline{display:inline-block;*display:inline;padding-left:5px;vertical-align:middle;*zoom:1}.input-append,.input-prepend{margin-bottom:5px;font-size:0;white-space:nowrap}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{position:relative;margin-bottom:0;*margin-left:0;font-size:14px;vertical-align:top;-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.input-append input:focus,.input-prepend input:focus,.input-append select:focus,.input-prepend select:focus,.input-append .uneditable-input:focus,.input-prepend .uneditable-input:focus{z-index:2}.input-append .add-on,.input-prepend .add-on{display:inline-block;width:auto;height:20px;min-width:16px;padding:4px 5px;font-size:14px;font-weight:normal;line-height:20px;text-align:center;text-shadow:0 1px 0 #fff;background-color:#eee;border:1px solid #ccc}.input-append .add-on,.input-prepend .add-on,.input-append .btn,.input-prepend .btn{vertical-align:top;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-append .active,.input-prepend .active{background-color:#a9dba9;border-color:#46a546}.input-prepend .add-on,.input-prepend .btn{margin-right:-1px}.input-prepend .add-on:first-child,.input-prepend .btn:first-child{-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.input-append input,.input-append select,.input-append .uneditable-input{-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.input-append .add-on,.input-append .btn{margin-left:-1px}.input-append .add-on:last-child,.input-append .btn:last-child{-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}input.search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.form-search .input-append .search-query,.form-search .input-prepend .search-query{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.form-search .input-append .search-query{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search .input-append .btn{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .search-query{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .btn{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 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;*display:inline;margin-bottom:0;vertical-align:middle;*zoom:1}.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none}.form-search label,.form-inline label,.form-search .btn-group,.form-inline .btn-group{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-right:3px;margin-left:0}.control-group{margin-bottom:10px}legend+.control-group{margin-top:20px;-webkit-margin-top-collapse:separate}.form-horizontal .control-group{margin-bottom:20px;*zoom:1}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;line-height:0;content:""}.form-horizontal .control-group:after{clear:both}.form-horizontal .control-label{float:left;width:160px;padding-top:5px;text-align:right}.form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:180px;*margin-left:0}.form-horizontal .controls:first-child{*padding-left:180px}.form-horizontal .help-block{margin-bottom:0}.form-horizontal input+.help-block,.form-horizontal select+.help-block,.form-horizontal textarea+.help-block{margin-top:10px}.form-horizontal .form-actions{padding-left:180px}table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0}.table{width:100%;margin-bottom:20px}.table th,.table td{padding:8px;line-height:20px;text-align:left;vertical-align:top;border-top:1px solid #ddd}.table th{font-weight:bold}.table thead th{vertical-align:bottom}.table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.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 #ddd}.table-condensed th,.table-condensed td{padding:4px 5px}.table-bordered{border:1px solid #ddd;border-collapse:separate;*border-collapse:collapse;border-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.table-bordered th,.table-bordered td{border-left:1px solid #ddd}.table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.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-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered thead:first-child tr:first-child th:last-child,.table-bordered tbody:first-child tr:first-child td:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-bordered thead:last-child tr:last-child th:first-child,.table-bordered tbody:last-child tr:last-child td:first-child,.table-bordered tfoot: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;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px}.table-bordered thead:last-child tr:last-child th:last-child,.table-bordered tbody:last-child tr:last-child td:last-child,.table-bordered tfoot:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px}.table-bordered caption+thead tr:first-child th:first-child,.table-bordered caption+tbody tr:first-child td:first-child,.table-bordered colgroup+thead tr:first-child th:first-child,.table-bordered colgroup+tbody tr:first-child td:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered caption+thead tr:first-child th:last-child,.table-bordered caption+tbody tr:first-child td:last-child,.table-bordered colgroup+thead tr:first-child th:last-child,.table-bordered colgroup+tbody tr:first-child td:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topleft:4px}.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 [class*=span],.row-fluid table [class*=span]{display:table-cell;float:none;margin-left:0}.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}.table tbody tr.success td{background-color:#dff0d8}.table tbody tr.error td{background-color:#f2dede}.table tbody tr.warning td{background-color:#fcf8e3}.table tbody tr.info td{background-color:#d9edf7}.table-hover tbody tr.success:hover td{background-color:#d0e9c6}.table-hover tbody tr.error:hover td{background-color:#ebcccc}.table-hover tbody tr.warning:hover td{background-color:#faf2cc}.table-hover tbody tr.info:hover td{background-color:#c4e3f3}[class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;margin-top:1px;*margin-right:.3em;line-height:14px;vertical-align:text-top;background-image:url("../img/glyphicons-halflings.png");background-position:14px 14px;background-repeat:no-repeat}.icon-white,.nav-tabs>.active>a>[class^="icon-"],.nav-tabs>.active>a>[class*=" icon-"],.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"]{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{width:16px;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{width:16px;background-position:-408px -120px}.icon-resize-vertical{background-position:-432px -119px}.icon-resize-horizontal{background-position:-456px -118px}.icon-hdd{background-position:0 -144px}.icon-bullhorn{background-position:-24px -144px}.icon-bell{background-position:-48px -144px}.icon-certificate{background-position:-72px -144px}.icon-thumbs-up{background-position:-96px -144px}.icon-thumbs-down{background-position:-120px -144px}.icon-hand-right{background-position:-144px -144px}.icon-hand-left{background-position:-168px -144px}.icon-hand-up{background-position:-192px -144px}.icon-hand-down{background-position:-216px -144px}.icon-circle-arrow-right{background-position:-240px -144px}.icon-circle-arrow-left{background-position:-264px -144px}.icon-circle-arrow-up{background-position:-288px -144px}.icon-circle-arrow-down{background-position:-312px -144px}.icon-globe{background-position:-336px -144px}.icon-wrench{background-position:-360px -144px}.icon-tasks{background-position:-384px -144px}.icon-filter{background-position:-408px -144px}.icon-briefcase{background-position:-432px -144px}.icon-fullscreen{background-position:-456px -144px}.dropup,.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-top:4px solid #000;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.dropdown .caret{margin-top:8px;margin-left:2px}.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;list-style:none;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-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}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.dropdown-menu a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap}.dropdown-menu li>a:hover,.dropdown-menu li>a:focus,.dropdown-submenu:hover>a{color:#fff;text-decoration:none;background-color:#08c;background-color:#0081c2;background-image:-moz-linear-gradient(top,#08c,#0077b3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#0077b3));background-image:-webkit-linear-gradient(top,#08c,#0077b3);background-image:-o-linear-gradient(top,#08c,#0077b3);background-image:linear-gradient(to bottom,#08c,#0077b3);background-repeat:repeat-x;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0077b3',GradientType=0)}.dropdown-menu .active>a,.dropdown-menu .active>a:hover{color:#fff;text-decoration:none;background-color:#08c;background-color:#0081c2;background-image:linear-gradient(to bottom,#08c,#0077b3);background-image:-moz-linear-gradient(top,#08c,#0077b3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#0077b3));background-image:-webkit-linear-gradient(top,#08c,#0077b3);background-image:-o-linear-gradient(top,#08c,#0077b3);background-repeat:repeat-x;outline:0;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0077b3',GradientType=0)}.dropdown-menu .disabled>a,.dropdown-menu .disabled>a:hover{color:#999}.dropdown-menu .disabled>a:hover{text-decoration:none;cursor:default;background-color:transparent}.open{*z-index:1000}.open>.dropdown-menu{display:block}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px}.dropdown-submenu:hover>.dropdown-menu{display:block}.dropdown-submenu>a:after{display:block;float:right;width:0;height:0;margin-top:5px;margin-right:-10px;border-color:transparent;border-left-color:#ccc;border-style:solid;border-width:5px 0 5px 5px;content:" "}.dropdown-submenu:hover>a:after{border-left-color:#fff}.dropdown .dropdown-menu .nav-header{padding-right:20px;padding-left:20px}.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 #e3e3e3;-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{opacity:0;-webkit-transition:opacity .15s linear;-moz-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-moz-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.collapse.in{height:auto}.close{float:right;font-size:20px;font-weight:bold;line-height:20px;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.4;filter:alpha(opacity=40)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.btn{display:inline-block;*display:inline;padding:4px 14px;margin-bottom:0;*margin-left:.3em;font-size:14px;line-height:20px;*line-height:20px;color:#333;text-align:center;text-shadow:0 1px 1px rgba(255,255,255,0.75);vertical-align:middle;cursor:pointer;background-color:#f5f5f5;*background-color:#e6e6e6;background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-repeat:repeat-x;border:1px solid #bbb;*border:0;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-bottom-color:#a2a2a2;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0);filter:progid:dximagetransform.microsoft.gradient(enabled=false);*zoom:1;-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)}.btn:hover,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#333;background-color:#e6e6e6;*background-color:#d9d9d9}.btn:active,.btn.active{background-color:#ccc \9}.btn:first-child{*margin-left:0}.btn:hover{color:#333;text-decoration:none;background-color:#e6e6e6;*background-color:#d9d9d9;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.active,.btn:active{background-color:#e6e6e6;background-color:#d9d9d9 \9;background-image:none;outline:0;-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)}.btn.disabled,.btn[disabled]{cursor:default;background-color:#e6e6e6;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-large{padding:9px 14px;font-size:16px;line-height:normal;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.btn-large [class^="icon-"]{margin-top:2px}.btn-small{padding:3px 9px;font-size:12px;line-height:18px}.btn-small [class^="icon-"]{margin-top:0}.btn-mini{padding:2px 6px;font-size:11px;line-height:17px}.btn-block{display:block;width:100%;padding-right:0;padding-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.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{border-color:#c5c5c5;border-color:rgba(0,0,0,0.15) rgba(0,0,0,0.15) rgba(0,0,0,0.25)}.btn-primary{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#006dcc;*background-color:#04c;background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));background-image:-webkit-linear-gradient(top,#08c,#04c);background-image:-o-linear-gradient(top,#08c,#04c);background-image:linear-gradient(to bottom,#08c,#04c);background-image:-moz-linear-gradient(top,#08c,#04c);background-repeat:repeat-x;border-color:#04c #04c #002a80;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(startColorstr='#ff0088cc',endColorstr='#ff0044cc',GradientType=0);filter:progid:dximagetransform.microsoft.gradient(enabled=false)}.btn-primary:hover,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#fff;background-color:#04c;*background-color:#003bb3}.btn-primary:active,.btn-primary.active{background-color:#039 \9}.btn-warning{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#faa732;*background-color:#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(to bottom,#fbb450,#f89406);background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-repeat:repeat-x;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(startColorstr='#fffbb450',endColorstr='#fff89406',GradientType=0);filter:progid:dximagetransform.microsoft.gradient(enabled=false)}.btn-warning:hover,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#fff;background-color:#f89406;*background-color:#df8505}.btn-warning:active,.btn-warning.active{background-color:#c67605 \9}.btn-danger{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#da4f49;*background-color:#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(to bottom,#ee5f5b,#bd362f);background-image:-moz-linear-gradient(top,#ee5f5b,#bd362f);background-repeat:repeat-x;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(startColorstr='#ffee5f5b',endColorstr='#ffbd362f',GradientType=0);filter:progid:dximagetransform.microsoft.gradient(enabled=false)}.btn-danger:hover,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#fff;background-color:#bd362f;*background-color:#a9302a}.btn-danger:active,.btn-danger.active{background-color:#942a25 \9}.btn-success{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#5bb75b;*background-color:#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(to bottom,#62c462,#51a351);background-image:-moz-linear-gradient(top,#62c462,#51a351);background-repeat:repeat-x;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(startColorstr='#ff62c462',endColorstr='#ff51a351',GradientType=0);filter:progid:dximagetransform.microsoft.gradient(enabled=false)}.btn-success:hover,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#fff;background-color:#51a351;*background-color:#499249}.btn-success:active,.btn-success.active{background-color:#408140 \9}.btn-info{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#49afcd;*background-color:#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(to bottom,#5bc0de,#2f96b4);background-image:-moz-linear-gradient(top,#5bc0de,#2f96b4);background-repeat:repeat-x;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(startColorstr='#ff5bc0de',endColorstr='#ff2f96b4',GradientType=0);filter:progid:dximagetransform.microsoft.gradient(enabled=false)}.btn-info:hover,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#fff;background-color:#2f96b4;*background-color:#2a85a0}.btn-info:active,.btn-info.active{background-color:#24748c \9}.btn-inverse{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#363636;*background-color:#222;background-image:-webkit-gradient(linear,0 0,0 100%,from(#444),to(#222));background-image:-webkit-linear-gradient(top,#444,#222);background-image:-o-linear-gradient(top,#444,#222);background-image:linear-gradient(to bottom,#444,#222);background-image:-moz-linear-gradient(top,#444,#222);background-repeat:repeat-x;border-color:#222 #222 #000;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(startColorstr='#ff444444',endColorstr='#ff222222',GradientType=0);filter:progid:dximagetransform.microsoft.gradient(enabled=false)}.btn-inverse:hover,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#fff;background-color:#222;*background-color:#151515}.btn-inverse:active,.btn-inverse.active{background-color:#080808 \9}button.btn,input[type="submit"].btn{*padding-top:3px;*padding-bottom:3px}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-link,.btn-link:active,.btn-link[disabled]{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-link{color:#08c;cursor:pointer;border-color:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-link:hover{color:#005580;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover{color:#333;text-decoration:none}.btn-group{position:relative;*margin-left:.3em;font-size:0;white-space:nowrap;vertical-align:middle}.btn-group:first-child{*margin-left:0}.btn-group+.btn-group{margin-left:5px}.btn-toolbar{margin-top:10px;margin-bottom:10px;font-size:0}.btn-toolbar .btn-group{display:inline-block;*display:inline;*zoom:1}.btn-toolbar .btn+.btn,.btn-toolbar .btn-group+.btn,.btn-toolbar .btn+.btn-group{margin-left:5px}.btn-group>.btn{position:relative;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group>.btn+.btn{margin-left:-1px}.btn-group>.btn,.btn-group>.dropdown-menu{font-size:14px}.btn-group>.btn-mini{font-size:11px}.btn-group>.btn-small{font-size:12px}.btn-group>.btn-large{font-size:16px}.btn-group>.btn:first-child{margin-left:0;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.btn-group>.btn.large:first-child{margin-left:0;-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright: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>.btn+.dropdown-toggle{*padding-top:5px;padding-right:8px;*padding-bottom:5px;padding-left: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)}.btn-group>.btn-mini+.dropdown-toggle{*padding-top:2px;padding-right:5px;*padding-bottom:2px;padding-left:5px}.btn-group>.btn-small+.dropdown-toggle{*padding-top:5px;*padding-bottom:4px}.btn-group>.btn-large+.dropdown-toggle{*padding-top:7px;padding-right:12px;*padding-bottom:7px;padding-left:12px}.btn-group.open .dropdown-toggle{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)}.btn-group.open .btn.dropdown-toggle{background-color:#e6e6e6}.btn-group.open .btn-primary.dropdown-toggle{background-color:#04c}.btn-group.open .btn-warning.dropdown-toggle{background-color:#f89406}.btn-group.open .btn-danger.dropdown-toggle{background-color:#bd362f}.btn-group.open .btn-success.dropdown-toggle{background-color:#51a351}.btn-group.open .btn-info.dropdown-toggle{background-color:#2f96b4}.btn-group.open .btn-inverse.dropdown-toggle{background-color:#222}.btn .caret{margin-top:8px;margin-left:0}.btn-mini .caret,.btn-small .caret,.btn-large .caret{margin-top:6px}.btn-large .caret{border-top-width:5px;border-right-width:5px;border-left-width:5px}.dropup .btn-large .caret{border-top:0;border-bottom:5px solid #000}.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#fff;border-bottom-color:#fff}.btn-group-vertical{display:inline-block;*display:inline;*zoom:1}.btn-group-vertical .btn{display:block;float:none;width:100%;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group-vertical .btn+.btn{margin-top:-1px;margin-left:0}.btn-group-vertical .btn:first-child{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.btn-group-vertical .btn:last-child{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.btn-group-vertical .btn-large:first-child{-webkit-border-radius:6px 6px 0 0;-moz-border-radius:6px 6px 0 0;border-radius:6px 6px 0 0}.btn-group-vertical .btn-large:last-child{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.alert{padding:8px 35px 8px 14px;margin-bottom:20px;color:#c09853;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}.alert h4{margin:0}.alert .close{position:relative;top:-2px;right:-21px;line-height:20px}.alert-success{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.alert-danger,.alert-error{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.alert-info{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.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-bottom:20px;margin-left:0;list-style:none}.nav>li>a{display:block}.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>.pull-right{float:right}.nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:20px;color:#999;text-shadow:0 1px 0 rgba(255,255,255,0.5);text-transform:uppercase}.nav li+.nav-header{margin-top:9px}.nav-list{padding-right:15px;padding-left:15px;margin-bottom:0}.nav-list>li>a,.nav-list .nav-header{margin-right:-15px;margin-left:-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:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.2);background-color:#08c}.nav-list [class^="icon-"]{margin-right:2px}.nav-list .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.nav-tabs,.nav-pills{*zoom:1}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;line-height:0;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:20px;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:#eee #eee #ddd}.nav-tabs>.active>a,.nav-tabs>.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.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:#fff;background-color:#08c}.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-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-topleft:4px}.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomright:4px;-moz-border-radius-bottomleft:4px}.nav-tabs.nav-stacked>li>a:hover{z-index:2;border-color:#ddd}.nav-pills.nav-stacked>li>a{margin-bottom:3px}.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px}.nav-tabs .dropdown-menu{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.nav-pills .dropdown-menu{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.nav .dropdown-toggle .caret{margin-top:6px;border-top-color:#08c;border-bottom-color:#08c}.nav .dropdown-toggle:hover .caret{border-top-color:#005580;border-bottom-color:#005580}.nav-tabs .dropdown-toggle .caret{margin-top:8px}.nav .active .dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.nav-tabs .active .dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.nav>.dropdown.active>a:hover{cursor:pointer}.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover{color:#fff;background-color:#999;border-color:#999}.nav li.dropdown.open .caret,.nav li.dropdown.open.active .caret,.nav li.dropdown.open a:hover .caret{border-top-color:#fff;border-bottom-color:#fff;opacity:1;filter:alpha(opacity=100)}.tabs-stacked .open>a:hover{border-color:#999}.tabbable{*zoom:1}.tabbable:before,.tabbable:after{display:table;line-height:0;content:""}.tabbable:after{clear:both}.tab-content{overflow:auto}.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-top-color:#ddd;border-bottom-color:transparent}.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:#eee #ddd #eee #eee}.tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover{border-color:#ddd transparent #ddd #ddd;*border-right-color:#fff}.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:#eee #eee #eee #ddd}.tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover{border-color:#ddd #ddd #ddd transparent;*border-left-color:#fff}.nav>.disabled>a{color:#999}.nav>.disabled>a:hover{text-decoration:none;cursor:default;background-color:transparent}.navbar{*position:relative;*z-index:2;margin-bottom:20px;overflow:visible;color:#777}.navbar-inner{min-height:40px;padding-right:20px;padding-left:20px;background-color:#fafafa;background-image:-moz-linear-gradient(top,#fff,#f2f2f2);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#f2f2f2));background-image:-webkit-linear-gradient(top,#fff,#f2f2f2);background-image:-o-linear-gradient(top,#fff,#f2f2f2);background-image:linear-gradient(to bottom,#fff,#f2f2f2);background-repeat:repeat-x;border:1px solid #d4d4d4;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#ffffffff',endColorstr='#fff2f2f2',GradientType=0);*zoom:1;-webkit-box-shadow:0 1px 4px rgba(0,0,0,0.065);-moz-box-shadow:0 1px 4px rgba(0,0,0,0.065);box-shadow:0 1px 4px rgba(0,0,0,0.065)}.navbar-inner:before,.navbar-inner:after{display:table;line-height:0;content:""}.navbar-inner:after{clear:both}.navbar .container{width:auto}.nav-collapse.collapse{height:auto}.navbar .brand{display:block;float:left;padding:10px 20px 10px;margin-left:-20px;font-size:20px;font-weight:200;color:#777;text-shadow:0 1px 0 #fff}.navbar .brand:hover{text-decoration:none}.navbar-text{margin-bottom:0;line-height:40px}.navbar-link{color:#777}.navbar-link:hover{color:#333}.navbar .divider-vertical{height:40px;margin:0 9px;border-right:1px solid #fff;border-left:1px solid #f2f2f2}.navbar .btn,.navbar .btn-group{margin-top:5px}.navbar .btn-group .btn,.navbar .input-prepend .btn,.navbar .input-append .btn{margin-top:0}.navbar-form{margin-bottom:0;*zoom:1}.navbar-form:before,.navbar-form:after{display:table;line-height:0;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,.navbar-form .btn{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:5px;margin-bottom:0}.navbar-search .search-query{padding:4px 14px;margin-bottom:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.navbar-static-top{position:static;width:100%;margin-bottom:0}.navbar-static-top .navbar-inner{-webkit-border-radius:0;-moz-border-radius:0;border-radius: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-static-top .navbar-inner{border-width:0 0 1px}.navbar-fixed-bottom .navbar-inner{border-width:1px 0 0}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-right:0;padding-left:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.navbar-fixed-top{top:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.1),0 1px 10px rgba(0,0,0,0.1);-moz-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.1),0 1px 10px rgba(0,0,0,0.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.1),0 1px 10px rgba(0,0,0,0.1)}.navbar-fixed-bottom{bottom:0}.navbar-fixed-bottom .navbar-inner{-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,0.1),0 -1px 10px rgba(0,0,0,0.1);-moz-box-shadow:inset 0 1px 0 rgba(0,0,0,0.1),0 -1px 10px rgba(0,0,0,0.1);box-shadow:inset 0 1px 0 rgba(0,0,0,0.1),0 -1px 10px rgba(0,0,0,0.1)}.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0}.navbar .nav.pull-right{float:right;margin-right:0}.navbar .nav>li{float:left}.navbar .nav>li>a{float:none;padding:10px 15px 10px;color:#777;text-decoration:none;text-shadow:0 1px 0 #fff}.navbar .nav .dropdown-toggle .caret{margin-top:8px}.navbar .nav>li>a:focus,.navbar .nav>li>a:hover{color:#333;text-decoration:none;background-color:transparent}.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{color:#555;text-decoration:none;background-color:#e5e5e5;-webkit-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);box-shadow:inset 0 3px 8px rgba(0,0,0,0.125)}.navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-right:5px;margin-left:5px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#ededed;*background-color:#e5e5e5;background-image:-webkit-gradient(linear,0 0,0 100%,from(#f2f2f2),to(#e5e5e5));background-image:-webkit-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:-o-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:linear-gradient(to bottom,#f2f2f2,#e5e5e5);background-image:-moz-linear-gradient(top,#f2f2f2,#e5e5e5);background-repeat:repeat-x;border-color:#e5e5e5 #e5e5e5 #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(startColorstr='#fff2f2f2',endColorstr='#ffe5e5e5',GradientType=0);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)}.navbar .btn-navbar:hover,.navbar .btn-navbar:active,.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar[disabled]{color:#fff;background-color:#e5e5e5;*background-color:#d9d9d9}.navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#ccc \9}.navbar .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}.navbar .nav>li>.dropdown-menu:before{position:absolute;top:-7px;left:9px;display:inline-block;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-left:7px solid transparent;border-bottom-color:rgba(0,0,0,0.2);content:''}.navbar .nav>li>.dropdown-menu:after{position:absolute;top:-6px;left:10px;display:inline-block;border-right:6px solid transparent;border-bottom:6px solid #fff;border-left:6px solid transparent;content:''}.navbar-fixed-bottom .nav>li>.dropdown-menu:before{top:auto;bottom:-7px;border-top:7px solid #ccc;border-bottom:0;border-top-color:rgba(0,0,0,0.2)}.navbar-fixed-bottom .nav>li>.dropdown-menu:after{top:auto;bottom:-6px;border-top:6px solid #fff;border-bottom:0}.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{color:#555;background-color:#e5e5e5}.navbar .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#777;border-bottom-color:#777}.navbar .nav li.dropdown.open>.dropdown-toggle .caret,.navbar .nav li.dropdown.active>.dropdown-toggle .caret,.navbar .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.navbar .pull-right>li>.dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right{right:0;left:auto}.navbar .pull-right>li>.dropdown-menu:before,.navbar .nav>li>.dropdown-menu.pull-right:before{right:12px;left:auto}.navbar .pull-right>li>.dropdown-menu:after,.navbar .nav>li>.dropdown-menu.pull-right:after{right:13px;left:auto}.navbar .pull-right>li>.dropdown-menu .dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right .dropdown-menu{right:100%;left:auto;margin-right:-1px;margin-left:0;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.navbar-inverse{color:#999}.navbar-inverse .navbar-inner{background-color:#1b1b1b;background-image:-moz-linear-gradient(top,#222,#111);background-image:-webkit-gradient(linear,0 0,0 100%,from(#222),to(#111));background-image:-webkit-linear-gradient(top,#222,#111);background-image:-o-linear-gradient(top,#222,#111);background-image:linear-gradient(to bottom,#222,#111);background-repeat:repeat-x;border-color:#252525;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#ff222222',endColorstr='#ff111111',GradientType=0)}.navbar-inverse .brand,.navbar-inverse .nav>li>a{color:#999;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-inverse .brand:hover,.navbar-inverse .nav>li>a:hover{color:#fff}.navbar-inverse .nav>li>a:focus,.navbar-inverse .nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .nav .active>a,.navbar-inverse .nav .active>a:hover,.navbar-inverse .nav .active>a:focus{color:#fff;background-color:#111}.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .divider-vertical{border-right-color:#222;border-left-color:#111}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle{color:#fff;background-color:#111}.navbar-inverse .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#999;border-bottom-color:#999}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .navbar-search .search-query{color:#fff;background-color:#515151;border-color:#111;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none}.navbar-inverse .navbar-search .search-query:-moz-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query:-ms-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query:focus,.navbar-inverse .navbar-search .search-query.focused{padding:5px 15px;color:#333;text-shadow:0 1px 0 #fff;background-color:#fff;border:0;outline: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)}.navbar-inverse .btn-navbar{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e0e0e;*background-color:#040404;background-image:-webkit-gradient(linear,0 0,0 100%,from(#151515),to(#040404));background-image:-webkit-linear-gradient(top,#151515,#040404);background-image:-o-linear-gradient(top,#151515,#040404);background-image:linear-gradient(to bottom,#151515,#040404);background-image:-moz-linear-gradient(top,#151515,#040404);background-repeat:repeat-x;border-color:#040404 #040404 #000;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(startColorstr='#ff151515',endColorstr='#ff040404',GradientType=0);filter:progid:dximagetransform.microsoft.gradient(enabled=false)}.navbar-inverse .btn-navbar:hover,.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active,.navbar-inverse .btn-navbar.disabled,.navbar-inverse .btn-navbar[disabled]{color:#fff;background-color:#040404;*background-color:#000}.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active{background-color:#000 \9}.breadcrumb{padding:8px 15px;margin:0 0 20px;list-style:none;background-color:#f5f5f5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.breadcrumb li{display:inline-block;*display:inline;text-shadow:0 1px 0 #fff;*zoom:1}.breadcrumb .divider{padding:0 5px;color:#ccc}.breadcrumb .active{color:#999}.pagination{height:40px;margin:20px 0}.pagination ul{display:inline-block;*display:inline;margin-bottom:0;margin-left:0;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;*zoom:1;-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 ul>li{display:inline}.pagination ul>li>a,.pagination ul>li>span{float:left;padding:0 14px;line-height:38px;text-decoration:none;background-color:#fff;border:1px solid #ddd;border-left-width:0}.pagination ul>li>a:hover,.pagination ul>.active>a,.pagination ul>.active>span{background-color:#f5f5f5}.pagination ul>.active>a,.pagination ul>.active>span{color:#999;cursor:default}.pagination ul>.disabled>span,.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover{color:#999;cursor:default;background-color:transparent}.pagination ul>li:first-child>a,.pagination ul>li:first-child>span{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 ul>li:last-child>a,.pagination ul>li:last-child>span{-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:20px 0;text-align:center;list-style:none;*zoom:1}.pager:before,.pager:after{display:table;line-height:0;content:""}.pager:after{clear:both}.pager li{display:inline}.pager a,.pager span{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,.pager .next span{float:right}.pager .previous a{float:left}.pager .disabled a,.pager .disabled a:hover,.pager .disabled span{color:#999;cursor:default;background-color:#fff}.modal-open .modal .dropdown-menu{z-index:2050}.modal-open .modal .dropdown.open{*z-index:2050}.modal-open .modal .popover{z-index:2060}.modal-open .modal .tooltip{z-index:2080}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop,.modal-backdrop.fade.in{opacity:.8;filter:alpha(opacity=80)}.modal{position:fixed;top:50%;left:50%;z-index:1050;width:560px;margin:-250px 0 0 -280px;overflow:auto;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.3);*border:1px solid #999;-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{top:-25%;-webkit-transition:opacity .3s linear,top .3s ease-out;-moz-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}.modal.fade.in{top:50%}.modal-header{padding:9px 15px;border-bottom:1px solid #eee}.modal-header .close{margin-top:2px}.modal-header h3{margin:0;line-height:30px}.modal-body{max-height:400px;padding:15px;overflow-y:auto}.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;*zoom:1;-webkit-box-shadow:inset 0 1px 0 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff}.modal-footer:before,.modal-footer:after{display:table;line-height:0;content:""}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.tooltip{position:absolute;z-index:1030;display:block;padding:5px;font-size:11px;opacity:0;filter:alpha(opacity=0);visibility:visible}.tooltip.in{opacity:.8;filter:alpha(opacity=80)}.tooltip.top{margin-top:-3px}.tooltip.right{margin-left:3px}.tooltip.bottom{margin-top:3px}.tooltip.left{margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;-webkit-border-radius:4px;-moz-border-radius:4px;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-top-color:#000;border-width:5px 5px 0}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#000;border-width:5px 5px 5px 0}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#000;border-width:5px 0 5px 5px}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#000;border-width:0 5px 5px}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;width:236px;padding:1px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-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}.popover.top{margin-bottom:10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-right: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;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover-content p,.popover-content ul,.popover-content ol{margin-bottom:0}.popover .arrow,.popover .arrow:after{position:absolute;display:inline-block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow:after{z-index:-1;content:""}.popover.top .arrow{bottom:-10px;left:50%;margin-left:-10px;border-top-color:#fff;border-width:10px 10px 0}.popover.top .arrow:after{bottom:-1px;left:-11px;border-top-color:rgba(0,0,0,0.25);border-width:11px 11px 0}.popover.right .arrow{top:50%;left:-10px;margin-top:-10px;border-right-color:#fff;border-width:10px 10px 10px 0}.popover.right .arrow:after{bottom:-11px;left:-1px;border-right-color:rgba(0,0,0,0.25);border-width:11px 11px 11px 0}.popover.bottom .arrow{top:-10px;left:50%;margin-left:-10px;border-bottom-color:#fff;border-width:0 10px 10px}.popover.bottom .arrow:after{top:-1px;left:-11px;border-bottom-color:rgba(0,0,0,0.25);border-width:0 11px 11px}.popover.left .arrow{top:50%;right:-10px;margin-top:-10px;border-left-color:#fff;border-width:10px 0 10px 10px}.popover.left .arrow:after{right:-1px;bottom:-11px;border-left-color:rgba(0,0,0,0.25);border-width:11px 0 11px 11px}.thumbnails{margin-left:-20px;list-style:none;*zoom:1}.thumbnails:before,.thumbnails:after{display:table;line-height:0;content:""}.thumbnails:after{clear:both}.row-fluid .thumbnails{margin-left:0}.thumbnails>li{float:left;margin-bottom:20px;margin-left:20px}.thumbnail{display:block;padding:4px;line-height:20px;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.055);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.055);box-shadow:0 1px 3px rgba(0,0,0,0.055);-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}a.thumbnail:hover{border-color:#08c;-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-right:auto;margin-left:auto}.thumbnail .caption{padding:9px;color:#555}.label,.badge{font-size:11.844px;font-weight:bold;line-height:14px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);white-space:nowrap;vertical-align:baseline;background-color:#999}.label{padding:1px 4px 2px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.badge{padding:1px 9px 2px;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px}a.label:hover,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.label-important,.badge-important{background-color:#b94a48}.label-important[href],.badge-important[href]{background-color:#953b39}.label-warning,.badge-warning{background-color:#f89406}.label-warning[href],.badge-warning[href]{background-color:#c67605}.label-success,.badge-success{background-color:#468847}.label-success[href],.badge-success[href]{background-color:#356635}.label-info,.badge-info{background-color:#3a87ad}.label-info[href],.badge-info[href]{background-color:#2d6987}.label-inverse,.badge-inverse{background-color:#333}.label-inverse[href],.badge-inverse[href]{background-color:#1a1a1a}.btn .label,.btn .badge{position:relative;top:-1px}.btn-mini .label,.btn-mini .badge{top:0}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-ms-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 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:#f7f7f7;background-image:-moz-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(to bottom,#f5f5f5,#f9f9f9);background-repeat:repeat-x;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#fff9f9f9',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)}.progress .bar{float:left;width:0;height:100%;font-size:12px;color:#fff;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:-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(to bottom,#149bdf,#0480be);background-repeat:repeat-x;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#ff149bdf',endColorstr='#ff0480be',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;box-sizing:border-box;-webkit-transition:width .6s ease;-moz-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress .bar+.bar{-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15)}.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:-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;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-danger .bar,.progress .bar-danger{background-color:#dd514c;background-image:-moz-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(to bottom,#ee5f5b,#c43c35);background-repeat:repeat-x;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffc43c35',GradientType=0)}.progress-danger.progress-striped .bar,.progress-striped .bar-danger{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:-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,.progress .bar-success{background-color:#5eb95e;background-image:-moz-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(to bottom,#62c462,#57a957);background-repeat:repeat-x;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff57a957',GradientType=0)}.progress-success.progress-striped .bar,.progress-striped .bar-success{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:-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,.progress .bar-info{background-color:#4bb1cf;background-image:-moz-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(to bottom,#5bc0de,#339bb9);background-repeat:repeat-x;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff339bb9',GradientType=0)}.progress-info.progress-striped .bar,.progress-striped .bar-info{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:-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,.progress .bar-warning{background-color:#faa732;background-image:-moz-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(to bottom,#fbb450,#f89406);background-repeat:repeat-x;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#fffbb450',endColorstr='#fff89406',GradientType=0)}.progress-warning.progress-striped .bar,.progress-striped .bar-warning{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:-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:20px}.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-toggle{cursor:pointer}.accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5}.carousel{position:relative;margin-bottom:20px;line-height:1}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel .item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-moz-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.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:#fff;text-align:center;background:#222;border:3px solid #fff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:.5;filter:alpha(opacity=50)}.carousel-control.right{right:15px;left:auto}.carousel-control:hover{color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-caption{position:absolute;right:0;bottom:0;left:0;padding:15px;background:#333;background:rgba(0,0,0,0.75)}.carousel-caption h4,.carousel-caption p{line-height:20px;color:#fff}.carousel-caption h4{margin:0 0 5px}.carousel-caption p{margin-bottom:0}.hero-unit{padding:60px;margin-bottom:30px;background-color:#eee;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;letter-spacing:-1px;color:inherit}.hero-unit p{font-size:18px;font-weight:200;line-height:30px;color:inherit}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden}.affix{position:fixed}
binary file changed (absent → 8777 bytes)
@@ -0,0 +1,2027 @@+/* ===================================================+ * bootstrap-transition.js v2.1.1+ * http://twitter.github.com/bootstrap/javascript.html#transitions+ * ===================================================+ * Copyright 2012 Twitter, 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.+ * ========================================================== */+++!function ($) {++ $(function () {++ "use strict"; // jshint ;_;+++ /* CSS TRANSITION SUPPORT (http://www.modernizr.com/)+ * ======================================================= */++ $.support.transition = (function () {++ var transitionEnd = (function () {++ var el = document.createElement('bootstrap')+ , transEndEventNames = {+ 'WebkitTransition' : 'webkitTransitionEnd'+ , 'MozTransition' : 'transitionend'+ , 'OTransition' : 'oTransitionEnd otransitionend'+ , 'transition' : 'transitionend'+ }+ , name++ for (name in transEndEventNames){+ if (el.style[name] !== undefined) {+ return transEndEventNames[name]+ }+ }++ }())++ return transitionEnd && {+ end: transitionEnd+ }++ })()++ })++}(window.jQuery);/* ==========================================================+ * bootstrap-alert.js v2.1.1+ * http://twitter.github.com/bootstrap/javascript.html#alerts+ * ==========================================================+ * Copyright 2012 Twitter, 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.+ * ========================================================== */+++!function ($) {++ "use strict"; // jshint ;_;+++ /* ALERT CLASS DEFINITION+ * ====================== */++ var dismiss = '[data-dismiss="alert"]'+ , Alert = function (el) {+ $(el).on('click', dismiss, this.close)+ }++ Alert.prototype.close = function (e) {+ var $this = $(this)+ , selector = $this.attr('data-target')+ , $parent++ if (!selector) {+ selector = $this.attr('href')+ selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7+ }++ $parent = $(selector)++ e && e.preventDefault()++ $parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent())++ $parent.trigger(e = $.Event('close'))++ if (e.isDefaultPrevented()) return++ $parent.removeClass('in')++ function removeElement() {+ $parent+ .trigger('closed')+ .remove()+ }++ $.support.transition && $parent.hasClass('fade') ?+ $parent.on($.support.transition.end, removeElement) :+ removeElement()+ }+++ /* ALERT PLUGIN DEFINITION+ * ======================= */++ $.fn.alert = function (option) {+ return this.each(function () {+ var $this = $(this)+ , data = $this.data('alert')+ if (!data) $this.data('alert', (data = new Alert(this)))+ if (typeof option == 'string') data[option].call($this)+ })+ }++ $.fn.alert.Constructor = Alert+++ /* ALERT DATA-API+ * ============== */++ $(function () {+ $('body').on('click.alert.data-api', dismiss, Alert.prototype.close)+ })++}(window.jQuery);/* ============================================================+ * bootstrap-button.js v2.1.1+ * http://twitter.github.com/bootstrap/javascript.html#buttons+ * ============================================================+ * Copyright 2012 Twitter, 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.+ * ============================================================ */+++!function ($) {++ "use strict"; // jshint ;_;+++ /* BUTTON PUBLIC CLASS DEFINITION+ * ============================== */++ var Button = function (element, options) {+ this.$element = $(element)+ this.options = $.extend({}, $.fn.button.defaults, options)+ }++ Button.prototype.setState = function (state) {+ var d = 'disabled'+ , $el = this.$element+ , data = $el.data()+ , val = $el.is('input') ? 'val' : 'html'++ state = state + 'Text'+ data.resetText || $el.data('resetText', $el[val]())++ $el[val](data[state] || this.options[state])++ // push to event loop to allow forms to submit+ setTimeout(function () {+ state == 'loadingText' ?+ $el.addClass(d).attr(d, d) :+ $el.removeClass(d).removeAttr(d)+ }, 0)+ }++ Button.prototype.toggle = function () {+ var $parent = this.$element.closest('[data-toggle="buttons-radio"]')++ $parent && $parent+ .find('.active')+ .removeClass('active')++ this.$element.toggleClass('active')+ }+++ /* BUTTON PLUGIN DEFINITION+ * ======================== */++ $.fn.button = function (option) {+ return this.each(function () {+ var $this = $(this)+ , data = $this.data('button')+ , options = typeof option == 'object' && option+ if (!data) $this.data('button', (data = new Button(this, options)))+ if (option == 'toggle') data.toggle()+ else if (option) data.setState(option)+ })+ }++ $.fn.button.defaults = {+ loadingText: 'loading...'+ }++ $.fn.button.Constructor = Button+++ /* BUTTON DATA-API+ * =============== */++ $(function () {+ $('body').on('click.button.data-api', '[data-toggle^=button]', function ( e ) {+ var $btn = $(e.target)+ if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')+ $btn.button('toggle')+ })+ })++}(window.jQuery);/* ==========================================================+ * bootstrap-carousel.js v2.1.1+ * http://twitter.github.com/bootstrap/javascript.html#carousel+ * ==========================================================+ * Copyright 2012 Twitter, 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.+ * ========================================================== */+++!function ($) {++ "use strict"; // jshint ;_;+++ /* CAROUSEL CLASS DEFINITION+ * ========================= */++ var Carousel = function (element, options) {+ this.$element = $(element)+ this.options = options+ this.options.slide && this.slide(this.options.slide)+ this.options.pause == 'hover' && this.$element+ .on('mouseenter', $.proxy(this.pause, this))+ .on('mouseleave', $.proxy(this.cycle, this))+ }++ Carousel.prototype = {++ cycle: function (e) {+ if (!e) this.paused = false+ this.options.interval+ && !this.paused+ && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))+ return this+ }++ , to: function (pos) {+ var $active = this.$element.find('.item.active')+ , children = $active.parent().children()+ , activePos = children.index($active)+ , that = this++ if (pos > (children.length - 1) || pos < 0) return++ if (this.sliding) {+ return this.$element.one('slid', function () {+ that.to(pos)+ })+ }++ if (activePos == pos) {+ return this.pause().cycle()+ }++ return this.slide(pos > activePos ? 'next' : 'prev', $(children[pos]))+ }++ , pause: function (e) {+ if (!e) this.paused = true+ if (this.$element.find('.next, .prev').length && $.support.transition.end) {+ this.$element.trigger($.support.transition.end)+ this.cycle()+ }+ clearInterval(this.interval)+ this.interval = null+ return this+ }++ , next: function () {+ if (this.sliding) return+ return this.slide('next')+ }++ , prev: function () {+ if (this.sliding) return+ return this.slide('prev')+ }++ , slide: function (type, next) {+ var $active = this.$element.find('.item.active')+ , $next = next || $active[type]()+ , isCycling = this.interval+ , direction = type == 'next' ? 'left' : 'right'+ , fallback = type == 'next' ? 'first' : 'last'+ , that = this+ , e = $.Event('slide', {+ relatedTarget: $next[0]+ })++ this.sliding = true++ isCycling && this.pause()++ $next = $next.length ? $next : this.$element.find('.item')[fallback]()++ if ($next.hasClass('active')) return++ if ($.support.transition && this.$element.hasClass('slide')) {+ this.$element.trigger(e)+ if (e.isDefaultPrevented()) return+ $next.addClass(type)+ $next[0].offsetWidth // force reflow+ $active.addClass(direction)+ $next.addClass(direction)+ this.$element.one($.support.transition.end, function () {+ $next.removeClass([type, direction].join(' ')).addClass('active')+ $active.removeClass(['active', direction].join(' '))+ that.sliding = false+ setTimeout(function () { that.$element.trigger('slid') }, 0)+ })+ } else {+ this.$element.trigger(e)+ if (e.isDefaultPrevented()) return+ $active.removeClass('active')+ $next.addClass('active')+ this.sliding = false+ this.$element.trigger('slid')+ }++ isCycling && this.cycle()++ return this+ }++ }+++ /* CAROUSEL PLUGIN DEFINITION+ * ========================== */++ $.fn.carousel = function (option) {+ return this.each(function () {+ var $this = $(this)+ , data = $this.data('carousel')+ , options = $.extend({}, $.fn.carousel.defaults, typeof option == 'object' && option)+ , action = typeof option == 'string' ? option : options.slide+ if (!data) $this.data('carousel', (data = new Carousel(this, options)))+ if (typeof option == 'number') data.to(option)+ else if (action) data[action]()+ else if (options.interval) data.cycle()+ })+ }++ $.fn.carousel.defaults = {+ interval: 5000+ , pause: 'hover'+ }++ $.fn.carousel.Constructor = Carousel+++ /* CAROUSEL DATA-API+ * ================= */++ $(function () {+ $('body').on('click.carousel.data-api', '[data-slide]', function ( e ) {+ var $this = $(this), href+ , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7+ , options = !$target.data('modal') && $.extend({}, $target.data(), $this.data())+ $target.carousel(options)+ e.preventDefault()+ })+ })++}(window.jQuery);/* =============================================================+ * bootstrap-collapse.js v2.1.1+ * http://twitter.github.com/bootstrap/javascript.html#collapse+ * =============================================================+ * Copyright 2012 Twitter, 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.+ * ============================================================ */+++!function ($) {++ "use strict"; // jshint ;_;+++ /* COLLAPSE PUBLIC CLASS DEFINITION+ * ================================ */++ var Collapse = function (element, options) {+ this.$element = $(element)+ this.options = $.extend({}, $.fn.collapse.defaults, options)++ if (this.options.parent) {+ this.$parent = $(this.options.parent)+ }++ this.options.toggle && this.toggle()+ }++ Collapse.prototype = {++ constructor: Collapse++ , dimension: function () {+ var hasWidth = this.$element.hasClass('width')+ return hasWidth ? 'width' : 'height'+ }++ , show: function () {+ var dimension+ , scroll+ , actives+ , hasData++ if (this.transitioning) return++ dimension = this.dimension()+ scroll = $.camelCase(['scroll', dimension].join('-'))+ actives = this.$parent && this.$parent.find('> .accordion-group > .in')++ if (actives && actives.length) {+ hasData = actives.data('collapse')+ if (hasData && hasData.transitioning) return+ actives.collapse('hide')+ hasData || actives.data('collapse', null)+ }++ this.$element[dimension](0)+ this.transition('addClass', $.Event('show'), 'shown')+ $.support.transition && this.$element[dimension](this.$element[0][scroll])+ }++ , hide: function () {+ var dimension+ if (this.transitioning) return+ dimension = this.dimension()+ this.reset(this.$element[dimension]())+ this.transition('removeClass', $.Event('hide'), 'hidden')+ this.$element[dimension](0)+ }++ , reset: function (size) {+ var dimension = this.dimension()++ this.$element+ .removeClass('collapse')+ [dimension](size || 'auto')+ [0].offsetWidth++ this.$element[size !== null ? 'addClass' : 'removeClass']('collapse')++ return this+ }++ , transition: function (method, startEvent, completeEvent) {+ var that = this+ , complete = function () {+ if (startEvent.type == 'show') that.reset()+ that.transitioning = 0+ that.$element.trigger(completeEvent)+ }++ this.$element.trigger(startEvent)++ if (startEvent.isDefaultPrevented()) return++ this.transitioning = 1++ this.$element[method]('in')++ $.support.transition && this.$element.hasClass('collapse') ?+ this.$element.one($.support.transition.end, complete) :+ complete()+ }++ , toggle: function () {+ this[this.$element.hasClass('in') ? 'hide' : 'show']()+ }++ }+++ /* COLLAPSIBLE PLUGIN DEFINITION+ * ============================== */++ $.fn.collapse = function (option) {+ return this.each(function () {+ var $this = $(this)+ , data = $this.data('collapse')+ , options = typeof option == 'object' && option+ if (!data) $this.data('collapse', (data = new Collapse(this, options)))+ if (typeof option == 'string') data[option]()+ })+ }++ $.fn.collapse.defaults = {+ toggle: true+ }++ $.fn.collapse.Constructor = Collapse+++ /* COLLAPSIBLE DATA-API+ * ==================== */++ $(function () {+ $('body').on('click.collapse.data-api', '[data-toggle=collapse]', function (e) {+ var $this = $(this), href+ , target = $this.attr('data-target')+ || e.preventDefault()+ || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7+ , option = $(target).data('collapse') ? 'toggle' : $this.data()+ $this[$(target).hasClass('in') ? 'addClass' : 'removeClass']('collapsed')+ $(target).collapse(option)+ })+ })++}(window.jQuery);/* ============================================================+ * bootstrap-dropdown.js v2.1.1+ * http://twitter.github.com/bootstrap/javascript.html#dropdowns+ * ============================================================+ * Copyright 2012 Twitter, 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.+ * ============================================================ */+++!function ($) {++ "use strict"; // jshint ;_;+++ /* DROPDOWN CLASS DEFINITION+ * ========================= */++ var toggle = '[data-toggle=dropdown]'+ , Dropdown = function (element) {+ var $el = $(element).on('click.dropdown.data-api', this.toggle)+ $('html').on('click.dropdown.data-api', function () {+ $el.parent().removeClass('open')+ })+ }++ Dropdown.prototype = {++ constructor: Dropdown++ , toggle: function (e) {+ var $this = $(this)+ , $parent+ , isActive++ if ($this.is('.disabled, :disabled')) return++ $parent = getParent($this)++ isActive = $parent.hasClass('open')++ clearMenus()++ if (!isActive) {+ $parent.toggleClass('open')+ $this.focus()+ }++ return false+ }++ , keydown: function (e) {+ var $this+ , $items+ , $active+ , $parent+ , isActive+ , index++ if (!/(38|40|27)/.test(e.keyCode)) return++ $this = $(this)++ e.preventDefault()+ e.stopPropagation()++ if ($this.is('.disabled, :disabled')) return++ $parent = getParent($this)++ isActive = $parent.hasClass('open')++ if (!isActive || (isActive && e.keyCode == 27)) return $this.click()++ $items = $('[role=menu] li:not(.divider) a', $parent)++ if (!$items.length) return++ 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)+ .focus()+ }++ }++ function clearMenus() {+ getParent($(toggle))+ .removeClass('open')+ }++ function getParent($this) {+ var selector = $this.attr('data-target')+ , $parent++ if (!selector) {+ selector = $this.attr('href')+ selector = selector && /#/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7+ }++ $parent = $(selector)+ $parent.length || ($parent = $this.parent())++ return $parent+ }+++ /* DROPDOWN PLUGIN DEFINITION+ * ========================== */++ $.fn.dropdown = function (option) {+ return this.each(function () {+ var $this = $(this)+ , data = $this.data('dropdown')+ if (!data) $this.data('dropdown', (data = new Dropdown(this)))+ if (typeof option == 'string') data[option].call($this)+ })+ }++ $.fn.dropdown.Constructor = Dropdown+++ /* APPLY TO STANDARD DROPDOWN ELEMENTS+ * =================================== */++ $(function () {+ $('html')+ .on('click.dropdown.data-api touchstart.dropdown.data-api', clearMenus)+ $('body')+ .on('click.dropdown touchstart.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })+ .on('click.dropdown.data-api touchstart.dropdown.data-api' , toggle, Dropdown.prototype.toggle)+ .on('keydown.dropdown.data-api touchstart.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown)+ })++}(window.jQuery);/* =========================================================+ * bootstrap-modal.js v2.1.1+ * http://twitter.github.com/bootstrap/javascript.html#modals+ * =========================================================+ * Copyright 2012 Twitter, 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.+ * ========================================================= */+++!function ($) {++ "use strict"; // jshint ;_;+++ /* MODAL CLASS DEFINITION+ * ====================== */++ var Modal = function (element, options) {+ this.options = options+ this.$element = $(element)+ .delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this))+ this.options.remote && this.$element.find('.modal-body').load(this.options.remote)+ }++ Modal.prototype = {++ constructor: Modal++ , toggle: function () {+ return this[!this.isShown ? 'show' : 'hide']()+ }++ , show: function () {+ var that = this+ , e = $.Event('show')++ this.$element.trigger(e)++ if (this.isShown || e.isDefaultPrevented()) return++ $('body').addClass('modal-open')++ this.isShown = true++ this.escape()++ this.backdrop(function () {+ var transition = $.support.transition && that.$element.hasClass('fade')++ if (!that.$element.parent().length) {+ that.$element.appendTo(document.body) //don't move modals dom position+ }++ that.$element+ .show()++ if (transition) {+ that.$element[0].offsetWidth // force reflow+ }++ that.$element+ .addClass('in')+ .attr('aria-hidden', false)+ .focus()++ that.enforceFocus()++ transition ?+ that.$element.one($.support.transition.end, function () { that.$element.trigger('shown') }) :+ that.$element.trigger('shown')++ })+ }++ , hide: function (e) {+ e && e.preventDefault()++ var that = this++ e = $.Event('hide')++ this.$element.trigger(e)++ if (!this.isShown || e.isDefaultPrevented()) return++ this.isShown = false++ $('body').removeClass('modal-open')++ this.escape()++ $(document).off('focusin.modal')++ this.$element+ .removeClass('in')+ .attr('aria-hidden', true)++ $.support.transition && this.$element.hasClass('fade') ?+ this.hideWithTransition() :+ this.hideModal()+ }++ , enforceFocus: function () {+ var that = this+ $(document).on('focusin.modal', function (e) {+ if (that.$element[0] !== e.target && !that.$element.has(e.target).length) {+ that.$element.focus()+ }+ })+ }++ , escape: function () {+ var that = this+ if (this.isShown && this.options.keyboard) {+ this.$element.on('keyup.dismiss.modal', function ( e ) {+ e.which == 27 && that.hide()+ })+ } else if (!this.isShown) {+ this.$element.off('keyup.dismiss.modal')+ }+ }++ , hideWithTransition: function () {+ var that = this+ , timeout = setTimeout(function () {+ that.$element.off($.support.transition.end)+ that.hideModal()+ }, 500)++ this.$element.one($.support.transition.end, function () {+ clearTimeout(timeout)+ that.hideModal()+ })+ }++ , hideModal: function (that) {+ this.$element+ .hide()+ .trigger('hidden')++ this.backdrop()+ }++ , removeBackdrop: function () {+ this.$backdrop.remove()+ this.$backdrop = null+ }++ , backdrop: function (callback) {+ var that = this+ , 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(document.body)++ if (this.options.backdrop != 'static') {+ this.$backdrop.click($.proxy(this.hide, this))+ }++ if (doAnimate) this.$backdrop[0].offsetWidth // force reflow++ this.$backdrop.addClass('in')++ doAnimate ?+ this.$backdrop.one($.support.transition.end, callback) :+ callback()++ } else if (!this.isShown && this.$backdrop) {+ this.$backdrop.removeClass('in')++ $.support.transition && this.$element.hasClass('fade')?+ this.$backdrop.one($.support.transition.end, $.proxy(this.removeBackdrop, this)) :+ this.removeBackdrop()++ } else if (callback) {+ callback()+ }+ }+ }+++ /* MODAL PLUGIN DEFINITION+ * ======================= */++ $.fn.modal = function (option) {+ return this.each(function () {+ var $this = $(this)+ , data = $this.data('modal')+ , options = $.extend({}, $.fn.modal.defaults, $this.data(), typeof option == 'object' && option)+ if (!data) $this.data('modal', (data = new Modal(this, options)))+ if (typeof option == 'string') data[option]()+ else if (options.show) data.show()+ })+ }++ $.fn.modal.defaults = {+ backdrop: true+ , keyboard: true+ , show: true+ }++ $.fn.modal.Constructor = Modal+++ /* MODAL DATA-API+ * ============== */++ $(function () {+ $('body').on('click.modal.data-api', '[data-toggle="modal"]', function ( e ) {+ var $this = $(this)+ , href = $this.attr('href')+ , $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) //strip for ie7+ , option = $target.data('modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())++ e.preventDefault()++ $target+ .modal(option)+ .one('hide', function () {+ $this.focus()+ })+ })+ })++}(window.jQuery);/* ===========================================================+ * bootstrap-tooltip.js v2.1.1+ * http://twitter.github.com/bootstrap/javascript.html#tooltips+ * Inspired by the original jQuery.tipsy by Jason Frame+ * ===========================================================+ * Copyright 2012 Twitter, 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.+ * ========================================================== */+++!function ($) {++ "use strict"; // jshint ;_;+++ /* TOOLTIP PUBLIC CLASS DEFINITION+ * =============================== */++ var Tooltip = function (element, options) {+ this.init('tooltip', element, options)+ }++ Tooltip.prototype = {++ constructor: Tooltip++ , init: function (type, element, options) {+ var eventIn+ , eventOut++ this.type = type+ this.$element = $(element)+ this.options = this.getOptions(options)+ this.enabled = true++ if (this.options.trigger == 'click') {+ this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))+ } else if (this.options.trigger != 'manual') {+ eventIn = this.options.trigger == 'hover' ? 'mouseenter' : 'focus'+ eventOut = this.options.trigger == 'hover' ? 'mouseleave' : 'blur'+ 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()+ }++ , getOptions: function (options) {+ options = $.extend({}, $.fn[this.type].defaults, options, this.$element.data())++ if (options.delay && typeof options.delay == 'number') {+ options.delay = {+ show: options.delay+ , hide: options.delay+ }+ }++ return options+ }++ , enter: function (e) {+ var self = $(e.currentTarget)[this.type](this._options).data(this.type)++ if (!self.options.delay || !self.options.delay.show) return self.show()++ clearTimeout(this.timeout)+ self.hoverState = 'in'+ this.timeout = setTimeout(function() {+ if (self.hoverState == 'in') self.show()+ }, self.options.delay.show)+ }++ , leave: function (e) {+ var self = $(e.currentTarget)[this.type](this._options).data(this.type)++ if (this.timeout) clearTimeout(this.timeout)+ if (!self.options.delay || !self.options.delay.hide) return self.hide()++ self.hoverState = 'out'+ this.timeout = setTimeout(function() {+ if (self.hoverState == 'out') self.hide()+ }, self.options.delay.hide)+ }++ , show: function () {+ var $tip+ , inside+ , pos+ , actualWidth+ , actualHeight+ , placement+ , tp++ if (this.hasContent() && this.enabled) {+ $tip = this.tip()+ this.setContent()++ if (this.options.animation) {+ $tip.addClass('fade')+ }++ placement = typeof this.options.placement == 'function' ?+ this.options.placement.call(this, $tip[0], this.$element[0]) :+ this.options.placement++ inside = /in/.test(placement)++ $tip+ .remove()+ .css({ top: 0, left: 0, display: 'block' })+ .appendTo(inside ? this.$element : document.body)++ pos = this.getPosition(inside)++ actualWidth = $tip[0].offsetWidth+ actualHeight = $tip[0].offsetHeight++ switch (inside ? placement.split(' ')[1] : placement) {+ case 'bottom':+ tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2}+ break+ case 'top':+ tp = {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2}+ break+ case 'left':+ tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth}+ break+ case 'right':+ tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width}+ break+ }++ $tip+ .css(tp)+ .addClass(placement)+ .addClass('in')+ }+ }++ , setContent: function () {+ var $tip = this.tip()+ , title = this.getTitle()++ $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)+ $tip.removeClass('fade in top bottom left right')+ }++ , hide: function () {+ var that = this+ , $tip = this.tip()++ $tip.removeClass('in')++ function removeWithAnimation() {+ var timeout = setTimeout(function () {+ $tip.off($.support.transition.end).remove()+ }, 500)++ $tip.one($.support.transition.end, function () {+ clearTimeout(timeout)+ $tip.remove()+ })+ }++ $.support.transition && this.$tip.hasClass('fade') ?+ removeWithAnimation() :+ $tip.remove()++ return this+ }++ , 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') || '').removeAttr('title')+ }+ }++ , hasContent: function () {+ return this.getTitle()+ }++ , getPosition: function (inside) {+ return $.extend({}, (inside ? {top: 0, left: 0} : this.$element.offset()), {+ width: this.$element[0].offsetWidth+ , height: this.$element[0].offsetHeight+ })+ }++ , getTitle: function () {+ var title+ , $e = this.$element+ , o = this.options++ title = $e.attr('data-original-title')+ || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)++ return title+ }++ , tip: function () {+ return this.$tip = this.$tip || $(this.options.template)+ }++ , validate: function () {+ if (!this.$element[0].parentNode) {+ this.hide()+ this.$element = null+ this.options = null+ }+ }++ , enable: function () {+ this.enabled = true+ }++ , disable: function () {+ this.enabled = false+ }++ , toggleEnabled: function () {+ this.enabled = !this.enabled+ }++ , toggle: function () {+ this[this.tip().hasClass('in') ? 'hide' : 'show']()+ }++ , destroy: function () {+ this.hide().$element.off('.' + this.type).removeData(this.type)+ }++ }+++ /* TOOLTIP PLUGIN DEFINITION+ * ========================= */++ $.fn.tooltip = function ( option ) {+ return this.each(function () {+ var $this = $(this)+ , data = $this.data('tooltip')+ , options = typeof option == 'object' && option+ if (!data) $this.data('tooltip', (data = new Tooltip(this, options)))+ if (typeof option == 'string') data[option]()+ })+ }++ $.fn.tooltip.Constructor = Tooltip++ $.fn.tooltip.defaults = {+ animation: true+ , placement: 'top'+ , selector: false+ , template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>'+ , trigger: 'hover'+ , title: ''+ , delay: 0+ , html: true+ }++}(window.jQuery);+/* ===========================================================+ * bootstrap-popover.js v2.1.1+ * http://twitter.github.com/bootstrap/javascript.html#popovers+ * ===========================================================+ * Copyright 2012 Twitter, 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.+ * =========================================================== */+++!function ($) {++ "use strict"; // jshint ;_;+++ /* POPOVER PUBLIC CLASS DEFINITION+ * =============================== */++ var Popover = function (element, options) {+ this.init('popover', element, options)+ }+++ /* NOTE: POPOVER EXTENDS BOOTSTRAP-TOOLTIP.js+ ========================================== */++ Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype, {++ constructor: Popover++ , setContent: function () {+ var $tip = this.tip()+ , title = this.getTitle()+ , content = this.getContent()++ $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)+ $tip.find('.popover-content > *')[this.options.html ? 'html' : 'text'](content)++ $tip.removeClass('fade top bottom left right in')+ }++ , hasContent: function () {+ return this.getTitle() || this.getContent()+ }++ , getContent: function () {+ var content+ , $e = this.$element+ , o = this.options++ content = $e.attr('data-content')+ || (typeof o.content == 'function' ? o.content.call($e[0]) : o.content)++ return content+ }++ , tip: function () {+ if (!this.$tip) {+ this.$tip = $(this.options.template)+ }+ return this.$tip+ }++ , destroy: function () {+ this.hide().$element.off('.' + this.type).removeData(this.type)+ }++ })+++ /* POPOVER PLUGIN DEFINITION+ * ======================= */++ $.fn.popover = function (option) {+ return this.each(function () {+ var $this = $(this)+ , data = $this.data('popover')+ , options = typeof option == 'object' && option+ if (!data) $this.data('popover', (data = new Popover(this, options)))+ if (typeof option == 'string') data[option]()+ })+ }++ $.fn.popover.Constructor = Popover++ $.fn.popover.defaults = $.extend({} , $.fn.tooltip.defaults, {+ placement: 'right'+ , trigger: 'click'+ , content: ''+ , template: '<div class="popover"><div class="arrow"></div><div class="popover-inner"><h3 class="popover-title"></h3><div class="popover-content"><p></p></div></div></div>'+ })++}(window.jQuery);/* =============================================================+ * bootstrap-scrollspy.js v2.1.1+ * http://twitter.github.com/bootstrap/javascript.html#scrollspy+ * =============================================================+ * Copyright 2012 Twitter, 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.+ * ============================================================== */+++!function ($) {++ "use strict"; // jshint ;_;+++ /* SCROLLSPY CLASS DEFINITION+ * ========================== */++ function ScrollSpy(element, options) {+ var process = $.proxy(this.process, this)+ , $element = $(element).is('body') ? $(window) : $(element)+ , href+ this.options = $.extend({}, $.fn.scrollspy.defaults, options)+ this.$scrollElement = $element.on('scroll.scroll-spy.data-api', process)+ this.selector = (this.options.target+ || ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7+ || '') + ' .nav li > a'+ this.$body = $('body')+ this.refresh()+ this.process()+ }++ ScrollSpy.prototype = {++ constructor: ScrollSpy++ , refresh: function () {+ var self = this+ , $targets++ this.offsets = $([])+ this.targets = $([])++ $targets = this.$body+ .find(this.selector)+ .map(function () {+ var $el = $(this)+ , href = $el.data('target') || $el.attr('href')+ , $href = /^#\w/.test(href) && $(href)+ return ( $href+ && $href.length+ && [[ $href.position().top, href ]] ) || null+ })+ .sort(function (a, b) { return a[0] - b[0] })+ .each(function () {+ self.offsets.push(this[0])+ self.targets.push(this[1])+ })+ }++ , process: function () {+ var scrollTop = this.$scrollElement.scrollTop() + this.options.offset+ , scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight+ , maxScroll = scrollHeight - this.$scrollElement.height()+ , offsets = this.offsets+ , targets = this.targets+ , activeTarget = this.activeTarget+ , i++ if (scrollTop >= maxScroll) {+ return activeTarget != (i = targets.last()[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] )+ }+ }++ , activate: function (target) {+ var active+ , selector++ this.activeTarget = target++ $(this.selector)+ .parent('.active')+ .removeClass('active')++ selector = this.selector+ + '[data-target="' + target + '"],'+ + this.selector + '[href="' + target + '"]'++ active = $(selector)+ .parent('li')+ .addClass('active')++ if (active.parent('.dropdown-menu').length) {+ active = active.closest('li.dropdown').addClass('active')+ }++ active.trigger('activate')+ }++ }+++ /* SCROLLSPY PLUGIN DEFINITION+ * =========================== */++ $.fn.scrollspy = function (option) {+ return this.each(function () {+ var $this = $(this)+ , data = $this.data('scrollspy')+ , options = typeof option == 'object' && option+ if (!data) $this.data('scrollspy', (data = new ScrollSpy(this, options)))+ if (typeof option == 'string') data[option]()+ })+ }++ $.fn.scrollspy.Constructor = ScrollSpy++ $.fn.scrollspy.defaults = {+ offset: 10+ }+++ /* SCROLLSPY DATA-API+ * ================== */++ $(window).on('load', function () {+ $('[data-spy="scroll"]').each(function () {+ var $spy = $(this)+ $spy.scrollspy($spy.data())+ })+ })++}(window.jQuery);/* ========================================================+ * bootstrap-tab.js v2.1.1+ * http://twitter.github.com/bootstrap/javascript.html#tabs+ * ========================================================+ * Copyright 2012 Twitter, 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.+ * ======================================================== */+++!function ($) {++ "use strict"; // jshint ;_;+++ /* TAB CLASS DEFINITION+ * ==================== */++ var Tab = function (element) {+ this.element = $(element)+ }++ Tab.prototype = {++ constructor: Tab++ , show: function () {+ var $this = this.element+ , $ul = $this.closest('ul:not(.dropdown-menu)')+ , selector = $this.attr('data-target')+ , previous+ , $target+ , e++ if (!selector) {+ selector = $this.attr('href')+ selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7+ }++ if ( $this.parent('li').hasClass('active') ) return++ previous = $ul.find('.active a').last()[0]++ e = $.Event('show', {+ relatedTarget: previous+ })++ $this.trigger(e)++ if (e.isDefaultPrevented()) return++ $target = $(selector)++ this.activate($this.parent('li'), $ul)+ this.activate($target, $target.parent(), function () {+ $this.trigger({+ type: 'shown'+ , relatedTarget: previous+ })+ })+ }++ , activate: function ( element, container, callback) {+ var $active = container.find('> .active')+ , 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($.support.transition.end, next) :+ next()++ $active.removeClass('in')+ }+ }+++ /* TAB PLUGIN DEFINITION+ * ===================== */++ $.fn.tab = function ( option ) {+ return this.each(function () {+ var $this = $(this)+ , data = $this.data('tab')+ if (!data) $this.data('tab', (data = new Tab(this)))+ if (typeof option == 'string') data[option]()+ })+ }++ $.fn.tab.Constructor = Tab+++ /* TAB DATA-API+ * ============ */++ $(function () {+ $('body').on('click.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {+ e.preventDefault()+ $(this).tab('show')+ })+ })++}(window.jQuery);/* =============================================================+ * bootstrap-typeahead.js v2.1.1+ * http://twitter.github.com/bootstrap/javascript.html#typeahead+ * =============================================================+ * Copyright 2012 Twitter, 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.+ * ============================================================ */+++!function($){++ "use strict"; // jshint ;_;+++ /* TYPEAHEAD PUBLIC CLASS DEFINITION+ * ================================= */++ var Typeahead = function (element, options) {+ this.$element = $(element)+ this.options = $.extend({}, $.fn.typeahead.defaults, options)+ this.matcher = this.options.matcher || this.matcher+ this.sorter = this.options.sorter || this.sorter+ this.highlighter = this.options.highlighter || this.highlighter+ this.updater = this.options.updater || this.updater+ this.$menu = $(this.options.menu).appendTo('body')+ this.source = this.options.source+ this.shown = false+ this.listen()+ }++ Typeahead.prototype = {++ constructor: Typeahead++ , select: function () {+ var val = this.$menu.find('.active').attr('data-value')+ this.$element+ .val(this.updater(val))+ .change()+ return this.hide()+ }++ , updater: function (item) {+ return item+ }++ , show: function () {+ var pos = $.extend({}, this.$element.offset(), {+ height: this.$element[0].offsetHeight+ })++ this.$menu.css({+ top: pos.top + pos.height+ , left: pos.left+ })++ this.$menu.show()+ this.shown = true+ return this+ }++ , hide: function () {+ this.$menu.hide()+ this.shown = false+ return this+ }++ , lookup: function (event) {+ var items++ this.query = this.$element.val()++ if (!this.query || this.query.length < this.options.minLength) {+ return this.shown ? this.hide() : this+ }++ items = $.isFunction(this.source) ? this.source(this.query, $.proxy(this.process, this)) : this.source++ return items ? this.process(items) : this+ }++ , process: function (items) {+ var that = this++ items = $.grep(items, function (item) {+ return that.matcher(item)+ })++ items = this.sorter(items)++ if (!items.length) {+ return this.shown ? this.hide() : this+ }++ return this.render(items.slice(0, this.options.items)).show()+ }++ , matcher: function (item) {+ return ~item.toLowerCase().indexOf(this.query.toLowerCase())+ }++ , sorter: function (items) {+ var beginswith = []+ , caseSensitive = []+ , caseInsensitive = []+ , item++ while (item = items.shift()) {+ if (!item.toLowerCase().indexOf(this.query.toLowerCase())) beginswith.push(item)+ else if (~item.indexOf(this.query)) caseSensitive.push(item)+ else caseInsensitive.push(item)+ }++ return beginswith.concat(caseSensitive, caseInsensitive)+ }++ , highlighter: function (item) {+ var query = this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, '\\$&')+ return item.replace(new RegExp('(' + query + ')', 'ig'), function ($1, match) {+ return '<strong>' + match + '</strong>'+ })+ }++ , render: function (items) {+ var that = this++ items = $(items).map(function (i, item) {+ i = $(that.options.item).attr('data-value', item)+ i.find('a').html(that.highlighter(item))+ return i[0]+ })++ items.first().addClass('active')+ this.$menu.html(items)+ return this+ }++ , next: function (event) {+ var active = this.$menu.find('.active').removeClass('active')+ , next = active.next()++ if (!next.length) {+ next = $(this.$menu.find('li')[0])+ }++ next.addClass('active')+ }++ , prev: function (event) {+ var active = this.$menu.find('.active').removeClass('active')+ , prev = active.prev()++ if (!prev.length) {+ prev = this.$menu.find('li').last()+ }++ prev.addClass('active')+ }++ , listen: function () {+ this.$element+ .on('blur', $.proxy(this.blur, this))+ .on('keypress', $.proxy(this.keypress, this))+ .on('keyup', $.proxy(this.keyup, this))++ if ($.browser.chrome || $.browser.webkit || $.browser.msie) {+ this.$element.on('keydown', $.proxy(this.keydown, this))+ }++ this.$menu+ .on('click', $.proxy(this.click, this))+ .on('mouseenter', 'li', $.proxy(this.mouseenter, this))+ }++ , move: function (e) {+ if (!this.shown) return++ switch(e.keyCode) {+ case 9: // tab+ case 13: // enter+ case 27: // escape+ e.preventDefault()+ break++ case 38: // up arrow+ e.preventDefault()+ this.prev()+ break++ case 40: // down arrow+ e.preventDefault()+ this.next()+ break+ }++ e.stopPropagation()+ }++ , keydown: function (e) {+ this.suppressKeyPressRepeat = !~$.inArray(e.keyCode, [40,38,9,13,27])+ this.move(e)+ }++ , keypress: function (e) {+ if (this.suppressKeyPressRepeat) return+ this.move(e)+ }++ , keyup: function (e) {+ switch(e.keyCode) {+ case 40: // down arrow+ case 38: // up arrow+ break++ case 9: // tab+ case 13: // enter+ if (!this.shown) return+ this.select()+ break++ case 27: // escape+ if (!this.shown) return+ this.hide()+ break++ default:+ this.lookup()+ }++ e.stopPropagation()+ e.preventDefault()+ }++ , blur: function (e) {+ var that = this+ setTimeout(function () { that.hide() }, 150)+ }++ , click: function (e) {+ e.stopPropagation()+ e.preventDefault()+ this.select()+ }++ , mouseenter: function (e) {+ this.$menu.find('.active').removeClass('active')+ $(e.currentTarget).addClass('active')+ }++ }+++ /* TYPEAHEAD PLUGIN DEFINITION+ * =========================== */++ $.fn.typeahead = function (option) {+ return this.each(function () {+ var $this = $(this)+ , data = $this.data('typeahead')+ , options = typeof option == 'object' && option+ if (!data) $this.data('typeahead', (data = new Typeahead(this, options)))+ if (typeof option == 'string') data[option]()+ })+ }++ $.fn.typeahead.defaults = {+ source: []+ , items: 8+ , menu: '<ul class="typeahead dropdown-menu"></ul>'+ , item: '<li><a href="#"></a></li>'+ , minLength: 1+ }++ $.fn.typeahead.Constructor = Typeahead+++ /* TYPEAHEAD DATA-API+ * ================== */++ $(function () {+ $('body').on('focus.typeahead.data-api', '[data-provide="typeahead"]', function (e) {+ var $this = $(this)+ if ($this.data('typeahead')) return+ e.preventDefault()+ $this.typeahead($this.data())+ })+ })++}(window.jQuery);+/* ==========================================================+ * bootstrap-affix.js v2.1.1+ * http://twitter.github.com/bootstrap/javascript.html#affix+ * ==========================================================+ * Copyright 2012 Twitter, 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.+ * ========================================================== */+++!function ($) {++ "use strict"; // jshint ;_;+++ /* AFFIX CLASS DEFINITION+ * ====================== */++ var Affix = function (element, options) {+ this.options = $.extend({}, $.fn.affix.defaults, options)+ this.$window = $(window).on('scroll.affix.data-api', $.proxy(this.checkPosition, this))+ this.$element = $(element)+ this.checkPosition()+ }++ Affix.prototype.checkPosition = function () {+ if (!this.$element.is(':visible')) return++ var scrollHeight = $(document).height()+ , scrollTop = this.$window.scrollTop()+ , position = this.$element.offset()+ , offset = this.options.offset+ , offsetBottom = offset.bottom+ , offsetTop = offset.top+ , reset = 'affix affix-top affix-bottom'+ , affix++ if (typeof offset != 'object') offsetBottom = offsetTop = offset+ if (typeof offsetTop == 'function') offsetTop = offset.top()+ if (typeof offsetBottom == 'function') offsetBottom = offset.bottom()++ 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++ this.affixed = affix+ this.unpin = affix == 'bottom' ? position.top - scrollTop : null++ this.$element.removeClass(reset).addClass('affix' + (affix ? '-' + affix : ''))+ }+++ /* AFFIX PLUGIN DEFINITION+ * ======================= */++ $.fn.affix = function (option) {+ return this.each(function () {+ var $this = $(this)+ , data = $this.data('affix')+ , options = typeof option == 'object' && option+ if (!data) $this.data('affix', (data = new Affix(this, options)))+ if (typeof option == 'string') data[option]()+ })+ }++ $.fn.affix.Constructor = Affix++ $.fn.affix.defaults = {+ offset: 0+ }+++ /* AFFIX DATA-API+ * ============== */++ $(window).on('load', function () {+ $('[data-spy="affix"]').each(function () {+ var $spy = $(this)+ , data = $spy.data()++ data.offset = data.offset || {}++ data.offsetBottom && (data.offset.bottom = data.offsetBottom)+ data.offsetTop && (data.offset.top = data.offsetTop)++ $spy.affix(data)+ })+ })+++}(window.jQuery);
@@ -0,0 +1,6 @@+/*!+* Bootstrap.js by @fat & @mdo+* Copyright 2012 Twitter, Inc.+* http://www.apache.org/licenses/LICENSE-2.0.txt+*/+!function(e){e(function(){"use strict";e.support.transition=function(){var e=function(){var e=document.createElement("bootstrap"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},n;for(n in t)if(e.style[n]!==undefined)return t[n]}();return e&&{end:e}}()})}(window.jQuery),!function(e){"use strict";var t='[data-dismiss="alert"]',n=function(n){e(n).on("click",t,this.close)};n.prototype.close=function(t){function s(){i.trigger("closed").remove()}var n=e(this),r=n.attr("data-target"),i;r||(r=n.attr("href"),r=r&&r.replace(/.*(?=#[^\s]*$)/,"")),i=e(r),t&&t.preventDefault(),i.length||(i=n.hasClass("alert")?n:n.parent()),i.trigger(t=e.Event("close"));if(t.isDefaultPrevented())return;i.removeClass("in"),e.support.transition&&i.hasClass("fade")?i.on(e.support.transition.end,s):s()},e.fn.alert=function(t){return this.each(function(){var r=e(this),i=r.data("alert");i||r.data("alert",i=new n(this)),typeof t=="string"&&i[t].call(r)})},e.fn.alert.Constructor=n,e(function(){e("body").on("click.alert.data-api",t,n.prototype.close)})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.options=e.extend({},e.fn.button.defaults,n)};t.prototype.setState=function(e){var t="disabled",n=this.$element,r=n.data(),i=n.is("input")?"val":"html";e+="Text",r.resetText||n.data("resetText",n[i]()),n[i](r[e]||this.options[e]),setTimeout(function(){e=="loadingText"?n.addClass(t).attr(t,t):n.removeClass(t).removeAttr(t)},0)},t.prototype.toggle=function(){var e=this.$element.closest('[data-toggle="buttons-radio"]');e&&e.find(".active").removeClass("active"),this.$element.toggleClass("active")},e.fn.button=function(n){return this.each(function(){var r=e(this),i=r.data("button"),s=typeof n=="object"&&n;i||r.data("button",i=new t(this,s)),n=="toggle"?i.toggle():n&&i.setState(n)})},e.fn.button.defaults={loadingText:"loading..."},e.fn.button.Constructor=t,e(function(){e("body").on("click.button.data-api","[data-toggle^=button]",function(t){var n=e(t.target);n.hasClass("btn")||(n=n.closest(".btn")),n.button("toggle")})})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.options=n,this.options.slide&&this.slide(this.options.slide),this.options.pause=="hover"&&this.$element.on("mouseenter",e.proxy(this.pause,this)).on("mouseleave",e.proxy(this.cycle,this))};t.prototype={cycle:function(t){return t||(this.paused=!1),this.options.interval&&!this.paused&&(this.interval=setInterval(e.proxy(this.next,this),this.options.interval)),this},to:function(t){var n=this.$element.find(".item.active"),r=n.parent().children(),i=r.index(n),s=this;if(t>r.length-1||t<0)return;return this.sliding?this.$element.one("slid",function(){s.to(t)}):i==t?this.pause().cycle():this.slide(t>i?"next":"prev",e(r[t]))},pause:function(t){return t||(this.paused=!0),this.$element.find(".next, .prev").length&&e.support.transition.end&&(this.$element.trigger(e.support.transition.end),this.cycle()),clearInterval(this.interval),this.interval=null,this},next:function(){if(this.sliding)return;return this.slide("next")},prev:function(){if(this.sliding)return;return this.slide("prev")},slide:function(t,n){var r=this.$element.find(".item.active"),i=n||r[t](),s=this.interval,o=t=="next"?"left":"right",u=t=="next"?"first":"last",a=this,f=e.Event("slide",{relatedTarget:i[0]});this.sliding=!0,s&&this.pause(),i=i.length?i:this.$element.find(".item")[u]();if(i.hasClass("active"))return;if(e.support.transition&&this.$element.hasClass("slide")){this.$element.trigger(f);if(f.isDefaultPrevented())return;i.addClass(t),i[0].offsetWidth,r.addClass(o),i.addClass(o),this.$element.one(e.support.transition.end,function(){i.removeClass([t,o].join(" ")).addClass("active"),r.removeClass(["active",o].join(" ")),a.sliding=!1,setTimeout(function(){a.$element.trigger("slid")},0)})}else{this.$element.trigger(f);if(f.isDefaultPrevented())return;r.removeClass("active"),i.addClass("active"),this.sliding=!1,this.$element.trigger("slid")}return s&&this.cycle(),this}},e.fn.carousel=function(n){return this.each(function(){var r=e(this),i=r.data("carousel"),s=e.extend({},e.fn.carousel.defaults,typeof n=="object"&&n),o=typeof n=="string"?n:s.slide;i||r.data("carousel",i=new t(this,s)),typeof n=="number"?i.to(n):o?i[o]():s.interval&&i.cycle()})},e.fn.carousel.defaults={interval:5e3,pause:"hover"},e.fn.carousel.Constructor=t,e(function(){e("body").on("click.carousel.data-api","[data-slide]",function(t){var n=e(this),r,i=e(n.attr("data-target")||(r=n.attr("href"))&&r.replace(/.*(?=#[^\s]+$)/,"")),s=!i.data("modal")&&e.extend({},i.data(),n.data());i.carousel(s),t.preventDefault()})})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.options=e.extend({},e.fn.collapse.defaults,n),this.options.parent&&(this.$parent=e(this.options.parent)),this.options.toggle&&this.toggle()};t.prototype={constructor:t,dimension:function(){var e=this.$element.hasClass("width");return e?"width":"height"},show:function(){var t,n,r,i;if(this.transitioning)return;t=this.dimension(),n=e.camelCase(["scroll",t].join("-")),r=this.$parent&&this.$parent.find("> .accordion-group > .in");if(r&&r.length){i=r.data("collapse");if(i&&i.transitioning)return;r.collapse("hide"),i||r.data("collapse",null)}this.$element[t](0),this.transition("addClass",e.Event("show"),"shown"),e.support.transition&&this.$element[t](this.$element[0][n])},hide:function(){var t;if(this.transitioning)return;t=this.dimension(),this.reset(this.$element[t]()),this.transition("removeClass",e.Event("hide"),"hidden"),this.$element[t](0)},reset:function(e){var t=this.dimension();return this.$element.removeClass("collapse")[t](e||"auto")[0].offsetWidth,this.$element[e!==null?"addClass":"removeClass"]("collapse"),this},transition:function(t,n,r){var i=this,s=function(){n.type=="show"&&i.reset(),i.transitioning=0,i.$element.trigger(r)};this.$element.trigger(n);if(n.isDefaultPrevented())return;this.transitioning=1,this.$element[t]("in"),e.support.transition&&this.$element.hasClass("collapse")?this.$element.one(e.support.transition.end,s):s()},toggle:function(){this[this.$element.hasClass("in")?"hide":"show"]()}},e.fn.collapse=function(n){return this.each(function(){var r=e(this),i=r.data("collapse"),s=typeof n=="object"&&n;i||r.data("collapse",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.collapse.defaults={toggle:!0},e.fn.collapse.Constructor=t,e(function(){e("body").on("click.collapse.data-api","[data-toggle=collapse]",function(t){var n=e(this),r,i=n.attr("data-target")||t.preventDefault()||(r=n.attr("href"))&&r.replace(/.*(?=#[^\s]+$)/,""),s=e(i).data("collapse")?"toggle":n.data();n[e(i).hasClass("in")?"addClass":"removeClass"]("collapsed"),e(i).collapse(s)})})}(window.jQuery),!function(e){"use strict";function r(){i(e(t)).removeClass("open")}function i(t){var n=t.attr("data-target"),r;return n||(n=t.attr("href"),n=n&&/#/.test(n)&&n.replace(/.*(?=#[^\s]*$)/,"")),r=e(n),r.length||(r=t.parent()),r}var t="[data-toggle=dropdown]",n=function(t){var n=e(t).on("click.dropdown.data-api",this.toggle);e("html").on("click.dropdown.data-api",function(){n.parent().removeClass("open")})};n.prototype={constructor:n,toggle:function(t){var n=e(this),s,o;if(n.is(".disabled, :disabled"))return;return s=i(n),o=s.hasClass("open"),r(),o||(s.toggleClass("open"),n.focus()),!1},keydown:function(t){var n,r,s,o,u,a;if(!/(38|40|27)/.test(t.keyCode))return;n=e(this),t.preventDefault(),t.stopPropagation();if(n.is(".disabled, :disabled"))return;o=i(n),u=o.hasClass("open");if(!u||u&&t.keyCode==27)return n.click();r=e("[role=menu] li:not(.divider) a",o);if(!r.length)return;a=r.index(r.filter(":focus")),t.keyCode==38&&a>0&&a--,t.keyCode==40&&a<r.length-1&&a++,~a||(a=0),r.eq(a).focus()}},e.fn.dropdown=function(t){return this.each(function(){var r=e(this),i=r.data("dropdown");i||r.data("dropdown",i=new n(this)),typeof t=="string"&&i[t].call(r)})},e.fn.dropdown.Constructor=n,e(function(){e("html").on("click.dropdown.data-api touchstart.dropdown.data-api",r),e("body").on("click.dropdown touchstart.dropdown.data-api",".dropdown form",function(e){e.stopPropagation()}).on("click.dropdown.data-api touchstart.dropdown.data-api",t,n.prototype.toggle).on("keydown.dropdown.data-api touchstart.dropdown.data-api",t+", [role=menu]",n.prototype.keydown)})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.options=n,this.$element=e(t).delegate('[data-dismiss="modal"]',"click.dismiss.modal",e.proxy(this.hide,this)),this.options.remote&&this.$element.find(".modal-body").load(this.options.remote)};t.prototype={constructor:t,toggle:function(){return this[this.isShown?"hide":"show"]()},show:function(){var t=this,n=e.Event("show");this.$element.trigger(n);if(this.isShown||n.isDefaultPrevented())return;e("body").addClass("modal-open"),this.isShown=!0,this.escape(),this.backdrop(function(){var n=e.support.transition&&t.$element.hasClass("fade");t.$element.parent().length||t.$element.appendTo(document.body),t.$element.show(),n&&t.$element[0].offsetWidth,t.$element.addClass("in").attr("aria-hidden",!1).focus(),t.enforceFocus(),n?t.$element.one(e.support.transition.end,function(){t.$element.trigger("shown")}):t.$element.trigger("shown")})},hide:function(t){t&&t.preventDefault();var n=this;t=e.Event("hide"),this.$element.trigger(t);if(!this.isShown||t.isDefaultPrevented())return;this.isShown=!1,e("body").removeClass("modal-open"),this.escape(),e(document).off("focusin.modal"),this.$element.removeClass("in").attr("aria-hidden",!0),e.support.transition&&this.$element.hasClass("fade")?this.hideWithTransition():this.hideModal()},enforceFocus:function(){var t=this;e(document).on("focusin.modal",function(e){t.$element[0]!==e.target&&!t.$element.has(e.target).length&&t.$element.focus()})},escape:function(){var e=this;this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.modal",function(t){t.which==27&&e.hide()}):this.isShown||this.$element.off("keyup.dismiss.modal")},hideWithTransition:function(){var t=this,n=setTimeout(function(){t.$element.off(e.support.transition.end),t.hideModal()},500);this.$element.one(e.support.transition.end,function(){clearTimeout(n),t.hideModal()})},hideModal:function(e){this.$element.hide().trigger("hidden"),this.backdrop()},removeBackdrop:function(){this.$backdrop.remove(),this.$backdrop=null},backdrop:function(t){var n=this,r=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var i=e.support.transition&&r;this.$backdrop=e('<div class="modal-backdrop '+r+'" />').appendTo(document.body),this.options.backdrop!="static"&&this.$backdrop.click(e.proxy(this.hide,this)),i&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),i?this.$backdrop.one(e.support.transition.end,t):t()}else!this.isShown&&this.$backdrop?(this.$backdrop.removeClass("in"),e.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one(e.support.transition.end,e.proxy(this.removeBackdrop,this)):this.removeBackdrop()):t&&t()}},e.fn.modal=function(n){return this.each(function(){var r=e(this),i=r.data("modal"),s=e.extend({},e.fn.modal.defaults,r.data(),typeof n=="object"&&n);i||r.data("modal",i=new t(this,s)),typeof n=="string"?i[n]():s.show&&i.show()})},e.fn.modal.defaults={backdrop:!0,keyboard:!0,show:!0},e.fn.modal.Constructor=t,e(function(){e("body").on("click.modal.data-api",'[data-toggle="modal"]',function(t){var n=e(this),r=n.attr("href"),i=e(n.attr("data-target")||r&&r.replace(/.*(?=#[^\s]+$)/,"")),s=i.data("modal")?"toggle":e.extend({remote:!/#/.test(r)&&r},i.data(),n.data());t.preventDefault(),i.modal(s).one("hide",function(){n.focus()})})})}(window.jQuery),!function(e){"use strict";var t=function(e,t){this.init("tooltip",e,t)};t.prototype={constructor:t,init:function(t,n,r){var i,s;this.type=t,this.$element=e(n),this.options=this.getOptions(r),this.enabled=!0,this.options.trigger=="click"?this.$element.on("click."+this.type,this.options.selector,e.proxy(this.toggle,this)):this.options.trigger!="manual"&&(i=this.options.trigger=="hover"?"mouseenter":"focus",s=this.options.trigger=="hover"?"mouseleave":"blur",this.$element.on(i+"."+this.type,this.options.selector,e.proxy(this.enter,this)),this.$element.on(s+"."+this.type,this.options.selector,e.proxy(this.leave,this))),this.options.selector?this._options=e.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},getOptions:function(t){return t=e.extend({},e.fn[this.type].defaults,t,this.$element.data()),t.delay&&typeof t.delay=="number"&&(t.delay={show:t.delay,hide:t.delay}),t},enter:function(t){var n=e(t.currentTarget)[this.type](this._options).data(this.type);if(!n.options.delay||!n.options.delay.show)return n.show();clearTimeout(this.timeout),n.hoverState="in",this.timeout=setTimeout(function(){n.hoverState=="in"&&n.show()},n.options.delay.show)},leave:function(t){var n=e(t.currentTarget)[this.type](this._options).data(this.type);this.timeout&&clearTimeout(this.timeout);if(!n.options.delay||!n.options.delay.hide)return n.hide();n.hoverState="out",this.timeout=setTimeout(function(){n.hoverState=="out"&&n.hide()},n.options.delay.hide)},show:function(){var e,t,n,r,i,s,o;if(this.hasContent()&&this.enabled){e=this.tip(),this.setContent(),this.options.animation&&e.addClass("fade"),s=typeof this.options.placement=="function"?this.options.placement.call(this,e[0],this.$element[0]):this.options.placement,t=/in/.test(s),e.remove().css({top:0,left:0,display:"block"}).appendTo(t?this.$element:document.body),n=this.getPosition(t),r=e[0].offsetWidth,i=e[0].offsetHeight;switch(t?s.split(" ")[1]:s){case"bottom":o={top:n.top+n.height,left:n.left+n.width/2-r/2};break;case"top":o={top:n.top-i,left:n.left+n.width/2-r/2};break;case"left":o={top:n.top+n.height/2-i/2,left:n.left-r};break;case"right":o={top:n.top+n.height/2-i/2,left:n.left+n.width}}e.css(o).addClass(s).addClass("in")}},setContent:function(){var e=this.tip(),t=this.getTitle();e.find(".tooltip-inner")[this.options.html?"html":"text"](t),e.removeClass("fade in top bottom left right")},hide:function(){function r(){var t=setTimeout(function(){n.off(e.support.transition.end).remove()},500);n.one(e.support.transition.end,function(){clearTimeout(t),n.remove()})}var t=this,n=this.tip();return n.removeClass("in"),e.support.transition&&this.$tip.hasClass("fade")?r():n.remove(),this},fixTitle:function(){var e=this.$element;(e.attr("title")||typeof e.attr("data-original-title")!="string")&&e.attr("data-original-title",e.attr("title")||"").removeAttr("title")},hasContent:function(){return this.getTitle()},getPosition:function(t){return e.extend({},t?{top:0,left:0}:this.$element.offset(),{width:this.$element[0].offsetWidth,height:this.$element[0].offsetHeight})},getTitle:function(){var e,t=this.$element,n=this.options;return e=t.attr("data-original-title")||(typeof n.title=="function"?n.title.call(t[0]):n.title),e},tip:function(){return this.$tip=this.$tip||e(this.options.template)},validate:function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},enable:function(){this.enabled=!0},disable:function(){this.enabled=!1},toggleEnabled:function(){this.enabled=!this.enabled},toggle:function(){this[this.tip().hasClass("in")?"hide":"show"]()},destroy:function(){this.hide().$element.off("."+this.type).removeData(this.type)}},e.fn.tooltip=function(n){return this.each(function(){var r=e(this),i=r.data("tooltip"),s=typeof n=="object"&&n;i||r.data("tooltip",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.tooltip.Constructor=t,e.fn.tooltip.defaults={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover",title:"",delay:0,html:!0}}(window.jQuery),!function(e){"use strict";var t=function(e,t){this.init("popover",e,t)};t.prototype=e.extend({},e.fn.tooltip.Constructor.prototype,{constructor:t,setContent:function(){var e=this.tip(),t=this.getTitle(),n=this.getContent();e.find(".popover-title")[this.options.html?"html":"text"](t),e.find(".popover-content > *")[this.options.html?"html":"text"](n),e.removeClass("fade top bottom left right in")},hasContent:function(){return this.getTitle()||this.getContent()},getContent:function(){var e,t=this.$element,n=this.options;return e=t.attr("data-content")||(typeof n.content=="function"?n.content.call(t[0]):n.content),e},tip:function(){return this.$tip||(this.$tip=e(this.options.template)),this.$tip},destroy:function(){this.hide().$element.off("."+this.type).removeData(this.type)}}),e.fn.popover=function(n){return this.each(function(){var r=e(this),i=r.data("popover"),s=typeof n=="object"&&n;i||r.data("popover",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.popover.Constructor=t,e.fn.popover.defaults=e.extend({},e.fn.tooltip.defaults,{placement:"right",trigger:"click",content:"",template:'<div class="popover"><div class="arrow"></div><div class="popover-inner"><h3 class="popover-title"></h3><div class="popover-content"><p></p></div></div></div>'})}(window.jQuery),!function(e){"use strict";function t(t,n){var r=e.proxy(this.process,this),i=e(t).is("body")?e(window):e(t),s;this.options=e.extend({},e.fn.scrollspy.defaults,n),this.$scrollElement=i.on("scroll.scroll-spy.data-api",r),this.selector=(this.options.target||(s=e(t).attr("href"))&&s.replace(/.*(?=#[^\s]+$)/,"")||"")+" .nav li > a",this.$body=e("body"),this.refresh(),this.process()}t.prototype={constructor:t,refresh:function(){var t=this,n;this.offsets=e([]),this.targets=e([]),n=this.$body.find(this.selector).map(function(){var t=e(this),n=t.data("target")||t.attr("href"),r=/^#\w/.test(n)&&e(n);return r&&r.length&&[[r.position().top,n]]||null}).sort(function(e,t){return e[0]-t[0]}).each(function(){t.offsets.push(this[0]),t.targets.push(this[1])})},process:function(){var e=this.$scrollElement.scrollTop()+this.options.offset,t=this.$scrollElement[0].scrollHeight||this.$body[0].scrollHeight,n=t-this.$scrollElement.height(),r=this.offsets,i=this.targets,s=this.activeTarget,o;if(e>=n)return s!=(o=i.last()[0])&&this.activate(o);for(o=r.length;o--;)s!=i[o]&&e>=r[o]&&(!r[o+1]||e<=r[o+1])&&this.activate(i[o])},activate:function(t){var n,r;this.activeTarget=t,e(this.selector).parent(".active").removeClass("active"),r=this.selector+'[data-target="'+t+'"],'+this.selector+'[href="'+t+'"]',n=e(r).parent("li").addClass("active"),n.parent(".dropdown-menu").length&&(n=n.closest("li.dropdown").addClass("active")),n.trigger("activate")}},e.fn.scrollspy=function(n){return this.each(function(){var r=e(this),i=r.data("scrollspy"),s=typeof n=="object"&&n;i||r.data("scrollspy",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.scrollspy.Constructor=t,e.fn.scrollspy.defaults={offset:10},e(window).on("load",function(){e('[data-spy="scroll"]').each(function(){var t=e(this);t.scrollspy(t.data())})})}(window.jQuery),!function(e){"use strict";var t=function(t){this.element=e(t)};t.prototype={constructor:t,show:function(){var t=this.element,n=t.closest("ul:not(.dropdown-menu)"),r=t.attr("data-target"),i,s,o;r||(r=t.attr("href"),r=r&&r.replace(/.*(?=#[^\s]*$)/,""));if(t.parent("li").hasClass("active"))return;i=n.find(".active a").last()[0],o=e.Event("show",{relatedTarget:i}),t.trigger(o);if(o.isDefaultPrevented())return;s=e(r),this.activate(t.parent("li"),n),this.activate(s,s.parent(),function(){t.trigger({type:"shown",relatedTarget:i})})},activate:function(t,n,r){function o(){i.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),t.addClass("active"),s?(t[0].offsetWidth,t.addClass("in")):t.removeClass("fade"),t.parent(".dropdown-menu")&&t.closest("li.dropdown").addClass("active"),r&&r()}var i=n.find("> .active"),s=r&&e.support.transition&&i.hasClass("fade");s?i.one(e.support.transition.end,o):o(),i.removeClass("in")}},e.fn.tab=function(n){return this.each(function(){var r=e(this),i=r.data("tab");i||r.data("tab",i=new t(this)),typeof n=="string"&&i[n]()})},e.fn.tab.Constructor=t,e(function(){e("body").on("click.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(t){t.preventDefault(),e(this).tab("show")})})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.options=e.extend({},e.fn.typeahead.defaults,n),this.matcher=this.options.matcher||this.matcher,this.sorter=this.options.sorter||this.sorter,this.highlighter=this.options.highlighter||this.highlighter,this.updater=this.options.updater||this.updater,this.$menu=e(this.options.menu).appendTo("body"),this.source=this.options.source,this.shown=!1,this.listen()};t.prototype={constructor:t,select:function(){var e=this.$menu.find(".active").attr("data-value");return this.$element.val(this.updater(e)).change(),this.hide()},updater:function(e){return e},show:function(){var t=e.extend({},this.$element.offset(),{height:this.$element[0].offsetHeight});return this.$menu.css({top:t.top+t.height,left:t.left}),this.$menu.show(),this.shown=!0,this},hide:function(){return this.$menu.hide(),this.shown=!1,this},lookup:function(t){var n;return this.query=this.$element.val(),!this.query||this.query.length<this.options.minLength?this.shown?this.hide():this:(n=e.isFunction(this.source)?this.source(this.query,e.proxy(this.process,this)):this.source,n?this.process(n):this)},process:function(t){var n=this;return t=e.grep(t,function(e){return n.matcher(e)}),t=this.sorter(t),t.length?this.render(t.slice(0,this.options.items)).show():this.shown?this.hide():this},matcher:function(e){return~e.toLowerCase().indexOf(this.query.toLowerCase())},sorter:function(e){var t=[],n=[],r=[],i;while(i=e.shift())i.toLowerCase().indexOf(this.query.toLowerCase())?~i.indexOf(this.query)?n.push(i):r.push(i):t.push(i);return t.concat(n,r)},highlighter:function(e){var t=this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&");return e.replace(new RegExp("("+t+")","ig"),function(e,t){return"<strong>"+t+"</strong>"})},render:function(t){var n=this;return t=e(t).map(function(t,r){return t=e(n.options.item).attr("data-value",r),t.find("a").html(n.highlighter(r)),t[0]}),t.first().addClass("active"),this.$menu.html(t),this},next:function(t){var n=this.$menu.find(".active").removeClass("active"),r=n.next();r.length||(r=e(this.$menu.find("li")[0])),r.addClass("active")},prev:function(e){var t=this.$menu.find(".active").removeClass("active"),n=t.prev();n.length||(n=this.$menu.find("li").last()),n.addClass("active")},listen:function(){this.$element.on("blur",e.proxy(this.blur,this)).on("keypress",e.proxy(this.keypress,this)).on("keyup",e.proxy(this.keyup,this)),(e.browser.chrome||e.browser.webkit||e.browser.msie)&&this.$element.on("keydown",e.proxy(this.keydown,this)),this.$menu.on("click",e.proxy(this.click,this)).on("mouseenter","li",e.proxy(this.mouseenter,this))},move:function(e){if(!this.shown)return;switch(e.keyCode){case 9:case 13:case 27:e.preventDefault();break;case 38:e.preventDefault(),this.prev();break;case 40:e.preventDefault(),this.next()}e.stopPropagation()},keydown:function(t){this.suppressKeyPressRepeat=!~e.inArray(t.keyCode,[40,38,9,13,27]),this.move(t)},keypress:function(e){if(this.suppressKeyPressRepeat)return;this.move(e)},keyup:function(e){switch(e.keyCode){case 40:case 38:break;case 9:case 13:if(!this.shown)return;this.select();break;case 27:if(!this.shown)return;this.hide();break;default:this.lookup()}e.stopPropagation(),e.preventDefault()},blur:function(e){var t=this;setTimeout(function(){t.hide()},150)},click:function(e){e.stopPropagation(),e.preventDefault(),this.select()},mouseenter:function(t){this.$menu.find(".active").removeClass("active"),e(t.currentTarget).addClass("active")}},e.fn.typeahead=function(n){return this.each(function(){var r=e(this),i=r.data("typeahead"),s=typeof n=="object"&&n;i||r.data("typeahead",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.typeahead.defaults={source:[],items:8,menu:'<ul class="typeahead dropdown-menu"></ul>',item:'<li><a href="#"></a></li>',minLength:1},e.fn.typeahead.Constructor=t,e(function(){e("body").on("focus.typeahead.data-api",'[data-provide="typeahead"]',function(t){var n=e(this);if(n.data("typeahead"))return;t.preventDefault(),n.typeahead(n.data())})})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.options=e.extend({},e.fn.affix.defaults,n),this.$window=e(window).on("scroll.affix.data-api",e.proxy(this.checkPosition,this)),this.$element=e(t),this.checkPosition()};t.prototype.checkPosition=function(){if(!this.$element.is(":visible"))return;var t=e(document).height(),n=this.$window.scrollTop(),r=this.$element.offset(),i=this.options.offset,s=i.bottom,o=i.top,u="affix affix-top affix-bottom",a;typeof i!="object"&&(s=o=i),typeof o=="function"&&(o=i.top()),typeof s=="function"&&(s=i.bottom()),a=this.unpin!=null&&n+this.unpin<=r.top?!1:s!=null&&r.top+this.$element.height()>=t-s?"bottom":o!=null&&n<=o?"top":!1;if(this.affixed===a)return;this.affixed=a,this.unpin=a=="bottom"?r.top-n:null,this.$element.removeClass(u).addClass("affix"+(a?"-"+a:""))},e.fn.affix=function(n){return this.each(function(){var r=e(this),i=r.data("affix"),s=typeof n=="object"&&n;i||r.data("affix",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.affix.Constructor=t,e.fn.affix.defaults={offset:0},e(window).on("load",function(){e('[data-spy="affix"]').each(function(){var t=e(this),n=t.data();n.offset=n.offset||{},n.offsetBottom&&(n.offset.bottom=n.offsetBottom),n.offsetTop&&(n.offset.top=n.offsetTop),t.affix(n)})})}(window.jQuery);
@@ -0,0 +1,23 @@+Copyright (C) 2013 by Marijn Haverbeke <marijnh@gmail.com>++Permission is hereby granted, free of charge, to any person obtaining a copy+of this software and associated documentation files (the "Software"), to deal+in the Software without restriction, including without limitation the rights+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell+copies of the Software, and to permit persons to whom the Software is+furnished to do so, subject to the following conditions:++The above copyright notice and this permission notice shall be included in+all copies or substantial portions of the Software.++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN+THE SOFTWARE.++Please note that some subdirectories of the CodeMirror distribution+include their own LICENSE files, and are released under different+licences.
@@ -0,0 +1,12 @@+window.CodeMirror=function(){"use strict";function w(a,c){if(!(this instanceof w))return new w(a,c);this.options=c=c||{};for(var d in Wc)!c.hasOwnProperty(d)&&Wc.hasOwnProperty(d)&&(c[d]=Wc[d]);I(c);var e="string"==typeof c.value?0:c.value.first,f=this.display=x(a,e);f.wrapper.CodeMirror=this,F(this),c.autofocus&&!o&&Kb(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,focused:!1,suppressEdits:!1,pasteIncoming:!1,draggingText:!1,highlight:new Qe},D(this),c.lineWrapping&&(this.display.wrapper.className+=" CodeMirror-wrap");var g=c.value;"string"==typeof g&&(g=new ae(c.value,c.mode)),Cb(this,ee)(this,g),b&&setTimeout($e(Jb,this,!0),20),Mb(this);var h;try{h=document.activeElement==f.input}catch(i){}h||c.autofocus&&!o?setTimeout($e(hc,this),20):ic(this),Cb(this,function(){for(var a in Vc)Vc.propertyIsEnumerable(a)&&Vc[a](this,c[a],Yc);for(var b=0;ad.length>b;++b)ad[b](this)})()}function x(a,b){var d={},f=d.input=df("textarea",null,null,"position: absolute; padding: 0; width: 1px; height: 1em; outline: none; font-size: 4px;");return e?f.style.width="1000px":f.setAttribute("wrap","off"),n&&(f.style.border="1px solid black"),f.setAttribute("autocorrect","off"),f.setAttribute("autocapitalize","off"),f.setAttribute("spellcheck","false"),d.inputDiv=df("div",[f],null,"overflow: hidden; position: relative; width: 3px; height: 0px;"),d.scrollbarH=df("div",[df("div",null,null,"height: 1px")],"CodeMirror-hscrollbar"),d.scrollbarV=df("div",[df("div",null,null,"width: 1px")],"CodeMirror-vscrollbar"),d.scrollbarFiller=df("div",null,"CodeMirror-scrollbar-filler"),d.gutterFiller=df("div",null,"CodeMirror-gutter-filler"),d.lineDiv=df("div",null,"CodeMirror-code"),d.selectionDiv=df("div",null,null,"position: relative; z-index: 1"),d.cursor=df("div","\u00a0","CodeMirror-cursor"),d.otherCursor=df("div","\u00a0","CodeMirror-cursor CodeMirror-secondarycursor"),d.measure=df("div",null,"CodeMirror-measure"),d.lineSpace=df("div",[d.measure,d.selectionDiv,d.lineDiv,d.cursor,d.otherCursor],null,"position: relative; outline: none"),d.mover=df("div",[df("div",[d.lineSpace],"CodeMirror-lines")],null,"position: relative"),d.sizer=df("div",[d.mover],"CodeMirror-sizer"),d.heightForcer=df("div",null,null,"position: absolute; height: "+Oe+"px; width: 1px;"),d.gutters=df("div",null,"CodeMirror-gutters"),d.lineGutter=null,d.scroller=df("div",[d.sizer,d.heightForcer,d.gutters],"CodeMirror-scroll"),d.scroller.setAttribute("tabIndex","-1"),d.wrapper=df("div",[d.inputDiv,d.scrollbarH,d.scrollbarV,d.scrollbarFiller,d.gutterFiller,d.scroller],"CodeMirror"),c&&(d.gutters.style.zIndex=-1,d.scroller.style.paddingRight=0),a.appendChild?a.appendChild(d.wrapper):a(d.wrapper),n&&(f.style.width="0px"),e||(d.scroller.draggable=!0),j?(d.inputDiv.style.height="1px",d.inputDiv.style.position="absolute"):c&&(d.scrollbarH.style.minWidth=d.scrollbarV.style.minWidth="18px"),d.viewOffset=d.lastSizeC=0,d.showingFrom=d.showingTo=b,d.lineNumWidth=d.lineNumInnerWidth=d.lineNumChars=null,d.prevInput="",d.alignWidgets=!1,d.pollingFast=!1,d.poll=new Qe,d.cachedCharWidth=d.cachedTextHeight=null,d.measureLineCache=[],d.measureLineCachePos=0,d.inaccurateSelection=!1,d.maxLine=null,d.maxLineLength=0,d.maxLineChanged=!1,d.wheelDX=d.wheelDY=d.wheelStartX=d.wheelStartY=null,d}function y(a){a.doc.mode=w.getMode(a.options,a.doc.modeOption),a.doc.iter(function(a){a.stateAfter&&(a.stateAfter=null),a.styles&&(a.styles=null)}),a.doc.frontier=a.doc.first,_(a,100),a.state.modeGen++,a.curOp&&Fb(a)}function z(a){a.options.lineWrapping?(a.display.wrapper.className+=" CodeMirror-wrap",a.display.sizer.style.minWidth=""):(a.display.wrapper.className=a.display.wrapper.className.replace(" CodeMirror-wrap",""),H(a)),B(a),Fb(a),mb(a),setTimeout(function(){J(a)},100)}function A(a){var b=xb(a.display),c=a.options.lineWrapping,d=c&&Math.max(5,a.display.scroller.clientWidth/yb(a.display)-3);return function(e){return Ad(a.doc,e)?0:c?(Math.ceil(e.text.length/d)||1)*b:b}}function B(a){var b=a.doc,c=A(a);b.iter(function(a){var b=c(a);b!=a.height&&ie(a,b)})}function C(a){var b=ed[a.options.keyMap],c=b.style;a.display.wrapper.className=a.display.wrapper.className.replace(/\s*cm-keymap-\S+/g,"")+(c?" cm-keymap-"+c:""),a.state.disableInput=b.disableInput}function D(a){a.display.wrapper.className=a.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+a.options.theme.replace(/(^|\s)\s*/g," cm-s-"),mb(a)}function E(a){F(a),Fb(a),setTimeout(function(){L(a)},20)}function F(a){var b=a.display.gutters,c=a.options.gutters;ef(b);for(var d=0;c.length>d;++d){var e=c[d],f=b.appendChild(df("div",null,"CodeMirror-gutter "+e));"CodeMirror-linenumbers"==e&&(a.display.lineGutter=f,f.style.width=(a.display.lineNumWidth||1)+"px")}b.style.display=d?"":"none"}function G(a,b){if(0==b.height)return 0;for(var d,c=b.text.length,e=b;d=xd(e);){var f=d.find();e=fe(a,f.from.line),c+=f.from.ch-f.to.ch}for(e=b;d=yd(e);){var f=d.find();c-=e.text.length-f.from.ch,e=fe(a,f.to.line),c+=e.text.length-f.to.ch}return c}function H(a){var b=a.display,c=a.doc;b.maxLine=fe(c,c.first),b.maxLineLength=G(c,b.maxLine),b.maxLineChanged=!0,c.iter(function(a){var d=G(c,a);d>b.maxLineLength&&(b.maxLineLength=d,b.maxLine=a)})}function I(a){for(var b=!1,c=0;a.gutters.length>c;++c)"CodeMirror-linenumbers"==a.gutters[c]&&(a.lineNumbers?b=!0:a.gutters.splice(c--,1));!b&&a.lineNumbers&&a.gutters.push("CodeMirror-linenumbers")}function J(a){var b=a.display,c=a.doc.height,d=c+eb(b);b.sizer.style.minHeight=b.heightForcer.style.top=d+"px",b.gutters.style.height=Math.max(d,b.scroller.clientHeight-Oe)+"px";var e=Math.max(d,b.scroller.scrollHeight),f=b.scroller.scrollWidth>b.scroller.clientWidth+1,g=e>b.scroller.clientHeight+1;g?(b.scrollbarV.style.display="block",b.scrollbarV.style.bottom=f?mf(b.measure)+"px":"0",b.scrollbarV.firstChild.style.height=e-b.scroller.clientHeight+b.scrollbarV.clientHeight+"px"):b.scrollbarV.style.display="",f?(b.scrollbarH.style.display="block",b.scrollbarH.style.right=g?mf(b.measure)+"px":"0",b.scrollbarH.firstChild.style.width=b.scroller.scrollWidth-b.scroller.clientWidth+b.scrollbarH.clientWidth+"px"):b.scrollbarH.style.display="",f&&g?(b.scrollbarFiller.style.display="block",b.scrollbarFiller.style.height=b.scrollbarFiller.style.width=mf(b.measure)+"px"):b.scrollbarFiller.style.display="",f&&a.options.coverGutterNextToScrollbar&&a.options.fixedGutter?(b.gutterFiller.style.display="block",b.gutterFiller.style.height=mf(b.measure)+"px",b.gutterFiller.style.width=b.gutters.offsetWidth+"px"):b.gutterFiller.style.display="",k&&0===mf(b.measure)&&(b.scrollbarV.style.minWidth=b.scrollbarH.style.minHeight=l?"18px":"12px")}function K(a,b,c){var d=a.scroller.scrollTop,e=a.wrapper.clientHeight;"number"==typeof c?d=c:c&&(d=c.top,e=c.bottom-c.top),d=Math.floor(d-db(a));var f=Math.ceil(d+e);return{from:ke(b,d),to:ke(b,f)}}function L(a){var b=a.display;if(b.alignWidgets||b.gutters.firstChild&&a.options.fixedGutter){for(var c=O(b)-b.scroller.scrollLeft+a.doc.scrollLeft,d=b.gutters.offsetWidth,e=c+"px",f=b.lineDiv.firstChild;f;f=f.nextSibling)if(f.alignable)for(var g=0,h=f.alignable;h.length>g;++g)h[g].style.left=e;a.options.fixedGutter&&(b.gutters.style.left=c+d+"px")}}function M(a){if(!a.options.lineNumbers)return!1;var b=a.doc,c=N(a.options,b.first+b.size-1),d=a.display;if(c.length!=d.lineNumChars){var e=d.measure.appendChild(df("div",[df("div",c)],"CodeMirror-linenumber CodeMirror-gutter-elt")),f=e.firstChild.offsetWidth,g=e.offsetWidth-f;return d.lineGutter.style.width="",d.lineNumInnerWidth=Math.max(f,d.lineGutter.offsetWidth-g),d.lineNumWidth=d.lineNumInnerWidth+g,d.lineNumChars=d.lineNumInnerWidth?c.length:-1,d.lineGutter.style.width=d.lineNumWidth+"px",!0}return!1}function N(a,b){return a.lineNumberFormatter(b+a.firstLineNumber)+""}function O(a){return hf(a.scroller).left-hf(a.sizer).left}function P(a,b,c){for(var f,d=a.display.showingFrom,e=a.display.showingTo,g=K(a.display,a.doc,c);Q(a,b,g)&&(f=!0,X(a),J(a),c&&(c=Math.min(a.display.scroller.scrollHeight-a.display.scroller.clientHeight,"number"==typeof c?c:c.top)),g=K(a.display,a.doc,c),!(g.from>=a.display.showingFrom&&g.to<=a.display.showingTo));)b=[];return f&&(Ke(a,"update",a),(a.display.showingFrom!=d||a.display.showingTo!=e)&&Ke(a,"viewportChange",a,a.display.showingFrom,a.display.showingTo)),f}function Q(a,b,d){var e=a.display,f=a.doc;if(!e.wrapper.clientWidth)return e.showingFrom=e.showingTo=f.first,e.viewOffset=0,void 0;if(!(0==b.length&&d.from>e.showingFrom&&d.to<e.showingTo)){M(a)&&(b=[{from:f.first,to:f.first+f.size}]);var g=e.sizer.style.marginLeft=e.gutters.offsetWidth+"px";e.scrollbarH.style.left=a.options.fixedGutter?g:"0";var h=1/0;if(a.options.lineNumbers)for(var i=0;b.length>i;++i)if(b[i].diff){h=b[i].from;break}var j=f.first+f.size,k=Math.max(d.from-a.options.viewportMargin,f.first),l=Math.min(j,d.to+a.options.viewportMargin);if(k>e.showingFrom&&20>k-e.showingFrom&&(k=Math.max(f.first,e.showingFrom)),e.showingTo>l&&20>e.showingTo-l&&(l=Math.min(j,e.showingTo)),v)for(k=je(zd(f,fe(f,k)));j>l&&Ad(f,fe(f,l));)++l;var m=[{from:Math.max(e.showingFrom,f.first),to:Math.min(e.showingTo,j)}];if(m=m[0].from>=m[0].to?[]:S(m,b),v)for(var i=0;m.length>i;++i)for(var o,n=m[i];o=yd(fe(f,n.to-1));){var p=o.find().from.line;if(!(p>n.from)){m.splice(i--,1);break}n.to=p}for(var q=0,i=0;m.length>i;++i){var n=m[i];k>n.from&&(n.from=k),n.to>l&&(n.to=l),n.from>=n.to?m.splice(i--,1):q+=n.to-n.from}if(q==l-k&&k==e.showingFrom&&l==e.showingTo)return R(a),void 0;m.sort(function(a,b){return a.from-b.from});try{var r=document.activeElement}catch(s){}.7*(l-k)>q&&(e.lineDiv.style.display="none"),U(a,k,l,m,h),e.lineDiv.style.display="",r&&document.activeElement!=r&&r.offsetHeight&&r.focus();var t=k!=e.showingFrom||l!=e.showingTo||e.lastSizeC!=e.wrapper.clientHeight;t&&(e.lastSizeC=e.wrapper.clientHeight,_(a,400)),e.showingFrom=k,e.showingTo=l;for(var x,u=e.lineDiv.offsetTop,w=e.lineDiv.firstChild;w;w=w.nextSibling)if(w.lineObj){if(c){var y=w.offsetTop+w.offsetHeight;x=y-u,u=y}else{var z=hf(w);x=z.bottom-z.top}var A=w.lineObj.height-x;if(2>x&&(x=xb(e)),A>.001||-.001>A){ie(w.lineObj,x);var B=w.lineObj.widgets;if(B)for(var i=0;B.length>i;++i)B[i].height=B[i].node.offsetHeight}}return R(a),!0}}function R(a){var b=a.display.viewOffset=le(a,fe(a.doc,a.display.showingFrom));a.display.mover.style.top=b+"px"}function S(a,b){for(var c=0,d=b.length||0;d>c;++c){for(var e=b[c],f=[],g=e.diff||0,h=0,i=a.length;i>h;++h){var j=a[h];e.to<=j.from&&e.diff?f.push({from:j.from+g,to:j.to+g}):e.to<=j.from||e.from>=j.to?f.push(j):(e.from>j.from&&f.push({from:j.from,to:e.from}),e.to<j.to&&f.push({from:e.to+g,to:j.to+g}))}a=f}return a}function T(a){for(var b=a.display,c={},d={},e=b.gutters.firstChild,f=0;e;e=e.nextSibling,++f)c[a.options.gutters[f]]=e.offsetLeft,d[a.options.gutters[f]]=e.offsetWidth;return{fixedPos:O(b),gutterTotalWidth:b.gutters.offsetWidth,gutterLeft:c,gutterWidth:d,wrapperWidth:b.wrapper.clientWidth}}function U(a,b,c,d,f){function l(b){var c=b.nextSibling;return e&&p&&a.display.currentWheelTarget==b?(b.style.display="none",b.lineObj=null):b.parentNode.removeChild(b),c}var g=T(a),h=a.display,i=a.options.lineNumbers;d.length||e&&a.display.currentWheelTarget||ef(h.lineDiv);var j=h.lineDiv,k=j.firstChild,m=d.shift(),n=b;for(a.doc.iter(b,c,function(b){if(m&&m.to==n&&(m=d.shift()),Ad(a.doc,b)){if(0!=b.height&&ie(b,0),b.widgets&&k.previousSibling)for(var c=0;b.widgets.length>c;++c){var e=b.widgets[c];if(e.showIfHidden){var h=k.previousSibling;if(/pre/i.test(h.nodeName)){var o=df("div",null,null,"position: relative");h.parentNode.replaceChild(o,h),o.appendChild(h),h=o}var p=h.appendChild(df("div",[e.node],"CodeMirror-linewidget"));e.handleMouseEvents||(p.ignoreEvents=!0),W(e,p,h,g)}}}else if(m&&n>=m.from&&m.to>n){for(;k.lineObj!=b;)k=l(k);i&&n>=f&&k.lineNumber&&gf(k.lineNumber,N(a.options,n)),k=k.nextSibling}else{if(b.widgets)for(var s,q=0,r=k;r&&20>q;++q,r=r.nextSibling)if(r.lineObj==b&&/div/i.test(r.nodeName)){s=r;break}var t=V(a,b,n,g,s);if(t!=s)j.insertBefore(t,k);else{for(;k!=s;)k=l(k);k=k.nextSibling}t.lineObj=b}++n});k;)k=l(k)}function V(a,b,d,e,f){var j,g=Rd(a,b),h=b.gutterMarkers,i=a.display;if(!(a.options.lineNumbers||h||b.bgClass||b.wrapClass||b.widgets))return g;if(f){f.alignable=null;for(var o,k=!0,l=0,m=null,n=f.firstChild;n;n=o)if(o=n.nextSibling,/\bCodeMirror-linewidget\b/.test(n.className)){for(var p=0,q=!0;b.widgets.length>p;++p){var r=b.widgets[p];if(r.above||(m=n,q=!1),r.node==n.firstChild){W(r,n,f,e),++l;break}}if(p==b.widgets.length){k=!1;break}}else f.removeChild(n);f.insertBefore(g,m),k&&l==b.widgets.length&&(j=f,f.className=b.wrapClass||"")}if(j||(j=df("div",null,b.wrapClass,"position: relative"),j.appendChild(g)),b.bgClass&&j.insertBefore(df("div",null,b.bgClass+" CodeMirror-linebackground"),j.firstChild),a.options.lineNumbers||h){var s=j.insertBefore(df("div",null,null,"position: absolute; left: "+(a.options.fixedGutter?e.fixedPos:-e.gutterTotalWidth)+"px"),j.firstChild);if(a.options.fixedGutter&&(j.alignable||(j.alignable=[])).push(s),!a.options.lineNumbers||h&&h["CodeMirror-linenumbers"]||(j.lineNumber=s.appendChild(df("div",N(a.options,d),"CodeMirror-linenumber CodeMirror-gutter-elt","left: "+e.gutterLeft["CodeMirror-linenumbers"]+"px; width: "+i.lineNumInnerWidth+"px"))),h)for(var t=0;a.options.gutters.length>t;++t){var u=a.options.gutters[t],v=h.hasOwnProperty(u)&&h[u];v&&s.appendChild(df("div",[v],"CodeMirror-gutter-elt","left: "+e.gutterLeft[u]+"px; width: "+e.gutterWidth[u]+"px"))}}if(c&&(j.style.zIndex=2),b.widgets&&j!=f)for(var p=0,w=b.widgets;w.length>p;++p){var r=w[p],x=df("div",[r.node],"CodeMirror-linewidget");r.handleMouseEvents||(x.ignoreEvents=!0),W(r,x,j,e),r.above?j.insertBefore(x,a.options.lineNumbers&&0!=b.height?s:g):j.appendChild(x),Ke(r,"redraw")}return j}function W(a,b,c,d){if(a.noHScroll){(c.alignable||(c.alignable=[])).push(b);var e=d.wrapperWidth;b.style.left=d.fixedPos+"px",a.coverGutter||(e-=d.gutterTotalWidth,b.style.paddingLeft=d.gutterTotalWidth+"px"),b.style.width=e+"px"}a.coverGutter&&(b.style.zIndex=5,b.style.position="relative",a.noHScroll||(b.style.marginLeft=-d.gutterTotalWidth+"px"))}function X(a){var b=a.display,c=xc(a.doc.sel.from,a.doc.sel.to);if(c||a.options.showCursorWhenSelecting?Y(a):b.cursor.style.display=b.otherCursor.style.display="none",c?b.selectionDiv.style.display="none":Z(a),a.options.moveInputWithCursor){var d=sb(a,a.doc.sel.head,"div"),e=hf(b.wrapper),f=hf(b.lineDiv);b.inputDiv.style.top=Math.max(0,Math.min(b.wrapper.clientHeight-10,d.top+f.top-e.top))+"px",b.inputDiv.style.left=Math.max(0,Math.min(b.wrapper.clientWidth-10,d.left+f.left-e.left))+"px"}}function Y(a){var b=a.display,c=sb(a,a.doc.sel.head,"div");b.cursor.style.left=c.left+"px",b.cursor.style.top=c.top+"px",b.cursor.style.height=Math.max(0,c.bottom-c.top)*a.options.cursorHeight+"px",b.cursor.style.display="",c.other?(b.otherCursor.style.display="",b.otherCursor.style.left=c.other.left+"px",b.otherCursor.style.top=c.other.top+"px",b.otherCursor.style.height=.85*(c.other.bottom-c.other.top)+"px"):b.otherCursor.style.display="none"}function Z(a){function h(a,b,c,d){0>b&&(b=0),e.appendChild(df("div",null,"CodeMirror-selected","position: absolute; left: "+a+"px; top: "+b+"px; width: "+(null==c?f-a:c)+"px; height: "+(d-b)+"px"))}function i(b,d,e){function m(c,d){return rb(a,wc(b,c),"div",i,d)}var k,l,i=fe(c,b),j=i.text.length;return tf(me(i),d||0,null==e?j:e,function(a,b,c){var n,o,p,i=m(a,"left");if(a==b)n=i,o=p=i.left;else{if(n=m(b-1,"right"),"rtl"==c){var q=i;i=n,n=q}o=i.left,p=n.right}null==d&&0==a&&(o=g),n.top-i.top>3&&(h(o,i.top,null,i.bottom),o=g,i.bottom<n.top&&h(o,i.bottom,null,n.top)),null==e&&b==j&&(p=f),(!k||i.top<k.top||i.top==k.top&&i.left<k.left)&&(k=i),(!l||n.bottom>l.bottom||n.bottom==l.bottom&&n.right>l.right)&&(l=n),g+1>o&&(o=g),h(o,n.top,p-o,n.bottom)}),{start:k,end:l}}var b=a.display,c=a.doc,d=a.doc.sel,e=document.createDocumentFragment(),f=b.lineSpace.offsetWidth,g=fb(a.display);if(d.from.line==d.to.line)i(d.from.line,d.from.ch,d.to.ch);else{var j=fe(c,d.from.line),k=fe(c,d.to.line),l=zd(c,j)==zd(c,k),m=i(d.from.line,d.from.ch,l?j.text.length:null).end,n=i(d.to.line,l?0:null,d.to.ch).start;l&&(m.top<n.top-2?(h(m.right,m.top,null,m.bottom),h(g,n.top,n.left,n.bottom)):h(m.right,m.top,n.left-m.right,m.bottom)),m.bottom<n.top&&h(g,m.bottom,null,n.top)}ff(b.selectionDiv,e),b.selectionDiv.style.display=""}function $(a){if(a.state.focused){var b=a.display;clearInterval(b.blinker);var c=!0;b.cursor.style.visibility=b.otherCursor.style.visibility="",b.blinker=setInterval(function(){b.cursor.style.visibility=b.otherCursor.style.visibility=(c=!c)?"":"hidden"},a.options.cursorBlinkRate)}}function _(a,b){a.doc.mode.startState&&a.doc.frontier<a.display.showingTo&&a.state.highlight.set(b,$e(ab,a))}function ab(a){var b=a.doc;if(b.frontier<b.first&&(b.frontier=b.first),!(b.frontier>=a.display.showingTo)){var f,c=+new Date+a.options.workTime,d=bd(b.mode,cb(a,b.frontier)),e=[];b.iter(b.frontier,Math.min(b.first+b.size,a.display.showingTo+500),function(g){if(b.frontier>=a.display.showingFrom){var h=g.styles;g.styles=Md(a,g,d);for(var i=!h||h.length!=g.styles.length,j=0;!i&&h.length>j;++j)i=h[j]!=g.styles[j];i&&(f&&f.end==b.frontier?f.end++:e.push(f={start:b.frontier,end:b.frontier+1})),g.stateAfter=bd(b.mode,d)}else Od(a,g,d),g.stateAfter=0==b.frontier%5?bd(b.mode,d):null;return++b.frontier,+new Date>c?(_(a,a.options.workDelay),!0):void 0}),e.length&&Cb(a,function(){for(var a=0;e.length>a;++a)Fb(this,e[a].start,e[a].end)})()}}function bb(a,b,c){for(var d,e,f=a.doc,g=b,h=b-100;g>h;--g){if(f.first>=g)return f.first;var i=fe(f,g-1);if(i.stateAfter&&(!c||f.frontier>=g))return g;var j=Re(i.text,null,a.options.tabSize);(null==e||d>j)&&(e=g-1,d=j)}return e}function cb(a,b,c){var d=a.doc,e=a.display;if(!d.mode.startState)return!0;var f=bb(a,b,c),g=f>d.first&&fe(d,f-1).stateAfter;return g=g?bd(d.mode,g):cd(d.mode),d.iter(f,b,function(c){Od(a,c,g);var h=f==b-1||0==f%5||f>=e.showingFrom&&e.showingTo>f;c.stateAfter=h?bd(d.mode,g):null,++f}),g}function db(a){return a.lineSpace.offsetTop}function eb(a){return a.mover.offsetHeight-a.lineSpace.offsetHeight}function fb(a){var b=ff(a.measure,df("pre",null,null,"text-align: left")).appendChild(df("span","x"));return b.offsetLeft}function gb(a,b,c,d,e){var f=-1;d=d||jb(a,b);for(var g=c;;g+=f){var h=d[g];if(h)break;0>f&&0==g&&(f=1)}var i=(c>g||"right"==e)&&null!=h.topRight;return{left:c>g?h.right:h.left,right:g>c?h.left:h.right,top:i?h.topRight:h.top,bottom:i?h.bottomRight:h.bottom}}function hb(a,b){for(var c=a.display.measureLineCache,d=0;c.length>d;++d){var e=c[d];if(e.text==b.text&&e.markedSpans==b.markedSpans&&a.display.scroller.clientWidth==e.width&&e.classes==b.textClass+"|"+b.bgClass+"|"+b.wrapClass)return e}}function ib(a,b){var c=hb(a,b);c&&(c.text=c.measure=c.markedSpans=null)}function jb(a,b){var c=hb(a,b);if(c)return c.measure;var d=kb(a,b),e=a.display.measureLineCache,f={text:b.text,width:a.display.scroller.clientWidth,markedSpans:b.markedSpans,measure:d,classes:b.textClass+"|"+b.bgClass+"|"+b.wrapClass};return 16==e.length?e[++a.display.measureLineCachePos%16]=f:e.push(f),d}function kb(a,e){function t(a,b){b>s&&(b=s),0>a&&(a=0);for(var c=0;q.length>c;c+=2){var d=q[c],e=q[c+1];if(!(d>b||a>e)&&(a>=d&&e>=b||d>=a&&b>=e||Math.min(b,e)-Math.max(a,d)>=b-a>>1))return q[c]=Math.min(a,d),q[c+1]=Math.max(b,e),c}return q.push(a,b),c}var f=a.display,g=Ze(e.text.length),h=Rd(a,e,g);if(b&&!c&&!a.options.lineWrapping&&h.childNodes.length>100){for(var i=document.createDocumentFragment(),j=10,k=h.childNodes.length,l=0,m=Math.ceil(k/j);m>l;++l){for(var n=df("div",null,null,"display: inline-block"),o=0;j>o&&k;++o)n.appendChild(h.firstChild),--k;i.appendChild(n)}h.appendChild(i)}ff(f.measure,h);var p=hf(f.lineDiv),q=[],r=Ze(e.text.length),s=h.offsetHeight;d&&f.measure.first!=h&&ff(f.measure,h);for(var u,l=0;g.length>l;++l)if(u=g[l]){var v,w=u;if(/\bCodeMirror-widget\b/.test(u.className)&&u.getClientRects){1==u.firstChild.nodeType&&(w=u.firstChild);var x=w.getClientRects(),y=x[0],z=x[x.length-1];if(x.length>1){var A=t(y.top-p.top,y.bottom-p.top),B=t(z.top-p.top,z.bottom-p.top);r[l]={left:y.left-p.left,right:z.right-p.left,top:A,topRight:B};continue}}v=hf(w);var C=t(v.top-p.top,v.bottom-p.top),D=v.right;u.measureRight&&(D=hf(u.measureRight).left),r[l]={left:v.left-p.left,right:D-p.left,top:C}}for(var u,l=0;r.length>l;++l)if(u=r[l]){var E=u.top,F=u.topRight;u.top=q[E],u.bottom=q[E+1],null!=F&&(u.topRight=q[F],u.bottomRight=q[F+1])}return r}function lb(a,b){var c=!1;if(b.markedSpans)for(var d=0;b.markedSpans>d;++d){var e=b.markedSpans[d];!e.collapsed||null!=e.to&&e.to!=b.text.length||(c=!0)}var f=!c&&hb(a,b);if(f)return gb(a,b,b.text.length,f.measure,"right").right;var g=Rd(a,b),h=g.appendChild(of(a.display.measure));return ff(a.display.measure,g),hf(h).right-hf(a.display.lineDiv).left}function mb(a){a.display.measureLineCache.length=a.display.measureLineCachePos=0,a.display.cachedCharWidth=a.display.cachedTextHeight=null,a.options.lineWrapping||(a.display.maxLineChanged=!0),a.display.lineNumChars=null}function nb(){return window.pageXOffset||(document.documentElement||document.body).scrollLeft}function ob(){return window.pageYOffset||(document.documentElement||document.body).scrollTop}function pb(a,b,c,d){if(b.widgets)for(var e=0;b.widgets.length>e;++e)if(b.widgets[e].above){var f=Gd(b.widgets[e]);c.top+=f,c.bottom+=f}if("line"==d)return c;d||(d="local");var g=le(a,b);if("local"==d?g+=db(a.display):g-=a.display.viewOffset,"page"==d||"window"==d){var h=hf(a.display.lineSpace);g+=h.top+("window"==d?0:ob());var i=h.left+("window"==d?0:nb());c.left+=i,c.right+=i}return c.top+=g,c.bottom+=g,c}function qb(a,b,c){if("div"==c)return b;var d=b.left,e=b.top;if("page"==c)d-=nb(),e-=ob();else if("local"==c||!c){var f=hf(a.display.sizer);d+=f.left,e+=f.top}var g=hf(a.display.lineSpace);return{left:d-g.left,top:e-g.top}}function rb(a,b,c,d,e){return d||(d=fe(a.doc,b.line)),pb(a,d,gb(a,d,b.ch,null,e),c)}function sb(a,b,c,d,e){function f(b,f){var g=gb(a,d,b,e,f?"right":"left");return f?g.left=g.right:g.right=g.left,pb(a,d,g,c)}function g(a,b){var c=h[b],d=c.level%2;return a==uf(c)&&b&&c.level<h[b-1].level?(c=h[--b],a=vf(c)-(c.level%2?0:1),d=!0):a==vf(c)&&h.length-1>b&&c.level<h[b+1].level&&(c=h[++b],a=uf(c)-c.level%2,d=!1),d&&a==c.to&&a>c.from?f(a-1):f(a,d)}d=d||fe(a.doc,b.line),e||(e=jb(a,d));var h=me(d),i=b.ch;if(!h)return f(i);var j=Cf(h,i),k=g(i,j);return null!=Bf&&(k.other=g(i,Bf)),k}function tb(a,b,c,d){var e=new wc(a,b);return e.xRel=d,c&&(e.outside=!0),e}function ub(a,b,c){var d=a.doc;if(c+=a.display.viewOffset,0>c)return tb(d.first,0,!0,-1);var e=ke(d,c),f=d.first+d.size-1;if(e>f)return tb(d.first+d.size-1,fe(d,f).text.length,!0,1);for(0>b&&(b=0);;){var g=fe(d,e),h=vb(a,g,e,b,c),i=yd(g),j=i&&i.find();if(!i||!(h.ch>j.from.ch||h.ch==j.from.ch&&h.xRel>0))return h;e=j.to.line}}function vb(a,b,c,d,e){function j(d){var e=sb(a,wc(c,d),"line",b,i);return g=!0,f>e.bottom?e.left-h:e.top>f?e.left+h:(g=!1,e.left)}var f=e-le(a,b),g=!1,h=2*a.display.wrapper.clientWidth,i=jb(a,b),k=me(b),l=b.text.length,m=wf(b),n=xf(b),o=j(m),p=g,q=j(n),r=g;if(d>q)return tb(c,n,r,1);for(;;){if(k?n==m||n==Ef(b,m,1):1>=n-m){for(var s=o>d||q-d>=d-o?m:n,t=d-(s==m?o:q);cf.test(b.text.charAt(s));)++s;var u=tb(c,s,s==m?p:r,0>t?-1:t?1:0);return u}var v=Math.ceil(l/2),w=m+v;if(k){w=m;for(var x=0;v>x;++x)w=Ef(b,w,1)}var y=j(w);y>d?(n=w,q=y,(r=g)&&(q+=1e3),l=v):(m=w,o=y,p=g,l-=v)}}function xb(a){if(null!=a.cachedTextHeight)return a.cachedTextHeight;if(null==wb){wb=df("pre");for(var b=0;49>b;++b)wb.appendChild(document.createTextNode("x")),wb.appendChild(df("br"));wb.appendChild(document.createTextNode("x"))}ff(a.measure,wb);var c=wb.offsetHeight/50;return c>3&&(a.cachedTextHeight=c),ef(a.measure),c||1}function yb(a){if(null!=a.cachedCharWidth)return a.cachedCharWidth;var b=df("span","x"),c=df("pre",[b]);ff(a.measure,c);var d=b.offsetWidth;return d>2&&(a.cachedCharWidth=d),d||10}function Ab(a){a.curOp={changes:[],updateInput:null,userSelChange:null,textChanged:null,selectionChanged:!1,cursorActivity:!1,updateMaxLine:!1,updateScrollPos:!1,id:++zb},Je++||(Ie=[])}function Bb(a){var b=a.curOp,c=a.doc,d=a.display;if(a.curOp=null,b.updateMaxLine&&H(a),d.maxLineChanged&&!a.options.lineWrapping&&d.maxLine){var e=lb(a,d.maxLine);d.sizer.style.minWidth=Math.max(0,e+3+Oe)+"px",d.maxLineChanged=!1;var f=Math.max(0,d.sizer.offsetLeft+d.sizer.offsetWidth-d.scroller.clientWidth);c.scrollLeft>f&&!b.updateScrollPos&&Xb(a,Math.min(d.scroller.scrollLeft,f),!0)}var g,h;if(b.updateScrollPos)g=b.updateScrollPos;else if(b.selectionChanged&&d.scroller.clientHeight){var i=sb(a,c.sel.head);g=Mc(a,i.left,i.top,i.left,i.bottom)}(b.changes.length||g&&null!=g.scrollTop)&&(h=P(a,b.changes,g&&g.scrollTop),a.display.scroller.offsetHeight&&(a.doc.scrollTop=a.display.scroller.scrollTop)),!h&&b.selectionChanged&&X(a),b.updateScrollPos?(d.scroller.scrollTop=d.scrollbarV.scrollTop=c.scrollTop=g.scrollTop,d.scroller.scrollLeft=d.scrollbarH.scrollLeft=c.scrollLeft=g.scrollLeft,L(a),b.scrollToPos&&Kc(a,Bc(a.doc,b.scrollToPos),b.scrollToPosMargin)):g&&Jc(a),b.selectionChanged&&$(a),a.state.focused&&b.updateInput&&Jb(a,b.userSelChange);var j=b.maybeHiddenMarkers,k=b.maybeUnhiddenMarkers;if(j)for(var l=0;j.length>l;++l)j[l].lines.length||He(j[l],"hide");if(k)for(var l=0;k.length>l;++l)k[l].lines.length&&He(k[l],"unhide");var m;if(--Je||(m=Ie,Ie=null),b.textChanged&&He(a,"change",a,b.textChanged),b.cursorActivity&&He(a,"cursorActivity",a),m)for(var l=0;m.length>l;++l)m[l]()}function Cb(a,b){return function(){var c=a||this,d=!c.curOp;d&&Ab(c);try{var e=b.apply(c,arguments)}finally{d&&Bb(c)}return e}}function Db(a){return function(){var c,b=this.cm&&!this.cm.curOp;b&&Ab(this.cm);try{c=a.apply(this,arguments)}finally{b&&Bb(this.cm)}return c}}function Eb(a,b){var d,c=!a.curOp;c&&Ab(a);try{d=b()}finally{c&&Bb(a)}return d}function Fb(a,b,c,d){null==b&&(b=a.doc.first),null==c&&(c=a.doc.first+a.doc.size),a.curOp.changes.push({from:b,to:c,diff:d})}function Gb(a){a.display.pollingFast||a.display.poll.set(a.options.pollInterval,function(){Ib(a),a.state.focused&&Gb(a)})}function Hb(a){function c(){var d=Ib(a);d||b?(a.display.pollingFast=!1,Gb(a)):(b=!0,a.display.poll.set(60,c))}var b=!1;a.display.pollingFast=!0,a.display.poll.set(20,c)}function Ib(a){var c=a.display.input,e=a.display.prevInput,f=a.doc,g=f.sel;if(!a.state.focused||qf(c)||Lb(a)||a.state.disableInput)return!1;var h=c.value;if(h==e&&xc(g.from,g.to))return!1;if(b&&!d&&a.display.inputHasSelection===h)return Jb(a,!0),!1;var i=!a.curOp;i&&Ab(a),g.shift=!1;for(var j=0,k=Math.min(e.length,h.length);k>j&&e.charCodeAt(j)==h.charCodeAt(j);)++j;var l=g.from,m=g.to;e.length>j?l=wc(l.line,l.ch-(e.length-j)):a.state.overwrite&&xc(l,m)&&!a.state.pasteIncoming&&(m=wc(m.line,Math.min(fe(f,m.line).text.length,m.ch+(h.length-j))));var n=a.curOp.updateInput,o={from:l,to:m,text:pf(h.slice(j)),origin:a.state.pasteIncoming?"paste":"+input"};return pc(a.doc,o,"end"),a.curOp.updateInput=n,Ke(a,"inputRead",a,o),h.length>1e3||h.indexOf("\n")>-1?c.value=a.display.prevInput="":a.display.prevInput=h,i&&Bb(a),a.state.pasteIncoming=!1,!0}function Jb(a,c){var e,f,g=a.doc;if(xc(g.sel.from,g.sel.to))c&&(a.display.prevInput=a.display.input.value="",b&&!d&&(a.display.inputHasSelection=null));else{a.display.prevInput="",e=rf&&(g.sel.to.line-g.sel.from.line>100||(f=a.getSelection()).length>1e3);var h=e?"-":f||a.getSelection();a.display.input.value=h,a.state.focused&&Ve(a.display.input),b&&!d&&(a.display.inputHasSelection=h)}a.display.inaccurateSelection=e}function Kb(a){"nocursor"==a.options.readOnly||o&&document.activeElement==a.display.input||a.display.input.focus()}function Lb(a){return a.options.readOnly||a.doc.cantEdit}function Mb(a){function d(){a.state.focused&&setTimeout($e(Kb,a),0)}function f(){null==e&&(e=setTimeout(function(){e=null,c.cachedCharWidth=c.cachedTextHeight=lf=null,mb(a),Eb(a,$e(Fb,a))},100))}function g(){for(var a=c.wrapper.parentNode;a&&a!=document.body;a=a.parentNode);a?setTimeout(g,5e3):Ge(window,"resize",f)}function h(b){Le(a,b)||a.options.onDragEvent&&a.options.onDragEvent(a,ye(b))||Ce(b)}function i(){c.inaccurateSelection&&(c.prevInput="",c.inaccurateSelection=!1,c.input.value=a.getSelection(),Ve(c.input))}var c=a.display;Fe(c.scroller,"mousedown",Cb(a,Rb)),b?Fe(c.scroller,"dblclick",Cb(a,function(b){if(!Le(a,b)){var c=Ob(a,b);if(c&&!Sb(a,b)&&!Nb(a.display,b)){ze(b);var d=Tc(fe(a.doc,c.line).text,c);Ec(a.doc,d.from,d.to)}}})):Fe(c.scroller,"dblclick",function(b){Le(a,b)||ze(b)}),Fe(c.lineSpace,"selectstart",function(a){Nb(c,a)||ze(a)}),t||Fe(c.scroller,"contextmenu",function(b){kc(a,b)}),Fe(c.scroller,"scroll",function(){c.scroller.clientHeight&&(Wb(a,c.scroller.scrollTop),Xb(a,c.scroller.scrollLeft,!0),He(a,"scroll",a))}),Fe(c.scrollbarV,"scroll",function(){c.scroller.clientHeight&&Wb(a,c.scrollbarV.scrollTop)}),Fe(c.scrollbarH,"scroll",function(){c.scroller.clientHeight&&Xb(a,c.scrollbarH.scrollLeft)}),Fe(c.scroller,"mousewheel",function(b){$b(a,b)}),Fe(c.scroller,"DOMMouseScroll",function(b){$b(a,b)}),Fe(c.scrollbarH,"mousedown",d),Fe(c.scrollbarV,"mousedown",d),Fe(c.wrapper,"scroll",function(){c.wrapper.scrollTop=c.wrapper.scrollLeft=0});var e;Fe(window,"resize",f),setTimeout(g,5e3),Fe(c.input,"keyup",Cb(a,function(b){Le(a,b)||a.options.onKeyEvent&&a.options.onKeyEvent(a,ye(b))||16==b.keyCode&&(a.doc.sel.shift=!1)})),Fe(c.input,"input",$e(Hb,a)),Fe(c.input,"keydown",Cb(a,fc)),Fe(c.input,"keypress",Cb(a,gc)),Fe(c.input,"focus",$e(hc,a)),Fe(c.input,"blur",$e(ic,a)),a.options.dragDrop&&(Fe(c.scroller,"dragstart",function(b){Vb(a,b)}),Fe(c.scroller,"dragenter",h),Fe(c.scroller,"dragover",h),Fe(c.scroller,"drop",Cb(a,Ub))),Fe(c.scroller,"paste",function(b){Nb(c,b)||(Kb(a),Hb(a))}),Fe(c.input,"paste",function(){a.state.pasteIncoming=!0,Hb(a)}),Fe(c.input,"cut",i),Fe(c.input,"copy",i),j&&Fe(c.sizer,"mouseup",function(){document.activeElement==c.input&&c.input.blur(),Kb(a)})}function Nb(a,b){for(var c=De(b);c!=a.wrapper;c=c.parentNode)if(!c||c.ignoreEvents||c.parentNode==a.sizer&&c!=a.mover)return!0}function Ob(a,b,c){var d=a.display;if(!c){var e=De(b);if(e==d.scrollbarH||e==d.scrollbarH.firstChild||e==d.scrollbarV||e==d.scrollbarV.firstChild||e==d.scrollbarFiller||e==d.gutterFiller)return null}var f,g,h=hf(d.lineSpace);try{f=b.clientX,g=b.clientY}catch(b){return null}return ub(a,f-h.left,g-h.top)}function Rb(a){function q(a){if(!xc(p,a)){if(p=a,"single"==j)return Ec(c.doc,Bc(f,h),a),void 0;if(n=Bc(f,n),o=Bc(f,o),"double"==j){var b=Tc(fe(f,a.line).text,a);yc(a,n)?Ec(c.doc,b.from,o):Ec(c.doc,n,b.to)}else"triple"==j&&(yc(a,n)?Ec(c.doc,o,Bc(f,wc(a.line,0))):Ec(c.doc,n,Bc(f,wc(a.line+1,0))))}}function u(a){var b=++s,e=Ob(c,a,!0);if(e)if(xc(e,l)){var h=a.clientY<r.top?-20:a.clientY>r.bottom?20:0;h&&setTimeout(Cb(c,function(){s==b&&(d.scroller.scrollTop+=h,u(a))}),50)}else{c.state.focused||hc(c),l=e,q(e);var g=K(d,f);(e.line>=g.to||e.line<g.from)&&setTimeout(Cb(c,function(){s==b&&u(a)}),150)}}function v(a){s=1/0,ze(a),Kb(c),Ge(document,"mousemove",w),Ge(document,"mouseup",x)}if(!Le(this,a)){var c=this,d=c.display,f=c.doc,g=f.sel;if(g.shift=a.shiftKey,Nb(d,a))return e||(d.scroller.draggable=!1,setTimeout(function(){d.scroller.draggable=!0},100)),void 0;if(!Sb(c,a)){var h=Ob(c,a);switch(Ee(a)){case 3:return t&&kc.call(c,c,a),void 0;case 2:return h&&Ec(c.doc,h),setTimeout($e(Kb,c),20),ze(a),void 0}if(!h)return De(a)==d.scroller&&ze(a),void 0;c.state.focused||hc(c);var i=+new Date,j="single";if(Qb&&Qb.time>i-400&&xc(Qb.pos,h))j="triple",ze(a),setTimeout($e(Kb,c),20),Uc(c,h.line);else if(Pb&&Pb.time>i-400&&xc(Pb.pos,h)){j="double",Qb={time:i,pos:h},ze(a);var k=Tc(fe(f,h.line).text,h);Ec(c.doc,k.from,k.to)}else Pb={time:i,pos:h};var l=h;if(c.options.dragDrop&&jf&&!Lb(c)&&!xc(g.from,g.to)&&!yc(h,g.from)&&!yc(g.to,h)&&"single"==j){var m=Cb(c,function(b){e&&(d.scroller.draggable=!1),c.state.draggingText=!1,Ge(document,"mouseup",m),Ge(d.scroller,"drop",m),10>Math.abs(a.clientX-b.clientX)+Math.abs(a.clientY-b.clientY)&&(ze(b),Ec(c.doc,h),Kb(c))+});return e&&(d.scroller.draggable=!0),c.state.draggingText=m,d.scroller.dragDrop&&d.scroller.dragDrop(),Fe(document,"mouseup",m),Fe(d.scroller,"drop",m),void 0}ze(a),"single"==j&&Ec(c.doc,Bc(f,h));var n=g.from,o=g.to,p=h,r=hf(d.wrapper),s=0,w=Cb(c,function(a){b||Ee(a)?u(a):v(a)}),x=Cb(c,v);Fe(document,"mousemove",w),Fe(document,"mouseup",x)}}}function Sb(a,b){var c=a.display;try{var d=b.clientX,e=b.clientY}catch(b){return!1}if(d>=Math.floor(hf(c.gutters).right))return!1;if(ze(b),!Ne(a,"gutterClick"))return!0;var f=hf(c.lineDiv);if(e>f.bottom)return!0;e-=f.top-c.viewOffset;for(var g=0;a.options.gutters.length>g;++g){var h=c.gutters.childNodes[g];if(h&&hf(h).right>=d){var i=ke(a.doc,e),j=a.options.gutters[g];Ke(a,"gutterClick",a,i,j,b);break}}return!0}function Ub(a){var c=this;if(!(Le(c,a)||Nb(c.display,a)||c.options.onDragEvent&&c.options.onDragEvent(c,ye(a)))){ze(a),b&&(Tb=+new Date);var d=Ob(c,a,!0),e=a.dataTransfer.files;if(d&&!Lb(c))if(e&&e.length&&window.FileReader&&window.File)for(var f=e.length,g=Array(f),h=0,i=function(a,b){var e=new FileReader;e.onload=function(){g[b]=e.result,++h==f&&(d=Bc(c.doc,d),pc(c.doc,{from:d,to:d,text:pf(g.join("\n")),origin:"paste"},"around"))},e.readAsText(a)},j=0;f>j;++j)i(e[j],j);else{if(c.state.draggingText&&!yc(d,c.doc.sel.from)&&!yc(c.doc.sel.to,d))return c.state.draggingText(a),setTimeout($e(Kb,c),20),void 0;try{var g=a.dataTransfer.getData("Text");if(g){var k=c.doc.sel.from,l=c.doc.sel.to;Gc(c.doc,d,d),c.state.draggingText&&vc(c.doc,"",k,l,"paste"),c.replaceSelection(g,null,"paste"),Kb(c),hc(c)}}catch(a){}}}}function Vb(a,c){if(b&&(!a.state.draggingText||100>+new Date-Tb))return Ce(c),void 0;if(!Le(a,c)&&!Nb(a.display,c)){var d=a.getSelection();if(c.dataTransfer.setData("Text",d),c.dataTransfer.setDragImage&&!i){var e=df("img",null,null,"position: fixed; left: 0; top: 0;");h&&(e.width=e.height=1,a.display.wrapper.appendChild(e),e._top=e.offsetTop),c.dataTransfer.setDragImage(e,0,0),h&&e.parentNode.removeChild(e)}}}function Wb(b,c){2>Math.abs(b.doc.scrollTop-c)||(b.doc.scrollTop=c,a||P(b,[],c),b.display.scroller.scrollTop!=c&&(b.display.scroller.scrollTop=c),b.display.scrollbarV.scrollTop!=c&&(b.display.scrollbarV.scrollTop=c),a&&P(b,[]),_(b,100))}function Xb(a,b,c){(c?b==a.doc.scrollLeft:2>Math.abs(a.doc.scrollLeft-b))||(b=Math.min(b,a.display.scroller.scrollWidth-a.display.scroller.clientWidth),a.doc.scrollLeft=b,L(a),a.display.scroller.scrollLeft!=b&&(a.display.scroller.scrollLeft=b),a.display.scrollbarH.scrollLeft!=b&&(a.display.scrollbarH.scrollLeft=b))}function $b(b,c){var d=c.wheelDeltaX,f=c.wheelDeltaY;null==d&&c.detail&&c.axis==c.HORIZONTAL_AXIS&&(d=c.detail),null==f&&c.detail&&c.axis==c.VERTICAL_AXIS?f=c.detail:null==f&&(f=c.wheelDelta);var g=b.display,i=g.scroller;if(d&&i.scrollWidth>i.clientWidth||f&&i.scrollHeight>i.clientHeight){if(f&&p&&e)for(var j=c.target;j!=i;j=j.parentNode)if(j.lineObj){b.display.currentWheelTarget=j;break}if(d&&!a&&!h&&null!=Zb)return f&&Wb(b,Math.max(0,Math.min(i.scrollTop+f*Zb,i.scrollHeight-i.clientHeight))),Xb(b,Math.max(0,Math.min(i.scrollLeft+d*Zb,i.scrollWidth-i.clientWidth))),ze(c),g.wheelStartX=null,void 0;if(f&&null!=Zb){var k=f*Zb,l=b.doc.scrollTop,m=l+g.wrapper.clientHeight;0>k?l=Math.max(0,l+k-50):m=Math.min(b.doc.height,m+k+50),P(b,[],{top:l,bottom:m})}20>Yb&&(null==g.wheelStartX?(g.wheelStartX=i.scrollLeft,g.wheelStartY=i.scrollTop,g.wheelDX=d,g.wheelDY=f,setTimeout(function(){if(null!=g.wheelStartX){var a=i.scrollLeft-g.wheelStartX,b=i.scrollTop-g.wheelStartY,c=b&&g.wheelDY&&b/g.wheelDY||a&&g.wheelDX&&a/g.wheelDX;g.wheelStartX=g.wheelStartY=null,c&&(Zb=(Zb*Yb+c)/(Yb+1),++Yb)}},200)):(g.wheelDX+=d,g.wheelDY+=f))}}function _b(a,b,c){if("string"==typeof b&&(b=dd[b],!b))return!1;a.display.pollingFast&&Ib(a)&&(a.display.pollingFast=!1);var d=a.doc,e=d.sel.shift,f=!1;try{Lb(a)&&(a.state.suppressEdits=!0),c&&(d.sel.shift=!1),f=b(a)!=Pe}finally{d.sel.shift=e,a.state.suppressEdits=!1}return f}function ac(a){var b=a.state.keyMaps.slice(0);return a.options.extraKeys&&b.push(a.options.extraKeys),b.push(a.options.keyMap),b}function cc(a,b){var c=fd(a.options.keyMap),e=c.auto;clearTimeout(bc),e&&!hd(b)&&(bc=setTimeout(function(){fd(a.options.keyMap)==c&&(a.options.keyMap=e.call?e.call(null,a):e,C(a))},50));var f=id(b,!0),g=!1;if(!f)return!1;var h=ac(a);return g=b.shiftKey?gd("Shift-"+f,h,function(b){return _b(a,b,!0)})||gd(f,h,function(b){return("string"==typeof b?/^go[A-Z]/.test(b):b.motion)?_b(a,b):void 0}):gd(f,h,function(b){return _b(a,b)}),g&&(ze(b),$(a),d&&(b.oldKeyCode=b.keyCode,b.keyCode=0),Ke(a,"keyHandled",a,f,b)),g}function dc(a,b,c){var d=gd("'"+c+"'",ac(a),function(b){return _b(a,b,!0)});return d&&(ze(b),$(a),Ke(a,"keyHandled",a,"'"+c+"'",b)),d}function fc(a){var c=this;if(c.state.focused||hc(c),b&&27==a.keyCode&&(a.returnValue=!1),!(Le(c,a)||c.options.onKeyEvent&&c.options.onKeyEvent(c,ye(a)))){var d=a.keyCode;c.doc.sel.shift=16==d||a.shiftKey;var e=cc(c,a);h&&(ec=e?d:null,!e&&88==d&&!rf&&(p?a.metaKey:a.ctrlKey)&&c.replaceSelection(""))}}function gc(a){var c=this;if(!(Le(c,a)||c.options.onKeyEvent&&c.options.onKeyEvent(c,ye(a)))){var e=a.keyCode,f=a.charCode;if(h&&e==ec)return ec=null,ze(a),void 0;if(!(h&&(!a.which||10>a.which)||j)||!cc(c,a)){var g=String.fromCharCode(null==f?e:f);this.options.electricChars&&this.doc.mode.electricChars&&this.options.smartIndent&&!Lb(this)&&this.doc.mode.electricChars.indexOf(g)>-1&&setTimeout(Cb(c,function(){Pc(c,c.doc.sel.to.line,"smart")}),75),dc(c,a,g)||(b&&!d&&(c.display.inputHasSelection=null),Hb(c))}}}function hc(a){"nocursor"!=a.options.readOnly&&(a.state.focused||(He(a,"focus",a),a.state.focused=!0,-1==a.display.wrapper.className.search(/\bCodeMirror-focused\b/)&&(a.display.wrapper.className+=" CodeMirror-focused"),Jb(a,!0)),Gb(a),$(a))}function ic(a){a.state.focused&&(He(a,"blur",a),a.state.focused=!1,a.display.wrapper.className=a.display.wrapper.className.replace(" CodeMirror-focused","")),clearInterval(a.display.blinker),setTimeout(function(){a.state.focused||(a.doc.sel.shift=!1)},150)}function kc(a,c){function k(){if(null!=e.input.selectionStart){var a=e.input.value=" "+(xc(f.from,f.to)?"":e.input.value);e.prevInput=" ",e.input.selectionStart=1,e.input.selectionEnd=a.length}}function l(){if(e.inputDiv.style.position="relative",e.input.style.cssText=j,d&&(e.scrollbarV.scrollTop=e.scroller.scrollTop=i),Gb(a),null!=e.input.selectionStart){(!b||d)&&k(),clearTimeout(jc);var c=0,f=function(){" "==e.prevInput&&0==e.input.selectionStart?Cb(a,dd.selectAll)(a):10>c++?jc=setTimeout(f,500):Jb(a)};jc=setTimeout(f,200)}}var e=a.display,f=a.doc.sel;if(!Nb(e,c)){var g=Ob(a,c),i=e.scroller.scrollTop;if(g&&!h){(xc(f.from,f.to)||yc(g,f.from)||!yc(g,f.to))&&Cb(a,Gc)(a.doc,g,g);var j=e.input.style.cssText;if(e.inputDiv.style.position="absolute",e.input.style.cssText="position: fixed; width: 30px; height: 30px; top: "+(c.clientY-5)+"px; left: "+(c.clientX-5)+"px; z-index: 1000; background: white; outline: none;"+"border-width: 0; outline: none; overflow: hidden; opacity: .05; -ms-opacity: .05; filter: alpha(opacity=5);",Kb(a),Jb(a,!0),xc(f.from,f.to)&&(e.input.value=e.prevInput=" "),b&&!d&&k(),t){Ce(c);var m=function(){Ge(window,"mouseup",m),setTimeout(l,20)};Fe(window,"mouseup",m)}else setTimeout(l,50)}}}function mc(a,b,c){if(!yc(b.from,c))return Bc(a,c);var d=b.text.length-1-(b.to.line-b.from.line);if(c.line>b.to.line+d){var e=c.line-d,f=a.first+a.size-1;return e>f?wc(f,fe(a,f).text.length):Cc(c,fe(a,e).text.length)}if(c.line==b.to.line+d)return Cc(c,Ue(b.text).length+(1==b.text.length?b.from.ch:0)+fe(a,b.to.line).text.length-b.to.ch);var g=c.line-b.from.line;return Cc(c,b.text[g].length+(g?0:b.from.ch))}function nc(a,b,c){if(c&&"object"==typeof c)return{anchor:mc(a,b,c.anchor),head:mc(a,b,c.head)};if("start"==c)return{anchor:b.from,head:b.from};var d=lc(b);if("around"==c)return{anchor:b.from,head:d};if("end"==c)return{anchor:d,head:d};var e=function(a){if(yc(a,b.from))return a;if(!yc(b.to,a))return d;var c=a.line+b.text.length-(b.to.line-b.from.line)-1,e=a.ch;return a.line==b.to.line&&(e+=d.ch-b.to.ch),wc(c,e)};return{anchor:e(a.sel.anchor),head:e(a.sel.head)}}function oc(a,b,c){var d={canceled:!1,from:b.from,to:b.to,text:b.text,origin:b.origin,cancel:function(){this.canceled=!0}};return c&&(d.update=function(b,c,d,e){b&&(this.from=Bc(a,b)),c&&(this.to=Bc(a,c)),d&&(this.text=d),void 0!==e&&(this.origin=e)}),He(a,"beforeChange",a,d),a.cm&&He(a.cm,"beforeChange",a.cm,d),d.canceled?null:{from:d.from,to:d.to,text:d.text,origin:d.origin}}function pc(a,b,c,d){if(a.cm){if(!a.cm.curOp)return Cb(a.cm,pc)(a,b,c,d);if(a.cm.state.suppressEdits)return}if(!(Ne(a,"beforeChange")||a.cm&&Ne(a.cm,"beforeChange"))||(b=oc(a,b,!0))){var e=u&&!d&&vd(a,b.from,b.to);if(e){for(var f=e.length-1;f>=1;--f)qc(a,{from:e[f].from,to:e[f].to,text:[""]});e.length&&qc(a,{from:e[0].from,to:e[0].to,text:b.text},c)}else qc(a,b,c)}}function qc(a,b,c){var d=nc(a,b,c);qe(a,b,d,a.cm?a.cm.curOp.id:0/0),tc(a,b,d,td(a,b));var e=[];de(a,function(a,c){c||-1!=We(e,a.history)||(we(a.history,b),e.push(a.history)),tc(a,b,null,td(a,b))})}function rc(a,b){if(!a.cm||!a.cm.state.suppressEdits){var c=a.history,d=("undo"==b?c.done:c.undone).pop();if(d){var e={changes:[],anchorBefore:d.anchorAfter,headBefore:d.headAfter,anchorAfter:d.anchorBefore,headAfter:d.headBefore,generation:c.generation};("undo"==b?c.undone:c.done).push(e),c.generation=d.generation||++c.maxGeneration;for(var f=Ne(a,"beforeChange")||a.cm&&Ne(a.cm,"beforeChange"),g=d.changes.length-1;g>=0;--g){var h=d.changes[g];if(h.origin=b,f&&!oc(a,h,!1))return("undo"==b?c.done:c.undone).length=0,void 0;e.changes.push(pe(a,h));var i=g?nc(a,h,null):{anchor:d.anchorBefore,head:d.headBefore};tc(a,h,i,ud(a,h));var j=[];de(a,function(a,b){b||-1!=We(j,a.history)||(we(a.history,h),j.push(a.history)),tc(a,h,null,ud(a,h))})}}}}function sc(a,b){function c(a){return wc(a.line+b,a.ch)}a.first+=b,a.cm&&Fb(a.cm,a.first,a.first,b),a.sel.head=c(a.sel.head),a.sel.anchor=c(a.sel.anchor),a.sel.from=c(a.sel.from),a.sel.to=c(a.sel.to)}function tc(a,b,c,d){if(a.cm&&!a.cm.curOp)return Cb(a.cm,tc)(a,b,c,d);if(b.to.line<a.first)return sc(a,b.text.length-1-(b.to.line-b.from.line)),void 0;if(!(b.from.line>a.lastLine())){if(b.from.line<a.first){var e=b.text.length-1-(a.first-b.from.line);sc(a,e),b={from:wc(a.first,0),to:wc(b.to.line+e,b.to.ch),text:[Ue(b.text)],origin:b.origin}}var f=a.lastLine();b.to.line>f&&(b={from:b.from,to:wc(f,fe(a,f).text.length),text:[b.text[0]],origin:b.origin}),b.removed=ge(a,b.from,b.to),c||(c=nc(a,b,null)),a.cm?uc(a.cm,b,d,c):Yd(a,b,d,c)}}function uc(a,b,c,d){var e=a.doc,f=a.display,g=b.from,h=b.to,i=!1,j=g.line;a.options.lineWrapping||(j=je(zd(e,fe(e,g.line))),e.iter(j,h.line+1,function(a){return a==f.maxLine?(i=!0,!0):void 0})),yc(e.sel.head,b.from)||yc(b.to,e.sel.head)||(a.curOp.cursorActivity=!0),Yd(e,b,c,d,A(a)),a.options.lineWrapping||(e.iter(j,g.line+b.text.length,function(a){var b=G(e,a);b>f.maxLineLength&&(f.maxLine=a,f.maxLineLength=b,f.maxLineChanged=!0,i=!1)}),i&&(a.curOp.updateMaxLine=!0)),e.frontier=Math.min(e.frontier,g.line),_(a,400);var k=b.text.length-(h.line-g.line)-1;if(Fb(a,g.line,h.line+1,k),Ne(a,"change")){var l={from:g,to:h,text:b.text,removed:b.removed,origin:b.origin};if(a.curOp.textChanged){for(var m=a.curOp.textChanged;m.next;m=m.next);m.next=l}else a.curOp.textChanged=l}}function vc(a,b,c,d,e){if(d||(d=c),yc(d,c)){var f=d;d=c,c=f}"string"==typeof b&&(b=pf(b)),pc(a,{from:c,to:d,text:b,origin:e},null)}function wc(a,b){return this instanceof wc?(this.line=a,this.ch=b,void 0):new wc(a,b)}function xc(a,b){return a.line==b.line&&a.ch==b.ch}function yc(a,b){return a.line<b.line||a.line==b.line&&a.ch<b.ch}function zc(a){return wc(a.line,a.ch)}function Ac(a,b){return Math.max(a.first,Math.min(b,a.first+a.size-1))}function Bc(a,b){if(b.line<a.first)return wc(a.first,0);var c=a.first+a.size-1;return b.line>c?wc(c,fe(a,c).text.length):Cc(b,fe(a,b.line).text.length)}function Cc(a,b){var c=a.ch;return null==c||c>b?wc(a.line,b):0>c?wc(a.line,0):a}function Dc(a,b){return b>=a.first&&a.first+a.size>b}function Ec(a,b,c,d){if(a.sel.shift||a.sel.extend){var e=a.sel.anchor;if(c){var f=yc(b,e);f!=yc(c,e)?(e=b,b=c):f!=yc(b,c)&&(b=c)}Gc(a,e,b,d)}else Gc(a,b,c||b,d);a.cm&&(a.cm.curOp.userSelChange=!0)}function Fc(a,b,c){var d={anchor:b,head:c};return He(a,"beforeSelectionChange",a,d),a.cm&&He(a.cm,"beforeSelectionChange",a.cm,d),d.anchor=Bc(a,d.anchor),d.head=Bc(a,d.head),d}function Gc(a,b,c,d,e){if(!e&&Ne(a,"beforeSelectionChange")||a.cm&&Ne(a.cm,"beforeSelectionChange")){var f=Fc(a,b,c);c=f.head,b=f.anchor}var g=a.sel;if(g.goalColumn=null,(e||!xc(b,g.anchor))&&(b=Ic(a,b,d,"push"!=e)),(e||!xc(c,g.head))&&(c=Ic(a,c,d,"push"!=e)),!xc(g.anchor,b)||!xc(g.head,c)){g.anchor=b,g.head=c;var h=yc(c,b);g.from=h?c:b,g.to=h?b:c,a.cm&&(a.cm.curOp.updateInput=a.cm.curOp.selectionChanged=a.cm.curOp.cursorActivity=!0),Ke(a,"cursorActivity",a)}}function Hc(a){Gc(a.doc,a.doc.sel.from,a.doc.sel.to,null,"push")}function Ic(a,b,c,d){var e=!1,f=b,g=c||1;a.cantEdit=!1;a:for(;;){var h=fe(a,f.line);if(h.markedSpans)for(var i=0;h.markedSpans.length>i;++i){var j=h.markedSpans[i],k=j.marker;if((null==j.from||(k.inclusiveLeft?j.from<=f.ch:j.from<f.ch))&&(null==j.to||(k.inclusiveRight?j.to>=f.ch:j.to>f.ch))){if(d&&(He(k,"beforeCursorEnter"),k.explicitlyCleared)){if(h.markedSpans){--i;continue}break}if(!k.atomic)continue;var l=k.find()[0>g?"from":"to"];if(xc(l,f)&&(l.ch+=g,0>l.ch?l=l.line>a.first?Bc(a,wc(l.line-1)):null:l.ch>h.text.length&&(l=l.line<a.first+a.size-1?wc(l.line+1,0):null),!l)){if(e)return d?(a.cantEdit=!0,wc(a.first,0)):Ic(a,b,c,!0);e=!0,l=b,g=-g}f=l;continue a}}return f}}function Jc(a){var b=Kc(a,a.doc.sel.head,a.options.cursorScrollMargin);if(a.state.focused){var c=a.display,d=hf(c.sizer),e=null;if(0>b.top+d.top?e=!0:b.bottom+d.top>(window.innerHeight||document.documentElement.clientHeight)&&(e=!1),null!=e&&!m){var f="none"==c.cursor.style.display;f&&(c.cursor.style.display="",c.cursor.style.left=b.left+"px",c.cursor.style.top=b.top-c.viewOffset+"px"),c.cursor.scrollIntoView(e),f&&(c.cursor.style.display="none")}}}function Kc(a,b,c){for(null==c&&(c=0);;){var d=!1,e=sb(a,b),f=Mc(a,e.left,e.top-c,e.left,e.bottom+c),g=a.doc.scrollTop,h=a.doc.scrollLeft;if(null!=f.scrollTop&&(Wb(a,f.scrollTop),Math.abs(a.doc.scrollTop-g)>1&&(d=!0)),null!=f.scrollLeft&&(Xb(a,f.scrollLeft),Math.abs(a.doc.scrollLeft-h)>1&&(d=!0)),!d)return e}}function Lc(a,b,c,d,e){var f=Mc(a,b,c,d,e);null!=f.scrollTop&&Wb(a,f.scrollTop),null!=f.scrollLeft&&Xb(a,f.scrollLeft)}function Mc(a,b,c,d,e){var f=a.display,g=xb(a.display);0>c&&(c=0);var h=f.scroller.clientHeight-Oe,i=f.scroller.scrollTop,j={},k=a.doc.height+eb(f),l=g>c,m=e>k-g;if(i>c)j.scrollTop=l?0:c;else if(e>i+h){var n=Math.min(c,(m?k:e)-h);n!=i&&(j.scrollTop=n)}var o=f.scroller.clientWidth-Oe,p=f.scroller.scrollLeft;b+=f.gutters.offsetWidth,d+=f.gutters.offsetWidth;var q=f.gutters.offsetWidth,r=q+10>b;return p+q>b||r?(r&&(b=0),j.scrollLeft=Math.max(0,b-10-q)):d>o+p-3&&(j.scrollLeft=d+10-o),j}function Nc(a,b,c){a.curOp.updateScrollPos={scrollLeft:null==b?a.doc.scrollLeft:b,scrollTop:null==c?a.doc.scrollTop:c}}function Oc(a,b,c){var d=a.curOp.updateScrollPos||(a.curOp.updateScrollPos={scrollLeft:a.doc.scrollLeft,scrollTop:a.doc.scrollTop}),e=a.display.scroller;d.scrollTop=Math.max(0,Math.min(e.scrollHeight-e.clientHeight,d.scrollTop+c)),d.scrollLeft=Math.max(0,Math.min(e.scrollWidth-e.clientWidth,d.scrollLeft+b))}function Pc(a,b,c,d){var e=a.doc;if(null==c&&(c="add"),"smart"==c)if(a.doc.mode.indent)var f=cb(a,b);else c="prev";var k,g=a.options.tabSize,h=fe(e,b),i=Re(h.text,null,g),j=h.text.match(/^\s*/)[0];if("smart"==c&&(k=a.doc.mode.indent(f,h.text.slice(j.length),h.text),k==Pe)){if(!d)return;c="prev"}"prev"==c?k=b>e.first?Re(fe(e,b-1).text,null,g):0:"add"==c?k=i+a.options.indentUnit:"subtract"==c?k=i-a.options.indentUnit:"number"==typeof c&&(k=i+c),k=Math.max(0,k);var l="",m=0;if(a.options.indentWithTabs)for(var n=Math.floor(k/g);n;--n)m+=g,l+=" ";k>m&&(l+=Te(k-m)),l!=j&&vc(a.doc,l,wc(b,0),wc(b,j.length),"+input"),h.stateAfter=null}function Qc(a,b,c){var d=b,e=b,f=a.doc;return"number"==typeof b?e=fe(f,Ac(f,b)):d=je(b),null==d?null:c(e,d)?(Fb(a,d,d+1),e):null}function Rc(a,b,c,d,e){function k(){var b=f+c;return a.first>b||b>=a.first+a.size?j=!1:(f=b,i=fe(a,b))}function l(a){var b=(e?Ef:Ff)(i,g,c,!0);if(null==b){if(a||!k())return j=!1;g=e?(0>c?xf:wf)(i):0>c?i.text.length:0}else g=b;return!0}var f=b.line,g=b.ch,h=c,i=fe(a,f),j=!0;if("char"==d)l();else if("column"==d)l(!0);else if("word"==d||"group"==d)for(var m=null,n="group"==d,o=!0;!(0>c)||l(!o);o=!1){var p=i.text.charAt(g)||"\n",q=af(p)?"w":n?/\s/.test(p)?null:"p":null;if(m&&m!=q){0>c&&(c=1,l());break}if(q&&(m=q),c>0&&!l(!o))break}var r=Ic(a,wc(f,g),h,!0);return j||(r.hitSide=!0),r}function Sc(a,b,c,d){var g,e=a.doc,f=b.left;if("page"==d){var h=Math.min(a.display.wrapper.clientHeight,window.innerHeight||document.documentElement.clientHeight);g=b.top+c*(h-(0>c?1.5:.5)*xb(a.display))}else"line"==d&&(g=c>0?b.bottom+3:b.top-3);for(;;){var i=ub(a,f,g);if(!i.outside)break;if(0>c?0>=g:g>=e.height){i.hitSide=!0;break}g+=5*c}return i}function Tc(a,b){var c=b.ch,d=b.ch;if(a){0>b.xRel||d==a.length?--c:++d;for(var e=a.charAt(c),f=af(e)?af:/\s/.test(e)?function(a){return/\s/.test(a)}:function(a){return!/\s/.test(a)&&!af(a)};c>0&&f(a.charAt(c-1));)--c;for(;a.length>d&&f(a.charAt(d));)++d}return{from:wc(b.line,c),to:wc(b.line,d)}}function Uc(a,b){Ec(a.doc,wc(b,0),Bc(a.doc,wc(b+1,0)))}function Xc(a,b,c,d){w.defaults[a]=b,c&&(Vc[a]=d?function(a,b,d){d!=Yc&&c(a,b,d)}:c)}function bd(a,b){if(b===!0)return b;if(a.copyState)return a.copyState(b);var c={};for(var d in b){var e=b[d];e instanceof Array&&(e=e.concat([])),c[d]=e}return c}function cd(a,b,c){return a.startState?a.startState(b,c):!0}function fd(a){return"string"==typeof a?ed[a]:a}function gd(a,b,c){function d(b){b=fd(b);var e=b[a];if(e===!1)return"stop";if(null!=e&&c(e))return!0;if(b.nofallthrough)return"stop";var f=b.fallthrough;if(null==f)return!1;if("[object Array]"!=Object.prototype.toString.call(f))return d(f);for(var g=0,h=f.length;h>g;++g){var i=d(f[g]);if(i)return i}return!1}for(var e=0;b.length>e;++e){var f=d(b[e]);if(f)return"stop"!=f}}function hd(a){var b=sf[a.keyCode];return"Ctrl"==b||"Alt"==b||"Shift"==b||"Mod"==b}function id(a,b){if(h&&34==a.keyCode&&a["char"])return!1;var c=sf[a.keyCode];return null==c||a.altGraphKey?!1:(a.altKey&&(c="Alt-"+c),(s?a.metaKey:a.ctrlKey)&&(c="Ctrl-"+c),(s?a.ctrlKey:a.metaKey)&&(c="Cmd-"+c),!b&&a.shiftKey&&(c="Shift-"+c),c)}function jd(a,b){this.pos=this.start=0,this.string=a,this.tabSize=b||8,this.lastColumnPos=this.lastColumnValue=0}function kd(a,b){this.lines=[],this.type=b,this.doc=a}function ld(a,b,c,d,e){if(d&&d.shared)return nd(a,b,c,d,e);if(a.cm&&!a.cm.curOp)return Cb(a.cm,ld)(a,b,c,d,e);var f=new kd(a,e);if("range"==e&&!yc(b,c))return f;d&&Ye(d,f),f.replacedWith&&(f.collapsed=!0,f.replacedWith=df("span",[f.replacedWith],"CodeMirror-widget"),d.handleMouseEvents||(f.replacedWith.ignoreEvents=!0)),f.collapsed&&(v=!0),f.addToHistory&&qe(a,{from:b,to:c,origin:"markText"},{head:a.sel.head,anchor:a.sel.anchor},0/0);var i,j,l,g=b.line,h=0,k=a.cm;if(a.iter(g,c.line+1,function(d){k&&f.collapsed&&!k.options.lineWrapping&&zd(a,d)==k.display.maxLine&&(l=!0);var e={from:null,to:null,marker:f};h+=d.text.length,g==b.line&&(e.from=b.ch,h-=b.ch),g==c.line&&(e.to=c.ch,h-=d.text.length-c.ch),f.collapsed&&(g==c.line&&(j=wd(d,c.ch)),g==b.line?i=wd(d,b.ch):ie(d,0)),qd(d,e),++g}),f.collapsed&&a.iter(b.line,c.line+1,function(b){Ad(a,b)&&ie(b,0)}),f.clearOnEnter&&Fe(f,"beforeCursorEnter",function(){f.clear()}),f.readOnly&&(u=!0,(a.history.done.length||a.history.undone.length)&&a.clearHistory()),f.collapsed){if(i!=j)throw Error("Inserting collapsed marker overlapping an existing one");f.size=h,f.atomic=!0}return k&&(l&&(k.curOp.updateMaxLine=!0),(f.className||f.startStyle||f.endStyle||f.collapsed)&&Fb(k,b.line,c.line+1),f.atomic&&Hc(k)),f}function md(a,b){this.markers=a,this.primary=b;for(var c=0,d=this;a.length>c;++c)a[c].parent=this,Fe(a[c],"clear",function(){d.clear()})}function nd(a,b,c,d,e){d=Ye(d),d.shared=!1;var f=[ld(a,b,c,d,e)],g=f[0],h=d.replacedWith;return de(a,function(a){h&&(d.replacedWith=h.cloneNode(!0)),f.push(ld(a,Bc(a,b),Bc(a,c),d,e));for(var i=0;a.linked.length>i;++i)if(a.linked[i].isParent)return;g=Ue(f)}),new md(f,g)}function od(a,b){if(a)for(var c=0;a.length>c;++c){var d=a[c];if(d.marker==b)return d}}function pd(a,b){for(var c,d=0;a.length>d;++d)a[d]!=b&&(c||(c=[])).push(a[d]);return c}function qd(a,b){a.markedSpans=a.markedSpans?a.markedSpans.concat([b]):[b],b.marker.attachLine(a)}function rd(a,b,c){if(a)for(var e,d=0;a.length>d;++d){var f=a[d],g=f.marker,h=null==f.from||(g.inclusiveLeft?b>=f.from:b>f.from);if(h||"bookmark"==g.type&&f.from==b&&(!c||!f.marker.insertLeft)){var i=null==f.to||(g.inclusiveRight?f.to>=b:f.to>b);(e||(e=[])).push({from:f.from,to:i?null:f.to,marker:g})}}return e}function sd(a,b,c){if(a)for(var e,d=0;a.length>d;++d){var f=a[d],g=f.marker,h=null==f.to||(g.inclusiveRight?f.to>=b:f.to>b);if(h||"bookmark"==g.type&&f.from==b&&(!c||f.marker.insertLeft)){var i=null==f.from||(g.inclusiveLeft?b>=f.from:b>f.from);(e||(e=[])).push({from:i?null:f.from-b,to:null==f.to?null:f.to-b,marker:g})}}return e}function td(a,b){var c=Dc(a,b.from.line)&&fe(a,b.from.line).markedSpans,d=Dc(a,b.to.line)&&fe(a,b.to.line).markedSpans;if(!c&&!d)return null;var e=b.from.ch,f=b.to.ch,g=xc(b.from,b.to),h=rd(c,e,g),i=sd(d,f,g),j=1==b.text.length,k=Ue(b.text).length+(j?e:0);if(h)for(var l=0;h.length>l;++l){var m=h[l];if(null==m.to){var n=od(i,m.marker);n?j&&(m.to=null==n.to?null:n.to+k):m.to=e}}if(i)for(var l=0;i.length>l;++l){var m=i[l];if(null!=m.to&&(m.to+=k),null==m.from){var n=od(h,m.marker);n||(m.from=k,j&&(h||(h=[])).push(m))}else m.from+=k,j&&(h||(h=[])).push(m)}if(j&&h){for(var l=0;h.length>l;++l)null!=h[l].from&&h[l].from==h[l].to&&"bookmark"!=h[l].marker.type&&h.splice(l--,1);h.length||(h=null)}var o=[h];if(!j){var q,p=b.text.length-2;if(p>0&&h)for(var l=0;h.length>l;++l)null==h[l].to&&(q||(q=[])).push({from:null,to:null,marker:h[l].marker});for(var l=0;p>l;++l)o.push(q);o.push(i)}return o}function ud(a,b){var c=se(a,b),d=td(a,b);if(!c)return d;if(!d)return c;for(var e=0;c.length>e;++e){var f=c[e],g=d[e];if(f&&g)a:for(var h=0;g.length>h;++h){for(var i=g[h],j=0;f.length>j;++j)if(f[j].marker==i.marker)continue a;f.push(i)}else g&&(c[e]=g)}return c}function vd(a,b,c){var d=null;if(a.iter(b.line,c.line+1,function(a){if(a.markedSpans)for(var b=0;a.markedSpans.length>b;++b){var c=a.markedSpans[b].marker;!c.readOnly||d&&-1!=We(d,c)||(d||(d=[])).push(c)}}),!d)return null;for(var e=[{from:b,to:c}],f=0;d.length>f;++f)for(var g=d[f],h=g.find(),i=0;e.length>i;++i){var j=e[i];if(!yc(j.to,h.from)&&!yc(h.to,j.from)){var k=[i,1];(yc(j.from,h.from)||!g.inclusiveLeft&&xc(j.from,h.from))&&k.push({from:j.from,to:h.from}),(yc(h.to,j.to)||!g.inclusiveRight&&xc(j.to,h.to))&&k.push({from:h.to,to:j.to}),e.splice.apply(e,k),i+=k.length-1}}return e}function wd(a,b){var d,c=v&&a.markedSpans;if(c)for(var e,f=0;c.length>f;++f)e=c[f],e.marker.collapsed&&(null==e.from||b>e.from)&&(null==e.to||e.to>b)&&(!d||d.width<e.marker.width)&&(d=e.marker);return d}function xd(a){return wd(a,-1)}function yd(a){return wd(a,a.text.length+1)}function zd(a,b){for(var c;c=xd(b);)b=fe(a,c.find().from.line);return b}function Ad(a,b){var c=v&&b.markedSpans;if(c)for(var d,e=0;c.length>e;++e)if(d=c[e],d.marker.collapsed){if(null==d.from)return!0;if(!d.marker.replacedWith&&0==d.from&&d.marker.inclusiveLeft&&Bd(a,b,d))return!0}}function Bd(a,b,c){if(null==c.to){var d=c.marker.find().to,e=fe(a,d.line);return Bd(a,e,od(e.markedSpans,c.marker))}if(c.marker.inclusiveRight&&c.to==b.text.length)return!0;for(var f,g=0;b.markedSpans.length>g;++g)if(f=b.markedSpans[g],f.marker.collapsed&&!f.marker.replacedWith&&f.from==c.to&&(f.marker.inclusiveLeft||c.marker.inclusiveRight)&&Bd(a,b,f))return!0}function Cd(a){var b=a.markedSpans;if(b){for(var c=0;b.length>c;++c)b[c].marker.detachLine(a);a.markedSpans=null}}function Dd(a,b){if(b){for(var c=0;b.length>c;++c)b[c].marker.attachLine(a);a.markedSpans=b}}function Fd(a){return function(){var b=!this.cm.curOp;b&&Ab(this.cm);try{var c=a.apply(this,arguments)}finally{b&&Bb(this.cm)}return c}}function Gd(a){return null!=a.height?a.height:(a.node.parentNode&&1==a.node.parentNode.nodeType||ff(a.cm.display.measure,df("div",[a.node],null,"position: relative")),a.height=a.node.offsetHeight)}function Hd(a,b,c,d){var e=new Ed(a,c,d);return e.noHScroll&&(a.display.alignWidgets=!0),Qc(a,b,function(b){if((b.widgets||(b.widgets=[])).push(e),e.line=b,!Ad(a.doc,b)||e.showIfHidden){var c=le(a,b)<a.display.scroller.scrollTop;ie(b,b.height+Gd(e)),c&&Oc(a,0,e.height)}return!0}),e}function Id(a,b,c){var d={text:a};return Dd(d,b),d.height=c?c(d):1,d}function Jd(a,b,c,d){a.text=b,a.stateAfter&&(a.stateAfter=null),a.styles&&(a.styles=null),null!=a.order&&(a.order=null),Cd(a),Dd(a,c);var e=d?d(a):1;e!=a.height&&ie(a,e)}function Kd(a){a.parent=null,Cd(a)}function Ld(a,b,c,d,e){var f=c.flattenSpans;null==f&&(f=a.options.flattenSpans);var j,g=0,h=null,i=new jd(b,a.options.tabSize);for(""==b&&c.blankLine&&c.blankLine(d);!i.eol();)i.pos>a.options.maxHighlightLength?(f=!1,i.pos=Math.min(b.length,i.start+5e4),j=null):j=c.token(i,d),f&&h==j||(i.start>g&&e(i.start,h),g=i.start,h=j),i.start=i.pos;i.pos>g&&e(i.pos,h)}function Md(a,b,c){var d=[a.state.modeGen];Ld(a,b.text,a.doc.mode,c,function(a,b){d.push(a,b)});for(var e=0;a.state.overlays.length>e;++e){var f=a.state.overlays[e],g=1,h=0;Ld(a,b.text,f.mode,!0,function(a,b){for(var c=g;a>h;){var e=d[g];e>a&&d.splice(g,1,a,d[g+1],e),g+=2,h=Math.min(a,e)}if(b)if(f.opaque)d.splice(c,g-c,a,b),g=c+2;else for(;g>c;c+=2){var i=d[c+1];d[c+1]=i?i+" "+b:b}})}return d}function Nd(a,b){return b.styles&&b.styles[0]==a.state.modeGen||(b.styles=Md(a,b,b.stateAfter=cb(a,je(b)))),b.styles}function Od(a,b,c){var d=a.doc.mode,e=new jd(b.text,a.options.tabSize);for(""==b.text&&d.blankLine&&d.blankLine(c);!e.eol()&&e.pos<=a.options.maxHighlightLength;)d.token(e,c),e.start=e.pos}function Qd(a){return a?Pd[a]||(Pd[a]="cm-"+a.replace(/ +/g," cm-")):null}function Rd(a,c,d){for(var f,g=c,h=!0;f=xd(g);)g=fe(a.doc,f.find().from.line);var i={pre:df("pre"),col:0,pos:0,display:!d,measure:null,measuredSomething:!1,cm:a};g.textClass&&(i.pre.className=g.textClass);do{g.text&&(h=!1),i.measure=g==c&&d,i.pos=0,i.addToken=i.measure?Ud:Td,(b||e)&&a.getOption("lineWrapping")&&(i.addToken=Vd(i.addToken));var j=Xd(g,i,Nd(a,g));d&&g==c&&!i.measuredSomething&&(d[0]=i.pre.appendChild(of(a.display.measure)),i.measuredSomething=!0),j&&(g=fe(a.doc,j.to.line))}while(j);!d||i.measuredSomething||d[0]||(d[0]=i.pre.appendChild(h?df("span","\u00a0"):of(a.display.measure))),i.pre.firstChild||Ad(a.doc,c)||i.pre.appendChild(document.createTextNode("\u00a0"));var k;if(d&&b&&(k=me(g))){var l=k.length-1;k[l].from==k[l].to&&--l;var m=k[l],n=k[l-1];if(m.from+1==m.to&&n&&m.level<n.level){var o=d[i.pos-1];o&&o.parentNode.insertBefore(o.measureRight=of(a.display.measure),o.nextSibling)}}return He(a,"renderLine",a,c,i.pre),i.pre}function Td(a,b,c,d,e){if(b){if(Sd.test(b))for(var f=document.createDocumentFragment(),g=0;;){Sd.lastIndex=g;var h=Sd.exec(b),i=h?h.index-g:b.length-g;if(i&&(f.appendChild(document.createTextNode(b.slice(g,g+i))),a.col+=i),!h)break;if(g+=i+1," "==h[0]){var j=a.cm.options.tabSize,k=j-a.col%j;f.appendChild(df("span",Te(k),"cm-tab")),a.col+=k}else{var l=df("span","\u2022","cm-invalidchar");l.title="\\u"+h[0].charCodeAt(0).toString(16),f.appendChild(l),a.col+=1}}else{a.col+=b.length;var f=document.createTextNode(b)}if(c||d||e||a.measure){var m=c||"";return d&&(m+=d),e&&(m+=e),a.pre.appendChild(df("span",[f],m))}a.pre.appendChild(f)}}function Ud(a,c,d,e,f){for(var g=a.cm.options.lineWrapping,h=0;c.length>h;++h){var i=c.charAt(h),j=0==h;i>="\ud800"&&"\udbff">i&&c.length-1>h?(i=c.slice(h,h+2),++h):h&&g&&kf(c,h)&&a.pre.appendChild(df("wbr"));var k=a.measure[a.pos]=Td(a,i,d,j&&e,h==c.length-1&&f);b&&g&&" "==i&&h&&!/\s/.test(c.charAt(h-1))&&c.length-1>h&&!/\s/.test(c.charAt(h+1))&&(k.style.whiteSpace="normal"),a.pos+=i.length}c.length&&(a.measuredSomething=!0)}function Vd(a){function b(a){for(var b=" ",c=0;a.length-2>c;++c)b+=c%2?" ":"\u00a0";return b+=" "}return function(c,d,e,f,g){return a(c,d.replace(/ {3,}/,b),e,f,g)}}function Wd(a,b,c){c&&(a.display||(c=c.cloneNode(!0)),a.measure&&(a.measure[a.pos]=b?c:a.pre.appendChild(of(a.cm.display.measure)),a.measuredSomething=!0),a.pre.appendChild(c)),a.pos+=b}function Xd(a,b,c){var d=a.markedSpans,e=a.text,f=0;if(d)for(var k,m,n,o,p,h=e.length,i=0,g=1,j="",l=0;;){if(l==i){m=n=o="",p=null,l=1/0;for(var q=null,r=0;d.length>r;++r){var s=d[r],t=s.marker;i>=s.from&&(null==s.to||s.to>i)?(null!=s.to&&l>s.to&&(l=s.to,n=""),t.className&&(m+=" "+t.className),t.startStyle&&s.from==i&&(o+=" "+t.startStyle),t.endStyle&&s.to==l&&(n+=" "+t.endStyle),t.collapsed&&(!p||p.marker.size<t.size)&&(p=s)):s.from>i&&l>s.from&&(l=s.from),"bookmark"==t.type&&s.from==i&&t.replacedWith&&(q=t.replacedWith)}if(p&&(p.from||0)==i&&(Wd(b,(null==p.to?h:p.to)-i,null!=p.from&&p.marker.replacedWith),null==p.to))return p.marker.find();q&&!p&&Wd(b,0,q)}if(i>=h)break;for(var u=Math.min(h,l);;){if(j){var v=i+j.length;if(!p){var w=v>u?j.slice(0,u-i):j;b.addToken(b,w,k?k+m:m,o,i+w.length==l?n:"")}if(v>=u){j=j.slice(u-i),i=u;break}i=v,o=""}j=e.slice(f,f=c[g++]),k=Qd(c[g++])}}else for(var g=1;c.length>g;g+=2)b.addToken(b,e.slice(f,f=c[g]),Qd(c[g+1]))}function Yd(a,b,c,d,e){function f(a){return c?c[a]:null}function g(a,c,d){Jd(a,c,d,e),Ke(a,"change",a,b)}var h=b.from,i=b.to,j=b.text,k=fe(a,h.line),l=fe(a,i.line),m=Ue(j),n=f(j.length-1),o=i.line-h.line;if(0==h.ch&&0==i.ch&&""==m){for(var p=0,q=j.length-1,r=[];q>p;++p)r.push(Id(j[p],f(p),e));g(l,l.text,n),o&&a.remove(h.line,o),r.length&&a.insert(h.line,r)}else if(k==l)if(1==j.length)g(k,k.text.slice(0,h.ch)+m+k.text.slice(i.ch),n);else{for(var r=[],p=1,q=j.length-1;q>p;++p)r.push(Id(j[p],f(p),e));r.push(Id(m+k.text.slice(i.ch),n,e)),g(k,k.text.slice(0,h.ch)+j[0],f(0)),a.insert(h.line+1,r)}else if(1==j.length)g(k,k.text.slice(0,h.ch)+j[0]+l.text.slice(i.ch),f(0)),a.remove(h.line+1,o);else{g(k,k.text.slice(0,h.ch)+j[0],f(0)),g(l,m+l.text.slice(i.ch),n);for(var p=1,q=j.length-1,r=[];q>p;++p)r.push(Id(j[p],f(p),e));o>1&&a.remove(h.line+1,o-1),a.insert(h.line+1,r)}Ke(a,"change",a,b),Gc(a,d.anchor,d.head,null,!0)}function Zd(a){this.lines=a,this.parent=null;for(var b=0,c=a.length,d=0;c>b;++b)a[b].parent=this,d+=a[b].height;this.height=d}function $d(a){this.children=a;for(var b=0,c=0,d=0,e=a.length;e>d;++d){var f=a[d];b+=f.chunkSize(),c+=f.height,f.parent=this}this.size=b,this.height=c,this.parent=null}function de(a,b,c){function d(a,e,f){if(a.linked)for(var g=0;a.linked.length>g;++g){var h=a.linked[g];if(h.doc!=e){var i=f&&h.sharedHist;(!c||i)&&(b(h.doc,i),d(h.doc,a,i))}}}d(a,null,!0)}function ee(a,b){if(b.cm)throw Error("This document is already in use.");a.doc=b,b.cm=a,B(a),y(a),a.options.lineWrapping||H(a),a.options.mode=b.modeOption,Fb(a)}function fe(a,b){for(b-=a.first;!a.lines;)for(var c=0;;++c){var d=a.children[c],e=d.chunkSize();if(e>b){a=d;break}b-=e}return a.lines[b]}function ge(a,b,c){var d=[],e=b.line;return a.iter(b.line,c.line+1,function(a){var f=a.text;e==c.line&&(f=f.slice(0,c.ch)),e==b.line&&(f=f.slice(b.ch)),d.push(f),++e}),d}function he(a,b,c){var d=[];return a.iter(b,c,function(a){d.push(a.text)}),d}function ie(a,b){for(var c=b-a.height,d=a;d;d=d.parent)d.height+=c}function je(a){if(null==a.parent)return null;for(var b=a.parent,c=We(b.lines,a),d=b.parent;d;b=d,d=d.parent)for(var e=0;d.children[e]!=b;++e)c+=d.children[e].chunkSize();return c+b.first}function ke(a,b){var c=a.first;a:do{for(var d=0,e=a.children.length;e>d;++d){var f=a.children[d],g=f.height;if(g>b){a=f;continue a}b-=g,c+=f.chunkSize()}return c}while(!a.lines);for(var d=0,e=a.lines.length;e>d;++d){var h=a.lines[d],i=h.height;if(i>b)break;b-=i}return c+d+}function le(a,b){b=zd(a.doc,b);for(var c=0,d=b.parent,e=0;d.lines.length>e;++e){var f=d.lines[e];if(f==b)break;c+=f.height}for(var g=d.parent;g;d=g,g=d.parent)for(var e=0;g.children.length>e;++e){var h=g.children[e];if(h==d)break;c+=h.height}return c}function me(a){var b=a.order;return null==b&&(b=a.order=Gf(a.text)),b}function ne(a){return{done:[],undone:[],undoDepth:1/0,lastTime:0,lastOp:null,lastOrigin:null,generation:a||1,maxGeneration:a||1}}function oe(a,b,c,d){var e=b["spans_"+a.id],f=0;a.iter(Math.max(a.first,c),Math.min(a.first+a.size,d),function(c){c.markedSpans&&((e||(e=b["spans_"+a.id]={}))[f]=c.markedSpans),++f})}function pe(a,b){var c={from:b.from,to:lc(b),text:ge(a,b.from,b.to)};return oe(a,c,b.from.line,b.to.line+1),de(a,function(a){oe(a,c,b.from.line,b.to.line+1)},!0),c}function qe(a,b,c,d){var e=a.history;e.undone.length=0;var f=+new Date,g=Ue(e.done);if(g&&(e.lastOp==d||e.lastOrigin==b.origin&&b.origin&&("+"==b.origin.charAt(0)&&a.cm&&e.lastTime>f-a.cm.options.historyEventDelay||"*"==b.origin.charAt(0)))){var h=Ue(g.changes);xc(b.from,b.to)&&xc(b.from,h.to)?h.to=lc(b):g.changes.push(pe(a,b)),g.anchorAfter=c.anchor,g.headAfter=c.head}else for(g={changes:[pe(a,b)],generation:e.generation,anchorBefore:a.sel.anchor,headBefore:a.sel.head,anchorAfter:c.anchor,headAfter:c.head},e.done.push(g),e.generation=++e.maxGeneration;e.done.length>e.undoDepth;)e.done.shift();e.lastTime=f,e.lastOp=d,e.lastOrigin=b.origin}function re(a){if(!a)return null;for(var c,b=0;a.length>b;++b)a[b].marker.explicitlyCleared?c||(c=a.slice(0,b)):c&&c.push(a[b]);return c?c.length?c:null:a}function se(a,b){var c=b["spans_"+a.id];if(!c)return null;for(var d=0,e=[];b.text.length>d;++d)e.push(re(c[d]));return e}function te(a,b){for(var c=0,d=[];a.length>c;++c){var e=a[c],f=e.changes,g=[];d.push({changes:g,anchorBefore:e.anchorBefore,headBefore:e.headBefore,anchorAfter:e.anchorAfter,headAfter:e.headAfter});for(var h=0;f.length>h;++h){var j,i=f[h];if(g.push({from:i.from,to:i.to,text:i.text}),b)for(var k in i)(j=k.match(/^spans_(\d+)$/))&&We(b,Number(j[1]))>-1&&(Ue(g)[k]=i[k],delete i[k])}}return d}function ue(a,b,c,d){a.line>c?a.line+=d:a.line>b&&(a.line=b,a.ch=0)}function ve(a,b,c,d){for(var e=0;a.length>e;++e){for(var f=a[e],g=!0,h=0;f.changes.length>h;++h){var i=f.changes[h];if(f.copied||(i.from=zc(i.from),i.to=zc(i.to)),i.from.line>c)i.from.line+=d,i.to.line+=d;else if(i.to.line>=b){g=!1;break}}f.copied||(f.anchorBefore=zc(f.anchorBefore),f.headBefore=zc(f.headBefore),f.anchorAfter=zc(f.anchorAfter),f.readAfter=zc(f.headAfter),f.copied=!0),g?(ue(f.anchorBefore),ue(f.headBefore),ue(f.anchorAfter),ue(f.headAfter)):(a.splice(0,e+1),e=0)}}function we(a,b){var c=b.from.line,d=b.to.line,e=b.text.length-(d-c)-1;ve(a.done,c,d,e),ve(a.undone,c,d,e)}function xe(){Ce(this)}function ye(a){return a.stop||(a.stop=xe),a}function ze(a){a.preventDefault?a.preventDefault():a.returnValue=!1}function Ae(a){a.stopPropagation?a.stopPropagation():a.cancelBubble=!0}function Be(a){return null!=a.defaultPrevented?a.defaultPrevented:0==a.returnValue}function Ce(a){ze(a),Ae(a)}function De(a){return a.target||a.srcElement}function Ee(a){var b=a.which;return null==b&&(1&a.button?b=1:2&a.button?b=3:4&a.button&&(b=2)),p&&a.ctrlKey&&1==b&&(b=3),b}function Fe(a,b,c){if(a.addEventListener)a.addEventListener(b,c,!1);else if(a.attachEvent)a.attachEvent("on"+b,c);else{var d=a._handlers||(a._handlers={}),e=d[b]||(d[b]=[]);e.push(c)}}function Ge(a,b,c){if(a.removeEventListener)a.removeEventListener(b,c,!1);else if(a.detachEvent)a.detachEvent("on"+b,c);else{var d=a._handlers&&a._handlers[b];if(!d)return;for(var e=0;d.length>e;++e)if(d[e]==c){d.splice(e,1);break}}}function He(a,b){var c=a._handlers&&a._handlers[b];if(c)for(var d=Array.prototype.slice.call(arguments,2),e=0;c.length>e;++e)c[e].apply(null,d)}function Ke(a,b){function e(a){return function(){a.apply(null,d)}}var c=a._handlers&&a._handlers[b];if(c){var d=Array.prototype.slice.call(arguments,2);Ie||(++Je,Ie=[],setTimeout(Me,0));for(var f=0;c.length>f;++f)Ie.push(e(c[f]))}}function Le(a,b){return He(a,b.type,a,b),Be(b)}function Me(){--Je;var a=Ie;Ie=null;for(var b=0;a.length>b;++b)a[b]()}function Ne(a,b){var c=a._handlers&&a._handlers[b];return c&&c.length>0}function Qe(){this.id=null}function Re(a,b,c,d,e){null==b&&(b=a.search(/[^\s\u00a0]/),-1==b&&(b=a.length));for(var f=d||0,g=e||0;b>f;++f)" "==a.charAt(f)?g+=c-g%c:++g;return g}function Te(a){for(;a>=Se.length;)Se.push(Ue(Se)+" ");return Se[a]}function Ue(a){return a[a.length-1]}function Ve(a){if(n)a.selectionStart=0,a.selectionEnd=a.value.length;else try{a.select()}catch(b){}}function We(a,b){if(a.indexOf)return a.indexOf(b);for(var c=0,d=a.length;d>c;++c)if(a[c]==b)return c;return-1}function Xe(a,b){function c(){}c.prototype=a;var d=new c;return b&&Ye(b,d),d}function Ye(a,b){b||(b={});for(var c in a)a.hasOwnProperty(c)&&(b[c]=a[c]);return b}function Ze(a){for(var b=[],c=0;a>c;++c)b.push(void 0);return b}function $e(a){var b=Array.prototype.slice.call(arguments,1);return function(){return a.apply(null,b)}}function af(a){return/\w/.test(a)||a>"\u0080"&&(a.toUpperCase()!=a.toLowerCase()||_e.test(a))}function bf(a){for(var b in a)if(a.hasOwnProperty(b)&&a[b])return!1;return!0}function df(a,b,c,d){var e=document.createElement(a);if(c&&(e.className=c),d&&(e.style.cssText=d),"string"==typeof b)gf(e,b);else if(b)for(var f=0;b.length>f;++f)e.appendChild(b[f]);return e}function ef(a){for(var b=a.childNodes.length;b>0;--b)a.removeChild(a.firstChild);return a}function ff(a,b){return ef(a).appendChild(b)}function gf(a,b){d?(a.innerHTML="",a.appendChild(document.createTextNode(b))):a.textContent=b}function hf(a){return a.getBoundingClientRect()}function kf(){return!1}function mf(a){if(null!=lf)return lf;var b=df("div",null,null,"width: 50px; height: 50px; overflow-x: scroll");return ff(a,b),b.offsetWidth&&(lf=b.offsetHeight-b.clientHeight),lf||0}function of(a){if(null==nf){var b=df("span","\u200b");ff(a,df("span",[b,document.createTextNode("x")])),0!=a.firstChild.offsetHeight&&(nf=1>=b.offsetWidth&&b.offsetHeight>2&&!c)}return nf?df("span","\u200b"):df("span","\u00a0",null,"display: inline-block; width: 1px; margin-right: -1px")}function tf(a,b,c,d){if(!a)return d(b,c,"ltr");for(var e=0;a.length>e;++e){var f=a[e];(c>f.from&&f.to>b||b==c&&f.to==b)&&d(Math.max(f.from,b),Math.min(f.to,c),1==f.level?"rtl":"ltr")}}function uf(a){return a.level%2?a.to:a.from}function vf(a){return a.level%2?a.from:a.to}function wf(a){var b=me(a);return b?uf(b[0]):0}function xf(a){var b=me(a);return b?vf(Ue(b)):a.text.length}function yf(a,b){var c=fe(a.doc,b),d=zd(a.doc,c);d!=c&&(b=je(d));var e=me(d),f=e?e[0].level%2?xf(d):wf(d):0;return wc(b,f)}function zf(a,b){for(var c,d;c=yd(d=fe(a.doc,b));)b=c.find().to.line;var e=me(d),f=e?e[0].level%2?wf(d):xf(d):d.text.length;return wc(b,f)}function Af(a,b,c){var d=a[0].level;return b==d?!0:c==d?!1:c>b}function Cf(a,b){for(var d,c=0;a.length>c;++c){var e=a[c];if(b>e.from&&e.to>b)return Bf=null,c;if(e.from==b||e.to==b){if(null!=d)return Af(a,e.level,a[d].level)?(Bf=d,c):(Bf=c,d);d=c}}return Bf=null,d}function Df(a,b,c,d){if(!d)return b+c;do b+=c;while(b>0&&cf.test(a.text.charAt(b)));return b}function Ef(a,b,c,d){var e=me(a);if(!e)return Ff(a,b,c,d);for(var f=Cf(e,b),g=e[f],h=Df(a,b,g.level%2?-c:c,d);;){if(h>g.from&&g.to>h)return h;if(h==g.from||h==g.to)return Cf(e,h)==f?h:(g=e[f+=c],c>0==g.level%2?g.to:g.from);if(g=e[f+=c],!g)return null;h=c>0==g.level%2?Df(a,g.to,-1,d):Df(a,g.from,1,d)}}function Ff(a,b,c,d){var e=b+c;if(d)for(;e>0&&cf.test(a.text.charAt(e));)e+=c;return 0>e||e>a.text.length?null:e}var a=/gecko\/\d/i.test(navigator.userAgent),b=/MSIE \d/.test(navigator.userAgent),c=b&&(null==document.documentMode||8>document.documentMode),d=b&&(null==document.documentMode||9>document.documentMode),e=/WebKit\//.test(navigator.userAgent),f=e&&/Qt\/\d+\.\d+/.test(navigator.userAgent),g=/Chrome\//.test(navigator.userAgent),h=/Opera\//.test(navigator.userAgent),i=/Apple Computer/.test(navigator.vendor),j=/KHTML\//.test(navigator.userAgent),k=/Mac OS X 1\d\D([7-9]|\d\d)\D/.test(navigator.userAgent),l=/Mac OS X 1\d\D([8-9]|\d\d)\D/.test(navigator.userAgent),m=/PhantomJS/.test(navigator.userAgent),n=/AppleWebKit/.test(navigator.userAgent)&&/Mobile\/\w+/.test(navigator.userAgent),o=n||/Android|webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(navigator.userAgent),p=n||/Mac/.test(navigator.platform),q=/windows/i.test(navigator.platform),r=h&&navigator.userAgent.match(/Version\/(\d*\.\d*)/);r&&(r=Number(r[1]));var wb,Pb,Qb,s=p&&(f||h&&(null==r||12.11>r)),t=a||b&&!d,u=!1,v=!1,zb=0,Tb=0,Yb=0,Zb=null;b?Zb=-.53:a?Zb=15:g?Zb=-.7:i&&(Zb=-1/3);var bc,jc,ec=null,lc=w.changeEnd=function(a){return a.text?wc(a.from.line+a.text.length-1,Ue(a.text).length+(1==a.text.length?a.from.ch:0)):a.to};w.Pos=wc,w.prototype={constructor:w,focus:function(){window.focus(),Kb(this),hc(this),Hb(this)},setOption:function(a,b){var c=this.options,d=c[a];(c[a]!=b||"mode"==a)&&(c[a]=b,Vc.hasOwnProperty(a)&&Cb(this,Vc[a])(this,b,d))},getOption:function(a){return this.options[a]},getDoc:function(){return this.doc},addKeyMap:function(a,b){this.state.keyMaps[b?"push":"unshift"](a)},removeKeyMap:function(a){for(var b=this.state.keyMaps,c=0;b.length>c;++c)if(("string"==typeof a?b[c].name:b[c])==a)return b.splice(c,1),!0},addOverlay:Cb(null,function(a,b){var c=a.token?a:w.getMode(this.options,a);if(c.startState)throw Error("Overlays may not be stateful.");this.state.overlays.push({mode:c,modeSpec:a,opaque:b&&b.opaque}),this.state.modeGen++,Fb(this)}),removeOverlay:Cb(null,function(a){for(var b=this.state.overlays,c=0;b.length>c;++c){var d=b[c].modeSpec;if(d==a||"string"==typeof a&&d.name==a)return b.splice(c,1),this.state.modeGen++,Fb(this),void 0}}),indentLine:Cb(null,function(a,b,c){"string"!=typeof b&&"number"!=typeof b&&(b=null==b?this.options.smartIndent?"smart":"prev":b?"add":"subtract"),Dc(this.doc,a)&&Pc(this,a,b,c)}),indentSelection:Cb(null,function(a){var b=this.doc.sel;if(xc(b.from,b.to))return Pc(this,b.from.line,a);for(var c=b.to.line-(b.to.ch?0:1),d=b.from.line;c>=d;++d)Pc(this,d,a)}),getTokenAt:function(a,b){var c=this.doc;a=Bc(c,a);for(var d=cb(this,a.line,b),e=this.doc.mode,f=fe(c,a.line),g=new jd(f.text,this.options.tabSize);g.pos<a.ch&&!g.eol();){g.start=g.pos;var h=e.token(g,d)}return{start:g.start,end:g.pos,string:g.current(),className:h||null,type:h||null,state:d}},getTokenTypeAt:function(a){a=Bc(this.doc,a);for(var b=Nd(this,fe(this.doc,a.line)),c=0,d=(b.length-1)/2,e=a.ch;;){var f=c+d>>1;if((f?b[2*f-1]:0)>=e)d=f;else{if(!(e>b[2*f+1]))return b[2*f+2];c=f+1}}},getStateAfter:function(a,b){var c=this.doc;return a=Ac(c,null==a?c.first+c.size-1:a),cb(this,a+1,b)},cursorCoords:function(a,b){var c,d=this.doc.sel;return c=null==a?d.head:"object"==typeof a?Bc(this.doc,a):a?d.from:d.to,sb(this,c,b||"page")},charCoords:function(a,b){return rb(this,Bc(this.doc,a),b||"page")},coordsChar:function(a,b){return a=qb(this,a,b||"page"),ub(this,a.left,a.top)},lineAtHeight:function(a,b){return a=qb(this,{top:a,left:0},b||"page").top,ke(this.doc,a+this.display.viewOffset)},heightAtLine:function(a,b){var c=!1,d=this.doc.first+this.doc.size-1;this.doc.first>a?a=this.doc.first:a>d&&(a=d,c=!0);var e=fe(this.doc,a);return pb(this,fe(this.doc,a),{top:0,left:0},b||"page").top+(c?e.height:0)},defaultTextHeight:function(){return xb(this.display)},defaultCharWidth:function(){return yb(this.display)},setGutterMarker:Cb(null,function(a,b,c){return Qc(this,a,function(a){var d=a.gutterMarkers||(a.gutterMarkers={});return d[b]=c,!c&&bf(d)&&(a.gutterMarkers=null),!0})}),clearGutter:Cb(null,function(a){var b=this,c=b.doc,d=c.first;c.iter(function(c){c.gutterMarkers&&c.gutterMarkers[a]&&(c.gutterMarkers[a]=null,Fb(b,d,d+1),bf(c.gutterMarkers)&&(c.gutterMarkers=null)),++d})}),addLineClass:Cb(null,function(a,b,c){return Qc(this,a,function(a){var d="text"==b?"textClass":"background"==b?"bgClass":"wrapClass";if(a[d]){if(RegExp("(?:^|\\s)"+c+"(?:$|\\s)").test(a[d]))return!1;a[d]+=" "+c}else a[d]=c;return!0})}),removeLineClass:Cb(null,function(a,b,c){return Qc(this,a,function(a){var d="text"==b?"textClass":"background"==b?"bgClass":"wrapClass",e=a[d];if(!e)return!1;if(null==c)a[d]=null;else{var f=e.match(RegExp("(?:^|\\s+)"+c+"(?:$|\\s+)"));if(!f)return!1;var g=f.index+f[0].length;a[d]=e.slice(0,f.index)+(f.index&&g!=e.length?" ":"")+e.slice(g)||null}return!0})}),addLineWidget:Cb(null,function(a,b,c){return Hd(this,a,b,c)}),removeLineWidget:function(a){a.clear()},lineInfo:function(a){if("number"==typeof a){if(!Dc(this.doc,a))return null;var b=a;if(a=fe(this.doc,a),!a)return null}else{var b=je(a);if(null==b)return null}return{line:b,handle:a,text:a.text,gutterMarkers:a.gutterMarkers,textClass:a.textClass,bgClass:a.bgClass,wrapClass:a.wrapClass,widgets:a.widgets}},getViewport:function(){return{from:this.display.showingFrom,to:this.display.showingTo}},addWidget:function(a,b,c,d,e){var f=this.display;a=sb(this,Bc(this.doc,a));var g=a.bottom,h=a.left;if(b.style.position="absolute",f.sizer.appendChild(b),"over"==d)g=a.top;else if("above"==d||"near"==d){var i=Math.max(f.wrapper.clientHeight,this.doc.height),j=Math.max(f.sizer.clientWidth,f.lineSpace.clientWidth);("above"==d||a.bottom+b.offsetHeight>i)&&a.top>b.offsetHeight?g=a.top-b.offsetHeight:i>=a.bottom+b.offsetHeight&&(g=a.bottom),h+b.offsetWidth>j&&(h=j-b.offsetWidth)}b.style.top=g+"px",b.style.left=b.style.right="","right"==e?(h=f.sizer.clientWidth-b.offsetWidth,b.style.right="0px"):("left"==e?h=0:"middle"==e&&(h=(f.sizer.clientWidth-b.offsetWidth)/2),b.style.left=h+"px"),c&&Lc(this,h,g,h+b.offsetWidth,g+b.offsetHeight)},triggerOnKeyDown:Cb(null,fc),execCommand:function(a){return dd[a](this)},findPosH:function(a,b,c,d){var e=1;0>b&&(e=-1,b=-b);for(var f=0,g=Bc(this.doc,a);b>f&&(g=Rc(this.doc,g,e,c,d),!g.hitSide);++f);return g},moveH:Cb(null,function(a,b){var d,c=this.doc.sel;d=c.shift||c.extend||xc(c.from,c.to)?Rc(this.doc,c.head,a,b,this.options.rtlMoveVisually):0>a?c.from:c.to,Ec(this.doc,d,d,a)}),deleteH:Cb(null,function(a,b){var c=this.doc.sel;xc(c.from,c.to)?vc(this.doc,"",c.from,Rc(this.doc,c.head,a,b,!1),"+delete"):vc(this.doc,"",c.from,c.to,"+delete"),this.curOp.userSelChange=!0}),findPosV:function(a,b,c,d){var e=1,f=d;0>b&&(e=-1,b=-b);for(var g=0,h=Bc(this.doc,a);b>g;++g){var i=sb(this,h,"div");if(null==f?f=i.left:i.left=f,h=Sc(this,i,e,c),h.hitSide)break}return h},moveV:Cb(null,function(a,b){var c=this.doc.sel,d=sb(this,c.head,"div");null!=c.goalColumn&&(d.left=c.goalColumn);var e=Sc(this,d,a,b);"page"==b&&Oc(this,0,rb(this,e,"div").top-d.top),Ec(this.doc,e,e,a),c.goalColumn=d.left}),toggleOverwrite:function(a){(null==a||a!=this.state.overwrite)&&((this.state.overwrite=!this.state.overwrite)?this.display.cursor.className+=" CodeMirror-overwrite":this.display.cursor.className=this.display.cursor.className.replace(" CodeMirror-overwrite",""))},hasFocus:function(){return this.state.focused},scrollTo:Cb(null,function(a,b){Nc(this,a,b)}),getScrollInfo:function(){var a=this.display.scroller,b=Oe;return{left:a.scrollLeft,top:a.scrollTop,height:a.scrollHeight-b,width:a.scrollWidth-b,clientHeight:a.clientHeight-b,clientWidth:a.clientWidth-b}},scrollIntoView:Cb(null,function(a,b){"number"==typeof a&&(a=wc(a,0)),b||(b=0);var c=a;a&&null==a.line||(this.curOp.scrollToPos=a?Bc(this.doc,a):this.doc.sel.head,this.curOp.scrollToPosMargin=b,c=sb(this,this.curOp.scrollToPos));var d=Mc(this,c.left,c.top-b,c.right,c.bottom+b);Nc(this,d.scrollLeft,d.scrollTop)}),setSize:function(a,b){function c(a){return"number"==typeof a||/^\d+$/.test(a+"")?a+"px":a}null!=a&&(this.display.wrapper.style.width=c(a)),null!=b&&(this.display.wrapper.style.height=c(b)),this.refresh()},on:function(a,b){Fe(this,a,b)},off:function(a,b){Ge(this,a,b)},operation:function(a){return Eb(this,a)},refresh:Cb(null,function(){mb(this),Nc(this,this.doc.scrollLeft,this.doc.scrollTop),Fb(this)}),swapDoc:Cb(null,function(a){var b=this.doc;return b.cm=null,ee(this,a),mb(this),Jb(this,!0),Nc(this,a.scrollLeft,a.scrollTop),b}),getInputField:function(){return this.display.input},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}};var Vc=w.optionHandlers={},Wc=w.defaults={},Yc=w.Init={toString:function(){return"CodeMirror.Init"}};Xc("value","",function(a,b){a.setValue(b)},!0),Xc("mode",null,function(a,b){a.doc.modeOption=b,y(a)},!0),Xc("indentUnit",2,y,!0),Xc("indentWithTabs",!1),Xc("smartIndent",!0),Xc("tabSize",4,function(a){y(a),mb(a),Fb(a)},!0),Xc("electricChars",!0),Xc("rtlMoveVisually",!q),Xc("theme","default",function(a){D(a),E(a)},!0),Xc("keyMap","default",C),Xc("extraKeys",null),Xc("onKeyEvent",null),Xc("onDragEvent",null),Xc("lineWrapping",!1,z,!0),Xc("gutters",[],function(a){I(a.options),E(a)},!0),Xc("fixedGutter",!0,function(a,b){a.display.gutters.style.left=b?O(a.display)+"px":"0",a.refresh()},!0),Xc("coverGutterNextToScrollbar",!1,J,!0),Xc("lineNumbers",!1,function(a){I(a.options),E(a)},!0),Xc("firstLineNumber",1,E,!0),Xc("lineNumberFormatter",function(a){return a},E,!0),Xc("showCursorWhenSelecting",!1,X,!0),Xc("readOnly",!1,function(a,b){"nocursor"==b?(ic(a),a.display.input.blur()):b||Jb(a,!0)}),Xc("dragDrop",!0),Xc("cursorBlinkRate",530),Xc("cursorScrollMargin",0),Xc("cursorHeight",1),Xc("workTime",100),Xc("workDelay",100),Xc("flattenSpans",!0),Xc("pollInterval",100),Xc("undoDepth",40,function(a,b){a.doc.history.undoDepth=b}),Xc("historyEventDelay",500),Xc("viewportMargin",10,function(a){a.refresh()},!0),Xc("maxHighlightLength",1e4,function(a){y(a),a.refresh()},!0),Xc("moveInputWithCursor",!0,function(a,b){b||(a.display.inputDiv.style.top=a.display.inputDiv.style.left=0)}),Xc("tabindex",null,function(a,b){a.display.input.tabIndex=b||""}),Xc("autofocus",null);var Zc=w.modes={},$c=w.mimeModes={};w.defineMode=function(a,b){if(w.defaults.mode||"null"==a||(w.defaults.mode=a),arguments.length>2){b.dependencies=[];for(var c=2;arguments.length>c;++c)b.dependencies.push(arguments[c])}Zc[a]=b},w.defineMIME=function(a,b){$c[a]=b},w.resolveMode=function(a){if("string"==typeof a&&$c.hasOwnProperty(a))a=$c[a];else if(a&&"string"==typeof a.name&&$c.hasOwnProperty(a.name)){var b=$c[a.name];a=Xe(b,a),a.name=b.name}else if("string"==typeof a&&/^[\w\-]+\/[\w\-]+\+xml$/.test(a))return w.resolveMode("application/xml");return"string"==typeof a?{name:a}:a||{name:"null"}},w.getMode=function(a,b){b=w.resolveMode(b);var c=Zc[b.name];if(!c)return w.getMode(a,"text/plain");var d=c(a,b);if(_c.hasOwnProperty(b.name)){var e=_c[b.name];for(var f in e)e.hasOwnProperty(f)&&(d.hasOwnProperty(f)&&(d["_"+f]=d[f]),d[f]=e[f])}return d.name=b.name,d},w.defineMode("null",function(){return{token:function(a){a.skipToEnd()}}}),w.defineMIME("text/plain","null");var _c=w.modeExtensions={};w.extendMode=function(a,b){var c=_c.hasOwnProperty(a)?_c[a]:_c[a]={};Ye(b,c)},w.defineExtension=function(a,b){w.prototype[a]=b},w.defineDocExtension=function(a,b){ae.prototype[a]=b},w.defineOption=Xc;var ad=[];w.defineInitHook=function(a){ad.push(a)},w.copyState=bd,w.startState=cd,w.innerMode=function(a,b){for(;a.innerMode;){var c=a.innerMode(b);b=c.state,a=c.mode}return c||{mode:a,state:b}};var dd=w.commands={selectAll:function(a){a.setSelection(wc(a.firstLine(),0),wc(a.lastLine()))},killLine:function(a){var b=a.getCursor(!0),c=a.getCursor(!1),d=!xc(b,c);d||a.getLine(b.line).length!=b.ch?a.replaceRange("",b,d?c:wc(b.line),"+delete"):a.replaceRange("",b,wc(b.line+1,0),"+delete")},deleteLine:function(a){var b=a.getCursor().line;a.replaceRange("",wc(b,0),wc(b),"+delete")},delLineLeft:function(a){var b=a.getCursor();a.replaceRange("",wc(b.line,0),b,"+delete")},undo:function(a){a.undo()},redo:function(a){a.redo()},goDocStart:function(a){a.extendSelection(wc(a.firstLine(),0))},goDocEnd:function(a){a.extendSelection(wc(a.lastLine()))},goLineStart:function(a){a.extendSelection(yf(a,a.getCursor().line))},goLineStartSmart:function(a){var b=a.getCursor(),c=yf(a,b.line),d=a.getLineHandle(c.line),e=me(d);if(e&&0!=e[0].level)a.extendSelection(c);else{var f=Math.max(0,d.text.search(/\S/)),g=b.line==c.line&&f>=b.ch&&b.ch;a.extendSelection(wc(c.line,g?0:f))}},goLineEnd:function(a){a.extendSelection(zf(a,a.getCursor().line))},goLineRight:function(a){var b=a.charCoords(a.getCursor(),"div").top+5;a.extendSelection(a.coordsChar({left:a.display.lineDiv.offsetWidth+100,top:b},"div"))},goLineLeft:function(a){var b=a.charCoords(a.getCursor(),"div").top+5;a.extendSelection(a.coordsChar({left:0,top:b},"div"))},goLineUp:function(a){a.moveV(-1,"line")},goLineDown:function(a){a.moveV(1,"line")},goPageUp:function(a){a.moveV(-1,"page")},goPageDown:function(a){a.moveV(1,"page")},goCharLeft:function(a){a.moveH(-1,"char")},goCharRight:function(a){a.moveH(1,"char")},goColumnLeft:function(a){a.moveH(-1,"column")},goColumnRight:function(a){a.moveH(1,"column")},goWordLeft:function(a){a.moveH(-1,"word")},goGroupRight:function(a){a.moveH(1,"group")},goGroupLeft:function(a){a.moveH(-1,"group")},goWordRight:function(a){a.moveH(1,"word")},delCharBefore:function(a){a.deleteH(-1,"char")},delCharAfter:function(a){a.deleteH(1,"char")},delWordBefore:function(a){a.deleteH(-1,"word")},delWordAfter:function(a){a.deleteH(1,"word")},delGroupBefore:function(a){a.deleteH(-1,"group")},delGroupAfter:function(a){a.deleteH(1,"group")},indentAuto:function(a){a.indentSelection("smart")},indentMore:function(a){a.indentSelection("add")},indentLess:function(a){a.indentSelection("subtract")},insertTab:function(a){a.replaceSelection(" ","end","+input")},defaultTab:function(a){a.somethingSelected()?a.indentSelection("add"):a.replaceSelection(" ","end","+input")},transposeChars:function(a){var b=a.getCursor(),c=a.getLine(b.line);b.ch>0&&b.ch<c.length-1&&a.replaceRange(c.charAt(b.ch)+c.charAt(b.ch-1),wc(b.line,b.ch-1),wc(b.line,b.ch+1))},newlineAndIndent:function(a){Cb(a,function(){a.replaceSelection("\n","end","+input"),a.indentLine(a.getCursor().line,null,!0)})()},toggleOverwrite:function(a){a.toggleOverwrite()}},ed=w.keyMap={};ed.basic={Left:"goCharLeft",Right:"goCharRight",Up:"goLineUp",Down:"goLineDown",End:"goLineEnd",Home:"goLineStartSmart",PageUp:"goPageUp",PageDown:"goPageDown",Delete:"delCharAfter",Backspace:"delCharBefore",Tab:"defaultTab","Shift-Tab":"indentAuto",Enter:"newlineAndIndent",Insert:"toggleOverwrite"},ed.pcDefault={"Ctrl-A":"selectAll","Ctrl-D":"deleteLine","Ctrl-Z":"undo","Shift-Ctrl-Z":"redo","Ctrl-Y":"redo","Ctrl-Home":"goDocStart","Alt-Up":"goDocStart","Ctrl-End":"goDocEnd","Ctrl-Down":"goDocEnd","Ctrl-Left":"goGroupLeft","Ctrl-Right":"goGroupRight","Alt-Left":"goLineStart","Alt-Right":"goLineEnd","Ctrl-Backspace":"delGroupBefore","Ctrl-Delete":"delGroupAfter","Ctrl-S":"save","Ctrl-F":"find","Ctrl-G":"findNext","Shift-Ctrl-G":"findPrev","Shift-Ctrl-F":"replace","Shift-Ctrl-R":"replaceAll","Ctrl-[":"indentLess","Ctrl-]":"indentMore",fallthrough:"basic"},ed.macDefault={"Cmd-A":"selectAll","Cmd-D":"deleteLine","Cmd-Z":"undo","Shift-Cmd-Z":"redo","Cmd-Y":"redo","Cmd-Up":"goDocStart","Cmd-End":"goDocEnd","Cmd-Down":"goDocEnd","Alt-Left":"goGroupLeft","Alt-Right":"goGroupRight","Cmd-Left":"goLineStart","Cmd-Right":"goLineEnd","Alt-Backspace":"delGroupBefore","Ctrl-Alt-Backspace":"delGroupAfter","Alt-Delete":"delGroupAfter","Cmd-S":"save","Cmd-F":"find","Cmd-G":"findNext","Shift-Cmd-G":"findPrev","Cmd-Alt-F":"replace","Shift-Cmd-Alt-F":"replaceAll","Cmd-[":"indentLess","Cmd-]":"indentMore","Cmd-Backspace":"delLineLeft",fallthrough:["basic","emacsy"]},ed["default"]=p?ed.macDefault:ed.pcDefault,ed.emacsy={"Ctrl-F":"goCharRight","Ctrl-B":"goCharLeft","Ctrl-P":"goLineUp","Ctrl-N":"goLineDown","Alt-F":"goWordRight","Alt-B":"goWordLeft","Ctrl-A":"goLineStart","Ctrl-E":"goLineEnd","Ctrl-V":"goPageDown","Shift-Ctrl-V":"goPageUp","Ctrl-D":"delCharAfter","Ctrl-H":"delCharBefore","Alt-D":"delWordAfter","Alt-Backspace":"delWordBefore","Ctrl-K":"killLine","Ctrl-T":"transposeChars"},w.lookupKey=gd,w.isModifierKey=hd,w.keyName=id,w.fromTextArea=function(a,b){function e(){a.value=i.getValue()}if(b||(b={}),b.value=a.value,!b.tabindex&&a.tabindex&&(b.tabindex=a.tabindex),!b.placeholder&&a.placeholder&&(b.placeholder=a.placeholder),null==b.autofocus){var c=document.body;try{c=document.activeElement}catch(d){}b.autofocus=c==a||null!=a.getAttribute("autofocus")&&c==document.body}if(a.form&&(Fe(a.form,"submit",e),!b.leaveSubmitMethodAlone)){var f=a.form,g=f.submit;try{var h=f.submit=function(){e(),f.submit=g,f.submit(),f.submit=h}}catch(d){}}a.style.display="none";var i=w(function(b){a.parentNode.insertBefore(b,a.nextSibling)},b);return i.save=e,i.getTextArea=function(){return a},i.toTextArea=function(){e(),a.parentNode.removeChild(i.getWrapperElement()),a.style.display="",a.form&&(Ge(a.form,"submit",e),"function"==typeof a.form.submit&&(a.form.submit=g))},i},jd.prototype={eol:function(){return this.pos>=this.string.length},sol:function(){return 0==this.pos},peek:function(){return this.string.charAt(this.pos)||void 0},next:function(){return this.pos<this.string.length?this.string.charAt(this.pos++):void 0},eat:function(a){var b=this.string.charAt(this.pos);if("string"==typeof a)var c=b==a;else var c=b&&(a.test?a.test(b):a(b));return c?(++this.pos,b):void 0},eatWhile:function(a){for(var b=this.pos;this.eat(a););return this.pos>b},eatSpace:function(){for(var a=this.pos;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>a},skipToEnd:function(){this.pos=this.string.length},skipTo:function(a){var b=this.string.indexOf(a,this.pos);return b>-1?(this.pos=b,!0):void 0},backUp:function(a){this.pos-=a},column:function(){return this.lastColumnPos<this.start&&(this.lastColumnValue=Re(this.string,this.start,this.tabSize,this.lastColumnPos,this.lastColumnValue),this.lastColumnPos=this.start),this.lastColumnValue},indentation:function(){return Re(this.string,null,this.tabSize)},match:function(a,b,c){if("string"!=typeof a){var f=this.string.slice(this.pos).match(a);return f&&f.index>0?null:(f&&b!==!1&&(this.pos+=f[0].length),f)}var d=function(a){return c?a.toLowerCase():a},e=this.string.substr(this.pos,a.length);return d(e)==d(a)?(b!==!1&&(this.pos+=a.length),!0):void 0},current:function(){return this.string.slice(this.start,this.pos)}},w.StringStream=jd,w.TextMarker=kd,kd.prototype.clear=function(){if(!this.explicitlyCleared){var a=this.doc.cm,b=a&&!a.curOp;b&&Ab(a);for(var c=null,d=null,e=0;this.lines.length>e;++e){var f=this.lines[e],g=od(f.markedSpans,this);null!=g.to&&(d=je(f)),f.markedSpans=pd(f.markedSpans,g),null!=g.from?c=je(f):this.collapsed&&!Ad(this.doc,f)&&a&&ie(f,xb(a.display))}if(a&&this.collapsed&&!a.options.lineWrapping)for(var e=0;this.lines.length>e;++e){var h=zd(a.doc,this.lines[e]),i=G(a.doc,h);i>a.display.maxLineLength&&(a.display.maxLine=h,a.display.maxLineLength=i,a.display.maxLineChanged=!0)}null!=c&&a&&Fb(a,c,d+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,a&&Hc(a)),b&&Bb(a),Ke(this,"clear")}},kd.prototype.find=function(){for(var a,b,c=0;this.lines.length>c;++c){var d=this.lines[c],e=od(d.markedSpans,this);if(null!=e.from||null!=e.to){var f=je(d);null!=e.from&&(a=wc(f,e.from)),null!=e.to&&(b=wc(f,e.to))}}return"bookmark"==this.type?a:a&&{from:a,to:b}},kd.prototype.changed=function(){var a=this.find(),b=this.doc.cm;if(a&&b){var c=fe(this.doc,a.from.line);if(ib(b,c),a.from.line>=b.display.showingFrom&&a.from.line<b.display.showingTo){for(var d=b.display.lineDiv.firstChild;d;d=d.nextSibling)if(d.lineObj==c){d.offsetHeight!=c.height&&ie(c,d.offsetHeight);break}Eb(b,function(){b.curOp.selectionChanged=!0})}}},kd.prototype.attachLine=function(a){if(!this.lines.length&&this.doc.cm){var b=this.doc.cm.curOp;b.maybeHiddenMarkers&&-1!=We(b.maybeHiddenMarkers,this)||(b.maybeUnhiddenMarkers||(b.maybeUnhiddenMarkers=[])).push(this)}this.lines.push(a)},kd.prototype.detachLine=function(a){if(this.lines.splice(We(this.lines,a),1),!this.lines.length&&this.doc.cm){var b=this.doc.cm.curOp;(b.maybeHiddenMarkers||(b.maybeHiddenMarkers=[])).push(this)}},w.SharedTextMarker=md,md.prototype.clear=function(){if(!this.explicitlyCleared){this.explicitlyCleared=!0;for(var a=0;this.markers.length>a;++a)this.markers[a].clear();Ke(this,"clear")}},md.prototype.find=function(){return this.primary.find()};var Ed=w.LineWidget=function(a,b,c){for(var d in c)c.hasOwnProperty(d)&&(this[d]=c[d]);this.cm=a,this.node=b};Ed.prototype.clear=Fd(function(){var a=this.line.widgets,b=je(this.line);if(null!=b&&a){for(var c=0;a.length>c;++c)a[c]==this&&a.splice(c--,1);a.length||(this.line.widgets=null),ie(this.line,Math.max(0,this.line.height-Gd(this))),Fb(this.cm,b,b+1)}}),Ed.prototype.changed=Fd(function(){var a=this.height;this.height=null;var b=Gd(this)-a;if(b){ie(this.line,this.line.height+b);var c=je(this.line);Fb(this.cm,c,c+1)}});var Pd={},Sd=/[\t\u0000-\u0019\u00ad\u200b\u2028\u2029\uFEFF]/g;Zd.prototype={chunkSize:function(){return this.lines.length},removeInner:function(a,b){for(var c=a,d=a+b;d>c;++c){var e=this.lines[c];this.height-=e.height,Kd(e),Ke(e,"delete")}this.lines.splice(a,b)},collapse:function(a){a.splice.apply(a,[a.length,0].concat(this.lines))},insertInner:function(a,b,c){this.height+=c,this.lines=this.lines.slice(0,a).concat(b).concat(this.lines.slice(a));for(var d=0,e=b.length;e>d;++d)b[d].parent=this},iterN:function(a,b,c){for(var d=a+b;d>a;++a)if(c(this.lines[a]))return!0}},$d.prototype={chunkSize:function(){return this.size},removeInner:function(a,b){this.size-=b;for(var c=0;this.children.length>c;++c){var d=this.children[c],e=d.chunkSize();if(e>a){var f=Math.min(b,e-a),g=d.height;if(d.removeInner(a,f),this.height-=g-d.height,e==f&&(this.children.splice(c--,1),d.parent=null),0==(b-=f))break;a=0}else a-=e}if(25>this.size-b){var h=[];this.collapse(h),this.children=[new Zd(h)],this.children[0].parent=this}},collapse:function(a){for(var b=0,c=this.children.length;c>b;++b)this.children[b].collapse(a)},insertInner:function(a,b,c){this.size+=b.length,this.height+=c;for(var d=0,e=this.children.length;e>d;++d){var f=this.children[d],g=f.chunkSize();if(g>=a){if(f.insertInner(a,b,c),f.lines&&f.lines.length>50){for(;f.lines.length>50;){var h=f.lines.splice(f.lines.length-25,25),i=new Zd(h);f.height-=i.height,this.children.splice(d+1,0,i),i.parent=this}this.maybeSpill()}break}a-=g}},maybeSpill:function(){if(!(10>=this.children.length)){var a=this;do{var b=a.children.splice(a.children.length-5,5),c=new $d(b);if(a.parent){a.size-=c.size,a.height-=c.height;var e=We(a.parent.children,a);a.parent.children.splice(e+1,0,c)}else{var d=new $d(a.children);d.parent=a,a.children=[d,c],a=d}c.parent=a.parent}while(a.children.length>10);a.parent.maybeSpill()}},iterN:function(a,b,c){for(var d=0,e=this.children.length;e>d;++d){var f=this.children[d],g=f.chunkSize();if(g>a){var h=Math.min(b,g-a);if(f.iterN(a,h,c))return!0;if(0==(b-=h))break;a=0}else a-=g}}};var _d=0,ae=w.Doc=function(a,b,c){if(!(this instanceof ae))return new ae(a,b,c);null==c&&(c=0),$d.call(this,[new Zd([Id("",null)])]),this.first=c,this.scrollTop=this.scrollLeft=0,this.cantEdit=!1,this.history=ne(),this.cleanGeneration=1,this.frontier=c;var d=wc(c,0);this.sel={from:d,to:d,head:d,anchor:d,shift:!1,extend:!1,goalColumn:null},this.id=++_d,this.modeOption=b,"string"==typeof a&&(a=pf(a)),Yd(this,{from:d,to:d,text:a},null,{head:d,anchor:d})};ae.prototype=Xe($d.prototype,{constructor:ae,iter:function(a,b,c){c?this.iterN(a-this.first,b-a,c):this.iterN(this.first,this.first+this.size,a)},insert:function(a,b){for(var c=0,d=0,e=b.length;e>d;++d)c+=b[d].height;this.insertInner(a-this.first,b,c)},remove:function(a,b){this.removeInner(a-this.first,b)},getValue:function(a){var b=he(this,this.first,this.first+this.size);return a===!1?b:b.join(a||"\n")},setValue:function(a){var b=wc(this.first,0),c=this.first+this.size-1;pc(this,{from:b,to:wc(c,fe(this,c).text.length),text:pf(a),origin:"setValue"},{head:b,anchor:b},!0)},replaceRange:function(a,b,c,d){b=Bc(this,b),c=c?Bc(this,c):b,vc(this,a,b,c,d)},getRange:function(a,b,c){var d=ge(this,Bc(this,a),Bc(this,b));+return c===!1?d:d.join(c||"\n")},getLine:function(a){var b=this.getLineHandle(a);return b&&b.text},setLine:function(a,b){Dc(this,a)&&vc(this,b,wc(a,0),Bc(this,wc(a)))},removeLine:function(a){a?vc(this,"",Bc(this,wc(a-1)),Bc(this,wc(a))):vc(this,"",wc(0,0),Bc(this,wc(1,0)))},getLineHandle:function(a){return Dc(this,a)?fe(this,a):void 0},getLineNumber:function(a){return je(a)},lineCount:function(){return this.size},firstLine:function(){return this.first},lastLine:function(){return this.first+this.size-1},clipPos:function(a){return Bc(this,a)},getCursor:function(a){var c,b=this.sel;return c=null==a||"head"==a?b.head:"anchor"==a?b.anchor:"end"==a||a===!1?b.to:b.from,zc(c)},somethingSelected:function(){return!xc(this.sel.head,this.sel.anchor)},setCursor:Db(function(a,b,c){var d=Bc(this,"number"==typeof a?wc(a,b||0):a);c?Ec(this,d):Gc(this,d,d)}),setSelection:Db(function(a,b){Gc(this,Bc(this,a),Bc(this,b||a))}),extendSelection:Db(function(a,b){Ec(this,Bc(this,a),b&&Bc(this,b))}),getSelection:function(a){return this.getRange(this.sel.from,this.sel.to,a)},replaceSelection:function(a,b,c){pc(this,{from:this.sel.from,to:this.sel.to,text:pf(a),origin:c},b||"around")},undo:Db(function(){rc(this,"undo")}),redo:Db(function(){rc(this,"redo")}),setExtending:function(a){this.sel.extend=a},historySize:function(){var a=this.history;return{undo:a.done.length,redo:a.undone.length}},clearHistory:function(){this.history=ne(this.history.maxGeneration)},markClean:function(){this.cleanGeneration=this.changeGeneration()},changeGeneration:function(){return this.history.lastOp=this.history.lastOrigin=null,this.history.generation},isClean:function(a){return this.history.generation==(a||this.cleanGeneration)},getHistory:function(){return{done:te(this.history.done),undone:te(this.history.undone)}},setHistory:function(a){var b=this.history=ne(this.history.maxGeneration);b.done=a.done.slice(0),b.undone=a.undone.slice(0)},markText:function(a,b,c){return ld(this,Bc(this,a),Bc(this,b),c,"range")},setBookmark:function(a,b){var c={replacedWith:b&&(null==b.nodeType?b.widget:b),insertLeft:b&&b.insertLeft};return a=Bc(this,a),ld(this,a,a,c,"bookmark")},findMarksAt:function(a){a=Bc(this,a);var b=[],c=fe(this,a.line).markedSpans;if(c)for(var d=0;c.length>d;++d){var e=c[d];(null==e.from||e.from<=a.ch)&&(null==e.to||e.to>=a.ch)&&b.push(e.marker.parent||e.marker)}return b},getAllMarks:function(){var a=[];return this.iter(function(b){var c=b.markedSpans;if(c)for(var d=0;c.length>d;++d)null!=c[d].from&&a.push(c[d].marker)}),a},posFromIndex:function(a){var b,c=this.first;return this.iter(function(d){var e=d.text.length+1;return e>a?(b=a,!0):(a-=e,++c,void 0)}),Bc(this,wc(c,b))},indexFromPos:function(a){a=Bc(this,a);var b=a.ch;return a.line<this.first||0>a.ch?0:(this.iter(this.first,a.line,function(a){b+=a.text.length+1}),b)},copy:function(a){var b=new ae(he(this,this.first,this.first+this.size),this.modeOption,this.first);return b.scrollTop=this.scrollTop,b.scrollLeft=this.scrollLeft,b.sel={from:this.sel.from,to:this.sel.to,head:this.sel.head,anchor:this.sel.anchor,shift:this.sel.shift,extend:!1,goalColumn:this.sel.goalColumn},a&&(b.history.undoDepth=this.history.undoDepth,b.setHistory(this.getHistory())),b},linkedDoc:function(a){a||(a={});var b=this.first,c=this.first+this.size;null!=a.from&&a.from>b&&(b=a.from),null!=a.to&&c>a.to&&(c=a.to);var d=new ae(he(this,b,c),a.mode||this.modeOption,b);return a.sharedHist&&(d.history=this.history),(this.linked||(this.linked=[])).push({doc:d,sharedHist:a.sharedHist}),d.linked=[{doc:this,isParent:!0,sharedHist:a.sharedHist}],d},unlinkDoc:function(a){if(a instanceof w&&(a=a.doc),this.linked)for(var b=0;this.linked.length>b;++b){var c=this.linked[b];if(c.doc==a){this.linked.splice(b,1),a.unlinkDoc(this);break}}if(a.history==this.history){var d=[a.id];de(a,function(a){d.push(a.id)},!0),a.history=ne(),a.history.done=te(this.history.done,d),a.history.undone=te(this.history.undone,d)}},iterLinkedDocs:function(a){de(this,a)},getMode:function(){return this.mode},getEditor:function(){return this.cm}}),ae.prototype.eachLine=ae.prototype.iter;var be="iter insert remove copy getEditor".split(" ");for(var ce in ae.prototype)ae.prototype.hasOwnProperty(ce)&&0>We(be,ce)&&(w.prototype[ce]=function(a){return function(){return a.apply(this.doc,arguments)}}(ae.prototype[ce]));w.e_stop=Ce,w.e_preventDefault=ze,w.e_stopPropagation=Ae;var Ie,Je=0;w.on=Fe,w.off=Ge,w.signal=He;var Oe=30,Pe=w.Pass={toString:function(){return"CodeMirror.Pass"}};Qe.prototype={set:function(a,b){clearTimeout(this.id),this.id=setTimeout(b,a)}},w.countColumn=Re;var Se=[""],_e=/[\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/,cf=/[\u0300-\u036F\u0483-\u0487\u0488-\u0489\u0591-\u05BD\u05BF\u05C1-\u05C2\u05C4-\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7-\u06E8\u06EA-\u06ED\uA66F\uA670-\uA672\uA674-\uA67D\uA69F\udc00-\udfff]/;w.replaceGetRect=function(a){hf=a};var jf=function(){if(d)return!1;var a=df("div");return"draggable"in a||"dragDrop"in a}();a?kf=function(a,b){return 36==a.charCodeAt(b-1)&&39==a.charCodeAt(b)}:i&&!/Version\/([6-9]|\d\d)\b/.test(navigator.userAgent)?kf=function(a,b){return/\-[^ \-?]|\?[^ !\'\"\),.\-\/:;\?\]\}]/.test(a.slice(b-1,b+1))}:e&&(kf=function(a,b){return b>1&&45==a.charCodeAt(b-1)&&/\w/.test(a.charAt(b-2))&&/[^\-?\.]/.test(a.charAt(b))?!0:/[~!#%&*)=+}\]|\"\.>,:;][({[<]|-[^\-?\.\u2010-\u201f\u2026]|\?[\w~`@#$%\^&*(_=+{[|><]|\u2026[\w~`@#$%\^&*(_=+{[><]/.test(a.slice(b-1,b+1))});var lf,nf,pf=3!="\n\nb".split(/\n/).length?function(a){for(var b=0,c=[],d=a.length;d>=b;){var e=a.indexOf("\n",b);-1==e&&(e=a.length);var f=a.slice(b,"\r"==a.charAt(e-1)?e-1:e),g=f.indexOf("\r");-1!=g?(c.push(f.slice(0,g)),b+=g+1):(c.push(f),b=e+1)}return c}:function(a){return a.split(/\r\n?|\n/)};w.splitLines=pf;var qf=window.getSelection?function(a){try{return a.selectionStart!=a.selectionEnd}catch(b){return!1}}:function(a){try{var b=a.ownerDocument.selection.createRange()}catch(c){}return b&&b.parentElement()==a?0!=b.compareEndPoints("StartToEnd",b):!1},rf=function(){var a=df("div");return"oncopy"in a?!0:(a.setAttribute("oncopy","return;"),"function"==typeof a.oncopy)}(),sf={3:"Enter",8:"Backspace",9:"Tab",13:"Enter",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",44:"PrintScrn",45:"Insert",46:"Delete",59:";",91:"Mod",92:"Mod",93:"Mod",109:"-",107:"=",127:"Delete",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'",63276:"PageUp",63277:"PageDown",63275:"End",63273:"Home",63234:"Left",63232:"Up",63235:"Right",63233:"Down",63302:"Insert",63272:"Delete"};w.keyNames=sf,function(){for(var a=0;10>a;a++)sf[a+48]=a+"";for(var a=65;90>=a;a++)sf[a]=String.fromCharCode(a);for(var a=1;12>=a;a++)sf[a+111]=sf[a+63235]="F"+a}();var Bf,Gf=function(){function c(c){return 255>=c?a.charAt(c):c>=1424&&1524>=c?"R":c>=1536&&1791>=c?b.charAt(c-1536):c>=1792&&2220>=c?"r":"L"}var a="bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLL",b="rrrrrrrrrrrr,rNNmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmrrrrrrrnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmNmmmmrrrrrrrrrrrrrrrrrr",d=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,e=/[stwN]/,f=/[LRr]/,g=/[Lb1n]/,h=/[1n]/,i="L";return function(a){if(!d.test(a))return!1;for(var l,b=a.length,j=[],k=0;b>k;++k)j.push(l=c(a.charCodeAt(k)));for(var k=0,m=i;b>k;++k){var l=j[k];"m"==l?j[k]=m:m=l}for(var k=0,n=i;b>k;++k){var l=j[k];"1"==l&&"r"==n?j[k]="n":f.test(l)&&(n=l,"r"==l&&(j[k]="R"))}for(var k=1,m=j[0];b-1>k;++k){var l=j[k];"+"==l&&"1"==m&&"1"==j[k+1]?j[k]="1":","!=l||m!=j[k+1]||"1"!=m&&"n"!=m||(j[k]=m),m=l}for(var k=0;b>k;++k){var l=j[k];if(","==l)j[k]="N";else if("%"==l){for(var o=k+1;b>o&&"%"==j[o];++o);for(var p=k&&"!"==j[k-1]||b-1>o&&"1"==j[o]?"1":"N",q=k;o>q;++q)j[q]=p;k=o-1}}for(var k=0,n=i;b>k;++k){var l=j[k];"L"==n&&"1"==l?j[k]="L":f.test(l)&&(n=l)}for(var k=0;b>k;++k)if(e.test(j[k])){for(var o=k+1;b>o&&e.test(j[o]);++o);for(var r="L"==(k?j[k-1]:i),s="L"==(b-1>o?j[o]:i),p=r||s?"L":"R",q=k;o>q;++q)j[q]=p;k=o-1}for(var u,t=[],k=0;b>k;)if(g.test(j[k])){var v=k;for(++k;b>k&&g.test(j[k]);++k);t.push({from:v,to:k,level:0})}else{var w=k,x=t.length;for(++k;b>k&&"L"!=j[k];++k);for(var q=w;k>q;)if(h.test(j[q])){q>w&&t.splice(x,0,{from:w,to:q,level:1});var y=q;for(++q;k>q&&h.test(j[q]);++q);t.splice(x,0,{from:y,to:q,level:2}),w=q}else++q;k>w&&t.splice(x,0,{from:w,to:k,level:1})}return 1==t[0].level&&(u=a.match(/^\s+/))&&(t[0].from=u[0].length,t.unshift({from:0,to:u[0].length,level:0})),1==Ue(t).level&&(u=a.match(/\s+$/))&&(Ue(t).to-=u[0].length,t.push({from:b-u[0].length,to:b,level:0})),t[0].level!=Ue(t).level&&t.push({from:b,to:b,level:t[0].level}),t}}();return w.version="3.14.0",w}(),CodeMirror.defineMode("apl",function(){var a={".":"innerProduct","\\":"scan","/":"reduce","\u233f":"reduce1Axis","\u2340":"scan1Axis","\u00a8":"each","\u2363":"power"},b={"+":["conjugate","add"],"\u2212":["negate","subtract"],"\u00d7":["signOf","multiply"],"\u00f7":["reciprocal","divide"],"\u2308":["ceiling","greaterOf"],"\u230a":["floor","lesserOf"],"\u2223":["absolute","residue"],"\u2373":["indexGenerate","indexOf"],"?":["roll","deal"],"\u22c6":["exponentiate","toThePowerOf"],"\u235f":["naturalLog","logToTheBase"],"\u25cb":["piTimes","circularFuncs"],"!":["factorial","binomial"],"\u2339":["matrixInverse","matrixDivide"],"<":[null,"lessThan"],"\u2264":[null,"lessThanOrEqual"],"=":[null,"equals"],">":[null,"greaterThan"],"\u2265":[null,"greaterThanOrEqual"],"\u2260":[null,"notEqual"],"\u2261":["depth","match"],"\u2262":[null,"notMatch"],"\u2208":["enlist","membership"],"\u2377":[null,"find"],"\u222a":["unique","union"],"\u2229":[null,"intersection"],"\u223c":["not","without"],"\u2228":[null,"or"],"\u2227":[null,"and"],"\u2371":[null,"nor"],"\u2372":[null,"nand"],"\u2374":["shapeOf","reshape"],",":["ravel","catenate"],"\u236a":[null,"firstAxisCatenate"],"\u233d":["reverse","rotate"],"\u2296":["axis1Reverse","axis1Rotate"],"\u2349":["transpose",null],"\u2191":["first","take"],"\u2193":[null,"drop"],"\u2282":["enclose","partitionWithAxis"],"\u2283":["diclose","pick"],"\u2337":[null,"index"],"\u234b":["gradeUp",null],"\u2352":["gradeDown",null],"\u22a4":["encode",null],"\u22a5":["decode",null],"\u2355":["format","formatByExample"],"\u234e":["execute",null],"\u22a3":["stop","left"],"\u22a2":["pass","right"]},c=/[\.\/\u233f\u2340\u00a8\u2363]/,d=/\u236c/,e=/[\+\u2212\u00d7\u00f7\u2308\u230a\u2223\u2373\?\u22c6\u235f\u25cb!\u2339<\u2264=>\u2265\u2260\u2261\u2262\u2208\u2377\u222a\u2229\u223c\u2228\u2227\u2371\u2372\u2374,\u236a\u233d\u2296\u2349\u2191\u2193\u2282\u2283\u2337\u234b\u2352\u22a4\u22a5\u2355\u234e\u22a3\u22a2]/,f=/\u2190/,g=/[\u235d#].*$/,h=function(a){var b;return b=!1,function(c){return b=c,c===a?"\\"===b:!0}};return{startState:function(){return{prev:!1,func:!1,op:!1,string:!1,escape:!1}},token:function(i,j){var k,l,m;return i.eatSpace()?null:(k=i.next(),'"'===k||"'"===k?(i.eatWhile(h(k)),i.next(),j.prev=!0,"string"):/[\[{\(]/.test(k)?(j.prev=!1,null):/[\]}\)]/.test(k)?(j.prev=!0,null):d.test(k)?(j.prev=!1,"niladic"):/[\u00af\d]/.test(k)?(j.func?(j.func=!1,j.prev=!1):j.prev=!0,i.eatWhile(/[\w\.]/),"number"):c.test(k)?"operator apl-"+a[k]:f.test(k)?"apl-arrow":e.test(k)?(l="apl-",null!=b[k]&&(l+=j.prev?b[k][1]:b[k][0]),j.func=!0,j.prev=!1,"function "+l):g.test(k)?(i.skipToEnd(),"comment"):"\u2218"===k&&"."===i.peek()?(i.next(),"function jot-dot"):(i.eatWhile(/[\w\$_]/),m=i.current(),j.prev=!0,"keyword"))}}}),CodeMirror.defineMIME("text/apl","apl"),CodeMirror.defineMode("clike",function(a,b){function n(a,b){var c=a.next();if(j[c]){var d=j[c](a,b);if(d!==!1)return d}if('"'==c||"'"==c)return b.tokenize=o(c),b.tokenize(a,b);if(/[\[\]{}\(\),;\:\.]/.test(c))return m=c,null;if(/\d/.test(c))return a.eatWhile(/[\w\.]/),"number";if("/"==c){if(a.eat("*"))return b.tokenize=p,p(a,b);if(a.eat("/"))return a.skipToEnd(),"comment"}if(l.test(c))return a.eatWhile(l),"operator";a.eatWhile(/[\w\$_]/);var e=a.current();return f.propertyIsEnumerable(e)?(h.propertyIsEnumerable(e)&&(m="newstatement"),"keyword"):g.propertyIsEnumerable(e)?(h.propertyIsEnumerable(e)&&(m="newstatement"),"builtin"):i.propertyIsEnumerable(e)?"atom":"variable"}function o(a){return function(b,c){for(var e,d=!1,f=!1;null!=(e=b.next());){if(e==a&&!d){f=!0;break}d=!d&&"\\"==e}return(f||!d&&!k)&&(c.tokenize=null),"string"}}function p(a,b){for(var d,c=!1;d=a.next();){if("/"==d&&c){b.tokenize=null;break}c="*"==d}return"comment"}function q(a,b,c,d,e){this.indented=a,this.column=b,this.type=c,this.align=d,this.prev=e}function r(a,b,c){var d=a.indented;return a.context&&"statement"==a.context.type&&(d=a.context.indented),a.context=new q(d,b,c,null,a.context)}function s(a){var b=a.context.type;return(")"==b||"]"==b||"}"==b)&&(a.indented=a.context.indented),a.context=a.context.prev}var m,c=a.indentUnit,d=b.statementIndentUnit||c,e=b.dontAlignCalls,f=b.keywords||{},g=b.builtin||{},h=b.blockKeywords||{},i=b.atoms||{},j=b.hooks||{},k=b.multiLineStrings,l=/[+\-*&%=<>!?|\/]/;return{startState:function(a){return{tokenize:null,context:new q((a||0)-c,0,"top",!1),indented:0,startOfLine:!0}},token:function(a,b){var c=b.context;if(a.sol()&&(null==c.align&&(c.align=!1),b.indented=a.indentation(),b.startOfLine=!0),a.eatSpace())return null;m=null;var d=(b.tokenize||n)(a,b);if("comment"==d||"meta"==d)return d;if(null==c.align&&(c.align=!0),";"!=m&&":"!=m&&","!=m||"statement"!=c.type)if("{"==m)r(b,a.column(),"}");else if("["==m)r(b,a.column(),"]");else if("("==m)r(b,a.column(),")");else if("}"==m){for(;"statement"==c.type;)c=s(b);for("}"==c.type&&(c=s(b));"statement"==c.type;)c=s(b)}else m==c.type?s(b):(("}"==c.type||"top"==c.type)&&";"!=m||"statement"==c.type&&"newstatement"==m)&&r(b,a.column(),"statement");else s(b);return b.startOfLine=!1,d},indent:function(a,b){if(a.tokenize!=n&&null!=a.tokenize)return CodeMirror.Pass;var f=a.context,g=b&&b.charAt(0);"statement"==f.type&&"}"==g&&(f=f.prev);var h=g==f.type;return"statement"==f.type?f.indented+("{"==g?0:d):!f.align||e&&")"==f.type?")"!=f.type||h?f.indented+(h?0:c):f.indented+d:f.column+(h?0:1)},electricChars:"{}",blockCommentStart:"/*",blockCommentEnd:"*/",lineComment:"//"}}),function(){function a(a){for(var b={},c=a.split(" "),d=0;c.length>d;++d)b[c[d]]=!0;return b}function c(a,b){if(!b.startOfLine)return!1;for(;;){if(!a.skipTo("\\")){a.skipToEnd(),b.tokenize=null;break}if(a.next(),a.eol()){b.tokenize=c;break}}return"meta"}function d(a,b){for(var c;null!=(c=a.next());)if('"'==c&&!a.eat('"')){b.tokenize=null;break}return"string"}function e(a,b){for(var c=0;a.length>c;++c)CodeMirror.defineMIME(a[c],b)}var b="auto if break int case long char register continue return default short do sizeof double static else struct entry switch extern typedef float union for unsigned goto while enum void const signed volatile";e(["text/x-csrc","text/x-c","text/x-chdr"],{name:"clike",keywords:a(b),blockKeywords:a("case do else for if switch while struct"),atoms:a("null"),hooks:{"#":c}}),e(["text/x-c++src","text/x-c++hdr"],{name:"clike",keywords:a(b+" asm dynamic_cast namespace reinterpret_cast try bool explicit new "+"static_cast typeid catch operator template typename class friend private "+"this using const_cast inline public throw virtual delete mutable protected "+"wchar_t"),blockKeywords:a("catch class do else finally for if struct switch try while"),atoms:a("true false null"),hooks:{"#":c}}),CodeMirror.defineMIME("text/x-java",{name:"clike",keywords:a("abstract assert boolean break byte case catch char class const continue default do double else enum extends final finally float for goto if implements import instanceof int interface long native new package private protected public return short static strictfp super switch synchronized this throw throws transient try void volatile while"),blockKeywords:a("catch class do else finally for if switch try while"),atoms:a("true false null"),hooks:{"@":function(a){return a.eatWhile(/[\w\$_]/),"meta"}}}),CodeMirror.defineMIME("text/x-csharp",{name:"clike",keywords:a("abstract as base break case catch checked class const continue default delegate do else enum event explicit extern finally fixed for foreach goto if implicit in interface internal is lock namespace new operator out override params private protected public readonly ref return sealed sizeof stackalloc static struct switch this throw try typeof unchecked unsafe using virtual void volatile while add alias ascending descending dynamic from get global group into join let orderby partial remove select set value var yield"),blockKeywords:a("catch class do else finally for foreach if struct switch try while"),builtin:a("Boolean Byte Char DateTime DateTimeOffset Decimal Double Guid Int16 Int32 Int64 Object SByte Single String TimeSpan UInt16 UInt32 UInt64 bool byte char decimal double short int long object sbyte float string ushort uint ulong"),atoms:a("true false null"),hooks:{"@":function(a,b){return a.eat('"')?(b.tokenize=d,d(a,b)):(a.eatWhile(/[\w\$_]/),"meta")}}}),CodeMirror.defineMIME("text/x-scala",{name:"clike",keywords:a("abstract case catch class def do else extends false final finally for forSome if implicit import lazy match new null object override package private protected return sealed super this throw trait try trye type val var while with yield _ : = => <- <: <% >: # @ assert assume require print println printf readLine readBoolean readByte readShort readChar readInt readLong readFloat readDouble AnyVal App Application Array BufferedIterator BigDecimal BigInt Char Console Either Enumeration Equiv Error Exception Fractional Function IndexedSeq Integral Iterable Iterator List Map Numeric Nil NotNull Option Ordered Ordering PartialFunction PartialOrdering Product Proxy Range Responder Seq Serializable Set Specializable Stream StringBuilder StringContext Symbol Throwable Traversable TraversableOnce Tuple Unit Vector :: #:: Boolean Byte Character CharSequence Class ClassLoader Cloneable Comparable Compiler Double Exception Float Integer Long Math Number Object Package Pair Process Runtime Runnable SecurityManager Short StackTraceElement StrictMath String StringBuffer System Thread ThreadGroup ThreadLocal Throwable Triple Void"),blockKeywords:a("catch class do else finally for forSome if match switch try while"),atoms:a("true false null"),hooks:{"@":function(a){return a.eatWhile(/[\w\$_]/),"meta"}}}),e(["x-shader/x-vertex","x-shader/x-fragment"],{name:"clike",keywords:a("float int bool void vec2 vec3 vec4 ivec2 ivec3 ivec4 bvec2 bvec3 bvec4 mat2 mat3 mat4 sampler1D sampler2D sampler3D samplerCube sampler1DShadow sampler2DShadowconst attribute uniform varying break continue discard return for while do if else struct in out inout"),blockKeywords:a("for while do if else struct"),builtin:a("radians degrees sin cos tan asin acos atan pow exp log exp2 sqrt inversesqrt abs sign floor ceil fract mod min max clamp mix step smootstep length distance dot cross normalize ftransform faceforward reflect refract matrixCompMult lessThan lessThanEqual greaterThan greaterThanEqual equal notEqual any all not texture1D texture1DProj texture1DLod texture1DProjLod texture2D texture2DProj texture2DLod texture2DProjLod texture3D texture3DProj texture3DLod texture3DProjLod textureCube textureCubeLod shadow1D shadow2D shadow1DProj shadow2DProj shadow1DLod shadow2DLod shadow1DProjLod shadow2DProjLod dFdx dFdy fwidth noise1 noise2 noise3 noise4"),atoms:a("true false gl_FragColor gl_SecondaryColor gl_Normal gl_Vertex gl_MultiTexCoord0 gl_MultiTexCoord1 gl_MultiTexCoord2 gl_MultiTexCoord3 gl_MultiTexCoord4 gl_MultiTexCoord5 gl_MultiTexCoord6 gl_MultiTexCoord7 gl_FogCoord gl_Position gl_PointSize gl_ClipVertex gl_FrontColor gl_BackColor gl_FrontSecondaryColor gl_BackSecondaryColor gl_TexCoord gl_FogFragCoord gl_FragCoord gl_FrontFacing gl_FragColor gl_FragData gl_FragDepth gl_ModelViewMatrix gl_ProjectionMatrix gl_ModelViewProjectionMatrix gl_TextureMatrix gl_NormalMatrix gl_ModelViewMatrixInverse gl_ProjectionMatrixInverse gl_ModelViewProjectionMatrixInverse gl_TexureMatrixTranspose gl_ModelViewMatrixInverseTranspose gl_ProjectionMatrixInverseTranspose gl_ModelViewProjectionMatrixInverseTranspose gl_TextureMatrixInverseTranspose gl_NormalScale gl_DepthRange gl_ClipPlane gl_Point gl_FrontMaterial gl_BackMaterial gl_LightSource gl_LightModel gl_FrontLightModelProduct gl_BackLightModelProduct gl_TextureColor gl_EyePlaneS gl_EyePlaneT gl_EyePlaneR gl_EyePlaneQ gl_FogParameters gl_MaxLights gl_MaxClipPlanes gl_MaxTextureUnits gl_MaxTextureCoords gl_MaxVertexAttribs gl_MaxVertexUniformComponents gl_MaxVaryingFloats gl_MaxVertexTextureImageUnits gl_MaxTextureImageUnits gl_MaxFragmentUniformComponents gl_MaxCombineTextureImageUnits gl_MaxDrawBuffers"),hooks:{"#":c}})}(),CodeMirror.defineMode("clojure",function(){function j(a){for(var b={},c=a.split(" "),d=0;c.length>d;++d)b[c[d]]=!0;return b}function p(a,b,c){this.indent=a,this.type=b,this.prev=c}function q(a,b,c){a.indentStack=new p(b,c,a.indentStack)}function r(a){a.indentStack=a.indentStack.prev}function s(a,b){return"0"===a&&b.eat(/x/i)?(b.eatWhile(o.hex),!0):("+"!=a&&"-"!=a||!o.digit.test(b.peek())||(b.eat(o.sign),a=b.next()),o.digit.test(a)?(b.eat(a),b.eatWhile(o.digit),"."==b.peek()&&(b.eat("."),b.eatWhile(o.digit)),b.eat(o.exponent)&&(b.eat(o.sign),b.eatWhile(o.digit)),!0):!1)}function t(a){var b=a.next();b.match(/[a-z]/)&&a.match(/[a-z]+/,!0)||"u"===b&&a.match(/[0-9a-z]{4}/i,!0)}var a="builtin",b="comment",c="string",d="string-2",e="atom",f="number",g="bracket",h="keyword",i=2,k=j("true false nil"),l=j("defn defn- def def- defonce defmulti defmethod defmacro defstruct deftype defprotocol defrecord defproject deftest slice defalias defhinted defmacro- defn-memo defnk defnk defonce- defunbound defunbound- defvar defvar- let letfn do case cond condp for loop recur when when-not when-let when-first if if-let if-not . .. -> ->> doto and or dosync doseq dotimes dorun doall load import unimport ns in-ns refer try catch finally throw with-open with-local-vars binding gen-class gen-and-load-class gen-and-save-class handler-case handle"),m=j("* *' *1 *2 *3 *agent* *allow-unresolved-vars* *assert* *clojure-version* *command-line-args* *compile-files* *compile-path* *compiler-options* *data-readers* *e *err* *file* *flush-on-newline* *fn-loader* *in* *math-context* *ns* *out* *print-dup* *print-length* *print-level* *print-meta* *print-readably* *read-eval* *source-path* *unchecked-math* *use-context-classloader* *verbose-defrecords* *warn-on-reflection* + +' - -' -> ->> ->ArrayChunk ->Vec ->VecNode ->VecSeq -cache-protocol-fn -reset-methods .. / < <= = == > >= EMPTY-NODE accessor aclone add-classpath add-watch agent agent-error agent-errors aget alength alias all-ns alter alter-meta! alter-var-root amap ancestors and apply areduce array-map aset aset-boolean aset-byte aset-char aset-double aset-float aset-int aset-long aset-short assert assoc assoc! assoc-in associative? atom await await-for await1 bases bean bigdec bigint biginteger binding bit-and bit-and-not bit-clear bit-flip bit-not bit-or bit-set bit-shift-left bit-shift-right bit-test bit-xor boolean boolean-array booleans bound-fn bound-fn* bound? butlast byte byte-array bytes case cast char char-array char-escape-string char-name-string char? chars chunk chunk-append chunk-buffer chunk-cons chunk-first chunk-next chunk-rest chunked-seq? class class? clear-agent-errors clojure-version coll? comment commute comp comparator compare compare-and-set! compile complement concat cond condp conj conj! cons constantly construct-proxy contains? count counted? create-ns create-struct cycle dec dec' decimal? declare default-data-readers definline definterface defmacro defmethod defmulti defn defn- defonce defprotocol defrecord defstruct deftype delay delay? deliver denominator deref derive descendants destructure disj disj! dissoc dissoc! distinct distinct? doall dorun doseq dosync dotimes doto double double-array doubles drop drop-last drop-while empty empty? ensure enumeration-seq error-handler error-mode eval even? every-pred every? ex-data ex-info extend extend-protocol extend-type extenders extends? false? ffirst file-seq filter filterv find find-keyword find-ns find-protocol-impl find-protocol-method find-var first flatten float float-array float? floats flush fn fn? fnext fnil for force format frequencies future future-call future-cancel future-cancelled? future-done? future? gen-class gen-interface gensym get get-in get-method get-proxy-class get-thread-bindings get-validator group-by hash hash-combine hash-map hash-set identical? identity if-let if-not ifn? import in-ns inc inc' init-proxy instance? int int-array integer? interleave intern interpose into into-array ints io! isa? iterate iterator-seq juxt keep keep-indexed key keys keyword keyword? last lazy-cat lazy-seq let letfn line-seq list list* list? load load-file load-reader load-string loaded-libs locking long long-array longs loop macroexpand macroexpand-1 make-array make-hierarchy map map-indexed map? mapcat mapv max max-key memfn memoize merge merge-with meta method-sig methods min min-key mod munge name namespace namespace-munge neg? newline next nfirst nil? nnext not not-any? not-empty not-every? not= ns ns-aliases ns-imports ns-interns ns-map ns-name ns-publics ns-refers ns-resolve ns-unalias ns-unmap nth nthnext nthrest num number? numerator object-array odd? or parents partial partition partition-all partition-by pcalls peek persistent! pmap pop pop! pop-thread-bindings pos? pr pr-str prefer-method prefers primitives-classnames print print-ctor print-dup print-method print-simple print-str printf println println-str prn prn-str promise proxy proxy-call-with-super proxy-mappings proxy-name proxy-super push-thread-bindings pvalues quot rand rand-int rand-nth range ratio? rational? rationalize re-find re-groups re-matcher re-matches re-pattern re-seq read read-line read-string realized? reduce reduce-kv reductions ref ref-history-count ref-max-history ref-min-history ref-set refer refer-clojure reify release-pending-sends rem remove remove-all-methods remove-method remove-ns remove-watch repeat repeatedly replace replicate require reset! reset-meta! resolve rest restart-agent resultset-seq reverse reversible? rseq rsubseq satisfies? second select-keys send send-off seq seq? seque sequence sequential? set set-error-handler! set-error-mode! set-validator! set? short short-array shorts shuffle shutdown-agents slurp some some-fn sort sort-by sorted-map sorted-map-by sorted-set sorted-set-by sorted? special-symbol? spit split-at split-with str string? struct struct-map subs subseq subvec supers swap! symbol symbol? sync take take-last take-nth take-while test the-ns thread-bound? time to-array to-array-2d trampoline transient tree-seq true? type unchecked-add unchecked-add-int unchecked-byte unchecked-char unchecked-dec unchecked-dec-int unchecked-divide-int unchecked-double unchecked-float unchecked-inc unchecked-inc-int unchecked-int unchecked-long unchecked-multiply unchecked-multiply-int unchecked-negate unchecked-negate-int unchecked-remainder-int unchecked-short unchecked-subtract unchecked-subtract-int underive unquote unquote-splicing update-in update-proxy use val vals var-get var-set var? vary-meta vec vector vector-of vector? when when-first when-let when-not while with-bindings with-bindings* with-in-str with-loading-context with-local-vars with-meta with-open with-out-str with-precision with-redefs with-redefs-fn xml-seq zero? zipmap *default-data-reader-fn* as-> cond-> cond->> reduced reduced? send-via set-agent-send-executor! set-agent-send-off-executor! some-> some->>"),n=j("ns fn def defn defmethod bound-fn if if-not case condp when while when-not when-first do future comment doto locking proxy with-open with-precision reify deftype defrecord defprotocol extend extend-protocol extend-type try catch let letfn binding loop for doseq dotimes when-let if-let defstruct struct-map assoc testing deftest handler-case handle dotrace deftrace"),o={digit:/\d/,digit_or_colon:/[\d:]/,hex:/[0-9a-f]/i,sign:/[+-]/,exponent:/e/i,keyword_char:/[^\s\(\[\;\)\]]/,symbol:/[\w*+!\-\._?:\/]/};return{startState:function(){return{indentStack:null,indentation:0,mode:!1}},token:function(j,p){if(null==p.indentStack&&j.sol()&&(p.indentation=j.indentation()),j.eatSpace())return null;var u=null;switch(p.mode){case"string":for(var v,w=!1;null!=(v=j.next());){if('"'==v&&!w){p.mode=!1;break}w=!w&&"\\"==v}u=c;break;default:var x=j.next();if('"'==x)p.mode="string",u=c;else if("\\"==x)t(j),u=d;else if("'"!=x||o.digit_or_colon.test(j.peek()))if(";"==x)j.skipToEnd(),u=b;else if(s(x,j))u=f;else if("("==x||"["==x||"{"==x){var A,y="",z=j.column();if("("==x)for(;null!=(A=j.eat(o.keyword_char));)y+=A;y.length>0&&(n.propertyIsEnumerable(y)||/^(?:def|with)/.test(y))?q(p,z+i,x):(j.eatSpace(),j.eol()||";"==j.peek()?q(p,z+1,x):q(p,z+j.current().length,x)),j.backUp(j.current().length-1),u=g}else if(")"==x||"]"==x||"}"==x)u=g,null!=p.indentStack&&p.indentStack.type==(")"==x?"(":"]"==x?"[":"{")&&r(p);else{if(":"==x)return j.eatWhile(o.symbol),e;j.eatWhile(o.symbol),u=l&&l.propertyIsEnumerable(j.current())?h:m&&m.propertyIsEnumerable(j.current())?a:k&&k.propertyIsEnumerable(j.current())?e:null}else u=e}return u},indent:function(a){return null==a.indentStack?a.indentation:a.indentStack.indent},lineComment:";;"}}),CodeMirror.defineMIME("text/x-clojure","clojure"),CodeMirror.defineMode("cobol",function(){function j(a){for(var b={},c=a.split(" "),d=0;c.length>d;++d)b[c[d]]=!0;return b}function o(a,b){return"0"===a&&b.eat(/x/i)?(b.eatWhile(n.hex),!0):("+"!=a&&"-"!=a||!n.digit.test(b.peek())||(b.eat(n.sign),a=b.next()),n.digit.test(a)?(b.eat(a),b.eatWhile(n.digit),"."==b.peek()&&(b.eat("."),b.eatWhile(n.digit)),b.eat(n.exponent)&&(b.eat(n.sign),b.eatWhile(n.digit)),!0):!1)}var a="builtin",b="comment",c="string",d="atom",e="number",f="keyword",g="header",h="def",i="link",k=j("TRUE FALSE ZEROES ZEROS ZERO SPACES SPACE LOW-VALUE LOW-VALUES "),l=j("ACCEPT ACCESS ACQUIRE ADD ADDRESS ADVANCING AFTER ALIAS ALL ALPHABET ALPHABETIC ALPHABETIC-LOWER ALPHABETIC-UPPER ALPHANUMERIC ALPHANUMERIC-EDITED ALSO ALTER ALTERNATE AND ANY ARE AREA AREAS ARITHMETIC ASCENDING ASSIGN AT ATTRIBUTE AUTHOR AUTO AUTO-SKIP AUTOMATIC B-AND B-EXOR B-LESS B-NOT B-OR BACKGROUND-COLOR BACKGROUND-COLOUR BEEP BEFORE BELL BINARY BIT BITS BLANK BLINK BLOCK BOOLEAN BOTTOM BY CALL CANCEL CD CF CH CHARACTER CHARACTERS CLASS CLOCK-UNITS CLOSE COBOL CODE CODE-SET COL COLLATING COLUMN COMMA COMMIT COMMITMENT COMMON COMMUNICATION COMP COMP-0 COMP-1 COMP-2 COMP-3 COMP-4 COMP-5 COMP-6 COMP-7 COMP-8 COMP-9 COMPUTATIONAL COMPUTATIONAL-0 COMPUTATIONAL-1 COMPUTATIONAL-2 COMPUTATIONAL-3 COMPUTATIONAL-4 COMPUTATIONAL-5 COMPUTATIONAL-6 COMPUTATIONAL-7 COMPUTATIONAL-8 COMPUTATIONAL-9 COMPUTE CONFIGURATION CONNECT CONSOLE CONTAINED CONTAINS CONTENT CONTINUE CONTROL CONTROL-AREA CONTROLS CONVERTING COPY CORR CORRESPONDING COUNT CRT CRT-UNDER CURRENCY CURRENT CURSOR DATA DATE DATE-COMPILED DATE-WRITTEN DAY DAY-OF-WEEK DB DB-ACCESS-CONTROL-KEY DB-DATA-NAME DB-EXCEPTION DB-FORMAT-NAME DB-RECORD-NAME DB-SET-NAME DB-STATUS DBCS DBCS-EDITED DE DEBUG-CONTENTS DEBUG-ITEM DEBUG-LINE DEBUG-NAME DEBUG-SUB-1 DEBUG-SUB-2 DEBUG-SUB-3 DEBUGGING DECIMAL-POINT DECLARATIVES DEFAULT DELETE DELIMITED DELIMITER DEPENDING DESCENDING DESCRIBED DESTINATION DETAIL DISABLE DISCONNECT DISPLAY DISPLAY-1 DISPLAY-2 DISPLAY-3 DISPLAY-4 DISPLAY-5 DISPLAY-6 DISPLAY-7 DISPLAY-8 DISPLAY-9 DIVIDE DIVISION DOWN DROP DUPLICATE DUPLICATES DYNAMIC EBCDIC EGI EJECT ELSE EMI EMPTY EMPTY-CHECK ENABLE END END. END-ACCEPT END-ACCEPT. END-ADD END-CALL END-COMPUTE END-DELETE END-DISPLAY END-DIVIDE END-EVALUATE END-IF END-INVOKE END-MULTIPLY END-OF-PAGE END-PERFORM END-READ END-RECEIVE END-RETURN END-REWRITE END-SEARCH END-START END-STRING END-SUBTRACT END-UNSTRING END-WRITE END-XML ENTER ENTRY ENVIRONMENT EOP EQUAL EQUALS ERASE ERROR ESI EVALUATE EVERY EXCEEDS EXCEPTION EXCLUSIVE EXIT EXTEND EXTERNAL EXTERNALLY-DESCRIBED-KEY FD FETCH FILE FILE-CONTROL FILE-STREAM FILES FILLER FINAL FIND FINISH FIRST FOOTING FOR FOREGROUND-COLOR FOREGROUND-COLOUR FORMAT FREE FROM FULL FUNCTION GENERATE GET GIVING GLOBAL GO GOBACK GREATER GROUP HEADING HIGH-VALUE HIGH-VALUES HIGHLIGHT I-O I-O-CONTROL ID IDENTIFICATION IF IN INDEX INDEX-1 INDEX-2 INDEX-3 INDEX-4 INDEX-5 INDEX-6 INDEX-7 INDEX-8 INDEX-9 INDEXED INDIC INDICATE INDICATOR INDICATORS INITIAL INITIALIZE INITIATE INPUT INPUT-OUTPUT INSPECT INSTALLATION INTO INVALID INVOKE IS JUST JUSTIFIED KANJI KEEP KEY LABEL LAST LD LEADING LEFT LEFT-JUSTIFY LENGTH LENGTH-CHECK LESS LIBRARY LIKE LIMIT LIMITS LINAGE LINAGE-COUNTER LINE LINE-COUNTER LINES LINKAGE LOCAL-STORAGE LOCALE LOCALLY LOCK MEMBER MEMORY MERGE MESSAGE METACLASS MODE MODIFIED MODIFY MODULES MOVE MULTIPLE MULTIPLY NATIONAL NATIVE NEGATIVE NEXT NO NO-ECHO NONE NOT NULL NULL-KEY-MAP NULL-MAP NULLS NUMBER NUMERIC NUMERIC-EDITED OBJECT OBJECT-COMPUTER OCCURS OF OFF OMITTED ON ONLY OPEN OPTIONAL OR ORDER ORGANIZATION OTHER OUTPUT OVERFLOW OWNER PACKED-DECIMAL PADDING PAGE PAGE-COUNTER PARSE PERFORM PF PH PIC PICTURE PLUS POINTER POSITION POSITIVE PREFIX PRESENT PRINTING PRIOR PROCEDURE PROCEDURE-POINTER PROCEDURES PROCEED PROCESS PROCESSING PROGRAM PROGRAM-ID PROMPT PROTECTED PURGE QUEUE QUOTE QUOTES RANDOM RD READ READY REALM RECEIVE RECONNECT RECORD RECORD-NAME RECORDS RECURSIVE REDEFINES REEL REFERENCE REFERENCE-MONITOR REFERENCES RELATION RELATIVE RELEASE REMAINDER REMOVAL RENAMES REPEATED REPLACE REPLACING REPORT REPORTING REPORTS REPOSITORY REQUIRED RERUN RESERVE RESET RETAINING RETRIEVAL RETURN RETURN-CODE RETURNING REVERSE-VIDEO REVERSED REWIND REWRITE RF RH RIGHT RIGHT-JUSTIFY ROLLBACK ROLLING ROUNDED RUN SAME SCREEN SD SEARCH SECTION SECURE SECURITY SEGMENT SEGMENT-LIMIT SELECT SEND SENTENCE SEPARATE SEQUENCE SEQUENTIAL SET SHARED SIGN SIZE SKIP1 SKIP2 SKIP3 SORT SORT-MERGE SORT-RETURN SOURCE SOURCE-COMPUTER SPACE-FILL SPECIAL-NAMES STANDARD STANDARD-1 STANDARD-2 START STARTING STATUS STOP STORE STRING SUB-QUEUE-1 SUB-QUEUE-2 SUB-QUEUE-3 SUB-SCHEMA SUBFILE SUBSTITUTE SUBTRACT SUM SUPPRESS SYMBOLIC SYNC SYNCHRONIZED SYSIN SYSOUT TABLE TALLYING TAPE TENANT TERMINAL TERMINATE TEST TEXT THAN THEN THROUGH THRU TIME TIMES TITLE TO TOP TRAILING TRAILING-SIGN TRANSACTION TYPE TYPEDEF UNDERLINE UNEQUAL UNIT UNSTRING UNTIL UP UPDATE UPON USAGE USAGE-MODE USE USING VALID VALIDATE VALUE VALUES VARYING VLR WAIT WHEN WHEN-COMPILED WITH WITHIN WORDS WORKING-STORAGE WRITE XML XML-CODE XML-EVENT XML-NTEXT XML-TEXT ZERO ZERO-FILL "),m=j("- * ** / + < <= = > >= "),n={digit:/\d/,digit_or_colon:/[\d:]/,hex:/[0-9a-f]/i,sign:/[+-]/,exponent:/e/i,keyword_char:/[^\s\(\[\;\)\]]/,symbol:/[\w*+\-]/};+return{startState:function(){return{indentStack:null,indentation:0,mode:!1}},token:function(j,p){if(null==p.indentStack&&j.sol()&&(p.indentation=6),j.eatSpace())return null;var q=null;switch(p.mode){case"string":for(var r=!1;null!=(r=j.next());)if('"'==r||"'"==r){p.mode=!1;break}q=c;break;default:var s=j.next(),t=j.column();if(t>=0&&5>=t)q=h;else if(t>=72&&79>=t)j.skipToEnd(),q=g;else if("*"==s&&6==t)j.skipToEnd(),q=b;else if('"'==s||"'"==s)p.mode="string",q=c;else if("'"!=s||n.digit_or_colon.test(j.peek()))if("."==s)q=i;else if(o(s,j))q=e;else{if(j.current().match(n.symbol))for(;71>t&&void 0!==j.eat(n.symbol);)t++;q=l&&l.propertyIsEnumerable(j.current().toUpperCase())?f:m&&m.propertyIsEnumerable(j.current().toUpperCase())?a:k&&k.propertyIsEnumerable(j.current().toUpperCase())?d:null}else q=d}return q},indent:function(a){return null==a.indentStack?a.indentation:a.indentStack.indent}}}),CodeMirror.defineMIME("text/x-cobol","cobol"),CodeMirror.defineMode("coffeescript",function(a){function c(a){return RegExp("^(("+a.join(")|(")+"))\\b")}function s(a,c){if(a.sol()){var l=c.scopes[0].offset;if(a.eatSpace()){var m=a.indentation();return m>l?"indent":l>m?"dedent":null}l>0&&w(a,c)}if(a.eatSpace())return null;var q=a.peek();if(a.match("####"))return a.skipToEnd(),"comment";if(a.match("###"))return c.tokenize=u,c.tokenize(a,c);if("#"===q)return a.skipToEnd(),"comment";if(a.match(/^-?[0-9\.]/,!1)){var s=!1;if(a.match(/^-?\d*\.\d+(e[\+\-]?\d+)?/i)&&(s=!0),a.match(/^-?\d+\.\d*/)&&(s=!0),a.match(/^-?\.\d+/)&&(s=!0),s)return"."==a.peek()&&a.backUp(1),"number";var v=!1;if(a.match(/^-?0x[0-9a-f]+/i)&&(v=!0),a.match(/^-?[1-9]\d*(e[\+\-]?\d+)?/)&&(v=!0),a.match(/^-?0(?![\dx])/i)&&(v=!0),v)return"number"}if(a.match(o))return c.tokenize=t(a.current(),"string"),c.tokenize(a,c);if(a.match(p)){if("/"!=a.current()||a.match(/^.*\//,!1))return c.tokenize=t(a.current(),"string-2"),c.tokenize(a,c);a.backUp(1)}return a.match(h)||a.match(g)?"punctuation":a.match(f)||a.match(d)||a.match(k)?"operator":a.match(e)?"punctuation":a.match(r)?"atom":a.match(n)?"keyword":a.match(i)?"variable":a.match(j)?"property":(a.next(),b)}function t(c,d){var e=1==c.length;return function(f,g){for(;!f.eol();)if(f.eatWhile(/[^'"\/\\]/),f.eat("\\")){if(f.next(),e&&f.eol())return d}else{if(f.match(c))return g.tokenize=s,d;f.eat(/['"\/]/)}return e&&(a.mode.singleLineStringErrors?d=b:g.tokenize=s),d}}function u(a,b){for(;!a.eol();){if(a.eatWhile(/[^#]/),a.match("###")){b.tokenize=s;break}a.eatWhile("#")}return"comment"}function v(b,c,d){d=d||"coffee";var e=0;if("coffee"===d){for(var f=0;c.scopes.length>f;f++)if("coffee"===c.scopes[f].type){e=c.scopes[f].offset+a.indentUnit;break}}else e=b.column()+b.current().length;c.scopes.unshift({offset:e,type:d})}function w(a,b){if(1!=b.scopes.length){if("coffee"===b.scopes[0].type){for(var c=a.indentation(),d=-1,e=0;b.scopes.length>e;++e)if(c===b.scopes[e].offset){d=e;break}if(-1===d)return!0;for(;b.scopes[0].offset!==c;)b.scopes.shift();return!1}return b.scopes.shift(),!1}}function x(a,c){var d=c.tokenize(a,c),e=a.current();if("."===e)return d=c.tokenize(a,c),e=a.current(),"variable"===d?"variable":b;"return"===e&&(c.dedent+=1),("->"!==e&&"=>"!==e||c.lambda||"coffee"!=c.scopes[0].type||""!==a.peek())&&"indent"!==d||v(a,c);var f="[({".indexOf(e);return-1!==f&&v(a,c,"])}".slice(f,f+1)),l.exec(e)&&v(a,c),"then"==e&&w(a,c),"dedent"===d&&w(a,c)?b:(f="])}".indexOf(e),-1!==f&&w(a,c)?b:(c.dedent>0&&a.eol()&&"coffee"==c.scopes[0].type&&(c.scopes.length>1&&c.scopes.shift(),c.dedent-=1),d))}var b="error",d=RegExp("^[\\+\\-\\*/%&|\\^~<>!?]"),e=RegExp("^[\\(\\)\\[\\]\\{\\},:`=;\\.]"),f=RegExp("^((->)|(=>)|(\\+\\+)|(\\+\\=)|(\\-\\-)|(\\-\\=)|(\\*\\*)|(\\*\\=)|(\\/\\/)|(\\/\\=)|(==)|(!=)|(<=)|(>=)|(<>)|(<<)|(>>)|(//))"),g=RegExp("^((\\.\\.)|(\\+=)|(\\-=)|(\\*=)|(%=)|(/=)|(&=)|(\\|=)|(\\^=))"),h=RegExp("^((\\.\\.\\.)|(//=)|(>>=)|(<<=)|(\\*\\*=))"),i=RegExp("^[_A-Za-z$][_A-Za-z$0-9]*"),j=RegExp("^(@|this.)[_A-Za-z$][_A-Za-z$0-9]*"),k=c(["and","or","not","is","isnt","in","instanceof","typeof"]),l=["for","while","loop","if","unless","else","switch","try","catch","finally","class"],m=["break","by","continue","debugger","delete","do","in","of","new","return","then","this","throw","when","until"],n=c(l.concat(m));l=c(l);var o=RegExp("^('{3}|\"{3}|['\"])"),p=RegExp("^(/{3}|/)"),q=["Infinity","NaN","undefined","null","true","false","on","off","yes","no"],r=c(q),y={startState:function(a){return{tokenize:s,scopes:[{offset:a||0,type:"coffee"}],lastToken:null,lambda:!1,dedent:0}},token:function(a,b){var c=x(a,b);return b.lastToken={style:c,content:a.current()},a.eol()&&a.lambda&&(b.lambda=!1),c},indent:function(a){return a.tokenize!=s?0:a.scopes[0].offset},lineComment:"#"};return y}),CodeMirror.defineMIME("text/x-coffeescript","coffeescript"),CodeMirror.defineMode("commonlisp",function(a){function f(a){for(var b;b=a.next();)if("\\"==b)a.next();else if(!d.test(b)){a.backUp(1);break}return a.current()}function g(a,b){if(a.eatSpace())return e="ws",null;if(a.match(c))return"number";var d=a.next();if("\\"==d&&(d=a.next()),'"'==d)return(b.tokenize=h)(a,b);if("("==d)return e="open","bracket";if(")"==d||"]"==d)return e="close","bracket";if(";"==d)return a.skipToEnd(),e="ws","comment";if(/['`,@]/.test(d))return null;if("|"==d)return a.skipTo("|")?(a.next(),"symbol"):(a.skipToEnd(),"error");if("#"==d){var d=a.next();return"["==d?(e="open","bracket"):/[+\-=\.']/.test(d)?null:/\d/.test(d)&&a.match(/^\d*#/)?null:"|"==d?(b.tokenize=i)(a,b):":"==d?(f(a),"meta"):"error"}var g=f(a);return"."==g?null:(e="symbol","nil"==g||"t"==g?"atom":":"==g.charAt(0)?"keyword":"&"==g.charAt(0)?"variable-2":"variable")}function h(a,b){for(var d,c=!1;d=a.next();){if('"'==d&&!c){b.tokenize=g;break}c=!c&&"\\"==d}return"string"}function i(a,b){for(var c,d;c=a.next();){if("#"==c&&"|"==d){b.tokenize=g;break}d=c}return e="ws","comment"}var e,b=/^with|^def|^do|^prog|case$|^cond$|bind$|when$|unless$/,c=/^(?:[+\-]?(?:\d+|\d*\.\d+)(?:[efd][+\-]?\d+)?|[+\-]?\d+(?:\/[+\-]?\d+)?|#b[+\-]?[01]+|#o[+\-]?[0-7]+|#x[+\-]?[\da-f]+)/,d=/[^\s'`,@()\[\]";]/;return{startState:function(){return{ctx:{prev:null,start:0,indentTo:0},tokenize:g}},token:function(c,d){c.sol()&&"number"!=typeof d.ctx.indentTo&&(d.ctx.indentTo=d.ctx.start+1),e=null;var f=d.tokenize(c,d);return"ws"!=e&&(null==d.ctx.indentTo?d.ctx.indentTo="symbol"==e&&b.test(c.current())?d.ctx.start+a.indentUnit:"next":"next"==d.ctx.indentTo&&(d.ctx.indentTo=c.column())),"open"==e?d.ctx={prev:d.ctx,start:c.column(),indentTo:null}:"close"==e&&(d.ctx=d.ctx.prev||d.ctx),f},indent:function(a){var c=a.ctx.indentTo;return"number"==typeof c?c:a.ctx.start+1},lineComment:";;",blockCommentStart:"#|",blockCommentEnd:"|#"}}),CodeMirror.defineMIME("text/x-common-lisp","commonlisp"),CodeMirror.defineMode("css",function(a){return CodeMirror.getMode(a,"text/css")}),CodeMirror.defineMode("css-base",function(a,b){"use strict";function l(a,b){return k=b,a}function m(a,b){var c=a.next();if(d[c]){var e=d[c](a,b);if(e!==!1)return e}if("@"==c)return a.eatWhile(/[\w\\\-]/),l("def",a.current());if("="==c)l(null,"compare");else{if(("~"==c||"|"==c)&&a.eat("="))return l(null,"compare");if('"'==c||"'"==c)return b.tokenize=n(c),b.tokenize(a,b);if("#"==c)return a.eatWhile(/[\w\\\-]/),l("atom","hash");if("!"==c)return a.match(/^\s*\w*/),l("keyword","important");if(/\d/.test(c))return a.eatWhile(/[\w.%]/),l("number","unit");if("-"!==c)return/[,+>*\/]/.test(c)?l(null,"select-op"):"."==c&&a.match(/^-?[_a-z][_a-z0-9-]*/i)?l("qualifier","qualifier"):":"==c?l("operator",c):/[;{}\[\]\(\)]/.test(c)?l(null,c):"u"==c&&a.match("rl(")?(a.backUp(1),b.tokenize=o,l("property","variable")):(a.eatWhile(/[\w\\\-]/),l("property","variable"));if(/\d/.test(a.peek()))return a.eatWhile(/[\w.%]/),l("number","unit");if(a.match(/^[^-]+-/))return l("meta","meta")}}function n(a,b){return function(c,d){for(var f,e=!1;null!=(f=c.next())&&(f!=a||e);)e=!e&&"\\"==f;return e||(b&&c.backUp(1),d.tokenize=m),l("string","string")}}function o(a,b){return a.next(),b.tokenize=a.match(/\s*[\"\']/,!1)?m:n(")",!0),l(null,"(")}var c=a.indentUnit,d=b.hooks||{},e=b.atMediaTypes||{},f=b.atMediaFeatures||{},g=b.propertyKeywords||{},h=b.colorKeywords||{},i=b.valueKeywords||{},j=!!b.allowNested,k=null;return{startState:function(a){return{tokenize:m,baseIndent:a||0,stack:[]}},token:function(a,b){if(b.tokenize=b.tokenize||m,b.tokenize==m&&a.eatSpace())return null;var c=b.tokenize(a,b);c&&"string"!=typeof c&&(c=l(c[0],c[1]));var d=b.stack[b.stack.length-1];if("variable"==c)return"variable-definition"==k&&b.stack.push("propertyValue"),"variable-2";if("property"==c){var n=a.current().toLowerCase();"propertyValue"==d?c=i.hasOwnProperty(n)?"string-2":h.hasOwnProperty(n)?"keyword":"variable-2":"rule"==d?g.hasOwnProperty(n)||(c+=" error"):"block"==d?c=g.hasOwnProperty(n)?"property":h.hasOwnProperty(n)?"keyword":i.hasOwnProperty(n)?"string-2":"tag":d&&"@media{"!=d?"@media"==d?c=e[a.current()]?"attribute":/^(only|not)$/.test(n)?"keyword":"and"==n?"error":f.hasOwnProperty(n)?"error":"attribute error":"@mediaType"==d?c=e.hasOwnProperty(n)?"attribute":"and"==n?"operator":/^(only|not)$/.test(n)?"error":"error":"@mediaType("==d?g.hasOwnProperty(n)||(e.hasOwnProperty(n)?c="error":"and"==n?c="operator":/^(only|not)$/.test(n)?c="error":c+=" error"):c="@import"==d?"tag":"error":c="tag"}else"atom"==c?d&&"@media{"!=d&&"block"!=d?"propertyValue"==d?/^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/.test(a.current())||(c+=" error"):c="error":c="builtin":"@media"==d&&"{"==k&&(c="error");if("{"==k)if("@media"==d||"@mediaType"==d)b.stack.pop(),b.stack[b.stack.length-1]="@media{";else{var o=j?"block":"rule";b.stack.push(o)}else if("}"==k){var p=b.stack[b.stack.length-1];"interpolation"==p&&(c="operator"),b.stack.pop(),"propertyValue"==d&&b.stack.pop()}else"interpolation"==k?b.stack.push("interpolation"):"@media"==k?b.stack.push("@media"):"@import"==k?b.stack.push("@import"):"@media"==d&&/\b(keyword|attribute)\b/.test(c)?b.stack.push("@mediaType"):"@mediaType"==d&&","==a.current()?b.stack.pop():"@mediaType"==d&&"("==k?b.stack.push("@mediaType("):"@mediaType("==d&&")"==k?b.stack.pop():"rule"!=d&&"block"!=d||":"!=k?"propertyValue"==d&&";"==k?b.stack.pop():"@import"==d&&";"==k&&b.stack.pop():b.stack.push("propertyValue");return c},indent:function(a,b){var d=a.stack.length;return/^\}/.test(b)&&(d-="propertyValue"==a.stack[a.stack.length-1]?2:1),a.baseIndent+d*c},electricChars:"}",blockCommentStart:"/*",blockCommentEnd:"*/"}}),function(){function a(a){for(var b={},c=0;a.length>c;++c)b[a[c]]=!0;return b}function g(a,b){for(var d,c=!1;null!=(d=a.next());){if(c&&"/"==d){b.tokenize=null;break}c="*"==d}return["comment","comment"]}var b=a(["all","aural","braille","handheld","print","projection","screen","tty","tv","embossed"]),c=a(["width","min-width","max-width","height","min-height","max-height","device-width","min-device-width","max-device-width","device-height","min-device-height","max-device-height","aspect-ratio","min-aspect-ratio","max-aspect-ratio","device-aspect-ratio","min-device-aspect-ratio","max-device-aspect-ratio","color","min-color","max-color","color-index","min-color-index","max-color-index","monochrome","min-monochrome","max-monochrome","resolution","min-resolution","max-resolution","scan","grid"]),d=a(["align-content","align-items","align-self","alignment-adjust","alignment-baseline","anchor-point","animation","animation-delay","animation-direction","animation-duration","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","appearance","azimuth","backface-visibility","background","background-attachment","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","baseline-shift","binding","bleed","bookmark-label","bookmark-level","bookmark-state","bookmark-target","border","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","clear","clip","color","color-profile","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","content","counter-increment","counter-reset","crop","cue","cue-after","cue-before","cursor","direction","display","dominant-baseline","drop-initial-after-adjust","drop-initial-after-align","drop-initial-before-adjust","drop-initial-before-align","drop-initial-size","drop-initial-value","elevation","empty-cells","fit","fit-position","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","float-offset","font","font-feature-settings","font-family","font-kerning","font-language-override","font-size","font-size-adjust","font-stretch","font-style","font-synthesis","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-weight","grid-cell","grid-column","grid-column-align","grid-column-sizing","grid-column-span","grid-columns","grid-flow","grid-row","grid-row-align","grid-row-sizing","grid-row-span","grid-rows","grid-template","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","inline-box-align","justify-content","left","letter-spacing","line-break","line-height","line-stacking","line-stacking-ruby","line-stacking-shift","line-stacking-strategy","list-style","list-style-image","list-style-position","list-style-type","margin","margin-bottom","margin-left","margin-right","margin-top","marker-offset","marks","marquee-direction","marquee-loop","marquee-play-count","marquee-speed","marquee-style","max-height","max-width","min-height","min-width","move-to","nav-down","nav-index","nav-left","nav-right","nav-up","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-style","overflow-wrap","overflow-x","overflow-y","padding","padding-bottom","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","page-policy","pause","pause-after","pause-before","perspective","perspective-origin","pitch","pitch-range","play-during","position","presentation-level","punctuation-trim","quotes","rendering-intent","resize","rest","rest-after","rest-before","richness","right","rotation","rotation-point","ruby-align","ruby-overhang","ruby-position","ruby-span","size","speak","speak-as","speak-header","speak-numeral","speak-punctuation","speech-rate","stress","string-set","tab-size","table-layout","target","target-name","target-new","target-position","text-align","text-align-last","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-style","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-height","text-indent","text-justify","text-outline","text-shadow","text-space-collapse","text-transform","text-underline-position","text-wrap","top","transform","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","volume","white-space","widows","width","word-break","word-spacing","word-wrap","z-index","clip-path","clip-rule","mask","enable-background","filter","flood-color","flood-opacity","lighting-color","stop-color","stop-opacity","pointer-events","color-interpolation","color-interpolation-filters","color-profile","color-rendering","fill","fill-opacity","fill-rule","image-rendering","marker","marker-end","marker-mid","marker-start","shape-rendering","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","text-rendering","baseline-shift","dominant-baseline","glyph-orientation-horizontal","glyph-orientation-vertical","kerning","text-anchor","writing-mode"]),e=a(["aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen"]),f=a(["above","absolute","activeborder","activecaption","afar","after-white-space","ahead","alias","all","all-scroll","alternate","always","amharic","amharic-abegede","antialiased","appworkspace","arabic-indic","armenian","asterisks","auto","avoid","background","backwards","baseline","below","bidi-override","binary","bengali","blink","block","block-axis","bold","bolder","border","border-box","both","bottom","break-all","break-word","button","button-bevel","buttonface","buttonhighlight","buttonshadow","buttontext","cambodian","capitalize","caps-lock-indicator","caption","captiontext","caret","cell","center","checkbox","circle","cjk-earthly-branch","cjk-heavenly-stem","cjk-ideographic","clear","clip","close-quote","col-resize","collapse","compact","condensed","contain","content","content-box","context-menu","continuous","copy","cover","crop","cross","crosshair","currentcolor","cursive","dashed","decimal","decimal-leading-zero","default","default-button","destination-atop","destination-in","destination-out","destination-over","devanagari","disc","discard","document","dot-dash","dot-dot-dash","dotted","double","down","e-resize","ease","ease-in","ease-in-out","ease-out","element","ellipsis","embed","end","ethiopic","ethiopic-abegede","ethiopic-abegede-am-et","ethiopic-abegede-gez","ethiopic-abegede-ti-er","ethiopic-abegede-ti-et","ethiopic-halehame-aa-er","ethiopic-halehame-aa-et","ethiopic-halehame-am-et","ethiopic-halehame-gez","ethiopic-halehame-om-et","ethiopic-halehame-sid-et","ethiopic-halehame-so-et","ethiopic-halehame-ti-er","ethiopic-halehame-ti-et","ethiopic-halehame-tig","ew-resize","expanded","extra-condensed","extra-expanded","fantasy","fast","fill","fixed","flat","footnotes","forwards","from","geometricPrecision","georgian","graytext","groove","gujarati","gurmukhi","hand","hangul","hangul-consonant","hebrew","help","hidden","hide","higher","highlight","highlighttext","hiragana","hiragana-iroha","horizontal","hsl","hsla","icon","ignore","inactiveborder","inactivecaption","inactivecaptiontext","infinite","infobackground","infotext","inherit","initial","inline","inline-axis","inline-block","inline-table","inset","inside","intrinsic","invert","italic","justify","kannada","katakana","katakana-iroha","khmer","landscape","lao","large","larger","left","level","lighter","line-through","linear","lines","list-item","listbox","listitem","local","logical","loud","lower","lower-alpha","lower-armenian","lower-greek","lower-hexadecimal","lower-latin","lower-norwegian","lower-roman","lowercase","ltr","malayalam","match","media-controls-background","media-current-time-display","media-fullscreen-button","media-mute-button","media-play-button","media-return-to-realtime-button","media-rewind-button","media-seek-back-button","media-seek-forward-button","media-slider","media-sliderthumb","media-time-remaining-display","media-volume-slider","media-volume-slider-container","media-volume-sliderthumb","medium","menu","menulist","menulist-button","menulist-text","menulist-textfield","menutext","message-box","middle","min-intrinsic","mix","mongolian","monospace","move","multiple","myanmar","n-resize","narrower","ne-resize","nesw-resize","no-close-quote","no-drop","no-open-quote","no-repeat","none","normal","not-allowed","nowrap","ns-resize","nw-resize","nwse-resize","oblique","octal","open-quote","optimizeLegibility","optimizeSpeed","oriya","oromo","outset","outside","overlay","overline","padding","padding-box","painted","paused","persian","plus-darker","plus-lighter","pointer","portrait","pre","pre-line","pre-wrap","preserve-3d","progress","push-button","radio","read-only","read-write","read-write-plaintext-only","relative","repeat","repeat-x","repeat-y","reset","reverse","rgb","rgba","ridge","right","round","row-resize","rtl","run-in","running","s-resize","sans-serif","scroll","scrollbar","se-resize","searchfield","searchfield-cancel-button","searchfield-decoration","searchfield-results-button","searchfield-results-decoration","semi-condensed","semi-expanded","separate","serif","show","sidama","single","skip-white-space","slide","slider-horizontal","slider-vertical","sliderthumb-horizontal","sliderthumb-vertical","slow","small","small-caps","small-caption","smaller","solid","somali","source-atop","source-in","source-out","source-over","space","square","square-button","start","static","status-bar","stretch","stroke","sub","subpixel-antialiased","super","sw-resize","table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row","table-row-group","telugu","text","text-bottom","text-top","textarea","textfield","thai","thick","thin","threeddarkshadow","threedface","threedhighlight","threedlightshadow","threedshadow","tibetan","tigre","tigrinya-er","tigrinya-er-abegede","tigrinya-et","tigrinya-et-abegede","to","top","transparent","ultra-condensed","ultra-expanded","underline","up","upper-alpha","upper-armenian","upper-greek","upper-hexadecimal","upper-latin","upper-norwegian","upper-roman","uppercase","urdu","url","vertical","vertical-text","visible","visibleFill","visiblePainted","visibleStroke","visual","w-resize","wait","wave","wider","window","windowframe","windowtext","x-large","x-small","xor","xx-large","xx-small"]);CodeMirror.defineMIME("text/css",{atMediaTypes:b,atMediaFeatures:c,propertyKeywords:d,colorKeywords:e,valueKeywords:f,hooks:{"<":function(a,b){function c(a,b){for(var d,c=0;null!=(d=a.next());){if(c>=2&&">"==d){b.tokenize=null;break}c="-"==d?c+1:0}return["comment","comment"]}return a.eat("!")?(b.tokenize=c,c(a,b)):void 0},"/":function(a,b){return a.eat("*")?(b.tokenize=g,g(a,b)):!1}},name:"css-base"}),CodeMirror.defineMIME("text/x-scss",{atMediaTypes:b,atMediaFeatures:c,propertyKeywords:d,colorKeywords:e,valueKeywords:f,allowNested:!0,hooks:{$:function(a){return a.match(/^[\w-]+/),":"==a.peek()?["variable","variable-definition"]:["variable","variable"]},"/":function(a,b){return a.eat("/")?(a.skipToEnd(),["comment","comment"]):a.eat("*")?(b.tokenize=g,g(a,b)):["operator","operator"]},"#":function(a){return a.eat("{")?["operator","interpolation"]:(a.eatWhile(/[\w\\\-]/),["atom","hash"])}},name:"css-base"})}(),CodeMirror.defineMode("d",function(a,b){function m(a,b){var c=a.next();if(i[c]){var d=i[c](a,b);if(d!==!1)return d}if('"'==c||"'"==c||"`"==c)return b.tokenize=n(c),b.tokenize(a,b);if(/[\[\]{}\(\),;\:\.]/.test(c))return l=c,null;if(/\d/.test(c))return a.eatWhile(/[\w\.]/),"number";if("/"==c){if(a.eat("+"))return b.tokenize=o,p(a,b);if(a.eat("*"))return b.tokenize=o,o(a,b);if(a.eat("/"))return a.skipToEnd(),"comment"}if(k.test(c))return a.eatWhile(k),"operator";a.eatWhile(/[\w\$_]/);var j=a.current();return e.propertyIsEnumerable(j)?(g.propertyIsEnumerable(j)&&(l="newstatement"),"keyword"):f.propertyIsEnumerable(j)?(g.propertyIsEnumerable(j)&&(l="newstatement"),"builtin"):h.propertyIsEnumerable(j)?"atom":"variable"}function n(a){return function(b,c){for(var e,d=!1,f=!1;null!=(e=b.next());){if(e==a&&!d){f=!0;break}d=!d&&"\\"==e}return(f||!d&&!j)&&(c.tokenize=null),"string"}}function o(a,b){for(var d,c=!1;d=a.next();){if("/"==d&&c){b.tokenize=null;break}c="*"==d}return"comment"}function p(a,b){for(var d,c=!1;d=a.next();){if("/"==d&&c){b.tokenize=null;break}c="+"==d}return"comment"}function q(a,b,c,d,e){this.indented=a,this.column=b,this.type=c,this.align=d,this.prev=e}function r(a,b,c){var d=a.indented;return a.context&&"statement"==a.context.type&&(d=a.context.indented),a.context=new q(d,b,c,null,a.context)}function s(a){var b=a.context.type;return(")"==b||"]"==b||"}"==b)&&(a.indented=a.context.indented),a.context=a.context.prev}var l,c=a.indentUnit,d=b.statementIndentUnit||c,e=b.keywords||{},f=b.builtin||{},g=b.blockKeywords||{},h=b.atoms||{},i=b.hooks||{},j=b.multiLineStrings,k=/[+\-*&%=<>!?|\/]/;return{startState:function(a){return{tokenize:null,context:new q((a||0)-c,0,"top",!1),indented:0,startOfLine:!0}},token:function(a,b){var c=b.context;if(a.sol()&&(null==c.align&&(c.align=!1),b.indented=a.indentation(),b.startOfLine=!0),a.eatSpace())return null;l=null;var d=(b.tokenize||m)(a,b);if("comment"==d||"meta"==d)return d;if(null==c.align&&(c.align=!0),";"!=l&&":"!=l&&","!=l||"statement"!=c.type)if("{"==l)r(b,a.column(),"}");else if("["==l)r(b,a.column(),"]");else if("("==l)r(b,a.column(),")");else if("}"==l){for(;"statement"==c.type;)c=s(b);for("}"==c.type&&(c=s(b));"statement"==c.type;)c=s(b)}else l==c.type?s(b):(("}"==c.type||"top"==c.type)&&";"!=l||"statement"==c.type&&"newstatement"==l)&&r(b,a.column(),"statement");else s(b);return b.startOfLine=!1,d},indent:function(a,b){if(a.tokenize!=m&&null!=a.tokenize)return CodeMirror.Pass;var e=a.context,f=b&&b.charAt(0);"statement"==e.type&&"}"==f&&(e=e.prev);var g=f==e.type;return"statement"==e.type?e.indented+("{"==f?0:d):e.align?e.column+(g?0:1):e.indented+(g?0:c)},electricChars:"{}"}}),function(){function a(a){for(var b={},c=a.split(" "),d=0;c.length>d;++d)b[c[d]]=!0;return b}var b="body catch class do else enum for foreach foreach_reverse if in interface mixin out scope struct switch try union unittest version while with";CodeMirror.defineMIME("text/x-d",{name:"d",keywords:a("abstract alias align asm assert auto break case cast cdouble cent cfloat const continue debug default delegate delete deprecated export extern final finally function goto immutable import inout invariant is lazy macro module new nothrow override package pragma private protected public pure ref return shared short static super synchronized template this throw typedef typeid typeof volatile __FILE__ __LINE__ __gshared __traits __vector __parameters "+b),blockKeywords:a(b),builtin:a("bool byte char creal dchar double float idouble ifloat int ireal long real short ubyte ucent uint ulong ushort wchar wstring void size_t sizediff_t"),atoms:a("exit failure success true false null"),hooks:{"@":function(a){return a.eatWhile(/[\w\$_]/),"meta"}}})}(),CodeMirror.defineMode("diff",function(){var a={"+":"positive","-":"negative","@":"meta"};return{token:function(b){var c=b.string.search(/[\t ]+?$/);if(!b.sol()||0===c)return b.skipToEnd(),("error "+(a[b.string.charAt(0)]||"")).replace(/ $/,"");var d=a[b.peek()]||b.skipToEnd();return-1===c?b.skipToEnd():b.pos=c,d}}}),CodeMirror.defineMIME("text/x-diff","diff"),CodeMirror.defineMode("ecl",function(a){function b(a){for(var b={},c=a.split(" "),d=0;c.length>d;++d)b[c[d]]=!0;return b}function c(a,b){return b.startOfLine?(a.skipToEnd(),"meta"):!1}function p(a,b){var c=a.next();if(l[c]){var d=l[c](a,b);if(d!==!1)return d}if('"'==c||"'"==c)return b.tokenize=q(c),b.tokenize(a,b);if(/[\[\]{}\(\),;\:\.]/.test(c))return o=c,null;if(/\d/.test(c))return a.eatWhile(/[\w\.]/),"number";if("/"==c){if(a.eat("*"))return b.tokenize=r,r(a,b);if(a.eat("/"))return a.skipToEnd(),"comment"}if(n.test(c))return a.eatWhile(n),"operator";a.eatWhile(/[\w\$_]/);var m=a.current().toLowerCase();if(e.propertyIsEnumerable(m))return j.propertyIsEnumerable(m)&&(o="newstatement"),"keyword";if(f.propertyIsEnumerable(m))return j.propertyIsEnumerable(m)&&(o="newstatement"),"variable";if(g.propertyIsEnumerable(m))return j.propertyIsEnumerable(m)&&(o="newstatement"),"variable-2";if(h.propertyIsEnumerable(m))return j.propertyIsEnumerable(m)&&(o="newstatement"),"variable-3";if(i.propertyIsEnumerable(m))return j.propertyIsEnumerable(m)&&(o="newstatement"),"builtin";for(var p=m.length-1;p>=0&&(!isNaN(m[p])||"_"==m[p]);)--p;if(p>0){var s=m.substr(0,p+1);if(h.propertyIsEnumerable(s))return j.propertyIsEnumerable(s)&&(o="newstatement"),"variable-3"}return k.propertyIsEnumerable(m)?"atom":null}function q(a){return function(b,c){for(var e,d=!1,f=!1;null!=(e=b.next());){if(e==a&&!d){f=!0;break}d=!d&&"\\"==e}return(f||!d&&!m)&&(c.tokenize=p),"string"}}function r(a,b){for(var d,c=!1;d=a.next();){if("/"==d&&c){b.tokenize=p;break}c="*"==d}return"comment"}function s(a,b,c,d,e){this.indented=a,this.column=b,this.type=c,this.align=d,this.prev=e}function t(a,b,c){return a.context=new s(a.indented,b,c,null,a.context)}function u(a){var b=a.context.type;return(")"==b||"]"==b||"}"==b)&&(a.indented=a.context.indented),a.context=a.context.prev}var m,o,d=a.indentUnit,e=b("abs acos allnodes ascii asin asstring atan atan2 ave case choose choosen choosesets clustersize combine correlation cos cosh count covariance cron dataset dedup define denormalize distribute distributed distribution ebcdic enth error evaluate event eventextra eventname exists exp failcode failmessage fetch fromunicode getisvalid global graph group hash hash32 hash64 hashcrc hashmd5 having if index intformat isvalid iterate join keyunicode length library limit ln local log loop map matched matchlength matchposition matchtext matchunicode max merge mergejoin min nolocal nonempty normalize parse pipe power preload process project pull random range rank ranked realformat recordof regexfind regexreplace regroup rejected rollup round roundup row rowdiff sample set sin sinh sizeof soapcall sort sorted sqrt stepped stored sum table tan tanh thisnode topn tounicode transfer trim truncate typeof ungroup unicodeorder variance which workunit xmldecode xmlencode xmltext xmlunicode"),f=b("apply assert build buildindex evaluate fail keydiff keypatch loadxml nothor notify output parallel sequential soapcall wait"),g=b("__compressed__ all and any as atmost before beginc++ best between case const counter csv descend encrypt end endc++ endmacro except exclusive expire export extend false few first flat from full function group header heading hole ifblock import in interface joined keep keyed last left limit load local locale lookup macro many maxcount maxlength min skew module named nocase noroot noscan nosort not of only opt or outer overwrite packed partition penalty physicallength pipe quote record relationship repeat return right scan self separator service shared skew skip sql store terminator thor threshold token transform trim true type unicodeorder unsorted validate virtual whole wild within xml xpath"),h=b("ascii big_endian boolean data decimal ebcdic integer pattern qstring real record rule set of string token udecimal unicode unsigned varstring varunicode"),i=b("checkpoint deprecated failcode failmessage failure global independent onwarning persist priority recovery stored success wait when"),j=b("catch class do else finally for if switch try while"),k=b("true false null"),l={"#":c},n=/[+\-*&%=<>!?|\/]/;+return{startState:function(a){return{tokenize:null,context:new s((a||0)-d,0,"top",!1),indented:0,startOfLine:!0}},token:function(a,b){var c=b.context;if(a.sol()&&(null==c.align&&(c.align=!1),b.indented=a.indentation(),b.startOfLine=!0),a.eatSpace())return null;o=null;var d=(b.tokenize||p)(a,b);if("comment"==d||"meta"==d)return d;if(null==c.align&&(c.align=!0),";"!=o&&":"!=o||"statement"!=c.type)if("{"==o)t(b,a.column(),"}");else if("["==o)t(b,a.column(),"]");else if("("==o)t(b,a.column(),")");else if("}"==o){for(;"statement"==c.type;)c=u(b);for("}"==c.type&&(c=u(b));"statement"==c.type;)c=u(b)}else o==c.type?u(b):("}"==c.type||"top"==c.type||"statement"==c.type&&"newstatement"==o)&&t(b,a.column(),"statement");else u(b);return b.startOfLine=!1,d},indent:function(a,b){if(a.tokenize!=p&&null!=a.tokenize)return 0;var c=a.context,e=b&&b.charAt(0);"statement"==c.type&&"}"==e&&(c=c.prev);var f=e==c.type;return"statement"==c.type?c.indented+("{"==e?0:d):c.align?c.column+(f?0:1):c.indented+(f?0:d)},electricChars:"{}"}}),CodeMirror.defineMIME("text/x-ecl","ecl"),CodeMirror.defineMIME("text/x-erlang","erlang"),CodeMirror.defineMode("erlang",function(a){function b(a,b,c){switch(a.context="record"==c?"record":!1,"whitespace"!=c&&"comment"!=c&&(a.lastToken=b.current()),c){case"atom":return"atom";case"attribute":return"attribute";case"builtin":return"builtin";case"comment":return"comment";case"fun":return"meta";case"function":return"tag";case"guard":return"property";case"keyword":return"keyword";case"macro":return"variable-2";case"number":return"number";case"operator":return"operator";case"record":return"bracket";case"string":return"string";case"type":return"def";case"variable":return"variable";case"error":return"error";case"separator":return null;case"open_paren":return null;case"close_paren":return null;default:return null}}function v(a,b){return b.indexOf(a)>-1}function w(a,b){var c=a.start,d=b.length;if(c>=d){var e=a.string.slice(c-d,c);return e==b}return!1}function x(a,l){if(a.eatSpace())return b(l,a,"whitespace");if((""==H(l).token||"."==H(l).token)&&"-"==a.peek()){if(a.next(),a.eat(m)&&a.eatWhile(q))return v(a.current(),c)?b(l,a,"type"):b(l,a,"attribute");a.backUp(1)}var x=a.next();if("%"==x)return a.skipToEnd(),b(l,a,"comment");if("?"==x)return a.eatWhile(q),b(l,a,"macro");if("#"==x)return a.eatWhile(q),b(l,a,"record");if("$"==x)return"\\"==a.next()&&(a.eatWhile(p)||a.next()),b(l,a,"string");if("'"==x)return B(a)?b(l,a,"atom"):b(l,a,"error");if('"'==x)return A(a)?b(l,a,"string"):b(l,a,"error");if(n.test(x))return a.eatWhile(q),b(l,a,"variable");if(m.test(x)){if(a.eatWhile(q),"/"==a.peek())return a.next(),a.eatWhile(o)?b(l,a,"fun"):(a.backUp(1),b(l,a,"atom"));var C=a.current();return v(C,d)?(I(l,a),b(l,a,"keyword")):"("==a.peek()?!v(C,k)||w(a,":")&&!w(a,"erlang:")?b(l,a,"function"):b(l,a,"builtin"):v(C,j)?b(l,a,"guard"):v(C,f)?b(l,a,"operator"):":"==a.peek()?"erlang"==C?b(l,a,"builtin"):b(l,a,"function"):b(l,a,"atom")}return o.test(x)?(a.eatWhile(o),a.eat("#")?a.eatWhile(o):(a.eat(".")&&a.eatWhile(o),a.eat(/[eE]/)&&(a.eat(/[-+]/),a.eatWhile(o))),b(l,a,"number")):y(a,s,h)?(I(l,a),b(l,a,"open_paren")):y(a,t,i)?(I(l,a),b(l,a,"close_paren")):z(a,u,e)?(0==l.context&&I(l,a),b(l,a,"separator")):z(a,r,g)?b(l,a,"operator"):b(l,a,null)}function y(a,b,c){if(1==a.current().length&&b.test(a.current())){for(a.backUp(1);b.test(a.peek());)if(a.next(),v(a.current(),c))return!0;a.backUp(a.current().length-1)}return!1}function z(a,b,c){if(1==a.current().length&&b.test(a.current())){for(;b.test(a.peek());)a.next();for(;a.current().length>0;){if(v(a.current(),c))return!0;a.backUp(1)}a.next()}return!1}function A(a){return C(a,'"',"\\")}function B(a){return C(a,"'","\\")}function C(a,b,c){for(;!a.eol();){var d=a.next();if(d==b)return!0;d==c&&a.next()}return!1}function D(a){this.token=a?a.current():"",this.column=a?a.column():0,this.indent=a?a.indentation():0}function E(b,c){var d=a.indentUnit,e=["after","catch"],f=H(b).token,g=F(c,/[^a-z]/);return v(f,h)?H(b).column+f.length:"."==f||""==f?0:"->"==f?"end"==g?H(b,2).column:"fun"==H(b,2).token?H(b,2).column+d:H(b).indent+d:v(g,e)?H(b).indent:H(b).column+d}function F(a,b){var c=a.match(b);return c?a.slice(0,c.index):a}function G(a){return a.tokenStack.pop()}function H(a,b){var c=a.tokenStack.length,d=b?b:1;return d>c?new D:a.tokenStack[c-d]}function I(a,b){var c=b.current(),d=H(a).token;return v(c,l)?!1:K(d,c)?(G(a),!1):J(d,c)?(G(a),I(a,b)):(a.tokenStack.push(new D(b)),!0)}function J(a,b){switch(a+" "+b){case"when ->":return!0;case"-> end":return!0;case"-> .":return!0;case". .":return!0;default:return!1}}function K(a,b){switch(a+" "+b){case"( )":return!0;case"[ ]":return!0;case"{ }":return!0;case"<< >>":return!0;case"begin end":return!0;case"case end":return!0;case"fun end":return!0;case"if end":return!0;case"receive end":return!0;case"try end":return!0;case"-> ;":return!0;default:return!1}}var c=["-type","-spec","-export_type","-opaque"],d=["after","begin","catch","case","cond","end","fun","if","let","of","query","receive","try","when"],e=["->",";",":",".",","],f=["and","andalso","band","bnot","bor","bsl","bsr","bxor","div","not","or","orelse","rem","xor"],g=["+","-","*","/",">",">=","<","=<","=:=","==","=/=","/=","||","<-"],h=["<<","(","[","{"],i=["}","]",")",">>"],j=["is_atom","is_binary","is_bitstring","is_boolean","is_float","is_function","is_integer","is_list","is_number","is_pid","is_port","is_record","is_reference","is_tuple","atom","binary","bitstring","boolean","function","integer","list","number","pid","port","record","reference","tuple"],k=["abs","adler32","adler32_combine","alive","apply","atom_to_binary","atom_to_list","binary_to_atom","binary_to_existing_atom","binary_to_list","binary_to_term","bit_size","bitstring_to_list","byte_size","check_process_code","contact_binary","crc32","crc32_combine","date","decode_packet","delete_module","disconnect_node","element","erase","exit","float","float_to_list","garbage_collect","get","get_keys","group_leader","halt","hd","integer_to_list","internal_bif","iolist_size","iolist_to_binary","is_alive","is_atom","is_binary","is_bitstring","is_boolean","is_float","is_function","is_integer","is_list","is_number","is_pid","is_port","is_process_alive","is_record","is_reference","is_tuple","length","link","list_to_atom","list_to_binary","list_to_bitstring","list_to_existing_atom","list_to_float","list_to_integer","list_to_pid","list_to_tuple","load_module","make_ref","module_loaded","monitor_node","node","node_link","node_unlink","nodes","notalive","now","open_port","pid_to_list","port_close","port_command","port_connect","port_control","pre_loaded","process_flag","process_info","processes","purge_module","put","register","registered","round","self","setelement","size","spawn","spawn_link","spawn_monitor","spawn_opt","split_binary","statistics","term_to_binary","time","throw","tl","trunc","tuple_size","tuple_to_list","unlink","unregister","whereis"],l=[",",":","catch","after","of","cond","let","query"],m=/[a-z_]/,n=/[A-Z_]/,o=/[0-9]/,p=/[0-7]/,q=/[a-z_A-Z0-9]/,r=/[\+\-\*\/<>=\|:]/,s=/[<\(\[\{]/,t=/[>\)\]\}]/,u=/[\->\.,:;]/;return{startState:function(){return{tokenStack:[],context:!1,lastToken:null}},token:function(a,b){return x(a,b)},indent:function(a,b){return E(a,b)},lineComment:"%"}}),CodeMirror.defineMode("gfm",function(a){function c(a){return a.code=!1,null}var b=0,d={startState:function(){return{code:!1,codeBlock:!1,ateSpace:!1}},copyState:function(a){return{code:a.code,codeBlock:a.codeBlock,ateSpace:a.ateSpace}},token:function(a,c){if(c.codeBlock)return a.match(/^```/)?(c.codeBlock=!1,null):(a.skipToEnd(),null);if(a.sol()&&(c.code=!1),a.sol()&&a.match(/^```/))return a.skipToEnd(),c.codeBlock=!0,null;if("`"===a.peek()){a.next();var d=a.pos;a.eatWhile("`");var e=1+a.pos-d;return c.code?e===b&&(c.code=!1):(b=e,c.code=!0),null}if(c.code)return a.next(),null;if(a.eatSpace())return c.ateSpace=!0,null;if(a.sol()||c.ateSpace){if(c.ateSpace=!1,a.match(/^(?:[a-zA-Z0-9\-_]+\/)?(?:[a-zA-Z0-9\-_]+@)?(?:[a-f0-9]{7,40}\b)/))return"link";if(a.match(/^(?:[a-zA-Z0-9\-_]+\/)?(?:[a-zA-Z0-9\-_]+)?#[0-9]+\b/))return"link"}return a.match(/^((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\([^\s()<>]*\))+(?:\([^\s()<>]*\)|[^\s`!()\[\]{};:'".,<>?\u00ab\u00bb\u201c\u201d\u2018\u2019]))/i)?"link":(a.next(),null)},blankLine:c};return CodeMirror.defineMIME("gfmBase",{name:"markdown",underscoresBreakWords:!1,taskLists:!0,fencedCodeBlocks:!0}),CodeMirror.overlayMode(CodeMirror.getMode(a,"gfmBase"),d)},"markdown"),CodeMirror.defineMode("gas",function(a,b){"use strict";function g(){d="#",f.ax="variable",f.eax="variable-2",f.rax="variable-3",f.bx="variable",f.ebx="variable-2",f.rbx="variable-3",f.cx="variable",f.ecx="variable-2",f.rcx="variable-3",f.dx="variable",f.edx="variable-2",f.rdx="variable-3",f.si="variable",f.esi="variable-2",f.rsi="variable-3",f.di="variable",f.edi="variable-2",f.rdi="variable-3",f.sp="variable",f.esp="variable-2",f.rsp="variable-3",f.bp="variable",f.ebp="variable-2",f.rbp="variable-3",f.ip="variable",f.eip="variable-2",f.rip="variable-3",f.cs="keyword",f.ds="keyword",f.ss="keyword",f.es="keyword",f.fs="keyword",f.gs="keyword"}function h(){d="@",e.syntax="builtin",f.r0="variable",f.r1="variable",f.r2="variable",f.r3="variable",f.r4="variable",f.r5="variable",f.r6="variable",f.r7="variable",f.r8="variable",f.r9="variable",f.r10="variable",f.r11="variable",f.r12="variable",f.sp="variable-2",f.lr="variable-2",f.pc="variable-2",f.r13=f.sp,f.r14=f.lr,f.r15=f.pc,c.push(function(a,b){return"#"===a?(b.eatWhile(/\w/),"number"):void 0})}function j(a,b){for(var d,c=!1;null!=(d=a.next());){if(d===b&&!c)return!1;c=!c&&"\\"===d}return c}function k(a,b){for(var d,c=!1;null!=(d=a.next());){if("/"===d&&c){b.tokenize=null;break}c="*"===d}return"comment"}var c=[],d="",e={".abort":"builtin",".align":"builtin",".altmacro":"builtin",".ascii":"builtin",".asciz":"builtin",".balign":"builtin",".balignw":"builtin",".balignl":"builtin",".bundle_align_mode":"builtin",".bundle_lock":"builtin",".bundle_unlock":"builtin",".byte":"builtin",".cfi_startproc":"builtin",".comm":"builtin",".data":"builtin",".def":"builtin",".desc":"builtin",".dim":"builtin",".double":"builtin",".eject":"builtin",".else":"builtin",".elseif":"builtin",".end":"builtin",".endef":"builtin",".endfunc":"builtin",".endif":"builtin",".equ":"builtin",".equiv":"builtin",".eqv":"builtin",".err":"builtin",".error":"builtin",".exitm":"builtin",".extern":"builtin",".fail":"builtin",".file":"builtin",".fill":"builtin",".float":"builtin",".func":"builtin",".global":"builtin",".gnu_attribute":"builtin",".hidden":"builtin",".hword":"builtin",".ident":"builtin",".if":"builtin",".incbin":"builtin",".include":"builtin",".int":"builtin",".internal":"builtin",".irp":"builtin",".irpc":"builtin",".lcomm":"builtin",".lflags":"builtin",".line":"builtin",".linkonce":"builtin",".list":"builtin",".ln":"builtin",".loc":"builtin",".loc_mark_labels":"builtin",".local":"builtin",".long":"builtin",".macro":"builtin",".mri":"builtin",".noaltmacro":"builtin",".nolist":"builtin",".octa":"builtin",".offset":"builtin",".org":"builtin",".p2align":"builtin",".popsection":"builtin",".previous":"builtin",".print":"builtin",".protected":"builtin",".psize":"builtin",".purgem":"builtin",".pushsection":"builtin",".quad":"builtin",".reloc":"builtin",".rept":"builtin",".sbttl":"builtin",".scl":"builtin",".section":"builtin",".set":"builtin",".short":"builtin",".single":"builtin",".size":"builtin",".skip":"builtin",".sleb128":"builtin",".space":"builtin",".stab":"builtin",".string":"builtin",".struct":"builtin",".subsection":"builtin",".symver":"builtin",".tag":"builtin",".text":"builtin",".title":"builtin",".type":"builtin",".uleb128":"builtin",".val":"builtin",".version":"builtin",".vtable_entry":"builtin",".vtable_inherit":"builtin",".warning":"builtin",".weak":"builtin",".weakref":"builtin",".word":"builtin"},f={},i=b.architecture.toLowerCase();return"x86"===i?g(b):("arm"===i||"armv6"===i)&&h(b),{startState:function(){return{tokenize:null}},token:function(a,b){if(b.tokenize)return b.tokenize(a,b);if(a.eatSpace())return null;var g,h,i=a.next();if("/"===i&&a.eat("*"))return b.tokenize=k,k(a,b);if(i===d)return a.skipToEnd(),"comment";if('"'===i)return j(a,'"'),"string";if("."===i)return a.eatWhile(/\w/),h=a.current().toLowerCase(),g=e[h],g||null;if("="===i)return a.eatWhile(/\w/),"tag";if("{"===i)return"braket";if("}"===i)return"braket";if(/\d/.test(i))return"0"===i&&a.eat("x")?(a.eatWhile(/[0-9a-fA-F]/),"number"):(a.eatWhile(/\d/),"number");if(/\w/.test(i))return a.eatWhile(/\w/),a.eat(":")?"tag":(h=a.current().toLowerCase(),g=f[h],g||null);for(var l=0;c.length>l;l++)if(g=c[l](i,a,b))return g},lineComment:d,blockCommentStart:"/*",blockCommentEnd:"*/"}}),CodeMirror.defineMode("go",function(a){function g(a,b){var g=a.next();if('"'==g||"'"==g||"`"==g)return b.tokenize=h(g),b.tokenize(a,b);if(/[\d\.]/.test(g))return"."==g?a.match(/^[0-9]+([eE][\-+]?[0-9]+)?/):"0"==g?a.match(/^[xX][0-9a-fA-F]+/)||a.match(/^0[0-7]+/):a.match(/^[0-9]*\.?[0-9]*([eE][\-+]?[0-9]+)?/),"number";if(/[\[\]{}\(\),;\:\.]/.test(g))return f=g,null;if("/"==g){if(a.eat("*"))return b.tokenize=i,i(a,b);if(a.eat("/"))return a.skipToEnd(),"comment"}if(e.test(g))return a.eatWhile(e),"operator";a.eatWhile(/[\w\$_]/);var j=a.current();return c.propertyIsEnumerable(j)?(("case"==j||"default"==j)&&(f="case"),"keyword"):d.propertyIsEnumerable(j)?"atom":"variable"}function h(a){return function(b,c){for(var e,d=!1,f=!1;null!=(e=b.next());){if(e==a&&!d){f=!0;break}d=!d&&"\\"==e}return(f||!d&&"`"!=a)&&(c.tokenize=g),"string"}}function i(a,b){for(var d,c=!1;d=a.next();){if("/"==d&&c){b.tokenize=g;break}c="*"==d}return"comment"}function j(a,b,c,d,e){this.indented=a,this.column=b,this.type=c,this.align=d,this.prev=e}function k(a,b,c){return a.context=new j(a.indented,b,c,null,a.context)}function l(a){var b=a.context.type;return(")"==b||"]"==b||"}"==b)&&(a.indented=a.context.indented),a.context=a.context.prev}var f,b=a.indentUnit,c={"break":!0,"case":!0,chan:!0,"const":!0,"continue":!0,"default":!0,defer:!0,"else":!0,fallthrough:!0,"for":!0,func:!0,go:!0,"goto":!0,"if":!0,"import":!0,"interface":!0,map:!0,"package":!0,range:!0,"return":!0,select:!0,struct:!0,"switch":!0,type:!0,"var":!0,bool:!0,"byte":!0,complex64:!0,complex128:!0,float32:!0,float64:!0,int8:!0,int16:!0,int32:!0,int64:!0,string:!0,uint8:!0,uint16:!0,uint32:!0,uint64:!0,"int":!0,uint:!0,uintptr:!0},d={"true":!0,"false":!0,iota:!0,nil:!0,append:!0,cap:!0,close:!0,complex:!0,copy:!0,imag:!0,len:!0,make:!0,"new":!0,panic:!0,print:!0,println:!0,real:!0,recover:!0},e=/[+\-*&^%:=<>!|\/]/;return{startState:function(a){return{tokenize:null,context:new j((a||0)-b,0,"top",!1),indented:0,startOfLine:!0}},token:function(a,b){var c=b.context;if(a.sol()&&(null==c.align&&(c.align=!1),b.indented=a.indentation(),b.startOfLine=!0,"case"==c.type&&(c.type="}")),a.eatSpace())return null;f=null;var d=(b.tokenize||g)(a,b);return"comment"==d?d:(null==c.align&&(c.align=!0),"{"==f?k(b,a.column(),"}"):"["==f?k(b,a.column(),"]"):"("==f?k(b,a.column(),")"):"case"==f?c.type="case":"}"==f&&"}"==c.type?c=l(b):f==c.type&&l(b),b.startOfLine=!1,d)},indent:function(a,c){if(a.tokenize!=g&&null!=a.tokenize)return 0;var d=a.context,e=c&&c.charAt(0);if("case"==d.type&&/^(?:case|default)\b/.test(c))return a.context.type="}",d.indented;var f=e==d.type;return d.align?d.column+(f?0:1):d.indented+(f?0:b)},electricChars:"{}:",blockCommentStart:"/*",blockCommentEnd:"*/",lineComment:"//"}}),CodeMirror.defineMIME("text/x-go","go"),CodeMirror.defineMode("groovy",function(a){function b(a){for(var b={},c=a.split(" "),d=0;c.length>d;++d)b[c[d]]=!0;return b}function g(a,b){var g=a.next();if('"'==g||"'"==g)return h(g,a,b);if(/[\[\]{}\(\),;\:\.]/.test(g))return f=g,null;if(/\d/.test(g))return a.eatWhile(/[\w\.]/),a.eat(/eE/)&&(a.eat(/\+\-/),a.eatWhile(/\d/)),"number";if("/"==g){if(a.eat("*"))return b.tokenize.push(j),j(a,b);if(a.eat("/"))return a.skipToEnd(),"comment";if(k(b.lastToken))return h(g,a,b)}if("-"==g&&a.eat(">"))return f="->",null;if(/[+\-*&%=<>!?|\/~]/.test(g))return a.eatWhile(/[+\-*&%=<>|~]/),"operator";if(a.eatWhile(/[\w\$_]/),"@"==g)return a.eatWhile(/[\w\$_\.]/),"meta";if("."==b.lastToken)return"property";if(a.eat(":"))return f="proplabel","property";var i=a.current();return e.propertyIsEnumerable(i)?"atom":c.propertyIsEnumerable(i)?(d.propertyIsEnumerable(i)&&(f="newstatement"),"keyword"):"variable"}function h(a,b,c){function e(b,c){for(var f,e=!1,g=!d;null!=(f=b.next());){if(f==a&&!e){if(!d)break;if(b.match(a+a)){g=!0;break}}if('"'==a&&"$"==f&&!e&&b.eat("{"))return c.tokenize.push(i()),"string";e=!e&&"\\"==f}return g&&c.tokenize.pop(),"string"}var d=!1;if("/"!=a&&b.eat(a)){if(!b.eat(a))return"string";d=!0}return c.tokenize.push(e),e(b,c)}function i(){function b(b,c){if("}"==b.peek()){if(a--,0==a)return c.tokenize.pop(),c.tokenize[c.tokenize.length-1](b,c)}else"{"==b.peek()&&a++;return g(b,c)}var a=1;return b.isBase=!0,b}function j(a,b){for(var d,c=!1;d=a.next();){if("/"==d&&c){b.tokenize.pop();break}c="*"==d}return"comment"}function k(a){return!a||"operator"==a||"->"==a||/[\.\[\{\(,;:]/.test(a)||"newstatement"==a||"keyword"==a||"proplabel"==a}function l(a,b,c,d,e){this.indented=a,this.column=b,this.type=c,this.align=d,this.prev=e}function m(a,b,c){return a.context=new l(a.indented,b,c,null,a.context)}function n(a){var b=a.context.type;return(")"==b||"]"==b||"}"==b)&&(a.indented=a.context.indented),a.context=a.context.prev}var f,c=b("abstract as assert boolean break byte case catch char class const continue def default do double else enum extends final finally float for goto if implements import in instanceof int interface long native new package private protected public return short static strictfp super switch synchronized threadsafe throw throws transient try void volatile while"),d=b("catch class do else finally for if switch try while enum interface def"),e=b("null true false this");return g.isBase=!0,{startState:function(b){return{tokenize:[g],context:new l((b||0)-a.indentUnit,0,"top",!1),indented:0,startOfLine:!0,lastToken:null}},token:function(a,b){var c=b.context;if(a.sol()&&(null==c.align&&(c.align=!1),b.indented=a.indentation(),b.startOfLine=!0,"statement"!=c.type||k(b.lastToken)||(n(b),c=b.context)),a.eatSpace())return null;f=null;var d=b.tokenize[b.tokenize.length-1](a,b);if("comment"==d)return d;if(null==c.align&&(c.align=!0),";"!=f&&":"!=f||"statement"!=c.type)if("->"==f&&"statement"==c.type&&"}"==c.prev.type)n(b),b.context.align=!1;else if("{"==f)m(b,a.column(),"}");else if("["==f)m(b,a.column(),"]");else if("("==f)m(b,a.column(),")");else if("}"==f){for(;"statement"==c.type;)c=n(b);for("}"==c.type&&(c=n(b));"statement"==c.type;)c=n(b)}else f==c.type?n(b):("}"==c.type||"top"==c.type||"statement"==c.type&&"newstatement"==f)&&m(b,a.column(),"statement");else n(b);return b.startOfLine=!1,b.lastToken=f||d,d},indent:function(b,c){if(!b.tokenize[b.tokenize.length-1].isBase)return 0;var d=c&&c.charAt(0),e=b.context;"statement"!=e.type||k(b.lastToken)||(e=e.prev);var f=d==e.type;return"statement"==e.type?e.indented+("{"==d?0:a.indentUnit):e.align?e.column+(f?0:1):e.indented+(f?0:a.indentUnit)},electricChars:"{}"}}),CodeMirror.defineMIME("text/x-groovy","groovy"),function(){"use strict";CodeMirror.defineMode("haml",function(a){function d(a){return function(b,c){var d=b.peek();return d==a&&1==c.rubyState.tokenize.length?(b.next(),c.tokenize=f,"closeAttributeTag"):e(b,c)}}function e(a,b){return a.match("-#")?(a.skipToEnd(),"comment"):c.token(a,b.rubyState)}function f(a,c){var f=a.peek();if("comment"==c.previousToken.style&&c.indented>c.previousToken.indented)return a.skipToEnd(),"commentLine";if(c.startOfLine){if("!"==f&&a.match("!!"))return a.skipToEnd(),"tag";if(a.match(/^%[\w:#\.]+=/))return c.tokenize=e,"hamlTag";if(a.match(/^%[\w:]+/))return"hamlTag";if("/"==f)return a.skipToEnd(),"comment"}if((c.startOfLine||"hamlTag"==c.previousToken.style)&&("#"==f||"."==f))return a.match(/[\w-#\.]*/),"hamlAttribute";if(c.startOfLine&&!a.match("-->",!1)&&("="==f||"-"==f))return c.tokenize=e,null;if("hamlTag"==c.previousToken.style||"closeAttributeTag"==c.previousToken.style||"hamlAttribute"==c.previousToken.style){if("("==f)return c.tokenize=d(")"),null;if("{"==f)return c.tokenize=d("}"),null}return b.token(a,c.htmlState)}var b=CodeMirror.getMode(a,{name:"htmlmixed"}),c=CodeMirror.getMode(a,"ruby");return{startState:function(){var a=b.startState(),d=c.startState();return{htmlState:a,rubyState:d,indented:0,previousToken:{style:null,indented:0},tokenize:f}},copyState:function(a){return{htmlState:CodeMirror.copyState(b,a.htmlState),rubyState:CodeMirror.copyState(c,a.rubyState),indented:a.indented,previousToken:a.previousToken,tokenize:a.tokenize}},token:function(a,b){if(a.sol()&&(b.indented=a.indentation(),b.startOfLine=!0),a.eatSpace())return null;var c=b.tokenize(a,b);if(b.startOfLine=!1,c&&"commentLine"!=c&&(b.previousToken={style:c,indented:b.indented}),a.eol()&&b.tokenize==e){a.backUp(1);var d=a.peek();a.next(),d&&","!=d&&(b.tokenize=f)}return"hamlTag"==c?c="tag":"commentLine"==c?c="comment":"hamlAttribute"==c?c="attribute":"closeAttributeTag"==c&&(c=null),c},indent:function(a){return a.indented}}},"htmlmixed","ruby"),CodeMirror.defineMIME("text/x-haml","haml")}(),CodeMirror.defineMode("haskell",function(){function a(a,b,c){return b(c),c(a,b)}function k(k,n){if(k.eatWhile(j))return null;var o=k.next();if(i.test(o)){if("{"==o&&k.eat("-")){var p="comment";return k.eat("#")&&(p="meta"),a(k,n,l(p,1))}return null}if("'"==o)return k.eat("\\")?k.next():k.next(),k.eat("'")?"string":"error";if('"'==o)return a(k,n,m);if(c.test(o))return k.eatWhile(g),k.eat(".")?"qualifier":"variable-2";if(b.test(o))return k.eatWhile(g),"variable";if(d.test(o)){if("0"==o){if(k.eat(/[xX]/))return k.eatWhile(e),"integer";if(k.eat(/[oO]/))return k.eatWhile(f),"number"}k.eatWhile(d);var p="number";return k.eat(".")&&(p="number",k.eatWhile(d)),k.eat(/[eE]/)&&(p="number",k.eat(/[-+]/),k.eatWhile(d)),p}if(h.test(o)){if("-"==o&&k.eat(/-/)&&(k.eatWhile(/-/),!k.eat(h)))return k.skipToEnd(),"comment";var p="variable";return":"==o&&(p="variable-2"),k.eatWhile(h),p}return"error"}function l(a,b){return 0==b?k:function(c,d){for(var e=b;!c.eol();){var f=c.next();if("{"==f&&c.eat("-"))++e;else if("-"==f&&c.eat("}")&&(--e,0==e))return d(k),a}return d(l(a,e)),a}}function m(a,b){for(;!a.eol();){var c=a.next();if('"'==c)return b(k),"string";if("\\"==c){if(a.eol()||a.eat(j))return b(n),"string";a.eat("&")||a.next()}}return b(k),"error"}function n(b,c){return b.eat("\\")?a(b,c,m):(b.next(),c(k),"error")}var b=/[a-z_]/,c=/[A-Z]/,d=/[0-9]/,e=/[0-9A-Fa-f]/,f=/[0-7]/,g=/[a-z_A-Z0-9']/,h=/[-!#$%&*+.\/<=>?@\\^|~:]/,i=/[(),;[\]`{}]/,j=/[ \t\v\f]/,o=function(){function b(b){return function(){for(var c=0;arguments.length>c;c++)a[arguments[c]]=b}}var a={};return b("keyword")("case","class","data","default","deriving","do","else","foreign","if","import","in","infix","infixl","infixr","instance","let","module","newtype","of","then","type","where","_"),b("keyword")("..",":","::","=","\\",'"',"<-","->","@","~","=>"),b("builtin")("!!","$!","$","&&","+","++","-",".","/","/=","<","<=","=<<","==",">",">=",">>",">>=","^","^^","||","*","**"),b("builtin")("Bool","Bounded","Char","Double","EQ","Either","Enum","Eq","False","FilePath","Float","Floating","Fractional","Functor","GT","IO","IOError","Int","Integer","Integral","Just","LT","Left","Maybe","Monad","Nothing","Num","Ord","Ordering","Rational","Read","ReadS","Real","RealFloat","RealFrac","Right","Show","ShowS","String","True"),b("builtin")("abs","acos","acosh","all","and","any","appendFile","asTypeOf","asin","asinh","atan","atan2","atanh","break","catch","ceiling","compare","concat","concatMap","const","cos","cosh","curry","cycle","decodeFloat","div","divMod","drop","dropWhile","either","elem","encodeFloat","enumFrom","enumFromThen","enumFromThenTo","enumFromTo","error","even","exp","exponent","fail","filter","flip","floatDigits","floatRadix","floatRange","floor","fmap","foldl","foldl1","foldr","foldr1","fromEnum","fromInteger","fromIntegral","fromRational","fst","gcd","getChar","getContents","getLine","head","id","init","interact","ioError","isDenormalized","isIEEE","isInfinite","isNaN","isNegativeZero","iterate","last","lcm","length","lex","lines","log","logBase","lookup","map","mapM","mapM_","max","maxBound","maximum","maybe","min","minBound","minimum","mod","negate","not","notElem","null","odd","or","otherwise","pi","pred","print","product","properFraction","putChar","putStr","putStrLn","quot","quotRem","read","readFile","readIO","readList","readLn","readParen","reads","readsPrec","realToFrac","recip","rem","repeat","replicate","return","reverse","round","scaleFloat","scanl","scanl1","scanr","scanr1","seq","sequence","sequence_","show","showChar","showList","showParen","showString","shows","showsPrec","significand","signum","sin","sinh","snd","span","splitAt","sqrt","subtract","succ","sum","tail","take","takeWhile","tan","tanh","toEnum","toInteger","toRational","truncate","uncurry","undefined","unlines","until","unwords","unzip","unzip3","userError","words","writeFile","zip","zip3","zipWith","zipWith3"),a}();return{startState:function(){return{f:k}},copyState:function(a){return{f:a.f}},token:function(a,b){var c=b.f(a,function(a){b.f=a}),d=a.current();return d in o?o[d]:c},blockCommentStart:"{-",blockCommentEnd:"-}",lineComment:"--"}}),CodeMirror.defineMIME("text/x-haskell","haskell"),CodeMirror.defineMode("haxe",function(a,b){function f(a,b,c){return b.tokenize=c,c(a,b)}function g(a,b){for(var d,c=!1;null!=(d=a.next());){if(d==b&&!c)return!1;c=!c&&"\\"==d}return c}function j(a,b,c){return h=a,i=c,b}function k(a,b){var c=a.next();if('"'==c||"'"==c)return f(a,b,l(c));if(/[\[\]{}\(\),;\:\.]/.test(c))return j(c);if("0"==c&&a.eat(/x/i))return a.eatWhile(/[\da-f]/i),j("number","number");if(/\d/.test(c)||"-"==c&&a.eat(/\d/))return a.match(/^\d*(?:\.\d*)?(?:[eE][+\-]?\d+)?/),j("number","number");if(b.reAllowed&&"~"==c&&a.eat(/\//))return g(a,"/"),a.eatWhile(/[gimsu]/),j("regexp","string-2");if("/"==c)return a.eat("*")?f(a,b,m):a.eat("/")?(a.skipToEnd(),j("comment","comment")):(a.eatWhile(e),j("operator",null,a.current()));if("#"==c)return a.skipToEnd(),j("conditional","meta");if("@"==c)return a.eat(/:/),a.eatWhile(/[\w_]/),j("metadata","meta");if(e.test(c))return a.eatWhile(e),j("operator",null,a.current());var h;if(/[A-Z]/.test(c))return a.eatWhile(/[\w_<>]/),h=a.current(),j("type","variable-3",h);a.eatWhile(/[\w_]/);var h=a.current(),i=d.propertyIsEnumerable(h)&&d[h];return i&&b.kwAllowed?j(i.type,i.style,h):j("variable","variable",h)}function l(a){return function(b,c){return g(b,a)||(c.tokenize=k),j("string","string")}}function m(a,b){for(var d,c=!1;d=a.next();){if("/"==d&&c){b.tokenize=k;break}c="*"==d}return j("comment","comment")}function o(a,b,c,d,e,f){this.indented=a,this.column=b,this.type=c,this.prev=e,this.info=f,null!=d&&(this.align=d)}function p(a,b){for(var c=a.localVars;c;c=c.next)if(c.name==b)return!0}function q(a,b,c,d,e){var f=a.cc;for(t.state=a,t.stream=e,t.marked=null,t.cc=f,a.lexical.hasOwnProperty("align")||(a.lexical.align=!0);;){var g=f.length?f.pop():D;if(g(c,d)){for(;f.length&&f[f.length-1].lex;)f.pop()();return t.marked?t.marked:"variable"==c&&p(a,d)?"variable-2":"variable"==c&&r(a,d)?"variable-3":b}}}function r(a,b){if(/[a-z]/.test(b.charAt(0)))return!1;for(var c=a.importedtypes.length,d=0;c>d;d++)if(a.importedtypes[d]==b)return!0}function s(a){for(var b=t.state,c=b.importedtypes;c;c=c.next)if(c.name==a)return;b.importedtypes={name:a,next:b.importedtypes}}function u(){for(var a=arguments.length-1;a>=0;a--)t.cc.push(arguments[a])}function v(){return u.apply(null,arguments),!0}function w(a){var b=t.state;if(b.context){t.marked="def";for(var c=b.localVars;c;c=c.next)if(c.name==a)return;b.localVars={name:a,next:b.localVars}}}function y(){t.state.context||(t.state.localVars=x),t.state.context={prev:t.state.context,vars:t.state.localVars}}function z(){t.state.localVars=t.state.context.vars,t.state.context=t.state.context.prev}function A(a,b){var c=function(){var c=t.state;c.lexical=new o(c.indented,t.stream.column(),a,null,c.lexical,b)};return c.lex=!0,c}function B(){var a=t.state;a.lexical.prev&&(")"==a.lexical.type&&(a.indented=a.lexical.indented),a.lexical=a.lexical.prev)}function C(a){return function(b){return b==a?v():";"==a?u():v(arguments.callee)}}function D(a){return"@"==a?v(I):"var"==a?v(A("vardef"),R,C(";"),B):"keyword a"==a?v(A("form"),E,D,B):"keyword b"==a?v(A("form"),D,B):"{"==a?v(A("}"),y,Q,B,z):";"==a?v():"attribute"==a?v(H):"function"==a?v(V):"for"==a?v(A("form"),C("("),A(")"),T,C(")"),B,D,B):"variable"==a?v(A("stat"),M):"switch"==a?v(A("form"),E,A("}","switch"),C("{"),Q,B,B):"case"==a?v(E,C(":")):"default"==a?v(C(":")):"catch"==a?v(A("form"),y,C("("),Z,C(")"),D,B,z):"import"==a?v(K,C(";")):"typedef"==a?v(L):u(A("stat"),E,C(";"),B)}function E(a){return n.hasOwnProperty(a)?v(G):"function"==a?v(V):"keyword c"==a?v(F):"("==a?v(A(")"),F,C(")"),B,G):"operator"==a?v(E):"["==a?v(A("]"),P(E,"]"),B,G):"{"==a?v(A("}"),P(O,"}"),B,G):v()}function F(a){return a.match(/[;\}\)\],]/)?u():u(E)}function G(a,b){if("operator"==a&&/\+\+|--/.test(b))return v(G);if("operator"==a||":"==a)return v(E);if(";"!=a)return"("==a?v(A(")"),P(E,")"),B,G):"."==a?v(N,G):"["==a?v(A("]"),E,C("]"),B,G):void 0}function H(a){return"attribute"==a?v(H):"function"==a?v(V):"var"==a?v(R):void 0}function I(a){return":"==a?v(I):"variable"==a?v(I):"("==a?v(A(")"),comasep(J,")"),B,D):void 0}function J(a){return"variable"==a?v():void 0}function K(a,b){return"variable"==a&&/[A-Z]/.test(b.charAt(0))?(s(b),v()):"variable"==a||"property"==a||"."==a?v(K):void 0}function L(a,b){return"variable"==a&&/[A-Z]/.test(b.charAt(0))?(s(b),v()):void 0}function M(a){return":"==a?v(B,D):u(G,C(";"),B)}function N(a){return"variable"==a?(t.marked="property",v()):void 0}function O(a){return"variable"==a&&(t.marked="property"),n.hasOwnProperty(a)?v(C(":"),E):void 0}function P(a,b){function c(d){return","==d?v(a,c):d==b?v():v(C(b))}return function(d){return d==b?v():u(a,c)}}function Q(a){return"}"==a?v():u(D,Q)}function R(a,b){return"variable"==a?(w(b),v(W,S)):v()}function S(a,b){return"="==b?v(E,S):","==a?v(R):void 0}function T(a,b){return"variable"==a&&w(b),v(A(")"),y,U,E,B,D,z)}function U(a,b){return"in"==b?v():void 0}function V(a,b){return"variable"==a?(w(b),v(V)):"new"==b?v(V):"("==a?v(A(")"),y,P(Z,")"),B,W,D,z):void 0}function W(a){return":"==a?v(X):void 0}function X(a){return"type"==a?v():"variable"==a?v():"{"==a?v(A("}"),P(Y,"}"),B):void 0}function Y(a){return"variable"==a?v(W):void 0}function Z(a,b){return"variable"==a?(w(b),v(W)):void 0}var h,i,c=a.indentUnit,d=function(){function a(a){return{type:a,style:"keyword"}}var b=a("keyword a"),c=a("keyword b"),d=a("keyword c"),e=a("operator"),f={type:"atom",style:"atom"},g={type:"attribute",style:"attribute"},h=a("typedef");return{"if":b,"while":b,"else":c,"do":c,"try":c,"return":d,"break":d,"continue":d,"new":d,"throw":d,"var":a("var"),inline:g,"static":g,using:a("import"),"public":g,"private":g,cast:a("cast"),"import":a("import"),macro:a("macro"),"function":a("function"),"catch":a("catch"),untyped:a("untyped"),callback:a("cb"),"for":a("for"),"switch":a("switch"),"case":a("case"),"default":a("default"),"in":e,never:a("property_access"),trace:a("trace"),"class":h,"enum":h,"interface":h,typedef:h,"extends":h,"implements":h,dynamic:h,"true":f,"false":f,"null":f}}(),e=/[+\-*&%=<>!?|]/,n={atom:!0,number:!0,variable:!0,string:!0,regexp:!0},t={state:null,column:null,marked:null,cc:null},x={name:"this",next:null};return B.lex=!0,{startState:function(a){var d=["Int","Float","String","Void","Std","Bool","Dynamic","Array"];return{tokenize:k,reAllowed:!0,kwAllowed:!0,cc:[],lexical:new o((a||0)-c,0,"block",!1),localVars:b.localVars,importedtypes:d,context:b.localVars&&{vars:b.localVars},indented:0}},token:function(a,b){if(a.sol()&&(b.lexical.hasOwnProperty("align")||(b.lexical.align=!1),b.indented=a.indentation()),a.eatSpace())return null;+var c=b.tokenize(a,b);return"comment"==h?c:(b.reAllowed=!("operator"!=h&&"keyword c"!=h&&!h.match(/^[\[{}\(,;:]$/)),b.kwAllowed="."!=h,q(b,c,h,i,a))},indent:function(a,b){if(a.tokenize!=k)return 0;var d=b&&b.charAt(0),e=a.lexical;"stat"==e.type&&"}"==d&&(e=e.prev);var f=e.type,g=d==f;return"vardef"==f?e.indented+4:"form"==f&&"{"==d?e.indented:"stat"==f||"form"==f?e.indented+c:"switch"!=e.info||g?e.align?e.column+(g?0:1):e.indented+(g?0:c):e.indented+(/^(?:case|default)\b/.test(b)?c:2*c)},electricChars:"{}"}}),CodeMirror.defineMIME("text/x-haxe","haxe"),CodeMirror.defineMode("htmlembedded",function(a,b){function g(a,b){return a.match(c,!1)?(b.token=h,e.token(a,b.scriptState)):f.token(a,b.htmlState)}function h(a,b){return a.match(d,!1)?(b.token=g,f.token(a,b.htmlState)):e.token(a,b.scriptState)}var e,f,c=b.scriptStartRegex||/^<%/i,d=b.scriptEndRegex||/^%>/i;return{startState:function(){return e=e||CodeMirror.getMode(a,b.scriptingModeSpec),f=f||CodeMirror.getMode(a,"htmlmixed"),{token:b.startOpen?h:g,htmlState:CodeMirror.startState(f),scriptState:CodeMirror.startState(e)}},token:function(a,b){return b.token(a,b)},indent:function(a,b){return a.token==g?f.indent(a.htmlState,b):e.indent?e.indent(a.scriptState,b):void 0},copyState:function(a){return{token:a.token,htmlState:CodeMirror.copyState(f,a.htmlState),scriptState:CodeMirror.copyState(e,a.scriptState)}},electricChars:"/{}:",innerMode:function(a){return a.token==h?{state:a.scriptState,mode:e}:{state:a.htmlState,mode:f}}}},"htmlmixed"),CodeMirror.defineMIME("application/x-ejs",{name:"htmlembedded",scriptingModeSpec:"javascript"}),CodeMirror.defineMIME("application/x-aspx",{name:"htmlembedded",scriptingModeSpec:"text/x-csharp"}),CodeMirror.defineMIME("application/x-jsp",{name:"htmlembedded",scriptingModeSpec:"text/x-java"}),CodeMirror.defineMIME("application/x-erb",{name:"htmlembedded",scriptingModeSpec:"ruby"}),CodeMirror.defineMode("htmlmixed",function(a,b){function i(a,b){var f=b.htmlState.tagName,g=c.token(a,b.htmlState);if("script"==f&&/\btag\b/.test(g)&&">"==a.current()){var h=a.string.slice(Math.max(0,a.pos-100),a.pos).match(/\btype\s*=\s*("[^"]+"|'[^']+'|\S+)[^<]*$/i);h=h?h[1]:"",h&&/[\"\']/.test(h.charAt(0))&&(h=h.slice(1,h.length-1));for(var i=0;e.length>i;++i){var j=e[i];if("string"==typeof j.matches?h==j.matches:j.matches.test(h)){j.mode&&(b.token=k,b.localMode=j.mode,b.localState=j.mode.startState&&j.mode.startState(c.indent(b.htmlState,"")));break}}}else"style"==f&&/\btag\b/.test(g)&&">"==a.current()&&(b.token=l,b.localMode=d,b.localState=d.startState(c.indent(b.htmlState,"")));return g}function j(a,b,c){var f,d=a.current(),e=d.search(b);return e>-1?a.backUp(d.length-e):(f=d.match(/<\/?$/))&&(a.backUp(d.length),a.match(b,!1)||a.match(d[0])),c}function k(a,b){return a.match(/^<\/\s*script\s*>/i,!1)?(b.token=i,b.localState=b.localMode=null,i(a,b)):j(a,/<\/\s*script\s*>/,b.localMode.token(a,b.localState))}function l(a,b){return a.match(/^<\/\s*style\s*>/i,!1)?(b.token=i,b.localState=b.localMode=null,i(a,b)):j(a,/<\/\s*style\s*>/,d.token(a,b.localState))}var c=CodeMirror.getMode(a,{name:"xml",htmlMode:!0}),d=CodeMirror.getMode(a,"css"),e=[],f=b&&b.scriptTypes;if(e.push({matches:/^(?:text|application)\/(?:x-)?(?:java|ecma)script$|^$/i,mode:CodeMirror.getMode(a,"javascript")}),f)for(var g=0;f.length>g;++g){var h=f[g];e.push({matches:h.matches,mode:h.mode&&CodeMirror.getMode(a,h.mode)})}return e.push({matches:/./,mode:CodeMirror.getMode(a,"text/plain")}),{startState:function(){var a=c.startState();return{token:i,localMode:null,localState:null,htmlState:a}},copyState:function(a){if(a.localState)var b=CodeMirror.copyState(a.localMode,a.localState);return{token:a.token,localMode:a.localMode,localState:b,htmlState:CodeMirror.copyState(c,a.htmlState)}},token:function(a,b){return b.token(a,b)},indent:function(a,b){return!a.localMode||/^\s*<\//.test(b)?c.indent(a.htmlState,b):a.localMode.indent?a.localMode.indent(a.localState,b):CodeMirror.Pass},electricChars:"/{}:",innerMode:function(a){return{state:a.localState||a.htmlState,mode:a.localMode||c}}}},"xml","javascript","css"),CodeMirror.defineMIME("text/html","htmlmixed"),CodeMirror.defineMode("http",function(){function a(a,b){return a.skipToEnd(),b.cur=g,"error"}function b(b,d){return b.match(/^HTTP\/\d\.\d/)?(d.cur=c,"keyword"):b.match(/^[A-Z]+/)&&/[ \t]/.test(b.peek())?(d.cur=e,"keyword"):a(b,d)}function c(b,c){var e=b.match(/^\d+/);if(!e)return a(b,c);c.cur=d;var f=Number(e[0]);return f>=100&&200>f?"positive informational":f>=200&&300>f?"positive success":f>=300&&400>f?"positive redirect":f>=400&&500>f?"negative client-error":f>=500&&600>f?"negative server-error":"error"}function d(a,b){return a.skipToEnd(),b.cur=g,null}function e(a,b){return a.eatWhile(/\S/),b.cur=f,"string-2"}function f(b,c){return b.match(/^HTTP\/\d\.\d$/)?(c.cur=g,"keyword"):a(b,c)}function g(a){return a.sol()&&!a.eat(/[ \t]/)?a.match(/^.*?:/)?"atom":(a.skipToEnd(),"error"):(a.skipToEnd(),"string")}function h(a){return a.skipToEnd(),null}return{token:function(a,b){var c=b.cur;return c!=g&&c!=h&&a.eatSpace()?null:c(a,b)},blankLine:function(a){a.cur=h},startState:function(){return{cur:b}}}}),CodeMirror.defineMIME("message/http","http"),CodeMirror.defineMode("javascript",function(a,b){function i(a,b,c){return b.tokenize=c,c(a,b)}function j(a,b){for(var d,c=!1;null!=(d=a.next());){if(d==b&&!c)return!1;c=!c&&"\\"==d}return c}function m(a,b,c){return k=a,l=c,b}function n(a,b){var c=a.next();if('"'==c||"'"==c)return i(a,b,o(c));if(/[\[\]{}\(\),;\:\.]/.test(c))return m(c);if("0"==c&&a.eat(/x/i))return a.eatWhile(/[\da-f]/i),m("number","number");if(/\d/.test(c)||"-"==c&&a.eat(/\d/))return a.match(/^\d*(?:\.\d*)?(?:[eE][+\-]?\d+)?/),m("number","number");if("/"==c)return a.eat("*")?i(a,b,p):a.eat("/")?(a.skipToEnd(),m("comment","comment")):"operator"==b.lastType||"keyword c"==b.lastType||/^[\[{}\(,;:]$/.test(b.lastType)?(j(a,"/"),a.eatWhile(/[gimy]/),m("regexp","string-2")):(a.eatWhile(h),m("operator",null,a.current()));if("#"==c)return a.skipToEnd(),m("error","error");if(h.test(c))return a.eatWhile(h),m("operator",null,a.current());a.eatWhile(/[\w\$_]/);var d=a.current(),e=g.propertyIsEnumerable(d)&&g[d];return e&&"."!=b.lastType?m(e.type,e.style,d):m("variable","variable",d)}function o(a){return function(b,c){return j(b,a)||(c.tokenize=n),m("string","string")}}function p(a,b){for(var d,c=!1;d=a.next();){if("/"==d&&c){b.tokenize=n;break}c="*"==d}return m("comment","comment")}function r(a,b,c,d,e,f){this.indented=a,this.column=b,this.type=c,this.prev=e,this.info=f,null!=d&&(this.align=d)}function s(a,b){for(var c=a.localVars;c;c=c.next)if(c.name==b)return!0}function t(a,b,c,d,f){var g=a.cc;for(u.state=a,u.stream=f,u.marked=null,u.cc=g,a.lexical.hasOwnProperty("align")||(a.lexical.align=!0);;){var h=g.length?g.pop():e?F:E;if(h(c,d)){for(;g.length&&g[g.length-1].lex;)g.pop()();return u.marked?u.marked:"variable"==c&&s(a,d)?"variable-2":b}}}function v(){for(var a=arguments.length-1;a>=0;a--)u.cc.push(arguments[a])}function w(){return v.apply(null,arguments),!0}function x(a){function b(b){for(var c=b;c;c=c.next)if(c.name==a)return!0;return!1}var c=u.state;if(c.context){if(u.marked="def",b(c.localVars))return;c.localVars={name:a,next:c.localVars}}else{if(b(c.globalVars))return;c.globalVars={name:a,next:c.globalVars}}}function z(){u.state.context={prev:u.state.context,vars:u.state.localVars},u.state.localVars=y}function A(){u.state.localVars=u.state.context.vars,u.state.context=u.state.context.prev}function B(a,b){var c=function(){var c=u.state,d=c.indented;"stat"==c.lexical.type&&(d=c.lexical.indented),c.lexical=new r(d,u.stream.column(),a,null,c.lexical,b)};return c.lex=!0,c}function C(){var a=u.state;a.lexical.prev&&(")"==a.lexical.type&&(a.indented=a.lexical.indented),a.lexical=a.lexical.prev)}function D(a){return function(b){return b==a?w():";"==a?v():w(arguments.callee)}}function E(a){return"var"==a?w(B("vardef"),U,D(";"),C):"keyword a"==a?w(B("form"),F,E,C):"keyword b"==a?w(B("form"),E,C):"{"==a?w(B("}"),R,C):";"==a?w():"if"==a?w(B("form"),F,E,C,W(u.state.indented)):"function"==a?w(_):"for"==a?w(B("form"),D("("),B(")"),X,D(")"),C,E,C):"variable"==a?w(B("stat"),M):"switch"==a?w(B("form"),F,B("}","switch"),D("{"),R,C,C):"case"==a?w(F,D(":")):"default"==a?w(D(":")):"catch"==a?w(B("form"),z,D("("),ab,D(")"),E,C,A):v(B("stat"),F,D(";"),C)}function F(a){return H(a,!1)}function G(a){return H(a,!0)}function H(a,b){var c=b?L:K;return q.hasOwnProperty(a)?w(c):"function"==a?w(_):"keyword c"==a?w(b?J:I):"("==a?w(B(")"),I,D(")"),C,c):"operator"==a?w(b?G:F):"["==a?w(B("]"),Q(G,"]"),C,c):"{"==a?w(B("}"),Q(O,"}"),C,c):w()}function I(a){return a.match(/[;\}\)\],]/)?v():v(F)}function J(a){return a.match(/[;\}\)\],]/)?v():v(G)}function K(a,b){return","==a?w(F):L(a,b,K)}function L(a,b,c){return c||(c=L),"operator"==a?/\+\+|--/.test(b)?w(c):"?"==b?w(F,D(":"),F):w(F):";"!=a?"("==a?w(B(")","call"),Q(G,")"),C,c):"."==a?w(N,c):"["==a?w(B("]"),F,D("]"),C,c):void 0:void 0}function M(a){return":"==a?w(C,E):v(K,D(";"),C)}function N(a){return"variable"==a?(u.marked="property",w()):void 0}function O(a,b){if("variable"==a){if(u.marked="property","get"==b||"set"==b)return w(P)}else("number"==a||"string"==a)&&(u.marked=a+" property");return q.hasOwnProperty(a)?w(D(":"),G):void 0}function P(a){return":"==a?w(F):"variable"!=a?w(D(":"),F):(u.marked="property",w(_))}function Q(a,b){function c(d){if(","==d){var e=u.state.lexical;return"call"==e.info&&(e.pos=(e.pos||0)+1),w(a,c)}return d==b?w():w(D(b))}return function(d){return d==b?w():v(a,c)}}function R(a){return"}"==a?w():v(E,R)}function S(a){return":"==a?w(T):v()}function T(a){return"variable"==a?(u.marked="variable-3",w()):v()}function U(a,b){return"variable"==a?(x(b),f?w(S,V):w(V)):v()}function V(a,b){return"="==b?w(G,V):","==a?w(U):void 0}function W(a){return function(b,c){return"keyword b"==b&&"else"==c?(u.state.lexical=new r(a,0,"form",null,u.state.lexical),w(E,C)):v()}}function X(a){return"var"==a?w(U,D(";"),Z):";"==a?w(Z):"variable"==a?w(Y):v(F,D(";"),Z)}function Y(a,b){return"in"==b?w(F):w(K,Z)}function Z(a,b){return";"==a?w($):"in"==b?w(F):v(F,D(";"),$)}function $(a){")"!=a&&w(F)}function _(a,b){return"variable"==a?(x(b),w(_)):"("==a?w(B(")"),z,Q(ab,")"),C,E,A):void 0}function ab(a,b){return"variable"==a?(x(b),f?w(S):w()):void 0}var k,l,c=a.indentUnit,d=b.statementIndent,e=b.json,f=b.typescript,g=function(){function a(a){return{type:a,style:"keyword"}}var b=a("keyword a"),c=a("keyword b"),d=a("keyword c"),e=a("operator"),g={type:"atom",style:"atom"},h={"if":a("if"),"while":b,"with":b,"else":c,"do":c,"try":c,"finally":c,"return":d,"break":d,"continue":d,"new":d,"delete":d,"throw":d,"var":a("var"),"const":a("var"),let:a("var"),"function":a("function"),"catch":a("catch"),"for":a("for"),"switch":a("switch"),"case":a("case"),"default":a("default"),"in":e,"typeof":e,"instanceof":e,"true":g,"false":g,"null":g,undefined:g,NaN:g,Infinity:g,"this":a("this")};if(f){var i={type:"variable",style:"variable-3"},j={"interface":a("interface"),"class":a("class"),"extends":a("extends"),constructor:a("constructor"),"public":a("public"),"private":a("private"),"protected":a("protected"),"static":a("static"),"super":a("super"),string:i,number:i,bool:i,any:i};for(var k in j)h[k]=j[k]}return h}(),h=/[+\-*&%=<>!?|~^]/,q={atom:!0,number:!0,variable:!0,string:!0,regexp:!0,"this":!0},u={state:null,column:null,marked:null,cc:null},y={name:"this",next:{name:"arguments"}};return C.lex=!0,{startState:function(a){return{tokenize:n,lastType:null,cc:[],lexical:new r((a||0)-c,0,"block",!1),localVars:b.localVars,globalVars:b.globalVars,context:b.localVars&&{vars:b.localVars},indented:0}},token:function(a,b){if(a.sol()&&(b.lexical.hasOwnProperty("align")||(b.lexical.align=!1),b.indented=a.indentation()),b.tokenize!=p&&a.eatSpace())return null;var c=b.tokenize(a,b);return"comment"==k?c:(b.lastType="operator"!=k||"++"!=l&&"--"!=l?k:"incdec",t(b,c,k,l,a))},indent:function(a,e){if(a.tokenize==p)return CodeMirror.Pass;if(a.tokenize!=n)return 0;var f=e&&e.charAt(0),g=a.lexical;"stat"==g.type&&"}"==f&&(g=g.prev),d&&")"==g.type&&"stat"==g.prev.type&&(g=g.prev);var h=g.type,i=f==h;return"vardef"==h?g.indented+("operator"==a.lastType||","==a.lastType?4:0):"form"==h&&"{"==f?g.indented:"form"==h?g.indented+c:"stat"==h?g.indented+("operator"==a.lastType||","==a.lastType?d||c:0):"switch"!=g.info||i||0==b.doubleIndentSwitch?g.align?g.column+(i?0:1):g.indented+(i?0:c):g.indented+(/^(?:case|default)\b/.test(e)?c:2*c)},electricChars:":{}",blockCommentStart:e?null:"/*",blockCommentEnd:e?null:"*/",lineComment:e?null:"//",jsonMode:e}}),CodeMirror.defineMIME("text/javascript","javascript"),CodeMirror.defineMIME("text/ecmascript","javascript"),CodeMirror.defineMIME("application/javascript","javascript"),CodeMirror.defineMIME("application/ecmascript","javascript"),CodeMirror.defineMIME("application/json",{name:"javascript",json:!0}),CodeMirror.defineMIME("application/x-json",{name:"javascript",json:!0}),CodeMirror.defineMIME("text/typescript",{name:"javascript",typescript:!0}),CodeMirror.defineMIME("application/typescript",{name:"javascript",typescript:!0}),CodeMirror.defineMode("jinja2",function(){function b(a,b){var d=a.next();return"{"==d&&(d=a.eat(/\{|%|#/))?(a.eat("-"),b.tokenize=c(d),"tag"):void 0}function c(c){return"{"==c&&(c="}"),function(d,e){var f=d.next();return(f==c||"-"==f&&d.eat(c))&&d.eat("}")?(e.tokenize=b,"tag"):d.match(a)?"keyword":"#"==c?"comment":"string"}}var a=["block","endblock","for","endfor","in","true","false","loop","none","self","super","if","as","not","and","else","import","with","without","context"];return a=RegExp("^(("+a.join(")|(")+"))\\b"),{startState:function(){return{tokenize:b}},token:function(a,b){return b.tokenize(a,b)}}}),CodeMirror.defineMode("less",function(a){function d(a,b){return c=b,a}function f(a,b){var f=a.next();if("@"==f)return a.eatWhile(/[\w\-]/),d("meta",a.current());if("/"==f&&a.eat("*"))return b.tokenize=h,h(a,b);if("<"==f&&a.eat("!"))return b.tokenize=i,i(a,b);if("="==f)d(null,"compare");else{if("|"==f&&a.eat("="))return d(null,"compare");if('"'==f||"'"==f)return b.tokenize=j(f),b.tokenize(a,b);if("/"==f){if(a.eat("/"))return b.tokenize=g,g(a,b);if("string"==c||"("==c)return d("string","string");if(void 0!=b.stack[b.stack.length-1])return d(null,f);if(a.eatWhile(/[\a-zA-Z0-9\-_.\s]/),/\/|\)|#/.test(a.peek()||a.eatSpace()&&")"==a.peek())||a.eol())return d("string","string")}else{if("!"==f)return a.match(/^\s*\w*/),d("keyword","important");if(/\d/.test(f))return a.eatWhile(/[\w.%]/),d("number","unit");if(/[,+<>*\/]/.test(f))return"="==a.peek()||"a"==c?d("string","string"):d(null,"select-op");if(!/[;{}:\[\]()~\|]/.test(f)){if("."==f)return"("==c||"string"==c?d("string","string"):(a.eatWhile(/[\a-zA-Z0-9\-_]/)," "==a.peek()&&a.eatSpace(),")"==a.peek()?d("number","unit"):d("tag","tag"));if("#"==f)return a.eatWhile(/[A-Za-z0-9]/),4==a.current().length||7==a.current().length?null!=a.current().match(/[A-Fa-f0-9]{6}|[A-Fa-f0-9]{3}/,!1)?a.current().substring(1)!=a.current().match(/[A-Fa-f0-9]{6}|[A-Fa-f0-9]{3}/,!1)?d("atom","tag"):(a.eatSpace(),/[\/<>.(){!$%^&*_\-\\?=+\|#'~`]/.test(a.peek())?d("atom","tag"):"}"==a.peek()?d("number","unit"):/[a-zA-Z\\]/.test(a.peek())?d("atom","tag"):a.eol()?d("atom","tag"):d("number","unit")):(a.eatWhile(/[\w\\\-]/),d("atom","tag")):(a.eatWhile(/[\w\\\-]/),d("atom","tag"));if("&"==f)return a.eatWhile(/[\w\-]/),d(null,f);if(a.eatWhile(/[\w\\\-_%.{]/),"string"==c)return d("string","string");if(null!=a.current().match(/(^http$|^https$)/))return a.eatWhile(/[\w\\\-_%.{:\/]/),d("string","string");if("<"==a.peek()||">"==a.peek())return d("tag","tag");if(/\(/.test(a.peek()))return d(null,f);if("/"==a.peek()&&void 0!=b.stack[b.stack.length-1])return d("string","string");if(a.current().match(/\-\d|\-.\d/))return d("number","unit");if(/\/|[\s\)]/.test(a.peek()||a.eol()||a.eatSpace()&&"/"==a.peek())&&-1!==a.current().indexOf("."))return"{"==a.current().substring(a.current().length-1,a.current().length)?(a.backUp(1),d("tag","tag")):(a.eatSpace(),/[{<>.a-zA-Z\/]/.test(a.peek())||a.eol()?d("tag","tag"):d("string","string"));if(a.eol()||"["==a.peek()||"#"==a.peek()||"tag"==c)return"{"==a.current().substring(a.current().length-1,a.current().length)&&a.backUp(1),d("tag","tag");if("compare"==c||"a"==c||"("==c)return d("string","string");if("|"==c||"-"==a.current()||"["==c)return d(null,f);if(":"==a.peek()){a.next();var k=":"==a.peek()?!0:!1;if(k)a.backUp(1);else{var l=a.pos,m=a.current().length;a.eatWhile(/[a-z\\\-]/);var n=a.pos;if(null!=a.current().substring(m-1).match(e))return a.backUp(n-(l-1)),d("tag","tag");a.backUp(n-(l-1))}return k?d("tag","tag"):d("variable","variable")}return d("variable","variable")}if(":"==f)return a.eatWhile(/[a-z\\\-]/),e.test(a.current())?d("tag","tag"):":"==a.peek()?(a.next(),a.eatWhile(/[a-z\\\-]/),a.current().match(/\:\:\-(o|ms|moz|webkit)\-/)?d("string","string"):e.test(a.current().substring(1))?d("tag","tag"):d(null,f)):d(null,f);if("~"!=f)return d(null,f);if("r"==c)return d("string","string")}}}function g(a,b){return a.skipToEnd(),b.tokenize=f,d("comment","comment")}function h(a,b){for(var e,c=!1;null!=(e=a.next());){if(c&&"/"==e){b.tokenize=f;break}c="*"==e}return d("comment","comment")}function i(a,b){for(var e,c=0;null!=(e=a.next());){if(c>=2&&">"==e){b.tokenize=f;break}c="-"==e?c+1:0}return d("comment","comment")}function j(a){return function(b,c){for(var g,e=!1;null!=(g=b.next())&&(g!=a||e);)e=!e&&"\\"==g;return e||(c.tokenize=f),d("string","string")}}var c,b=a.indentUnit,e=/(^\:root$|^\:nth\-child$|^\:nth\-last\-child$|^\:nth\-of\-type$|^\:nth\-last\-of\-type$|^\:first\-child$|^\:last\-child$|^\:first\-of\-type$|^\:last\-of\-type$|^\:only\-child$|^\:only\-of\-type$|^\:empty$|^\:link|^\:visited$|^\:active$|^\:hover$|^\:focus$|^\:target$|^\:lang$|^\:enabled^\:disabled$|^\:checked$|^\:first\-line$|^\:first\-letter$|^\:before$|^\:after$|^\:not$|^\:required$|^\:invalid$)/;return{startState:function(a){return{tokenize:f,baseIndent:a||0,stack:[]}},token:function(a,b){if(a.eatSpace())return null;var d=b.tokenize(a,b),e=b.stack[b.stack.length-1];return"hash"==c&&"rule"==e?d="atom":"variable"==d&&("rule"==e?d=null:e&&"@media{"!=e||(d="when"==a.current()?"variable":/[\s,|\s\)|\s]/.test(a.peek())?"tag":c)),"rule"==e&&/^[\{\};]$/.test(c)&&b.stack.pop(),"{"==c?"@media"==e?b.stack[b.stack.length-1]="@media{":b.stack.push("{"):"}"==c?b.stack.pop():"@media"==c?b.stack.push("@media"):"{"==e&&"comment"!=c&&b.stack.push("rule"),d},indent:function(a,c){var d=a.stack.length;return/^\}/.test(c)&&(d-="rule"==a.stack[a.stack.length-1]?2:1),a.baseIndent+d*b},electricChars:"}"}}),CodeMirror.defineMIME("text/x-less","less"),CodeMirror.mimeModes.hasOwnProperty("text/css")||CodeMirror.defineMIME("text/css","less"),function(){CodeMirror.defineMode("livescript",function(){var a,c;return a=function(a,b){var c,d,f,g,h,i;if(c=b.next||"start"){if(b.next=b.next,Array.isArray(d=e[c])){for(f=0,g=d.length;g>f;++f)if(h=d[f],h.regex&&(i=a.match(h.regex)))return b.next=h.next,h.token;return a.next(),"error"}if(a.match(h=e[c]))return h.regex&&a.match(h.regex)?(b.next=h.next,h.token):(a.next(),"error")}return a.next(),"error"},c={startState:function(){return{next:"start",lastToken:null}},token:function(b,c){var d;return d=a(b,c),c.lastToken={style:d,indent:b.indentation(),content:b.current()},d.replace(/\./g," ")},indent:function(a){var c;return c=a.lastToken.indent,a.lastToken.content.match(b)&&(c+=2),c}}});var a="(?![\\d\\s])[$\\w\\xAA-\\uFFDC](?:(?!\\s)[$\\w\\xAA-\\uFFDC]|-[A-Za-z])*",b=RegExp("(?:[({[=:]|[-~]>|\\b(?:e(?:lse|xport)|d(?:o|efault)|t(?:ry|hen)|finally|import(?:\\s*all)?|const|var|let|new|catch(?:\\s*"+a+")?))\\s*$"),c="(?![$\\w]|-[A-Za-z]|\\s*:(?![:=]))",d={token:"string",regex:".+"},e={start:[{token:"comment.doc",regex:"/\\*",next:"comment"},{token:"comment",regex:"#.*"},{token:"keyword",regex:"(?:t(?:h(?:is|row|en)|ry|ypeof!?)|c(?:on(?:tinue|st)|a(?:se|tch)|lass)|i(?:n(?:stanceof)?|mp(?:ort(?:\\s+all)?|lements)|[fs])|d(?:e(?:fault|lete|bugger)|o)|f(?:or(?:\\s+own)?|inally|unction)|s(?:uper|witch)|e(?:lse|x(?:tends|port)|val)|a(?:nd|rguments)|n(?:ew|ot)|un(?:less|til)|w(?:hile|ith)|o[fr]|return|break|let|var|loop)"+c},{token:"constant.language",regex:"(?:true|false|yes|no|on|off|null|void|undefined)"+c},{token:"invalid.illegal",regex:"(?:p(?:ackage|r(?:ivate|otected)|ublic)|i(?:mplements|nterface)|enum|static|yield)"+c},{token:"language.support.class",regex:"(?:R(?:e(?:gExp|ferenceError)|angeError)|S(?:tring|yntaxError)|E(?:rror|valError)|Array|Boolean|Date|Function|Number|Object|TypeError|URIError)"+c},{token:"language.support.function",regex:"(?:is(?:NaN|Finite)|parse(?:Int|Float)|Math|JSON|(?:en|de)codeURI(?:Component)?)"+c},{token:"variable.language",regex:"(?:t(?:hat|il|o)|f(?:rom|allthrough)|it|by|e)"+c},{token:"identifier",regex:a+"\\s*:(?![:=])"},{token:"variable",regex:a},{token:"keyword.operator",regex:"(?:\\.{3}|\\s+\\?)"},{token:"keyword.variable",regex:"(?:@+|::|\\.\\.)",next:"key"},{token:"keyword.operator",regex:"\\.\\s*",next:"key"},{token:"string",regex:"\\\\\\S[^\\s,;)}\\]]*"},{token:"string.doc",regex:"'''",next:"qdoc"},{token:"string.doc",regex:'"""',next:"qqdoc"},{token:"string",regex:"'",next:"qstring"},{token:"string",regex:'"',next:"qqstring"},{token:"string",regex:"`",next:"js"},{token:"string",regex:"<\\[",next:"words"},{token:"string.regex",regex:"//",next:"heregex"},{token:"string.regex",regex:"\\/(?:[^[\\/\\n\\\\]*(?:(?:\\\\.|\\[[^\\]\\n\\\\]*(?:\\\\.[^\\]\\n\\\\]*)*\\])[^[\\/\\n\\\\]*)*)\\/[gimy$]{0,4}",next:"key"},{token:"constant.numeric",regex:"(?:0x[\\da-fA-F][\\da-fA-F_]*|(?:[2-9]|[12]\\d|3[0-6])r[\\da-zA-Z][\\da-zA-Z_]*|(?:\\d[\\d_]*(?:\\.\\d[\\d_]*)?|\\.\\d[\\d_]*)(?:e[+-]?\\d[\\d_]*)?[\\w$]*)"},{token:"lparen",regex:"[({[]"},{token:"rparen",regex:"[)}\\]]",next:"key"},{token:"keyword.operator",regex:"\\S+"},{token:"text",regex:"\\s+"}],heregex:[{token:"string.regex",regex:".*?//[gimy$?]{0,4}",next:"start"},{token:"string.regex",regex:"\\s*#{"},{token:"comment.regex",regex:"\\s+(?:#.*)?"},{token:"string.regex",regex:"\\S+"}],key:[{token:"keyword.operator",regex:"[.?@!]+"},{token:"identifier",regex:a,next:"start"},{token:"text",regex:".",next:"start"}],comment:[{token:"comment.doc",regex:".*?\\*/",next:"start"},{token:"comment.doc",regex:".+"}],qdoc:[{token:"string",regex:".*?'''",next:"key"},d],qqdoc:[{token:"string",regex:'.*?"""',next:"key"},d],qstring:[{token:"string",regex:"[^\\\\']*(?:\\\\.[^\\\\']*)*'",next:"key"},d],qqstring:[{token:"string",regex:'[^\\\\"]*(?:\\\\.[^\\\\"]*)*"',next:"key"},d],js:[{token:"string",regex:"[^\\\\`]*(?:\\\\.[^\\\\`]*)*`",next:"key"},d],words:[{token:"string",regex:".*?\\]>",next:"key"},d]};for(var f in e){var g=e[f];if(Array.isArray(g))for(var h=0,i=g.length;i>h;++h){var j=g[h];j.regex&&(e[f][h].regex=RegExp("^"+j.regex))}else g.regex&&(e[f].regex=RegExp("^"+g.regex))}}(),CodeMirror.defineMIME("text/x-livescript","livescript"),CodeMirror.defineMode("lua",function(a,b){function d(a){return RegExp("^(?:"+a.join("|")+")","i")}function e(a){return RegExp("^(?:"+a.join("|")+")$","i")}function l(a){for(var b=0;a.eat("=");)++b;return a.eat("["),b}function m(a,b){var c=a.next();return"-"==c&&a.eat("-")?a.eat("[")&&a.eat("[")?(b.cur=n(l(a),"comment"))(a,b):(a.skipToEnd(),"comment"):'"'==c||"'"==c?(b.cur=o(c))(a,b):"["==c&&/[\[=]/.test(a.peek())?(b.cur=n(l(a),"string"))(a,b):/\d/.test(c)?(a.eatWhile(/[\w.%]/),"number"):/[\w_]/.test(c)?(a.eatWhile(/[\w\\\-_.]/),"variable"):null}function n(a,b){return function(c,d){for(var f,e=null;null!=(f=c.next());)if(null==e)"]"==f&&(e=0);else if("="==f)++e;else{if("]"==f&&e==a){d.cur=m;break}e=null}return b}}function o(a){return function(b,c){for(var e,d=!1;null!=(e=b.next())&&(e!=a||d);)d=!d&&"\\"==e;return d||(c.cur=m),"string"}}var c=a.indentUnit,f=e(b.specials||[]),g=e(["_G","_VERSION","assert","collectgarbage","dofile","error","getfenv","getmetatable","ipairs","load","loadfile","loadstring","module","next","pairs","pcall","print","rawequal","rawget","rawset","require","select","setfenv","setmetatable","tonumber","tostring","type","unpack","xpcall","coroutine.create","coroutine.resume","coroutine.running","coroutine.status","coroutine.wrap","coroutine.yield","debug.debug","debug.getfenv","debug.gethook","debug.getinfo","debug.getlocal","debug.getmetatable","debug.getregistry","debug.getupvalue","debug.setfenv","debug.sethook","debug.setlocal","debug.setmetatable","debug.setupvalue","debug.traceback","close","flush","lines","read","seek","setvbuf","write","io.close","io.flush","io.input","io.lines","io.open","io.output","io.popen","io.read","io.stderr","io.stdin","io.stdout","io.tmpfile","io.type","io.write","math.abs","math.acos","math.asin","math.atan","math.atan2","math.ceil","math.cos","math.cosh","math.deg","math.exp","math.floor","math.fmod","math.frexp","math.huge","math.ldexp","math.log","math.log10","math.max","math.min","math.modf","math.pi","math.pow","math.rad","math.random","math.randomseed","math.sin","math.sinh","math.sqrt","math.tan","math.tanh","os.clock","os.date","os.difftime","os.execute","os.exit","os.getenv","os.remove","os.rename","os.setlocale","os.time","os.tmpname","package.cpath","package.loaded","package.loaders","package.loadlib","package.path","package.preload","package.seeall","string.byte","string.char","string.dump","string.find","string.format","string.gmatch","string.gsub","string.len","string.lower","string.match","string.rep","string.reverse","string.sub","string.upper","table.concat","table.insert","table.maxn","table.remove","table.sort"]),h=e(["and","break","elseif","false","nil","not","or","return","true","function","end","if","then","else","do","while","repeat","until","for","in","local"]),i=e(["function","if","repeat","do","\\(","{"]),j=e(["end","until","\\)","}"]),k=d(["end","until","\\)","}","else","elseif"]);return{startState:function(a){return{basecol:a||0,indentDepth:0,cur:m}},token:function(a,b){if(a.eatSpace())return null;var c=b.cur(a,b),d=a.current();return"variable"==c&&(h.test(d)?c="keyword":g.test(d)?c="builtin":f.test(d)&&(c="variable-2")),"comment"!=c&&"string"!=c&&(i.test(d)?++b.indentDepth:j.test(d)&&--b.indentDepth),c},indent:function(a,b){var d=k.test(b);return a.basecol+c*(a.indentDepth-(d?1:0))},lineComment:"--",blockCommentStart:"--[[",blockCommentEnd:"]]"}}),CodeMirror.defineMIME("text/x-lua","lua"),CodeMirror.defineMode("markdown",function(a,b){function C(a,b,c){return b.f=b.inline=c,c(a,b)}function D(a,b,c){return b.f=b.block=c,c(a,b)}function E(a){return a.linkTitle=!1,a.em=!1,a.strong=!1,a.quote=0,c||a.f!=G||(a.f=K,a.block=F),a.thisLineHasContent=!1,null}function F(a,c){var d=c.list!==!1;if(c.list!==!1&&c.indentationDiff>=0?(4>c.indentationDiff&&(c.indentation-=c.indentationDiff),c.list=null):c.list!==!1&&c.indentation>0?(c.list=null,c.listDepth=Math.floor(c.indentation/4)):c.list!==!1&&(c.list=!1,c.listDepth=0),c.indentationDiff>=4)return c.indentation-=4,a.skipToEnd(),i;if(a.eatSpace())return null;if("#"===a.peek()||c.prevLineHasContent&&a.match(A))c.header=!0;else if(a.eat(">"))for(c.indentation++,c.quote=1,a.eatSpace();a.eat(">");)a.eatSpace(),c.quote++;else{if("["===a.peek())return C(a,c,M);if(a.match(w,!0))return o;if(c.prevLineHasContent&&!d||!a.match(x,!0)&&!a.match(y,!0)){if(b.fencedCodeBlocks&&a.match(/^```([\w+#]*)/,!0))return c.localMode=f(RegExp.$1),c.localMode&&(c.localState=c.localMode.startState()),D(a,c,H),i}else c.indentation+=4,c.list=!0,c.listDepth++,b.taskLists&&a.match(z,!1)&&(c.taskList=!0)}return C(a,c,c.inline)}function G(a,b){var e=d.token(a,b.htmlState);return c&&"tag"===e&&"openTag"!==b.htmlState.type&&!b.htmlState.context&&(b.f=K,b.block=F),b.md_inside&&-1!=a.current().indexOf(">")&&(b.f=K,b.block=F,b.htmlState.context=void 0),e}function H(a,b){return a.sol()&&a.match(/^```/,!0)?(b.localMode=b.localState=null,b.f=K,b.block=F,i):b.localMode?b.localMode.token(a,b.localState):(a.skipToEnd(),i)}function I(a){var b=[];if(a.taskOpen)return"meta";if(a.taskClosed)return"property";if(a.strong&&b.push(v),a.em&&b.push(u),a.linkText&&b.push(s),a.code&&b.push(i),a.header&&b.push(h),a.quote&&b.push(a.quote%2?j:k),a.list!==!1){var c=(a.listDepth-1)%3;c?1===c?b.push(m):b.push(n):b.push(l)}return b.length?b.join(" "):null}function J(a,b){return a.match(B,!0)?I(b):void 0}function K(a,c){var d=c.text(a,c);if(d!==void 0)return d;if(c.list)return c.list=null,I(c);if(c.taskList){var e="x"!==a.match(z,!0)[1];return e?c.taskOpen=!0:c.taskClosed=!0,c.taskList=!1,I(c)}c.taskOpen=!1,c.taskClosed=!1;var f=a.next();if("\\"===f)return a.next(),I(c);if(c.linkTitle){c.linkTitle=!1;var h=f;"("===f&&(h=")"),h=(h+"").replace(/([.?*+^$[\]\\(){}|-])/g,"\\$1");var i="^\\s*(?:[^"+h+"\\\\]+|\\\\\\\\|\\\\.)"+h;if(a.match(RegExp(i),!0))return t}if("`"===f){var j=I(c),k=a.pos;a.eatWhile("`");var l=1+a.pos-k;return c.code?l===g?(c.code=!1,j):I(c):(g=l,c.code=!0,I(c))}if(c.code)return I(c);if("!"===f&&a.match(/\[[^\]]*\] ?(?:\(|\[)/,!1))return a.match(/\[[^\]]*\]/),c.inline=c.f=L,p;if("["===f&&a.match(/.*\](\(| ?\[)/,!1))return c.linkText=!0,I(c);if("]"===f&&c.linkText){var m=I(c);return c.linkText=!1,c.inline=c.f=L,m}if("<"===f&&a.match(/^(https?|ftps?):\/\/(?:[^\\>]|\\.)+>/,!1))return C(a,c,Q(q,">"));if("<"===f&&a.match(/^[^> \\]+@(?:[^\\>]|\\.)+>/,!1))return C(a,c,Q(r,">"));if("<"===f&&a.match(/^\w/,!1)){if(-1!=a.string.indexOf(">")){var n=a.string.substring(1,a.string.indexOf(">"));/markdown\s*=\s*('|"){0,1}1('|"){0,1}/.test(n)&&(c.md_inside=!0)}return a.backUp(1),D(a,c,G)}if("<"===f&&a.match(/^\/\w*?>/))return c.md_inside=!1,"tag";var o=!1;if(!b.underscoresBreakWords&&"_"===f&&"_"!==a.peek()&&a.match(/(\w)/,!1)){var s=a.pos-2;if(s>=0){var u=a.string.charAt(s);"_"!==u&&u.match(/(\w)/,!1)&&(o=!0)}}var j=I(c);if("*"===f||"_"===f&&!o){if(c.strong===f&&a.eat(f))return c.strong=!1,j;if(!c.strong&&a.eat(f))return c.strong=f,I(c);if(c.em===f)return c.em=!1,j;if(!c.em)return c.em=f,I(c)}else if(" "===f&&(a.eat("*")||a.eat("_"))){if(" "===a.peek())return I(c);a.backUp(1)}return I(c)}function L(a,b){if(a.eatSpace())return null;var c=a.next();return"("===c||"["===c?C(a,b,Q(t,"("===c?")":"]")):"error"}function M(a,b){return a.match(/^[^\]]*\]:/,!0)?(b.f=N,s):C(a,b,K)}function N(a,b){return a.eatSpace()?null:(a.match(/^[^\s]+/,!0),void 0===a.peek()?b.linkTitle=!0:a.match(/^(?:\s+(?:"(?:[^"\\]|\\\\|\\.)+"|'(?:[^'\\]|\\\\|\\.)+'|\((?:[^)\\]|\\\\|\\.)+\)))?/,!0),b.f=b.inline=K,t)}function P(a){return O[a]||(a=(a+"").replace(/([.?*+^$[\]\\(){}|-])/g,"\\$1"),O[a]=RegExp("^(?:[^\\\\]|\\\\.)*?("+a+")")),O[a]}function Q(a,b,c){return c=c||K,function(d,e){return d.match(P(b)),e.inline=e.f=c,a}}var c=CodeMirror.modes.hasOwnProperty("xml"),d=CodeMirror.getMode(a,c?{name:"xml",htmlMode:!0}:"text/plain"),e={html:"htmlmixed",js:"javascript",json:"application/json",c:"text/x-csrc","c++":"text/x-c++src",java:"text/x-java",csharp:"text/x-csharp","c#":"text/x-csharp",scala:"text/x-scala"},f=function(){var b,f,c={},d={},g=[];for(var h in CodeMirror.modes)CodeMirror.modes.propertyIsEnumerable(h)&&g.push(h);for(b=0;g.length>b;b++)c[g[b]]=g[b];var i=[];for(var h in CodeMirror.mimeModes)CodeMirror.mimeModes.propertyIsEnumerable(h)&&i.push({mime:h,mode:CodeMirror.mimeModes[h]});for(b=0;i.length>b;b++)f=i[b].mime,d[f]=i[b].mime;for(var j in e)(e[j]in c||e[j]in d)&&(c[j]=e[j]);return function(b){return c[b]?CodeMirror.getMode(a,c[b]):null}}();void 0===b.underscoresBreakWords&&(b.underscoresBreakWords=!0),void 0===b.fencedCodeBlocks&&(b.fencedCodeBlocks=!1),void 0===b.taskLists&&(b.taskLists=!1);var g=0,h="header",i="comment",j="atom",k="number",l="variable-2",m="variable-3",n="keyword",o="hr",p="tag",q="link",r="link",s="link",t="string",u="em",v="strong",w=/^([*\-=_])(?:\s*\1){2,}\s*$/,x=/^[*\-+]\s+/,y=/^[0-9]+\.\s+/,z=/^\[(x| )\](?=\s)/,A=/^(?:\={1,}|-{1,})$/,B=/^[^!\[\]*_\\<>` "'(]+/,O=[];return{startState:function(){return{f:F,prevLineHasContent:!1,thisLineHasContent:!1,block:F,htmlState:CodeMirror.startState(d),indentation:0,inline:K,text:J,linkText:!1,linkTitle:!1,em:!1,strong:!1,header:!1,taskList:!1,list:!1,listDepth:0,quote:0}+},copyState:function(a){return{f:a.f,prevLineHasContent:a.prevLineHasContent,thisLineHasContent:a.thisLineHasContent,block:a.block,htmlState:CodeMirror.copyState(d,a.htmlState),indentation:a.indentation,localMode:a.localMode,localState:a.localMode?CodeMirror.copyState(a.localMode,a.localState):null,inline:a.inline,text:a.text,linkTitle:a.linkTitle,em:a.em,strong:a.strong,header:a.header,taskList:a.taskList,list:a.list,listDepth:a.listDepth,quote:a.quote,md_inside:a.md_inside}},token:function(a,b){if(a.sol()){if(a.match(/^\s*$/,!0))return b.prevLineHasContent=!1,E(b);b.prevLineHasContent=b.thisLineHasContent,b.thisLineHasContent=!0,b.header=!1,b.taskList=!1,b.code=!1,b.f=b.block;var c=a.match(/^\s*/,!0)[0].replace(/\t/g," ").length,d=4*Math.floor((c-b.indentation)/4);d>4&&(d=4);var e=b.indentation+d;if(b.indentationDiff=e-b.indentation,b.indentation=e,c>0)return null}return b.f(a,b)},blankLine:E,getType:I}},"xml"),CodeMirror.defineMIME("text/x-markdown","markdown"),CodeMirror.defineMIME("text/mirc","mirc"),CodeMirror.defineMode("mirc",function(){function a(a){for(var b={},c=a.split(" "),d=0;c.length>d;++d)b[c[d]]=!0;return b}function f(a,b,c){return b.tokenize=c,c(a,b)}function g(a,g){var j=g.beforeParams;g.beforeParams=!1;var k=a.next();if(/[\[\]{}\(\),\.]/.test(k))return"("==k&&j?g.inParams=!0:")"==k&&(g.inParams=!1),null;if(/\d/.test(k))return a.eatWhile(/[\w\.]/),"number";if("\\"==k)return a.eat("\\"),a.eat(/./),"number";if("/"==k&&a.eat("*"))return f(a,g,h);if(";"==k&&a.match(/ *\( *\(/))return f(a,g,i);if(";"!=k||g.inParams){if('"'==k)return a.eat(/"/),"keyword";if("$"==k)return a.eatWhile(/[$_a-z0-9A-Z\.:]/),b&&b.propertyIsEnumerable(a.current().toLowerCase())?"keyword":(g.beforeParams=!0,"builtin");if("%"==k)return a.eatWhile(/[^,^\s^\(^\)]/),g.beforeParams=!0,"string";if(e.test(k))return a.eatWhile(e),"operator";a.eatWhile(/[\w\$_{}]/);var l=a.current().toLowerCase();return c&&c.propertyIsEnumerable(l)?"keyword":d&&d.propertyIsEnumerable(l)?(g.beforeParams=!0,"keyword"):null}return a.skipToEnd(),"comment"}function h(a,b){for(var d,c=!1;d=a.next();){if("/"==d&&c){b.tokenize=g;break}c="*"==d}return"comment"}function i(a,b){for(var d,c=0;d=a.next();){if(";"==d&&2==c){b.tokenize=g;break}")"==d?c++:" "!=d&&(c=0)}return"meta"}var b=a("$! $$ $& $? $+ $abook $abs $active $activecid $activewid $address $addtok $agent $agentname $agentstat $agentver $alias $and $anick $ansi2mirc $aop $appactive $appstate $asc $asctime $asin $atan $avoice $away $awaymsg $awaytime $banmask $base $bfind $binoff $biton $bnick $bvar $bytes $calc $cb $cd $ceil $chan $chanmodes $chantypes $chat $chr $cid $clevel $click $cmdbox $cmdline $cnick $color $com $comcall $comchan $comerr $compact $compress $comval $cos $count $cr $crc $creq $crlf $ctime $ctimer $ctrlenter $date $day $daylight $dbuh $dbuw $dccignore $dccport $dde $ddename $debug $decode $decompress $deltok $devent $dialog $did $didreg $didtok $didwm $disk $dlevel $dll $dllcall $dname $dns $duration $ebeeps $editbox $emailaddr $encode $error $eval $event $exist $feof $ferr $fgetc $file $filename $filtered $finddir $finddirn $findfile $findfilen $findtok $fline $floor $fopen $fread $fserve $fulladdress $fulldate $fullname $fullscreen $get $getdir $getdot $gettok $gmt $group $halted $hash $height $hfind $hget $highlight $hnick $hotline $hotlinepos $ial $ialchan $ibl $idle $iel $ifmatch $ignore $iif $iil $inelipse $ini $inmidi $inpaste $inpoly $input $inrect $inroundrect $insong $instok $int $inwave $ip $isalias $isbit $isdde $isdir $isfile $isid $islower $istok $isupper $keychar $keyrpt $keyval $knick $lactive $lactivecid $lactivewid $left $len $level $lf $line $lines $link $lock $lock $locked $log $logstamp $logstampfmt $longfn $longip $lower $ltimer $maddress $mask $matchkey $matchtok $md5 $me $menu $menubar $menucontext $menutype $mid $middir $mircdir $mircexe $mircini $mklogfn $mnick $mode $modefirst $modelast $modespl $mouse $msfile $network $newnick $nick $nofile $nopath $noqt $not $notags $notify $null $numeric $numok $oline $onpoly $opnick $or $ord $os $passivedcc $pic $play $pnick $port $portable $portfree $pos $prefix $prop $protect $puttok $qt $query $rand $r $rawmsg $read $readomo $readn $regex $regml $regsub $regsubex $remove $remtok $replace $replacex $reptok $result $rgb $right $round $scid $scon $script $scriptdir $scriptline $sdir $send $server $serverip $sfile $sha1 $shortfn $show $signal $sin $site $sline $snick $snicks $snotify $sock $sockbr $sockerr $sockname $sorttok $sound $sqrt $ssl $sreq $sslready $status $strip $str $stripped $syle $submenu $switchbar $tan $target $ticks $time $timer $timestamp $timestampfmt $timezone $tip $titlebar $toolbar $treebar $trust $ulevel $ulist $upper $uptime $url $usermode $v1 $v2 $var $vcmd $vcmdstat $vcmdver $version $vnick $vol $wid $width $wildsite $wildtok $window $wrap $xor"),c=a("abook ajinvite alias aline ame amsg anick aop auser autojoin avoice away background ban bcopy beep bread break breplace bset btrunc bunset bwrite channel clear clearall cline clipboard close cnick color comclose comopen comreg continue copy creq ctcpreply ctcps dcc dccserver dde ddeserver debug dec describe dialog did didtok disable disconnect dlevel dline dll dns dqwindow drawcopy drawdot drawfill drawline drawpic drawrect drawreplace drawrot drawsave drawscroll drawtext ebeeps echo editbox emailaddr enable events exit fclose filter findtext finger firewall flash flist flood flush flushini font fopen fseek fsend fserve fullname fwrite ghide gload gmove gopts goto gplay gpoint gqreq groups gshow gsize gstop gtalk gunload hadd halt haltdef hdec hdel help hfree hinc hload hmake hop hsave ial ialclear ialmark identd if ignore iline inc invite iuser join kick linesep links list load loadbuf localinfo log mdi me menubar mkdir mnick mode msg nick noop notice notify omsg onotice part partall pdcc perform play playctrl pop protect pvoice qme qmsg query queryn quit raw reload remini remote remove rename renwin reseterror resetidle return rlevel rline rmdir run ruser save savebuf saveini say scid scon server set showmirc signam sline sockaccept sockclose socklist socklisten sockmark sockopen sockpause sockread sockrename sockudp sockwrite sound speak splay sreq strip switchbar timer timestamp titlebar tnick tokenize toolbar topic tray treebar ulist unload unset unsetall updatenl url uwho var vcadd vcmd vcrem vol while whois window winhelp write writeint if isalnum isalpha isaop isavoice isban ischan ishop isignore isin isincs isletter islower isnotify isnum ison isop isprotect isreg isupper isvoice iswm iswmcs elseif else goto menu nicklist status title icon size option text edit button check radio box scroll list combo link tab item"),d=a("if elseif else and not or eq ne in ni for foreach while switch"),e=/[+\-*&%=<>!?^\/\|]/;return{startState:function(){return{tokenize:g,beforeParams:!1,inParams:!1}},token:function(a,b){return a.eatSpace()?null:b.tokenize(a,b)}}}),CodeMirror.defineMode("ntriples",function(){function b(b,c){var e,d=b.location;e=d==a.PRE_SUBJECT&&"<"==c?a.WRITING_SUB_URI:d==a.PRE_SUBJECT&&"_"==c?a.WRITING_BNODE_URI:d==a.PRE_PRED&&"<"==c?a.WRITING_PRED_URI:d==a.PRE_OBJ&&"<"==c?a.WRITING_OBJ_URI:d==a.PRE_OBJ&&"_"==c?a.WRITING_OBJ_BNODE:d==a.PRE_OBJ&&'"'==c?a.WRITING_OBJ_LITERAL:d==a.WRITING_SUB_URI&&">"==c?a.PRE_PRED:d==a.WRITING_BNODE_URI&&" "==c?a.PRE_PRED:d==a.WRITING_PRED_URI&&">"==c?a.PRE_OBJ:d==a.WRITING_OBJ_URI&&">"==c?a.POST_OBJ:d==a.WRITING_OBJ_BNODE&&" "==c?a.POST_OBJ:d==a.WRITING_OBJ_LITERAL&&'"'==c?a.POST_OBJ:d==a.WRITING_LIT_LANG&&" "==c?a.POST_OBJ:d==a.WRITING_LIT_TYPE&&">"==c?a.POST_OBJ:d==a.WRITING_OBJ_LITERAL&&"@"==c?a.WRITING_LIT_LANG:d==a.WRITING_OBJ_LITERAL&&"^"==c?a.WRITING_LIT_TYPE:" "!=c||d!=a.PRE_SUBJECT&&d!=a.PRE_PRED&&d!=a.PRE_OBJ&&d!=a.POST_OBJ?d==a.POST_OBJ&&"."==c?a.PRE_SUBJECT:a.ERROR:d,b.location=e}var a={PRE_SUBJECT:0,WRITING_SUB_URI:1,WRITING_BNODE_URI:2,PRE_PRED:3,WRITING_PRED_URI:4,PRE_OBJ:5,WRITING_OBJ_URI:6,WRITING_OBJ_BNODE:7,WRITING_OBJ_LITERAL:8,WRITING_LIT_LANG:9,WRITING_LIT_TYPE:10,POST_OBJ:11,ERROR:12};return{startState:function(){return{location:a.PRE_SUBJECT,uris:[],anchors:[],bnodes:[],langs:[],types:[]}},token:function(a,c){var d=a.next();if("<"==d){b(c,d);var e="";return a.eatWhile(function(a){return"#"!=a&&">"!=a?(e+=a,!0):!1}),c.uris.push(e),a.match("#",!1)?"variable":(a.next(),b(c,">"),"variable")}if("#"==d){var f="";return a.eatWhile(function(a){return">"!=a&&" "!=a?(f+=a,!0):!1}),c.anchors.push(f),"variable-2"}if(">"==d)return b(c,">"),"variable";if("_"==d){b(c,d);var g="";return a.eatWhile(function(a){return" "!=a?(g+=a,!0):!1}),c.bnodes.push(g),a.next(),b(c," "),"builtin"}if('"'==d)return b(c,d),a.eatWhile(function(a){return'"'!=a}),a.next(),"@"!=a.peek()&&"^"!=a.peek()&&b(c,'"'),"string";if("@"==d){b(c,"@");var h="";return a.eatWhile(function(a){return" "!=a?(h+=a,!0):!1}),c.langs.push(h),a.next(),b(c," "),"string-2"}if("^"==d){a.next(),b(c,"^");var i="";return a.eatWhile(function(a){return">"!=a?(i+=a,!0):!1}),c.types.push(i),a.next(),b(c,">"),"variable"}" "==d&&b(c,d),"."==d&&b(c,d)}}}),CodeMirror.defineMIME("text/n-triples","ntriples"),CodeMirror.defineMode("ocaml",function(){function b(b,e){var f=b.next();if('"'===f)return e.tokenize=c,e.tokenize(b,e);if("("===f&&b.eat("*"))return e.commentLevel++,e.tokenize=d,e.tokenize(b,e);if("~"===f)return b.eatWhile(/\w/),"variable-2";if("`"===f)return b.eatWhile(/\w/),"quote";if(/\d/.test(f))return b.eatWhile(/[\d]/),b.eat(".")&&b.eatWhile(/[\d]/),"number";if(/[+\-*&%=<>!?|]/.test(f))return"operator";b.eatWhile(/\w/);var g=b.current();return a[g]||"variable"}function c(a,c){for(var d,e=!1,f=!1;null!=(d=a.next());){if('"'===d&&!f){e=!0;break}f=!f&&"\\"===d}return e&&!f&&(c.tokenize=b),"string"}function d(a,c){for(var d,e;c.commentLevel>0&&null!=(e=a.next());)"("===d&&"*"===e&&c.commentLevel++,"*"===d&&")"===e&&c.commentLevel--,d=e;return 0>=c.commentLevel&&(c.tokenize=b),"comment"}var a={"true":"atom","false":"atom",let:"keyword",rec:"keyword","in":"keyword",of:"keyword",and:"keyword",succ:"keyword","if":"keyword",then:"keyword","else":"keyword","for":"keyword",to:"keyword","while":"keyword","do":"keyword",done:"keyword",fun:"keyword","function":"keyword",val:"keyword",type:"keyword",mutable:"keyword",match:"keyword","with":"keyword","try":"keyword",raise:"keyword",begin:"keyword",end:"keyword",open:"builtin",trace:"builtin",ignore:"builtin",exit:"builtin",print_string:"builtin",print_endline:"builtin"};return{startState:function(){return{tokenize:b,commentLevel:0}},token:function(a,b){return a.eatSpace()?null:b.tokenize(a,b)},blockCommentStart:"(*",blockCommentEnd:"*)"}}),CodeMirror.defineMIME("text/x-ocaml","ocaml"),CodeMirror.defineMode("pascal",function(){function a(a){for(var b={},c=a.split(" "),d=0;c.length>d;++d)b[c[d]]=!0;return b}function e(a,e){var h=a.next();if("#"==h&&e.startOfLine)return a.skipToEnd(),"meta";if('"'==h||"'"==h)return e.tokenize=f(h),e.tokenize(a,e);if("("==h&&a.eat("*"))return e.tokenize=g,g(a,e);if(/[\[\]{}\(\),;\:\.]/.test(h))return null;if(/\d/.test(h))return a.eatWhile(/[\w\.]/),"number";if("/"==h&&a.eat("/"))return a.skipToEnd(),"comment";if(d.test(h))return a.eatWhile(d),"operator";a.eatWhile(/[\w\$_]/);var i=a.current();return b.propertyIsEnumerable(i)?"keyword":c.propertyIsEnumerable(i)?"atom":"variable"}function f(a){return function(b,c){for(var e,d=!1,f=!1;null!=(e=b.next());){if(e==a&&!d){f=!0;break}d=!d&&"\\"==e}return(f||!d)&&(c.tokenize=null),"string"}}function g(a,b){for(var d,c=!1;d=a.next();){if(")"==d&&c){b.tokenize=null;break}c="*"==d}return"comment"}var b=a("and array begin case const div do downto else end file for forward integer boolean char function goto if in label mod nil not of or packed procedure program record repeat set string then to type until var while with"),c={"null":!0},d=/[+\-*&%=<>!?|\/]/;return{startState:function(){return{tokenize:null}},token:function(a,b){if(a.eatSpace())return null;var c=(b.tokenize||e)(a,b);return"comment"==c||"meta"==c?c:c},electricChars:"{}"}}),CodeMirror.defineMIME("text/x-pascal","pascal"),CodeMirror.defineMode("perl",function(){function d(a,b,c,d,e){return b.chain=null,b.style=null,b.tail=null,b.tokenize=function(a,b){for(var h,g=!1,i=0;h=a.next();){if(h===c[i]&&!g)return void 0!==c[++i]?(b.chain=c[i],b.style=d,b.tail=e):e&&a.eatWhile(e),b.tokenize=f,d;g=!g&&"\\"==h}return d},b.tokenize(a,b)}function e(a,b,c){return b.tokenize=function(a,b){return a.string==c&&(b.tokenize=f),a.skipToEnd(),"string"},b.tokenize(a,b)}function f(f,g){if(f.eatSpace())return null;if(g.chain)return d(f,g,g.chain,g.style,g.tail);if(f.match(/^\-?[\d\.]/,!1)&&f.match(/^(\-?(\d*\.\d+(e[+-]?\d+)?|\d+\.\d*)|0x[\da-fA-F]+|0b[01]+|\d+(e[+-]?\d+)?)/))return"number";if(f.match(/^<<(?=\w)/))return f.eatWhile(/\w/),e(f,g,f.current().substr(2));if(f.sol()&&f.match(/^\=item(?!\w)/))return e(f,g,"=cut");var h=f.next();if('"'==h||"'"==h){if(f.prefix(3)=="<<"+h){var i=f.pos;f.eatWhile(/\w/);var j=f.current().substr(1);if(j&&f.eat(h))return e(f,g,j);f.pos=i}return d(f,g,[h],"string")}if("q"==h){var k=f.look(-2);if(!k||!/\w/.test(k))if(k=f.look(0),"x"==k){if(k=f.look(1),"("==k)return f.eatSuffix(2),d(f,g,[")"],b,c);if("["==k)return f.eatSuffix(2),d(f,g,["]"],b,c);if("{"==k)return f.eatSuffix(2),d(f,g,["}"],b,c);if("<"==k)return f.eatSuffix(2),d(f,g,[">"],b,c);if(/[\^'"!~\/]/.test(k))return f.eatSuffix(1),d(f,g,[f.eat(k)],b,c)}else if("q"==k){if(k=f.look(1),"("==k)return f.eatSuffix(2),d(f,g,[")"],"string");if("["==k)return f.eatSuffix(2),d(f,g,["]"],"string");if("{"==k)return f.eatSuffix(2),d(f,g,["}"],"string");if("<"==k)return f.eatSuffix(2),d(f,g,[">"],"string");if(/[\^'"!~\/]/.test(k))return f.eatSuffix(1),d(f,g,[f.eat(k)],"string")}else if("w"==k){if(k=f.look(1),"("==k)return f.eatSuffix(2),d(f,g,[")"],"bracket");if("["==k)return f.eatSuffix(2),d(f,g,["]"],"bracket");if("{"==k)return f.eatSuffix(2),d(f,g,["}"],"bracket");if("<"==k)return f.eatSuffix(2),d(f,g,[">"],"bracket");if(/[\^'"!~\/]/.test(k))return f.eatSuffix(1),d(f,g,[f.eat(k)],"bracket")}else if("r"==k){if(k=f.look(1),"("==k)return f.eatSuffix(2),d(f,g,[")"],b,c);if("["==k)return f.eatSuffix(2),d(f,g,["]"],b,c);if("{"==k)return f.eatSuffix(2),d(f,g,["}"],b,c);if("<"==k)return f.eatSuffix(2),d(f,g,[">"],b,c);if(/[\^'"!~\/]/.test(k))return f.eatSuffix(1),d(f,g,[f.eat(k)],b,c)}else if(/[\^'"!~\/(\[{<]/.test(k)){if("("==k)return f.eatSuffix(1),d(f,g,[")"],"string");if("["==k)return f.eatSuffix(1),d(f,g,["]"],"string");if("{"==k)return f.eatSuffix(1),d(f,g,["}"],"string");if("<"==k)return f.eatSuffix(1),d(f,g,[">"],"string");if(/[\^'"!~\/]/.test(k))return d(f,g,[f.eat(k)],"string")}}if("m"==h){var k=f.look(-2);if((!k||!/\w/.test(k))&&(k=f.eat(/[(\[{<\^'"!~\/]/))){if(/[\^'"!~\/]/.test(k))return d(f,g,[k],b,c);if("("==k)return d(f,g,[")"],b,c);if("["==k)return d(f,g,["]"],b,c);if("{"==k)return d(f,g,["}"],b,c);if("<"==k)return d(f,g,[">"],b,c)}}if("s"==h){var k=/[\/>\]})\w]/.test(f.look(-2));if(!k&&(k=f.eat(/[(\[{<\^'"!~\/]/)))return"["==k?d(f,g,["]","]"],b,c):"{"==k?d(f,g,["}","}"],b,c):"<"==k?d(f,g,[">",">"],b,c):"("==k?d(f,g,[")",")"],b,c):d(f,g,[k,k],b,c)}if("y"==h){var k=/[\/>\]})\w]/.test(f.look(-2));if(!k&&(k=f.eat(/[(\[{<\^'"!~\/]/)))return"["==k?d(f,g,["]","]"],b,c):"{"==k?d(f,g,["}","}"],b,c):"<"==k?d(f,g,[">",">"],b,c):"("==k?d(f,g,[")",")"],b,c):d(f,g,[k,k],b,c)}if("t"==h){var k=/[\/>\]})\w]/.test(f.look(-2));if(!k&&(k=f.eat("r"),k&&(k=f.eat(/[(\[{<\^'"!~\/]/))))return"["==k?d(f,g,["]","]"],b,c):"{"==k?d(f,g,["}","}"],b,c):"<"==k?d(f,g,[">",">"],b,c):"("==k?d(f,g,[")",")"],b,c):d(f,g,[k,k],b,c)}if("`"==h)return d(f,g,[h],"variable-2");if("/"==h)return/~\s*$/.test(f.prefix())?d(f,g,[h],b,c):"operator";if("$"==h){var i=f.pos;if(f.eatWhile(/\d/)||f.eat("{")&&f.eatWhile(/\d/)&&f.eat("}"))return"variable-2";f.pos=i}if(/[$@%]/.test(h)){var i=f.pos;if(f.eat("^")&&f.eat(/[A-Z]/)||!/[@$%&]/.test(f.look(-2))&&f.eat(/[=|\\\-#?@;:&`~\^!\[\]*'"$+.,\/<>()]/)){var k=f.current();if(a[k])return"variable-2"}f.pos=i}if(/[$@%&]/.test(h)&&(f.eatWhile(/[\w$\[\]]/)||f.eat("{")&&f.eatWhile(/[\w$\[\]]/)&&f.eat("}"))){var k=f.current();return a[k]?"variable-2":"variable"}if("#"==h&&"$"!=f.look(-2))return f.skipToEnd(),"comment";if(/[:+\-\^*$&%@=<>!?|\/~\.]/.test(h)){var i=f.pos;if(f.eatWhile(/[:+\-\^*$&%@=<>!?|\/~\.]/),a[f.current()])return"operator";f.pos=i}if("_"==h&&1==f.pos){if("_END__"==f.suffix(6))return d(f,g,["\0"],"comment");if("_DATA__"==f.suffix(7))return d(f,g,["\0"],"variable-2");if("_C__"==f.suffix(7))return d(f,g,["\0"],"string")}if(/\w/.test(h)){var i=f.pos;if("{"==f.look(-2)&&("}"==f.look(0)||f.eatWhile(/\w/)&&"}"==f.look(0)))return"string";f.pos=i}if(/[A-Z]/.test(h)){var l=f.look(-2),i=f.pos;if(f.eatWhile(/[A-Z_]/),!/[\da-z]/.test(f.look(0))){var k=a[f.current()];return k?(k[1]&&(k=k[0]),":"!=l?1==k?"keyword":2==k?"def":3==k?"atom":4==k?"operator":5==k?"variable-2":"meta":"meta"):"meta"}f.pos=i}if(/[a-zA-Z_]/.test(h)){var l=f.look(-2);f.eatWhile(/\w/);var k=a[f.current()];return k?(k[1]&&(k=k[0]),":"!=l?1==k?"keyword":2==k?"def":3==k?"atom":4==k?"operator":5==k?"variable-2":"meta":"meta"):"meta"}return null}var a={"->":4,"++":4,"--":4,"**":4,"=~":4,"!~":4,"*":4,"/":4,"%":4,x:4,"+":4,"-":4,".":4,"<<":4,">>":4,"<":4,">":4,"<=":4,">=":4,lt:4,gt:4,le:4,ge:4,"==":4,"!=":4,"<=>":4,eq:4,ne:4,cmp:4,"~~":4,"&":4,"|":4,"^":4,"&&":4,"||":4,"//":4,"..":4,"...":4,"?":4,":":4,"=":4,"+=":4,"-=":4,"*=":4,",":4,"=>":4,"::":4,not:4,and:4,or:4,xor:4,BEGIN:[5,1],END:[5,1],PRINT:[5,1],PRINTF:[5,1],GETC:[5,1],READ:[5,1],READLINE:[5,1],DESTROY:[5,1],TIE:[5,1],TIEHANDLE:[5,1],UNTIE:[5,1],STDIN:5,STDIN_TOP:5,STDOUT:5,STDOUT_TOP:5,STDERR:5,STDERR_TOP:5,$ARG:5,$_:5,"@ARG":5,"@_":5,$LIST_SEPARATOR:5,'$"':5,$PROCESS_ID:5,$PID:5,$$:5,$REAL_GROUP_ID:5,$GID:5,"$(":5,$EFFECTIVE_GROUP_ID:5,$EGID:5,"$)":5,$PROGRAM_NAME:5,$0:5,$SUBSCRIPT_SEPARATOR:5,$SUBSEP:5,"$;":5,$REAL_USER_ID:5,$UID:5,"$<":5,$EFFECTIVE_USER_ID:5,$EUID:5,"$>":5,$a:5,$b:5,$COMPILING:5,"$^C":5,$DEBUGGING:5,"$^D":5,"${^ENCODING}":5,$ENV:5,"%ENV":5,$SYSTEM_FD_MAX:5,"$^F":5,"@F":5,"${^GLOBAL_PHASE}":5,"$^H":5,"%^H":5,"@INC":5,"%INC":5,$INPLACE_EDIT:5,"$^I":5,"$^M":5,$OSNAME:5,"$^O":5,"${^OPEN}":5,$PERLDB:5,"$^P":5,$SIG:5,"%SIG":5,$BASETIME:5,"$^T":5,"${^TAINT}":5,"${^UNICODE}":5,"${^UTF8CACHE}":5,"${^UTF8LOCALE}":5,$PERL_VERSION:5,"$^V":5,"${^WIN32_SLOPPY_STAT}":5,$EXECUTABLE_NAME:5,"$^X":5,$1:5,$MATCH:5,"$&":5,"${^MATCH}":5,$PREMATCH:5,"$`":5,"${^PREMATCH}":5,$POSTMATCH:5,"$'":5,"${^POSTMATCH}":5,$LAST_PAREN_MATCH:5,"$+":5,$LAST_SUBMATCH_RESULT:5,"$^N":5,"@LAST_MATCH_END":5,"@+":5,"%LAST_PAREN_MATCH":5,"%+":5,"@LAST_MATCH_START":5,"@-":5,"%LAST_MATCH_START":5,"%-":5,$LAST_REGEXP_CODE_RESULT:5,"$^R":5,"${^RE_DEBUG_FLAGS}":5,"${^RE_TRIE_MAXBUF}":5,$ARGV:5,"@ARGV":5,ARGV:5,ARGVOUT:5,$OUTPUT_FIELD_SEPARATOR:5,$OFS:5,"$,":5,$INPUT_LINE_NUMBER:5,$NR:5,"$.":5,$INPUT_RECORD_SEPARATOR:5,$RS:5,"$/":5,$OUTPUT_RECORD_SEPARATOR:5,$ORS:5,"$\\":5,$OUTPUT_AUTOFLUSH:5,"$|":5,$ACCUMULATOR:5,"$^A":5,$FORMAT_FORMFEED:5,"$^L":5,$FORMAT_PAGE_NUMBER:5,"$%":5,$FORMAT_LINES_LEFT:5,"$-":5,$FORMAT_LINE_BREAK_CHARACTERS:5,"$:":5,$FORMAT_LINES_PER_PAGE:5,"$=":5,$FORMAT_TOP_NAME:5,"$^":5,$FORMAT_NAME:5,"$~":5,"${^CHILD_ERROR_NATIVE}":5,$EXTENDED_OS_ERROR:5,"$^E":5,$EXCEPTIONS_BEING_CAUGHT:5,"$^S":5,$WARNING:5,"$^W":5,"${^WARNING_BITS}":5,$OS_ERROR:5,$ERRNO:5,"$!":5,"%OS_ERROR":5,"%ERRNO":5,"%!":5,$CHILD_ERROR:5,"$?":5,$EVAL_ERROR:5,"$@":5,$OFMT:5,"$#":5,"$*":5,$ARRAY_BASE:5,"$[":5,$OLD_PERL_VERSION:5,"$]":5,"if":[1,1],elsif:[1,1],"else":[1,1],"while":[1,1],unless:[1,1],"for":[1,1],foreach:[1,1],abs:1,accept:1,alarm:1,atan2:1,bind:1,binmode:1,bless:1,bootstrap:1,"break":1,caller:1,chdir:1,chmod:1,chomp:1,chop:1,chown:1,chr:1,chroot:1,close:1,closedir:1,connect:1,"continue":[1,1],cos:1,crypt:1,dbmclose:1,dbmopen:1,"default":1,defined:1,"delete":1,die:1,"do":1,dump:1,each:1,endgrent:1,endhostent:1,endnetent:1,endprotoent:1,endpwent:1,endservent:1,eof:1,eval:1,exec:1,exists:1,exit:1,exp:1,fcntl:1,fileno:1,flock:1,fork:1,format:1,formline:1,getc:1,getgrent:1,getgrgid:1,getgrnam:1,gethostbyaddr:1,gethostbyname:1,gethostent:1,getlogin:1,getnetbyaddr:1,getnetbyname:1,getnetent:1,getpeername:1,getpgrp:1,getppid:1,getpriority:1,getprotobyname:1,getprotobynumber:1,getprotoent:1,getpwent:1,getpwnam:1,getpwuid:1,getservbyname:1,getservbyport:1,getservent:1,getsockname:1,getsockopt:1,given:1,glob:1,gmtime:1,"goto":1,grep:1,hex:1,"import":1,index:1,"int":1,ioctl:1,join:1,keys:1,kill:1,last:1,lc:1,lcfirst:1,length:1,link:1,listen:1,local:2,localtime:1,lock:1,log:1,lstat:1,m:null,map:1,mkdir:1,msgctl:1,msgget:1,msgrcv:1,msgsnd:1,my:2,"new":1,next:1,no:1,oct:1,open:1,opendir:1,ord:1,our:2,pack:1,"package":1,pipe:1,pop:1,pos:1,print:1,printf:1,prototype:1,push:1,q:null,qq:null,qr:null,quotemeta:null,qw:null,qx:null,rand:1,read:1,readdir:1,readline:1,readlink:1,readpipe:1,recv:1,redo:1,ref:1,rename:1,require:1,reset:1,"return":1,reverse:1,rewinddir:1,rindex:1,rmdir:1,s:null,say:1,scalar:1,seek:1,seekdir:1,select:1,semctl:1,semget:1,semop:1,send:1,setgrent:1,sethostent:1,setnetent:1,setpgrp:1,setpriority:1,setprotoent:1,setpwent:1,setservent:1,setsockopt:1,shift:1,shmctl:1,shmget:1,shmread:1,shmwrite:1,shutdown:1,sin:1,sleep:1,socket:1,socketpair:1,sort:1,splice:1,split:1,sprintf:1,sqrt:1,srand:1,stat:1,state:1,study:1,sub:1,substr:1,symlink:1,syscall:1,sysopen:1,sysread:1,sysseek:1,system:1,syswrite:1,tell:1,telldir:1,tie:1,tied:1,time:1,times:1,tr:null,truncate:1,uc:1,ucfirst:1,umask:1,undef:1,unlink:1,unpack:1,unshift:1,untie:1,use:1,utime:1,values:1,vec:1,wait:1,waitpid:1,wantarray:1,warn:1,when:1,write:1,y:null},b="string-2",c=/[goseximacplud]/;return{startState:function(){return{tokenize:f,chain:null,style:null,tail:null}},token:function(a,b){return(b.tokenize||f)(a,b)},electricChars:"{}"}}),CodeMirror.defineMIME("text/x-perl","perl"),CodeMirror.StringStream.prototype.look=function(a){return this.string.charAt(this.pos+(a||0))},CodeMirror.StringStream.prototype.prefix=function(a){if(a){var b=this.pos-a;return this.string.substr(b>=0?b:0,a)}return this.string.substr(0,this.pos-1)},CodeMirror.StringStream.prototype.suffix=function(a){var b=this.string.length,c=b-this.pos+1;return this.string.substr(this.pos,a&&b>a?a:c)},CodeMirror.StringStream.prototype.nsuffix=function(a){var b=this.pos,c=a||this.string.length-this.pos+1;return this.pos+=c,this.string.substr(b,c)},CodeMirror.StringStream.prototype.eatSuffix=function(a){var c,b=this.pos+a;this.pos=0>=b?0:b>=(c=this.string.length-1)?c:b},function(){function a(a){for(var b={},c=a.split(" "),d=0;c.length>d;++d)b[c[d]]=!0;return b}function b(a){return function(b,c){return b.match(a)?c.tokenize=null:b.skipToEnd(),"string"}}var c={name:"clike",keywords:a("abstract and array as break case catch class clone const continue declare default do else elseif enddeclare endfor endforeach endif endswitch endwhile extends final for foreach function global goto if implements interface instanceof namespace new or private protected public static switch throw trait try use var while xor die echo empty exit eval include include_once isset list require require_once return print unset __halt_compiler self static parent"),blockKeywords:a("catch do else elseif for foreach if switch try while"),atoms:a("true false null TRUE FALSE NULL __CLASS__ __DIR__ __FILE__ __LINE__ __METHOD__ __FUNCTION__ __NAMESPACE__"),builtin:a("func_num_args func_get_arg func_get_args strlen strcmp strncmp strcasecmp strncasecmp each error_reporting define defined trigger_error user_error set_error_handler restore_error_handler get_declared_classes get_loaded_extensions extension_loaded get_extension_funcs debug_backtrace constant bin2hex sleep usleep time mktime gmmktime strftime gmstrftime strtotime date gmdate getdate localtime checkdate flush wordwrap htmlspecialchars htmlentities html_entity_decode md5 md5_file crc32 getimagesize image_type_to_mime_type phpinfo phpversion phpcredits strnatcmp strnatcasecmp substr_count strspn strcspn strtok strtoupper strtolower strpos strrpos strrev hebrev hebrevc nl2br basename dirname pathinfo stripslashes stripcslashes strstr stristr strrchr str_shuffle str_word_count strcoll substr substr_replace quotemeta ucfirst ucwords strtr addslashes addcslashes rtrim str_replace str_repeat count_chars chunk_split trim ltrim strip_tags similar_text explode implode setlocale localeconv parse_str str_pad chop strchr sprintf printf vprintf vsprintf sscanf fscanf parse_url urlencode urldecode rawurlencode rawurldecode readlink linkinfo link unlink exec system escapeshellcmd escapeshellarg passthru shell_exec proc_open proc_close rand srand getrandmax mt_rand mt_srand mt_getrandmax base64_decode base64_encode abs ceil floor round is_finite is_nan is_infinite bindec hexdec octdec decbin decoct dechex base_convert number_format fmod ip2long long2ip getenv putenv getopt microtime gettimeofday getrusage uniqid quoted_printable_decode set_time_limit get_cfg_var magic_quotes_runtime set_magic_quotes_runtime get_magic_quotes_gpc get_magic_quotes_runtime import_request_variables error_log serialize unserialize memory_get_usage var_dump var_export debug_zval_dump print_r highlight_file show_source highlight_string ini_get ini_get_all ini_set ini_alter ini_restore get_include_path set_include_path restore_include_path setcookie header headers_sent connection_aborted connection_status ignore_user_abort parse_ini_file is_uploaded_file move_uploaded_file intval floatval doubleval strval gettype settype is_null is_resource is_bool is_long is_float is_int is_integer is_double is_real is_numeric is_string is_array is_object is_scalar ereg ereg_replace eregi eregi_replace split spliti join sql_regcase dl pclose popen readfile rewind rmdir umask fclose feof fgetc fgets fgetss fread fopen fpassthru ftruncate fstat fseek ftell fflush fwrite fputs mkdir rename copy tempnam tmpfile file file_get_contents stream_select stream_context_create stream_context_set_params stream_context_set_option stream_context_get_options stream_filter_prepend stream_filter_append fgetcsv flock get_meta_tags stream_set_write_buffer set_file_buffer set_socket_blocking stream_set_blocking socket_set_blocking stream_get_meta_data stream_register_wrapper stream_wrapper_register stream_set_timeout socket_set_timeout socket_get_status realpath fnmatch fsockopen pfsockopen pack unpack get_browser crypt opendir closedir chdir getcwd rewinddir readdir dir glob fileatime filectime filegroup fileinode filemtime fileowner fileperms filesize filetype file_exists is_writable is_writeable is_readable is_executable is_file is_dir is_link stat lstat chown touch clearstatcache mail ob_start ob_flush ob_clean ob_end_flush ob_end_clean ob_get_flush ob_get_clean ob_get_length ob_get_level ob_get_status ob_get_contents ob_implicit_flush ob_list_handlers ksort krsort natsort natcasesort asort arsort sort rsort usort uasort uksort shuffle array_walk count end prev next reset current key min max in_array array_search extract compact array_fill range array_multisort array_push array_pop array_shift array_unshift array_splice array_slice array_merge array_merge_recursive array_keys array_values array_count_values array_reverse array_reduce array_pad array_flip array_change_key_case array_rand array_unique array_intersect array_intersect_assoc array_diff array_diff_assoc array_sum array_filter array_map array_chunk array_key_exists pos sizeof key_exists assert assert_options version_compare ftok str_rot13 aggregate session_name session_module_name session_save_path session_id session_regenerate_id session_decode session_register session_unregister session_is_registered session_encode session_start session_destroy session_unset session_set_save_handler session_cache_limiter session_cache_expire session_set_cookie_params session_get_cookie_params session_write_close preg_match preg_match_all preg_replace preg_replace_callback preg_split preg_quote preg_grep overload ctype_alnum ctype_alpha ctype_cntrl ctype_digit ctype_lower ctype_graph ctype_print ctype_punct ctype_space ctype_upper ctype_xdigit virtual apache_request_headers apache_note apache_lookup_uri apache_child_terminate apache_setenv apache_response_headers apache_get_version getallheaders mysql_connect mysql_pconnect mysql_close mysql_select_db mysql_create_db mysql_drop_db mysql_query mysql_unbuffered_query mysql_db_query mysql_list_dbs mysql_list_tables mysql_list_fields mysql_list_processes mysql_error mysql_errno mysql_affected_rows mysql_insert_id mysql_result mysql_num_rows mysql_num_fields mysql_fetch_row mysql_fetch_array mysql_fetch_assoc mysql_fetch_object mysql_data_seek mysql_fetch_lengths mysql_fetch_field mysql_field_seek mysql_free_result mysql_field_name mysql_field_table mysql_field_len mysql_field_type mysql_field_flags mysql_escape_string mysql_real_escape_string mysql_stat mysql_thread_id mysql_client_encoding mysql_get_client_info mysql_get_host_info mysql_get_proto_info mysql_get_server_info mysql_info mysql mysql_fieldname mysql_fieldtable mysql_fieldlen mysql_fieldtype mysql_fieldflags mysql_selectdb mysql_createdb mysql_dropdb mysql_freeresult mysql_numfields mysql_numrows mysql_listdbs mysql_listtables mysql_listfields mysql_db_name mysql_dbname mysql_tablename mysql_table_name pg_connect pg_pconnect pg_close pg_connection_status pg_connection_busy pg_connection_reset pg_host pg_dbname pg_port pg_tty pg_options pg_ping pg_query pg_send_query pg_cancel_query pg_fetch_result pg_fetch_row pg_fetch_assoc pg_fetch_array pg_fetch_object pg_fetch_all pg_affected_rows pg_get_result pg_result_seek pg_result_status pg_free_result pg_last_oid pg_num_rows pg_num_fields pg_field_name pg_field_num pg_field_size pg_field_type pg_field_prtlen pg_field_is_null pg_get_notify pg_get_pid pg_result_error pg_last_error pg_last_notice pg_put_line pg_end_copy pg_copy_to pg_copy_from pg_trace pg_untrace pg_lo_create pg_lo_unlink pg_lo_open pg_lo_close pg_lo_read pg_lo_write pg_lo_read_all pg_lo_import pg_lo_export pg_lo_seek pg_lo_tell pg_escape_string pg_escape_bytea pg_unescape_bytea pg_client_encoding pg_set_client_encoding pg_meta_data pg_convert pg_insert pg_update pg_delete pg_select pg_exec pg_getlastoid pg_cmdtuples pg_errormessage pg_numrows pg_numfields pg_fieldname pg_fieldsize pg_fieldtype pg_fieldnum pg_fieldprtlen pg_fieldisnull pg_freeresult pg_result pg_loreadall pg_locreate pg_lounlink pg_loopen pg_loclose pg_loread pg_lowrite pg_loimport pg_loexport echo print global static exit array empty eval isset unset die include require include_once require_once"),multiLineStrings:!0,hooks:{$:function(a){return a.eatWhile(/[\w\$_]/),"variable-2"},"<":function(a,c){return a.match(/<</)?(a.eatWhile(/[\w\.]/),c.tokenize=b(a.current().slice(3)),c.tokenize(a,c)):!1},"#":function(a){for(;!a.eol()&&!a.match("?>",!1);)a.next();return"comment"},"/":function(a){if(a.eat("/")){for(;!a.eol()&&!a.match("?>",!1);)a.next();return"comment"}return!1}}};CodeMirror.defineMode("php",function(a,b){function f(a,b){var c=b.curMode==e;if(a.sol()&&'"'!=b.pending&&(b.pending=null),c)return c&&null==b.php.tokenize&&a.match("?>")?(b.curMode=d,b.curState=b.html,"meta"):e.token(a,b.curState);if(a.match(/^<\?\w*/))return b.curMode=e,b.curState=b.php,"meta";if('"'==b.pending){for(;!a.eol()&&'"'!=a.next(););var f="string"}else if(b.pending&&a.pos<b.pending.end){a.pos=b.pending.end;var f=b.pending.style}else var f=d.token(a,b.curState);b.pending=null;var g=a.current(),h=g.search(/<\?/);return-1!=h&&(b.pending="string"==f&&/\"$/.test(g)&&!/\?>/.test(g)?'"':{end:a.pos,style:f},a.backUp(g.length-h)),f}var d=CodeMirror.getMode(a,"text/html"),e=CodeMirror.getMode(a,c);return{startState:function(){var a=CodeMirror.startState(d),c=CodeMirror.startState(e);return{html:a,php:c,curMode:b.startOpen?e:d,curState:b.startOpen?c:a,pending:null}},copyState:function(a){var h,b=a.html,c=CodeMirror.copyState(d,b),f=a.php,g=CodeMirror.copyState(e,f);return h=a.curMode==d?c:g,{html:c,php:g,curMode:a.curMode,curState:h,pending:a.pending}},token:f,indent:function(a,b){return a.curMode!=e&&/^\s*<\//.test(b)||a.curMode==e&&/^\?>/.test(b)?d.indent(a.html,b):a.curMode.indent(a.curState,b)+},electricChars:"/{}:",blockCommentStart:"/*",blockCommentEnd:"*/",lineComment:"//",innerMode:function(a){return{state:a.curState,mode:a.curMode}}}},"htmlmixed","clike"),CodeMirror.defineMIME("application/x-httpd-php","php"),CodeMirror.defineMIME("application/x-httpd-php-open",{name:"php",startOpen:!0}),CodeMirror.defineMIME("text/x-php",c)}(),CodeMirror.defineMode("pig",function(a,b){function h(a,b,c){return b.tokenize=c,c(a,b)}function j(a,b){return i=a,b}function k(a,b){for(var d,c=!1;d=a.next();){if("/"==d&&c){b.tokenize=m;break}c="*"==d}return j("comment","comment")}function l(a){return function(b,c){for(var e,d=!1,g=!1;null!=(e=b.next());){if(e==a&&!d){g=!0;break}d=!d&&"\\"==e}return(g||!d&&!f)&&(c.tokenize=m),j("string","error")}}function m(a,b){var f=a.next();return'"'==f||"'"==f?h(a,b,l(f)):/[\[\]{}\(\),;\.]/.test(f)?j(f):/\d/.test(f)?(a.eatWhile(/[\w\.]/),j("number","number")):"/"==f?a.eat("*")?h(a,b,k):(a.eatWhile(g),j("operator","operator")):"-"==f?a.eat("-")?(a.skipToEnd(),j("comment","comment")):(a.eatWhile(g),j("operator","operator")):g.test(f)?(a.eatWhile(g),j("operator","operator")):(a.eatWhile(/[\w\$_]/),c&&c.propertyIsEnumerable(a.current().toUpperCase())&&!a.eat(")")&&!a.eat(".")?"keyword":d&&d.propertyIsEnumerable(a.current().toUpperCase())?"variable-2":e&&e.propertyIsEnumerable(a.current().toUpperCase())?"variable-3":j("variable","pig-word"))}var i,c=b.keywords,d=b.builtins,e=b.types,f=b.multiLineStrings,g=/[*+\-%<>=&?:\/!|]/;return{startState:function(){return{tokenize:m,startOfLine:!0}},token:function(a,b){if(a.eatSpace())return null;var c=b.tokenize(a,b);return c}}}),function(){function a(a){for(var b={},c=a.split(" "),d=0;c.length>d;++d)b[c[d]]=!0;return b}var b="ABS ACOS ARITY ASIN ATAN AVG BAGSIZE BINSTORAGE BLOOM BUILDBLOOM CBRT CEIL CONCAT COR COS COSH COUNT COUNT_STAR COV CONSTANTSIZE CUBEDIMENSIONS DIFF DISTINCT DOUBLEABS DOUBLEAVG DOUBLEBASE DOUBLEMAX DOUBLEMIN DOUBLEROUND DOUBLESUM EXP FLOOR FLOATABS FLOATAVG FLOATMAX FLOATMIN FLOATROUND FLOATSUM GENERICINVOKER INDEXOF INTABS INTAVG INTMAX INTMIN INTSUM INVOKEFORDOUBLE INVOKEFORFLOAT INVOKEFORINT INVOKEFORLONG INVOKEFORSTRING INVOKER ISEMPTY JSONLOADER JSONMETADATA JSONSTORAGE LAST_INDEX_OF LCFIRST LOG LOG10 LOWER LONGABS LONGAVG LONGMAX LONGMIN LONGSUM MAX MIN MAPSIZE MONITOREDUDF NONDETERMINISTIC OUTPUTSCHEMA PIGSTORAGE PIGSTREAMING RANDOM REGEX_EXTRACT REGEX_EXTRACT_ALL REPLACE ROUND SIN SINH SIZE SQRT STRSPLIT SUBSTRING SUM STRINGCONCAT STRINGMAX STRINGMIN STRINGSIZE TAN TANH TOBAG TOKENIZE TOMAP TOP TOTUPLE TRIM TEXTLOADER TUPLESIZE UCFIRST UPPER UTF8STORAGECONVERTER ",c="VOID IMPORT RETURNS DEFINE LOAD FILTER FOREACH ORDER CUBE DISTINCT COGROUP JOIN CROSS UNION SPLIT INTO IF OTHERWISE ALL AS BY USING INNER OUTER ONSCHEMA PARALLEL PARTITION GROUP AND OR NOT GENERATE FLATTEN ASC DESC IS STREAM THROUGH STORE MAPREDUCE SHIP CACHE INPUT OUTPUT STDERROR STDIN STDOUT LIMIT SAMPLE LEFT RIGHT FULL EQ GT LT GTE LTE NEQ MATCHES TRUE FALSE ",d="BOOLEAN INT LONG FLOAT DOUBLE CHARARRAY BYTEARRAY BAG TUPLE MAP ";CodeMirror.defineMIME("text/x-pig",{name:"pig",builtins:a(b),keywords:a(c),types:a(d)})}(),CodeMirror.defineMode("properties",function(){return{token:function(a,b){var c=a.sol()||b.afterSection,d=a.eol();if(b.afterSection=!1,c&&(b.nextMultiline?(b.inMultiline=!0,b.nextMultiline=!1):b.position="def"),d&&!b.nextMultiline&&(b.inMultiline=!1,b.position="def"),c)for(;a.eatSpace(););var e=a.next();return!c||"#"!==e&&"!"!==e&&";"!==e?c&&"["===e?(b.afterSection=!0,a.skipTo("]"),a.eat("]"),"header"):"="===e||":"===e?(b.position="quote",null):("\\"===e&&"quote"===b.position&&"u"!==a.next()&&(b.nextMultiline=!0),b.position):(b.position="comment",a.skipToEnd(),"comment")},startState:function(){return{position:"def",nextMultiline:!1,inMultiline:!1,afterSection:!1}}}}),CodeMirror.defineMIME("text/x-properties","properties"),CodeMirror.defineMIME("text/x-ini","properties"),CodeMirror.defineMode("python",function(a,b){function d(a){return RegExp("^(("+a.join(")|(")+"))\\b")}function t(a,b){if(a.sol()){var d=b.scopes[0].offset;if(a.eatSpace()){var l=a.indentation();return l>d?s="indent":d>l&&(s="dedent"),null}d>0&&w(a,b)}if(a.eatSpace())return null;var m=a.peek();if("#"===m)return a.skipToEnd(),"comment";if(a.match(/^[0-9\.]/,!1)){var n=!1;if(a.match(/^\d*\.\d+(e[\+\-]?\d+)?/i)&&(n=!0),a.match(/^\d+\.\d*/)&&(n=!0),a.match(/^\.\d+/)&&(n=!0),n)return a.eat(/J/i),"number";var o=!1;if(a.match(/^0x[0-9a-f]+/i)&&(o=!0),a.match(/^0b[01]+/i)&&(o=!0),a.match(/^0o[0-7]+/i)&&(o=!0),a.match(/^[1-9]\d*(e[\+\-]?\d+)?/)&&(a.eat(/J/i),o=!0),a.match(/^0(?![\dx])/i)&&(o=!0),o)return a.eat(/L/i),"number"}return a.match(p)?(b.tokenize=u(a.current()),b.tokenize(a,b)):a.match(i)||a.match(h)?null:a.match(g)||a.match(e)||a.match(k)?"operator":a.match(f)?null:a.match(q)?"keyword":a.match(r)?"builtin":a.match(j)?"variable":(a.next(),c)}function u(a){function f(f,g){for(;!f.eol();)if(f.eatWhile(/[^'"\\]/),f.eat("\\")){if(f.next(),d&&f.eol())return e}else{if(f.match(a))return g.tokenize=t,e;f.eat(/['"]/)}if(d){if(b.singleLineStringErrors)return c;g.tokenize=t}return e}for(;"rub".indexOf(a.charAt(0).toLowerCase())>=0;)a=a.substr(1);var d=1==a.length,e="string";return f.isString=!0,f}function v(b,c,d){d=d||"py";var e=0;if("py"===d){if("py"!==c.scopes[0].type)return c.scopes[0].offset=b.indentation(),void 0;for(var f=0;c.scopes.length>f;++f)if("py"===c.scopes[f].type){e=c.scopes[f].offset+a.indentUnit;break}}else e=b.column()+b.current().length;c.scopes.unshift({offset:e,type:d})}function w(a,b,c){if(c=c||"py",1!=b.scopes.length){if("py"===b.scopes[0].type){for(var d=a.indentation(),e=-1,f=0;b.scopes.length>f;++f)if(d===b.scopes[f].offset){e=f;break}if(-1===e)return!0;for(;b.scopes[0].offset!==d;)b.scopes.shift();return!1}return"py"===c?(b.scopes[0].offset=a.indentation(),!1):b.scopes[0].type!=c?!0:(b.scopes.shift(),!1)}}function x(a,b){s=null;var d=b.tokenize(a,b),e=a.current();if("."===e)return d=a.match(j,!1)?null:c,null===d&&"meta"===b.lastToken&&(d="meta"),d;if("@"===e)return a.match(j,!1)?"meta":c;"variable"!==d&&"builtin"!==d||"meta"!==b.lastToken||(d="meta"),("pass"===e||"return"===e)&&(b.dedent+=1),"lambda"===e&&(b.lambda=!0),(":"===e&&!b.lambda&&"py"==b.scopes[0].type||"indent"===s)&&v(a,b);var f="[({".indexOf(e);return-1!==f&&v(a,b,"])}".slice(f,f+1)),"dedent"===s&&w(a,b)?c:(f="])}".indexOf(e),-1!==f&&w(a,b,e)?c:(b.dedent>0&&a.eol()&&"py"==b.scopes[0].type&&(b.scopes.length>1&&b.scopes.shift(),b.dedent-=1),d))}var c="error",e=b.singleOperators||RegExp("^[\\+\\-\\*/%&|\\^~<>!]"),f=b.singleDelimiters||RegExp("^[\\(\\)\\[\\]\\{\\}@,:`=;\\.]"),g=b.doubleOperators||RegExp("^((==)|(!=)|(<=)|(>=)|(<>)|(<<)|(>>)|(//)|(\\*\\*))"),h=b.doubleDelimiters||RegExp("^((\\+=)|(\\-=)|(\\*=)|(%=)|(/=)|(&=)|(\\|=)|(\\^=))"),i=b.tripleDelimiters||RegExp("^((//=)|(>>=)|(<<=)|(\\*\\*=))"),j=b.identifiers||RegExp("^[_A-Za-z][_A-Za-z0-9]*"),k=d(["and","or","not","is","in"]),l=["as","assert","break","class","continue","def","del","elif","else","except","finally","for","from","global","if","import","lambda","pass","raise","return","try","while","with","yield"],m=["abs","all","any","bin","bool","bytearray","callable","chr","classmethod","compile","complex","delattr","dict","dir","divmod","enumerate","eval","filter","float","format","frozenset","getattr","globals","hasattr","hash","help","hex","id","input","int","isinstance","issubclass","iter","len","list","locals","map","max","memoryview","min","next","object","oct","open","ord","pow","property","range","repr","reversed","round","set","setattr","slice","sorted","staticmethod","str","sum","super","tuple","type","vars","zip","__import__","NotImplemented","Ellipsis","__debug__"],n={builtins:["apply","basestring","buffer","cmp","coerce","execfile","file","intern","long","raw_input","reduce","reload","unichr","unicode","xrange","False","True","None"],keywords:["exec","print"]},o={builtins:["ascii","bytes","exec","print"],keywords:["nonlocal","False","True","None"]};if(b.version&&3===parseInt(b.version,10)){l=l.concat(o.keywords),m=m.concat(o.builtins);var p=RegExp("^(([rb]|(br))?('{3}|\"{3}|['\"]))","i")}else{l=l.concat(n.keywords),m=m.concat(n.builtins);var p=RegExp("^(([rub]|(ur)|(br))?('{3}|\"{3}|['\"]))","i")}var q=d(l),r=d(m),s=null,y={startState:function(a){return{tokenize:t,scopes:[{offset:a||0,type:"py"}],lastToken:null,lambda:!1,dedent:0}},token:function(a,b){var c=x(a,b);return b.lastToken=c,a.eol()&&a.lambda&&(b.lambda=!1),c},indent:function(a){return a.tokenize!=t?a.tokenize.isString?CodeMirror.Pass:0:a.scopes[0].offset},lineComment:"#"};return y}),CodeMirror.defineMIME("text/x-python","python"),CodeMirror.defineMode("q",function(a){function f(a){return RegExp("^("+a.join("|")+")$")}function g(a,b){var f=a.sol(),i=a.next();if(c=null,f){if("/"==i)return(b.tokenize=h)(a,b);if("\\"==i)return a.eol()||/\s/.test(a.peek())?(a.skipToEnd(),/^\\\s*$/.test(a.current())?(b.tokenize=j)(a,b):b.tokenize=g,"comment"):(b.tokenize=g,"builtin")}if(/\s/.test(i))return"/"==a.peek()?(a.skipToEnd(),"comment"):"whitespace";if('"'==i)return(b.tokenize=k)(a,b);if("`"==i)return a.eatWhile(/[A-Z|a-z|\d|_|:|\/|\.]/),"symbol";if("."==i&&/\d/.test(a.peek())||/\d/.test(i)){var l=null;return a.backUp(1),a.match(/^\d{4}\.\d{2}(m|\.\d{2}([D|T](\d{2}(:\d{2}(:\d{2}(\.\d{1,9})?)?)?)?)?)/)||a.match(/^\d+D(\d{2}(:\d{2}(:\d{2}(\.\d{1,9})?)?)?)/)||a.match(/^\d{2}:\d{2}(:\d{2}(\.\d{1,9})?)?/)||a.match(/^\d+[ptuv]{1}/)?l="temporal":(a.match(/^0[NwW]{1}/)||a.match(/^0x[\d|a-f|A-F]*/)||a.match(/^[0|1]+[b]{1}/)||a.match(/^\d+[chijn]{1}/)||a.match(/-?\d*(\.\d*)?(e[+\-]?\d+)?(e|f)?/))&&(l="number"),!l||(i=a.peek())&&!e.test(i)?(a.next(),"error"):l}return/[A-Z|a-z]|\./.test(i)?(a.eatWhile(/[A-Z|a-z|\.|_|\d]/),d.test(a.current())?"keyword":"variable"):/[|/&^!+:\\\-*%$=~#;@><\.,?_\']/.test(i)?null:/[{}\(\[\]\)]/.test(i)?null:"error"}function h(a,b){return a.skipToEnd(),/\/\s*$/.test(a.current())?(b.tokenize=i)(a,b):b.tokenize=g,"comment"}function i(a,b){var c=a.sol()&&"\\"==a.peek();return a.skipToEnd(),c&&/^\\\s*$/.test(a.current())&&(b.tokenize=g),"comment"}function j(a){return a.skipToEnd(),"comment"}function k(a,b){for(var d,c=!1,e=!1;d=a.next();){if('"'==d&&!c){e=!0;break}c=!c&&"\\"==d}return e&&(b.tokenize=g),"string"}function l(a,b,c){a.context={prev:a.context,indent:a.indent,col:c,type:b}}function m(a){a.indent=a.context.indent,a.context=a.context.prev}var c,b=a.indentUnit,d=f(["abs","acos","aj","aj0","all","and","any","asc","asin","asof","atan","attr","avg","avgs","bin","by","ceiling","cols","cor","cos","count","cov","cross","csv","cut","delete","deltas","desc","dev","differ","distinct","div","do","each","ej","enlist","eval","except","exec","exit","exp","fby","fills","first","fkeys","flip","floor","from","get","getenv","group","gtime","hclose","hcount","hdel","hopen","hsym","iasc","idesc","if","ij","in","insert","inter","inv","key","keys","last","like","list","lj","load","log","lower","lsq","ltime","ltrim","mavg","max","maxs","mcount","md5","mdev","med","meta","min","mins","mmax","mmin","mmu","mod","msum","neg","next","not","null","or","over","parse","peach","pj","plist","prd","prds","prev","prior","rand","rank","ratios","raze","read0","read1","reciprocal","reverse","rload","rotate","rsave","rtrim","save","scan","select","set","setenv","show","signum","sin","sqrt","ss","ssr","string","sublist","sum","sums","sv","system","tables","tan","til","trim","txf","type","uj","ungroup","union","update","upper","upsert","value","var","view","views","vs","wavg","where","where","while","within","wj","wj1","wsum","xasc","xbar","xcol","xcols","xdesc","xexp","xgroup","xkey","xlog","xprev","xrank"]),e=/[|/&^!+:\\\-*%$=~#;@><,?_\'\"\[\(\]\)\s{}]/;return{startState:function(){return{tokenize:g,context:null,indent:0,col:0}},token:function(a,b){a.sol()&&(b.context&&null==b.context.align&&(b.context.align=!1),b.indent=a.indentation());var d=b.tokenize(a,b);if("comment"!=d&&b.context&&null==b.context.align&&"pattern"!=b.context.type&&(b.context.align=!0),"("==c)l(b,")",a.column());else if("["==c)l(b,"]",a.column());else if("{"==c)l(b,"}",a.column());else if(/[\]\}\)]/.test(c)){for(;b.context&&"pattern"==b.context.type;)m(b);b.context&&c==b.context.type&&m(b)}else"."==c&&b.context&&"pattern"==b.context.type?m(b):/atom|string|variable/.test(d)&&b.context&&(/[\}\]]/.test(b.context.type)?l(b,"pattern",a.column()):"pattern"!=b.context.type||b.context.align||(b.context.align=!0,b.context.col=a.column()));return d},indent:function(a,c){var d=c&&c.charAt(0),e=a.context;if(/[\]\}]/.test(d))for(;e&&"pattern"==e.type;)e=e.prev;var f=e&&d==e.type;return e?"pattern"==e.type?e.col:e.align?e.col+(f?0:1):e.indent+(f?0:b):0}}}),CodeMirror.defineMIME("text/x-q","q"),CodeMirror.defineMode("r",function(a){function b(a){for(var b=a.split(" "),c={},d=0;b.length>d;++d)c[b[d]]=!0;return c}function i(a,b){h=null;var i=a.next();if("#"==i)return a.skipToEnd(),"comment";if("0"==i&&a.eat("x"))return a.eatWhile(/[\da-f]/i),"number";if("."==i&&a.eat(/\d/))return a.match(/\d*(?:e[+\-]?\d+)?/),"number";if(/\d/.test(i))return a.match(/\d*(?:\.\d+)?(?:e[+\-]\d+)?L?/),"number";if("'"==i||'"'==i)return b.tokenize=j(i),"string";if("."==i&&a.match(/.[.\d]+/))return"keyword";if(/[\w\.]/.test(i)&&"_"!=i){a.eatWhile(/[\w\.]/);var k=a.current();return c.propertyIsEnumerable(k)?"atom":e.propertyIsEnumerable(k)?(f.propertyIsEnumerable(k)&&(h="block"),"keyword"):d.propertyIsEnumerable(k)?"builtin":"variable"}return"%"==i?(a.skipTo("%")&&a.next(),"variable-2"):"<"==i&&a.eat("-")?"arrow":"="==i&&b.ctx.argList?"arg-is":g.test(i)?"$"==i?"dollar":(a.eatWhile(g),"operator"):/[\(\){}\[\];]/.test(i)?(h=i,";"==i?"semi":null):null}function j(a){return function(b,c){if(b.eat("\\")){var d=b.next();return"x"==d?b.match(/^[a-f0-9]{2}/i):("u"==d||"U"==d)&&b.eat("{")&&b.skipTo("}")?b.next():"u"==d?b.match(/^[a-f0-9]{4}/i):"U"==d?b.match(/^[a-f0-9]{8}/i):/[0-7]/.test(d)&&b.match(/^[0-7]{1,2}/),"string-2"}for(var e;null!=(e=b.next());){if(e==a){c.tokenize=i;break}if("\\"==e){b.backUp(1);break}}return"string"}}function k(a,b,c){a.ctx={type:b,indent:a.indent,align:null,column:c.column(),prev:a.ctx}}function l(a){a.indent=a.ctx.indent,a.ctx=a.ctx.prev}var h,c=b("NULL NA Inf NaN NA_integer_ NA_real_ NA_complex_ NA_character_"),d=b("list quote bquote eval return call parse deparse"),e=b("if else repeat while function for in next break"),f=b("if else repeat while function for"),g=/[+\-*\/^<>=!&|~$:]/;return{startState:function(){return{tokenize:i,ctx:{type:"top",indent:-a.indentUnit,align:!1},indent:0,afterIdent:!1}},token:function(a,b){if(a.sol()&&(null==b.ctx.align&&(b.ctx.align=!1),b.indent=a.indentation()),a.eatSpace())return null;var c=b.tokenize(a,b);"comment"!=c&&null==b.ctx.align&&(b.ctx.align=!0);var d=b.ctx.type;return";"!=h&&"{"!=h&&"}"!=h||"block"!=d||l(b),"{"==h?k(b,"}",a):"("==h?(k(b,")",a),b.afterIdent&&(b.ctx.argList=!0)):"["==h?k(b,"]",a):"block"==h?k(b,"block",a):h==d&&l(b),b.afterIdent="variable"==c||"keyword"==c,c},indent:function(b,c){if(b.tokenize!=i)return 0;var d=c&&c.charAt(0),e=b.ctx,f=d==e.type;return"block"==e.type?e.indent+("{"==d?0:a.indentUnit):e.align?e.column+(f?0:1):e.indent+(f?0:a.indentUnit)}}}),CodeMirror.defineMIME("text/x-rsrc","r"),CodeMirror.defineMode("changes",function(){var a=/^-+$/,b=/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ?\d{1,2} \d{2}:\d{2}(:\d{2})? [A-Z]{3,4} \d{4} - /,c=/^[\w+.-]+@[\w.-]+/;return{token:function(d){if(d.sol()){if(d.match(a))return"tag";if(d.match(b))return"tag"}return d.match(c)?"string":(d.next(),null)}}}),CodeMirror.defineMIME("text/x-rpm-changes","changes"),CodeMirror.defineMode("spec",function(){var a=/^(i386|i586|i686|x86_64|ppc64|ppc|ia64|s390x|s390|sparc64|sparcv9|sparc|noarch|alphaev6|alpha|hppa|mipsel)/,b=/^(Name|Version|Release|License|Summary|Url|Group|Source|BuildArch|BuildRequires|BuildRoot|AutoReqProv|Provides|Requires(\(\w+\))?|Obsoletes|Conflicts|Recommends|Source\d*|Patch\d*|ExclusiveArch|NoSource|Supplements):/,c=/^%(debug_package|package|description|prep|build|install|files|clean|changelog|preun|postun|pre|post|triggerin|triggerun|pretrans|posttrans|verifyscript|check|triggerpostun|triggerprein|trigger)/,d=/^%(ifnarch|ifarch|if)/,e=/^%(else|endif)/,f=/^(\!|\?|\<\=|\<|\>\=|\>|\=\=|\&\&|\|\|)/;return{startState:function(){return{controlFlow:!1,macroParameters:!1,section:!1}},token:function(g,h){var i=g.peek();if("#"==i)return g.skipToEnd(),"comment";if(g.sol()){if(g.match(b))return"preamble";if(g.match(c))return"section"}if(g.match(/^\$\w+/))return"def";if(g.match(/^\$\{\w+\}/))return"def";if(g.match(e))return"keyword";if(g.match(d))return h.controlFlow=!0,"keyword";if(h.controlFlow){if(g.match(f))return"operator";if(g.match(/^(\d+)/))return"number";g.eol()&&(h.controlFlow=!1)}if(g.match(a))return"number";if(g.match(/^%[\w]+/))return g.match(/^\(/)&&(h.macroParameters=!0),"macro";if(h.macroParameters){if(g.match(/^\d+/))return"number";if(g.match(/^\)/))return h.macroParameters=!1,"macro"}return g.match(/^%\{\??[\w \-]+\}/)?"macro":(g.next(),null)}}}),CodeMirror.defineMIME("text/x-rpm-spec","spec"),CodeMirror.defineMode("rst-base",function(a){function b(a){var b=Array.prototype.slice.call(arguments,1);return a.replace(/{(\d+)}/g,function(a,c){return b[c]!==void 0?b[c]:a})}function c(a){this.message=a}function d(a,b){if(!a)throw new c(b);return a}function Q(a,b){var c=null;if(a.sol()&&a.match(P,!1))X(b,V,{mode:e,local:e.startState()});else if(a.sol()&&a.match(r))X(b,R),c="meta";else if(a.sol()&&a.match(q))X(b,Q),c="header";else if(Z(b)==C||a.match(C,!1))switch(Y(b)){case 0:X(b,Q,W(C,1)),d(a.match(/^:/)),c="meta";break;case 1:X(b,Q,W(C,2)),d(a.match(k)),c="keyword",a.current().match(/^(?:math|latex)/)&&(b.tmp={mode:f,local:f.startState()});break;case 2:X(b,Q,W(C,3)),d(a.match(/^:`/)),c="meta";break;case 3:if(b.tmp){if("`"==a.peek()){X(b,Q,W(C,4)),b.tmp=void 0;break}c=b.tmp.mode.token(a,b.tmp.local);break}X(b,Q,W(C,4)),d(a.match(p)),c="string";break;case 4:X(b,Q,W(C,5)),d(a.match(/^`/)),c="meta";break;case 5:X(b,Q,W(C,6)),d(a.match(i));break;default:X(b,Q),d(""==a.current())}else if(Z(b)==D||a.match(D,!1))switch(Y(b)){case 0:X(b,Q,W(D,1)),d(a.match(/^`/)),c="meta";break;case 1:X(b,Q,W(D,2)),d(a.match(p)),c="string";break;case 2:X(b,Q,W(D,3)),d(a.match(/^`:/)),c="meta";break;case 3:X(b,Q,W(D,4)),d(a.match(k)),c="keyword";break;case 4:X(b,Q,W(D,5)),d(a.match(/^:/)),c="meta";break;case 5:X(b,Q,W(D,6)),d(a.match(i));break;default:X(b,Q),d(""==a.current())}else if(Z(b)==E||a.match(E,!1))switch(Y(b)){case 0:X(b,Q,W(E,1)),d(a.match(/^:/)),c="meta";break;case 1:X(b,Q,W(E,2)),d(a.match(k)),c="keyword";break;case 2:X(b,Q,W(E,3)),d(a.match(/^:/)),c="meta";break;case 3:X(b,Q,W(E,4)),d(a.match(i));break;default:X(b,Q),d(""==a.current())}else if(Z(b)==x||a.match(x,!1))switch(Y(b)){case 0:X(b,Q,W(x,1)),d(a.match(H)),c="variable-2";break;case 1:X(b,Q,W(x,2)),a.match(/^_?_?/)&&(c="link");break;default:X(b,Q),d(""==a.current())}else if(a.match(y))X(b,Q),c="quote";else if(a.match(z))X(b,Q),c="quote";else if(a.match(A))X(b,Q),(!a.peek()||a.peek().match(/^\W$/))&&(c="link");else if(Z(b)==B||a.match(B,!1))switch(Y(b)){case 0:!a.peek()||a.peek().match(/^\W$/)?X(b,Q,W(B,1)):a.match(B);break;case 1:X(b,Q,W(B,2)),d(a.match(/^`/)),c="link";break;case 2:X(b,Q,W(B,3)),d(a.match(p));break;case 3:X(b,Q,W(B,4)),d(a.match(/^`_/)),c="link";break;default:X(b,Q),d(""==a.current())}else a.match(O)?X(b,T):a.next()&&X(b,Q);return c}function R(a,b){var c=null;if(Z(b)==u||a.match(u,!1))switch(Y(b)){case 0:X(b,R,W(u,1)),d(a.match(H)),c="variable-2";break;case 1:X(b,R,W(u,2)),d(a.match(I));break;case 2:X(b,R,W(u,3)),d(a.match(J)),c="keyword";break;case 3:X(b,R,W(u,4)),d(a.match(K)),c="meta";break;default:X(b,Q),d(""==a.current())}else if(Z(b)==t||a.match(t,!1))switch(Y(b)){case 0:X(b,R,W(t,1)),d(a.match(F)),c="keyword",a.current().match(/^(?:math|latex)/)?b.tmp_stex=!0:a.current().match(/^python/)&&(b.tmp_py=!0);break;case 1:X(b,R,W(t,2)),d(a.match(G)),c="meta";break;default:a.match(/^latex\s*$/)||b.tmp_stex?(b.tmp_stex=void 0,X(b,V,{mode:f,local:f.startState()})):a.match(/^python\s*$/)||b.tmp_py?(b.tmp_py=void 0,X(b,V,{mode:e,local:e.startState()})):(X(b,Q),d(""==a.current()))}else if(Z(b)==s||a.match(s,!1))switch(Y(b)){case 0:X(b,R,W(s,1)),d(a.match(L)),d(a.match(M)),c="link";break;case 1:X(b,R,W(s,2)),d(a.match(N)),c="meta";break;default:X(b,Q),d(""==a.current())}else a.match(v)?(X(b,Q),c="quote"):a.match(w)?(X(b,Q),c="quote"):(a.eatSpace(),a.eol()?X(b,Q):(a.skipToEnd(),X(b,S),c="comment"));return c}function S(a,b){return U(a,b,"comment")}function T(a,b){return U(a,b,"meta")}function U(a,b,c){return a.eol()||a.eatSpace()?(a.skipToEnd(),c):(X(b,Q),null)}function V(a,b){if(b.ctx.mode&&b.ctx.local){if(a.sol())return a.eatSpace()||X(b,Q),null;try{return b.ctx.mode.token(a,b.ctx.local)}catch(c){return X(b,Q),null}}return X(b,Q),null}function W(a,b,c,d){return{phase:a,stage:b,mode:c,local:d}}function X(a,b,c){a.tok=b,a.ctx=c||{}}function Y(a){return a.ctx.stage||0}function Z(a){return a.ctx.phase}c.prototype.toString=function(){return"AssertException: "+this.message};var e=CodeMirror.getMode(a,"python"),f=CodeMirror.getMode(a,"stex"),g="\\s+",h="(?:\\s*|\\W|$)",i=RegExp(b("^{0}",h)),j="(?:[^\\W\\d_](?:[\\w\\+\\.\\-:]*[^\\W_])?)",k=RegExp(b("^{0}",j)),l="(?:[^\\W\\d_](?:[\\w\\s\\+\\.\\-:]*[^\\W_])?)",m=b("(?:{0}|`{1}`)",j,l),n="(?:[^\\s\\|](?:[^\\|]*[^\\s\\|])?)",o="(?:[^\\`]+)",p=RegExp(b("^{0}",o)),q=RegExp("^([!'#$%&\"()*+,-./:;<=>?@\\[\\\\\\]^_`{|}~])\\1{3,}\\s*$"),r=RegExp(b("^\\.\\.{0}",g)),s=RegExp(b("^_{0}:{1}|^__:{1}",m,h)),t=RegExp(b("^{0}::{1}",m,h)),u=RegExp(b("^\\|{0}\\|{1}{2}::{3}",n,g,m,h)),v=RegExp(b("^\\[(?:\\d+|#{0}?|\\*)]{1}",m,h)),w=RegExp(b("^\\[{0}\\]{1}",m,h)),x=RegExp(b("^\\|{0}\\|",n)),y=RegExp(b("^\\[(?:\\d+|#{0}?|\\*)]_",m)),z=RegExp(b("^\\[{0}\\]_",m)),A=RegExp(b("^{0}__?",m)),B=RegExp(b("^`{0}`_",o)),C=RegExp(b("^:{0}:`{1}`{2}",j,o,h)),D=RegExp(b("^`{1}`:{0}:{2}",j,o,h)),E=RegExp(b("^:{0}:{1}",j,h)),F=RegExp(b("^{0}",m)),G=RegExp(b("^::{0}",h)),H=RegExp(b("^\\|{0}\\|",n)),I=RegExp(b("^{0}",g)),J=RegExp(b("^{0}",m)),K=RegExp(b("^::{0}",h)),L=RegExp("^_"),M=RegExp(b("^{0}|_",m)),N=RegExp(b("^:{0}",h)),O=RegExp("^::\\s*$"),P=RegExp("^\\s+(?:>>>|In \\[\\d+\\]:)\\s");return{startState:function(){return{tok:Q,ctx:W(void 0,0)}},copyState:function(a){return{tok:a.tok,ctx:a.ctx}},innerMode:function(a){return{state:a.ctx.local,mode:a.ctx.mode}},token:function(a,b){return b.tok(a,b)}}},"python","stex"),CodeMirror.defineMode("rst",function(a,b){var c="[Hh][Tt][Tt][Pp][Ss]?://",d="(?:[\\d\\w.-]+)\\.(?:\\w{2,6})",e="(?:/[\\d\\w\\#\\%\\&\\-\\.\\,\\/\\:\\=\\?\\~]+)*",f=RegExp("^"+c+d+e),g=/^\*\*[^\*\s](?:[^\*]*[^\*\s])?\*\*(\s+|$)/,h=/^[^\*]\*[^\*\s](?:[^\*]*[^\*\s])?\*(\s+|$)/,i=/^``[^`\s](?:[^`]*[^`\s])``(\s+|$)/,j=/^(?:[\d]+(?:[\.,]\d+)*)/,k=/^(?:\s\+[\d]+(?:[\.,]\d+)*)/,l=/^(?:\s\-[\d]+(?:[\.,]\d+)*)/,m={token:function(a){if(a.match(f))return"link";if(a.match(g))return"strong";if(a.match(h))return"em";if(a.match(i))return"string-2";if(a.match(j))return"number";if(a.match(k))return"positive";if(a.match(l))return"negative";for(;!(null==a.next()||a.match(f,!1)||a.match(g,!1)||a.match(h,!1)||a.match(i,!1)||a.match(j,!1)||a.match(k,!1)||a.match(l,!1)););return null}},n=CodeMirror.getMode(a,b.backdrop||"rst-base");return CodeMirror.overlayMode(n,m,!0)},"python","stex"),CodeMirror.defineMIME("text/x-rst","rst"),CodeMirror.defineMode("ruby",function(a){function b(a){for(var b={},c=0,d=a.length;d>c;++c)b[a[c]]=!0;return b}function h(a,b,c){return c.tokenize.push(a),a(b,c)}function i(a,b){if(g=null,a.sol()&&a.match("=begin")&&a.eol())return b.tokenize.push(n),"comment";if(a.eatSpace())return null;var d,c=a.next();if("`"==c||"'"==c||'"'==c)return h(l(c,"string",'"'==c||"`"==c),a,b);if("/"!=c||a.eol()||" "==a.peek()){if("%"==c){var e="string",i=!1;a.eat("s")?e="atom":a.eat(/[WQ]/)?(e="string",i=!0):a.eat(/[r]/)?(e="string-2",i=!0):a.eat(/[wxq]/)&&(e="string");var j=a.eat(/[^\w\s]/);return j?(f.propertyIsEnumerable(j)&&(j=f[j]),h(l(j,e,i,!0),a,b)):"operator"}if("#"==c)return a.skipToEnd(),"comment";if("<"==c&&(d=a.match(/^<-?[\`\"\']?([a-zA-Z_?]\w*)[\`\"\']?(?:;|$)/)))return h(m(d[1]),a,b);if("0"==c)return a.eat("x")?a.eatWhile(/[\da-fA-F]/):a.eat("b")?a.eatWhile(/[01]/):a.eatWhile(/[0-7]/),"number";if(/\d/.test(c))return a.match(/^[\d_]*(?:\.[\d_]+)?(?:[eE][+\-]?[\d_]+)?/),"number";if("?"==c){for(;a.match(/^\\[CM]-/););return a.eat("\\")?a.eatWhile(/\w/):a.next(),"string"}return":"==c?a.eat("'")?h(l("'","atom",!1),a,b):a.eat('"')?h(l('"',"atom",!0),a,b):a.eat(/[\<\>]/)?(a.eat(/[\<\>]/),"atom"):a.eat(/[\+\-\*\/\&\|\:\!]/)?"atom":a.eat(/[a-zA-Z$@_]/)?(a.eatWhile(/[\w]/),a.eat(/[\?\!\=]/),"atom"):"operator":"@"==c&&a.match(/^@?[a-zA-Z_]/)?(a.eat("@"),a.eatWhile(/[\w]/),"variable-2"):"$"==c?(a.eat(/[a-zA-Z_]/)?a.eatWhile(/[\w]/):a.eat(/\d/)?a.eat(/\d/):a.next(),"variable-3"):/[a-zA-Z_]/.test(c)?(a.eatWhile(/[\w]/),a.eat(/[\?\!]/),a.eat(":")?"atom":"ident"):"|"!=c||!b.varList&&"{"!=b.lastTok&&"do"!=b.lastTok?/[\(\)\[\]{}\\;]/.test(c)?(g=c,null):"-"==c&&a.eat(">")?"arrow":/[=+\-\/*:\.^%<>~|]/.test(c)?(a.eatWhile(/[=+\-\/*:\.^%<>~|]/),"operator"):null:(g="|",null)}return h(l(c,"string-2",!0),a,b)}function j(){var a=1;return function(b,c){if("}"==b.peek()){if(a--,0==a)return c.tokenize.pop(),c.tokenize[c.tokenize.length-1](b,c)}else"{"==b.peek()&&a++;return i(b,c)}}function k(){var a=!1;return function(b,c){return a?(c.tokenize.pop(),c.tokenize[c.tokenize.length-1](b,c)):(a=!0,i(b,c))}}function l(a,b,c,d){return function(e,f){var h,g=!1;for("read-quoted-paused"===f.context.type&&(f.context=f.context.prev,e.eat("}"));null!=(h=e.next());){if(h==a&&(d||!g)){f.tokenize.pop();break}if(c&&"#"==h&&!g){if(e.eat("{")){"}"==a&&(f.context={prev:f.context,type:"read-quoted-paused"}),f.tokenize.push(j());break}if(/[@\$]/.test(e.peek())){f.tokenize.push(k());break}}g=!g&&"\\"==h}return b}}function m(a){return function(b,c){return b.match(a)?c.tokenize.pop():b.skipToEnd(),"string"}}function n(a,b){return a.sol()&&a.match("=end")&&a.eol()&&b.tokenize.pop(),a.skipToEnd(),"comment"}var g,c=b(["alias","and","BEGIN","begin","break","case","class","def","defined?","do","else","elsif","END","end","ensure","false","for","if","in","module","next","not","or","redo","rescue","retry","return","self","super","then","true","undef","unless","until","when","while","yield","nil","raise","throw","catch","fail","loop","callcc","caller","lambda","proc","public","protected","private","require","load","require_relative","extend","autoload","__END__","__FILE__","__LINE__","__dir__"]),d=b(["def","class","case","for","while","do","module","then","catch","loop","proc","begin"]),e=b(["end","until"]),f={"[":"]","{":"}","(":")"};return{startState:function(){return{tokenize:[i],indented:0,context:{type:"top",indented:-a.indentUnit},continuedLine:!1,lastTok:null,varList:!1}},token:function(a,b){a.sol()&&(b.indented=a.indentation());var h,f=b.tokenize[b.tokenize.length-1](a,b);if("ident"==f){var i=a.current();f=c.propertyIsEnumerable(a.current())?"keyword":/^[A-Z]/.test(i)?"tag":"def"==b.lastTok||"class"==b.lastTok||b.varList?"def":"variable",d.propertyIsEnumerable(i)?h="indent":e.propertyIsEnumerable(i)?h="dedent":"if"!=i&&"unless"!=i||a.column()!=a.indentation()||(h="indent")}return(g||f&&"comment"!=f)&&(b.lastTok=i||g||f),"|"==g&&(b.varList=!b.varList),"indent"==h||/[\(\[\{]/.test(g)?b.context={prev:b.context,type:g||f,indented:b.indented}:("dedent"==h||/[\)\]\}]/.test(g))&&b.context.prev&&(b.context=b.context.prev),a.eol()&&(b.continuedLine="\\"==g||"operator"==f),f},indent:function(b,c){if(b.tokenize[b.tokenize.length-1]!=i)return 0;var d=c&&c.charAt(0),e=b.context,g=e.type==f[d]||"keyword"==e.type&&/^(?:end|until|else|elsif|when|rescue)\b/.test(c);return e.indented+(g?0:a.indentUnit)+(b.continuedLine?a.indentUnit:0)},electricChars:"}de",lineComment:"#"}}),CodeMirror.defineMIME("text/x-ruby","ruby"),CodeMirror.defineMode("rust",function(){function h(a,b){return f=a,b}function i(a,b){var c=a.next();if('"'==c)return b.tokenize=j,b.tokenize(a,b);if("'"==c)return f="atom",a.eat("\\")?a.skipTo("'")?(a.next(),"string"):"error":(a.next(),a.eat("'")?"string":"error");if("/"==c){if(a.eat("/"))return a.skipToEnd(),"comment";if(a.eat("*"))return b.tokenize=k(1),b.tokenize(a,b)}if("#"==c)return a.eat("[")?(f="open-attr",null):(a.eatWhile(/\w/),h("macro","meta"));if(":"==c&&a.match(":<"))return h("op",null);if(c.match(/\d/)||"."==c&&a.eat(/\d/)){var d=!1;return a.match(/^x[\da-f]+/i)||a.match(/^b[01]+/)||(a.eatWhile(/\d/),a.eat(".")&&(d=!0,a.eatWhile(/\d/)),a.match(/^e[+\-]?\d+/i)&&(d=!0)),d?a.match(/^f(?:32|64)/):a.match(/^[ui](?:8|16|32|64)/),h("atom","number")}return c.match(/[()\[\]{}:;,]/)?h(c,null):"-"==c&&a.eat(">")?h("->",null):c.match(e)?(a.eatWhile(e),h("op",null)):(a.eatWhile(/\w/),g=a.current(),a.match(/^::\w/)?(a.backUp(1),h("prefix","variable-2")):b.keywords.propertyIsEnumerable(g)?h(b.keywords[g],g.match(/true|false/)?"atom":"keyword"):h("name","variable"))}function j(a,b){for(var c,d=!1;c=a.next();){if('"'==c&&!d)return b.tokenize=i,h("atom","string");d=!d&&"\\"==c}return h("op","string")}function k(a){return function(b,c){for(var e,d=null;e=b.next();){if("/"==e&&"*"==d){if(1==a){c.tokenize=i;break}return c.tokenize=k(a-1),c.tokenize(b,c)}if("*"==e&&"/"==d)return c.tokenize=k(a+1),c.tokenize(b,c);d=e}return"comment"}}function m(){for(var a=arguments.length-1;a>=0;a--)l.cc.push(arguments[a])}function n(){return m.apply(null,arguments),!0}function o(a,b){var c=function(){var c=l.state;c.lexical={indented:c.indented,column:l.stream.column(),type:a,prev:c.lexical,info:b}};return c.lex=!0,c}function p(){var a=l.state;a.lexical.prev&&(")"==a.lexical.type&&(a.indented=a.lexical.indented),a.lexical=a.lexical.prev)}function q(){l.state.keywords=d}function r(){l.state.keywords=c}function s(a,b){function c(d){return","==d?n(a,c):d==b?n():n(c)}return function(d){return d==b?n():m(a,c)}}function t(a,b){return n(o("stat",b),a,p,u)}function u(a){return"}"==a?n():"let"==a?t(C,"let"):"fn"==a?t(G):"type"==a?n(o("stat"),H,v,p,u):"enum"==a?t(I):"mod"==a?t(K):"iface"==a?t(L):"impl"==a?t(M):"open-attr"==a?n(o("]"),s(w,"]"),p):"ignore"==a||a.match(/[\]\);,]/)?n(u):m(o("stat"),w,p,v,u)}function v(a){return";"==a?n():m()}function w(a){return"atom"==a||"name"==a?n(x):"{"==a?n(o("}"),z,p):a.match(/[\[\(]/)?Y(a,w):a.match(/[\]\)\};,]/)?m():"if-style"==a?n(w,w):"else-style"==a||"op"==a?n(w):"for"==a?n(S,E,F,w,w):"alt"==a?n(w,U):"fn"==a?n(G):"macro"==a?n(X):n()}function x(a){return"."==g?n(y):"::<"==g?n(N,x):"op"==a||":"==g?n(w):"("==a||"["==a?Y(a,w):m()}function y(){return g.match(/^\w+$/)?(l.marked="variable",n(x)):m(w)}function z(a){if("op"==a){if("|"==g)return n(B,p,o("}","block"),u);if("||"==g)return n(p,o("}","block"),u)}return"mutable"==g||g.match(/^\w+$/)&&":"==l.stream.peek()&&!l.stream.match("::",!1)?m(A(w)):m(u)}function A(a){function b(c){return"mutable"==g||"with"==g?(l.marked="keyword",n(b)):g.match(/^\w*$/)?(l.marked="variable",n(b)):":"==c?n(a,b):"}"==c?n():n(b)}return b}function B(a){return"name"==a?(l.marked="def",n(B)):"op"==a&&"|"==g?n():n(B)}function C(a){return a.match(/[\]\)\};]/)?n():"="==g?n(w,D):","==a?n(C):m(S,E,C)}function D(a){return a.match(/[\]\)\};,]/)?m(C):m(w,D)}function E(a){return":"==a?n(q,P,r):m()}function F(a){return"name"==a&&"in"==g?(l.marked="keyword",n()):m()}function G(a){return"@"==g||"~"==g?(l.marked="keyword",n(G)):"name"==a?(l.marked="def",n(G)):"<"==g?n(N,G):"{"==a?m(w):"("==a?n(o(")"),s(O,")"),p,G):"->"==a?n(q,P,r,G):";"==a?n():n(G)}function H(a){return"name"==a?(l.marked="def",n(H)):"<"==g?n(N,H):"="==g?n(q,P,r):n(H)}function I(a){return"name"==a?(l.marked="def",n(I)):"<"==g?n(N,I):"="==g?n(q,P,r,v):"{"==a?n(o("}"),q,J,r,p):n(I)}function J(a){return"}"==a?n():"("==a?n(o(")"),s(P,")"),p,J):(g.match(/^\w+$/)&&(l.marked="def"),n(J))}function K(a){return"name"==a?(l.marked="def",n(K)):"{"==a?n(o("}"),u,p):m()}function L(a){return"name"==a?(l.marked="def",n(L)):"<"==g?n(N,L):"{"==a?n(o("}"),u,p):m()+}function M(a){return"<"==g?n(N,M):"of"==g||"for"==g?(l.marked="keyword",n(P,M)):"name"==a?(l.marked="def",n(M)):"{"==a?n(o("}"),u,p):m()}function N(){return">"==g?n():","==g?n(N):":"==g?n(P,N):m(P,N)}function O(a){return"name"==a?(l.marked="def",n(O)):":"==a?n(q,P,r):m()}function P(a){return"name"==a?(l.marked="variable-3",n(Q)):"mutable"==g?(l.marked="keyword",n(P)):"atom"==a?n(Q):"op"==a||"obj"==a?n(P):"fn"==a?n(R):"{"==a?n(o("{"),A(P),p):Y(a,P)}function Q(){return"<"==g?n(N):m()}function R(a){return"("==a?n(o("("),s(P,")"),p,R):"->"==a?n(P):m()}function S(a){return"name"==a?(l.marked="def",n(T)):"atom"==a?n(T):"op"==a?n(S):a.match(/[\]\)\};,]/)?m():Y(a,S)}function T(a){return"op"==a&&"."==g?n():"to"==g?(l.marked="keyword",n(S)):m()}function U(a){return"{"==a?n(o("}","alt"),V,p):m()}function V(a){return"}"==a?n():"|"==a?n(V):"when"==g?(l.marked="keyword",n(w,W)):a.match(/[\]\);,]/)?n(V):m(S,W)}function W(a){return"{"==a?n(o("}","alt"),u,p,V):m(V)}function X(a){return a.match(/[\[\(\{]/)?Y(a,w):m()}function Y(a,b){return"["==a?n(o("]"),s(b,"]"),p):"("==a?n(o(")"),s(b,")"),p):"{"==a?n(o("}"),s(b,"}"),p):n()}function Z(a,b,c){var d=a.cc;for(l.state=a,l.stream=b,l.marked=null,l.cc=d;;){var e=d.length?d.pop():u;if(e(f)){for(;d.length&&d[d.length-1].lex;)d.pop()();return l.marked||c}}}var f,g,a=4,b=2,c={"if":"if-style","while":"if-style","else":"else-style","do":"else-style",ret:"else-style",fail:"else-style","break":"atom",cont:"atom","const":"let",resource:"fn",let:"let",fn:"fn","for":"for",alt:"alt",iface:"iface",impl:"impl",type:"type","enum":"enum",mod:"mod",as:"op","true":"atom","false":"atom",assert:"op",check:"op",claim:"op","native":"ignore",unsafe:"ignore","import":"else-style","export":"else-style",copy:"op",log:"op",log_err:"op",use:"op",bind:"op",self:"atom"},d=function(){for(var a={fn:"fn",block:"fn",obj:"obj"},b="bool uint int i8 i16 i32 i64 u8 u16 u32 u64 float f32 f64 str char".split(" "),c=0,d=b.length;d>c;++c)a[b[c]]="atom";return a}(),e=/[+\-*&%=<>!?|\.@]/,l={state:null,stream:null,marked:null,cc:null};return p.lex=q.lex=r.lex=!0,{startState:function(){return{tokenize:i,cc:[],lexical:{indented:-a,column:0,type:"top",align:!1},keywords:c,indented:0}},token:function(a,b){if(a.sol()&&(b.lexical.hasOwnProperty("align")||(b.lexical.align=!1),b.indented=a.indentation()),a.eatSpace())return null;f=g=null;var c=b.tokenize(a,b);return"comment"==c?c:(b.lexical.hasOwnProperty("align")||(b.lexical.align=!0),"prefix"==f?c:(g||(g=a.current()),Z(b,a,c)))},indent:function(c,d){if(c.tokenize!=i)return 0;var e=d&&d.charAt(0),f=c.lexical,g=f.type,h=e==g;return"stat"==g?f.indented+a:f.align?f.column+(h?0:1):f.indented+(h?0:"alt"==f.info?b:a)},electricChars:"{}",blockCommentStart:"/*",blockCommentEnd:"*/",lineComment:"//"}}),CodeMirror.defineMIME("text/x-rustsrc","rust"),CodeMirror.defineMode("sass",function(a){var b=function(a){return RegExp("^"+a.join("|"))},c=["true","false","null","auto"],d=RegExp("^"+c.join("|")),e=["\\(","\\)","=",">","<","==",">=","<=","\\+","-","\\!=","/","\\*","%","and","or","not"],f=b(e),g=/^::?[\w\-]+/,h=function(a,b){var c=a.peek();return")"===c?(a.next(),b.tokenizer=n,"operator"):"("===c?(a.next(),a.eatSpace(),"operator"):"'"===c||'"'===c?(b.tokenizer=j(a.next()),"string"):(b.tokenizer=j(")",!1),"string")},i=function(a,b){return a.skipTo("*/")?(a.next(),a.next(),b.tokenizer=n):a.next(),"comment"},j=function(a,b){function c(d,e){var f=d.next(),g=d.peek(),h=d.string.charAt(d.pos-2),i="\\"!==f&&g===a||f===a&&"\\"!==h;return i?(f!==a&&b&&d.next(),e.tokenizer=n,"string"):"#"===f&&"{"===g?(e.tokenizer=k(c),d.next(),"operator"):"string"}return null==b&&(b=!0),c},k=function(a){return function(b,c){return"}"===b.peek()?(b.next(),c.tokenizer=a,"operator"):n(b,c)}},l=function(b){if(0==b.indentCount){b.indentCount++;var c=b.scopes[0].offset,d=c+a.indentUnit;b.scopes.unshift({offset:d})}},m=function(a){1!=a.scopes.length&&a.scopes.shift()},n=function(a,b){var c=a.peek();if(a.match("//"))return a.skipToEnd(),"comment";if(a.match("/*"))return b.tokenizer=i,b.tokenizer(a,b);if(a.match("#{"))return b.tokenizer=k(n),"operator";if("."===c)return a.next(),a.match(/^[\w-]+/)?(l(b),"atom"):"#"===a.peek()?(l(b),"atom"):"operator";if("#"===c){if(a.next(),a.match(/[0-9a-fA-F]{6}|[0-9a-fA-F]{3}/))return"number";if(a.match(/^[\w-]+/))return l(b),"atom";if("#"===a.peek())return l(b),"atom"}return a.match(/^-?[0-9\.]+/)?"number":a.match(/^(px|em|in)\b/)?"unit":a.match(d)?"keyword":a.match(/^url/)&&"("===a.peek()?(b.tokenizer=h,"atom"):"$"===c?(a.next(),a.eatWhile(/[\w-]/),":"===a.peek()?(a.next(),"variable-2"):"variable-3"):"!"===c?(a.next(),a.match(/^[\w]+/)?"keyword":"operator"):"="===c?(a.next(),a.match(/^[\w-]+/)?(l(b),"meta"):"operator"):"+"===c?(a.next(),a.match(/^[\w-]+/)?"variable-3":"operator"):a.match(/^@(else if|if|media|else|for|each|while|mixin|function)/)?(l(b),"meta"):"@"===c?(a.next(),a.eatWhile(/[\w-]/),"meta"):'"'===c||"'"===c?(a.next(),b.tokenizer=j(c),"string"):":"==c&&a.match(g)?"keyword":a.eatWhile(/[\w-&]/)?":"!==a.peek()||a.match(g,!1)?"atom":"property":a.match(f)?"operator":(a.next(),null)},o=function(b,c){b.sol()&&(c.indentCount=0);var d=c.tokenizer(b,c),e=b.current();if("@return"===e&&m(c),"atom"===d&&l(c),null!==d){for(var f=b.pos-e.length,g=f+a.indentUnit*c.indentCount,h=[],i=0;c.scopes.length>i;i++){var j=c.scopes[i];g>=j.offset&&h.push(j)}c.scopes=h}return d};return{startState:function(){return{tokenizer:n,scopes:[{offset:0,type:"sass"}],definedVars:[],definedMixins:[]}},token:function(a,b){var c=o(a,b);return b.lastToken={style:c,content:a.current()},c},indent:function(a){return a.scopes[0].offset}}}),CodeMirror.defineMIME("text/x-sass","sass"),CodeMirror.defineMode("scheme",function(){function h(a){for(var b={},c=a.split(" "),d=0;c.length>d;++d)b[c[d]]=!0;return b}function k(a,b,c){this.indent=a,this.type=b,this.prev=c}function l(a,b,c){a.indentStack=new k(b,c,a.indentStack)}function m(a){a.indentStack=a.indentStack.prev}function r(a){return a.match(n)}function s(a){return a.match(o)}function t(a,b){return b===!0&&a.backUp(1),a.match(q)}function u(a){return a.match(p)}var a="builtin",b="comment",c="string",d="atom",e="number",f="bracket",g=2,i=h("\u03bb case-lambda call/cc class define-class exit-handler field import inherit init-field interface let*-values let-values let/ec mixin opt-lambda override protect provide public rename require require-for-syntax syntax syntax-case syntax-error unit/sig unless when with-syntax and begin call-with-current-continuation call-with-input-file call-with-output-file case cond define define-syntax delay do dynamic-wind else for-each if lambda let let* let-syntax letrec letrec-syntax map or syntax-rules abs acos angle append apply asin assoc assq assv atan boolean? caar cadr call-with-input-file call-with-output-file call-with-values car cdddar cddddr cdr ceiling char->integer char-alphabetic? char-ci<=? char-ci<? char-ci=? char-ci>=? char-ci>? char-downcase char-lower-case? char-numeric? char-ready? char-upcase char-upper-case? char-whitespace? char<=? char<? char=? char>=? char>? char? close-input-port close-output-port complex? cons cos current-input-port current-output-port denominator display eof-object? eq? equal? eqv? eval even? exact->inexact exact? exp expt #f floor force gcd imag-part inexact->exact inexact? input-port? integer->char integer? interaction-environment lcm length list list->string list->vector list-ref list-tail list? load log magnitude make-polar make-rectangular make-string make-vector max member memq memv min modulo negative? newline not null-environment null? number->string number? numerator odd? open-input-file open-output-file output-port? pair? peek-char port? positive? procedure? quasiquote quote quotient rational? rationalize read read-char real-part real? remainder reverse round scheme-report-environment set! set-car! set-cdr! sin sqrt string string->list string->number string->symbol string-append string-ci<=? string-ci<? string-ci=? string-ci>=? string-ci>? string-copy string-fill! string-length string-ref string-set! string<=? string<? string=? string>=? string>? string? substring symbol->string symbol? #t tan transcript-off transcript-on truncate values vector vector->list vector-fill! vector-length vector-ref vector-set! with-input-from-file with-output-to-file write write-char zero?"),j=h("define let letrec let* lambda"),n=RegExp(/^(?:[-+]i|[-+][01]+#*(?:\/[01]+#*)?i|[-+]?[01]+#*(?:\/[01]+#*)?@[-+]?[01]+#*(?:\/[01]+#*)?|[-+]?[01]+#*(?:\/[01]+#*)?[-+](?:[01]+#*(?:\/[01]+#*)?)?i|[-+]?[01]+#*(?:\/[01]+#*)?)(?=[()\s;"]|$)/i),o=RegExp(/^(?:[-+]i|[-+][0-7]+#*(?:\/[0-7]+#*)?i|[-+]?[0-7]+#*(?:\/[0-7]+#*)?@[-+]?[0-7]+#*(?:\/[0-7]+#*)?|[-+]?[0-7]+#*(?:\/[0-7]+#*)?[-+](?:[0-7]+#*(?:\/[0-7]+#*)?)?i|[-+]?[0-7]+#*(?:\/[0-7]+#*)?)(?=[()\s;"]|$)/i),p=RegExp(/^(?:[-+]i|[-+][\da-f]+#*(?:\/[\da-f]+#*)?i|[-+]?[\da-f]+#*(?:\/[\da-f]+#*)?@[-+]?[\da-f]+#*(?:\/[\da-f]+#*)?|[-+]?[\da-f]+#*(?:\/[\da-f]+#*)?[-+](?:[\da-f]+#*(?:\/[\da-f]+#*)?)?i|[-+]?[\da-f]+#*(?:\/[\da-f]+#*)?)(?=[()\s;"]|$)/i),q=RegExp(/^(?:[-+]i|[-+](?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*)i|[-+]?(?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*)@[-+]?(?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*)|[-+]?(?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*)[-+](?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*)?i|(?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*))(?=[()\s;"]|$)/i);return{startState:function(){return{indentStack:null,indentation:0,mode:!1,sExprComment:!1}},token:function(h,k){if(null==k.indentStack&&h.sol()&&(k.indentation=h.indentation()),h.eatSpace())return null;var n=null;switch(k.mode){case"string":for(var o,p=!1;null!=(o=h.next());){if('"'==o&&!p){k.mode=!1;break}p=!p&&"\\"==o}n=c;break;case"comment":for(var o,q=!1;null!=(o=h.next());){if("#"==o&&q){k.mode=!1;break}q="|"==o}n=b;break;case"s-expr-comment":if(k.mode=!1,"("!=h.peek()&&"["!=h.peek()){h.eatWhile(/[^/s]/),n=b;break}k.sExprComment=0;default:var v=h.next();if('"'==v)k.mode="string",n=c;else if("'"==v)n=d;else if("#"==v)if(h.eat("|"))k.mode="comment",n=b;else if(h.eat(/[tf]/i))n=d;else if(h.eat(";"))k.mode="s-expr-comment",n=b;else{var w=null,x=!1,y=!0;h.eat(/[ei]/i)?x=!0:h.backUp(1),h.match(/^#b/i)?w=r:h.match(/^#o/i)?w=s:h.match(/^#x/i)?w=u:h.match(/^#d/i)?w=t:h.match(/^[-+0-9.]/,!1)?(y=!1,w=t):x||h.eat("#"),null!=w&&(y&&!x&&h.match(/^#[ei]/i),w(h)&&(n=e))}else if(/^[-+0-9.]/.test(v)&&t(h,!0))n=e;else if(";"==v)h.skipToEnd(),n=b;else if("("==v||"["==v){for(var B,z="",A=h.column();null!=(B=h.eat(/[^\s\(\[\;\)\]]/));)z+=B;z.length>0&&j.propertyIsEnumerable(z)?l(k,A+g,v):(h.eatSpace(),h.eol()||";"==h.peek()?l(k,A+1,v):l(k,A+h.current().length,v)),h.backUp(h.current().length-1),"number"==typeof k.sExprComment&&k.sExprComment++,n=f}else")"==v||"]"==v?(n=f,null!=k.indentStack&&k.indentStack.type==(")"==v?"(":"[")&&(m(k),"number"==typeof k.sExprComment&&0==--k.sExprComment&&(n=b,k.sExprComment=!1))):(h.eatWhile(/[\w\$_\-!$%&*+\.\/:<=>?@\^~]/),n=i&&i.propertyIsEnumerable(h.current())?a:"variable")}return"number"==typeof k.sExprComment?b:n},indent:function(a){return null==a.indentStack?a.indentation:a.indentStack.indent},lineComment:";;"}}),CodeMirror.defineMIME("text/x-scheme","scheme"),CodeMirror.defineMode("shell",function(){function b(b,c){for(var d=c.split(" "),e=0;d.length>e;e++)a[d[e]]=b}function c(b,c){var g=b.sol(),h=b.next();if("'"===h||'"'===h||"`"===h)return c.tokens.unshift(d(h)),f(b,c);if("#"===h)return g&&b.eat("!")?(b.skipToEnd(),"meta"):(b.skipToEnd(),"comment");if("$"===h)return c.tokens.unshift(e),f(b,c);if("+"===h||"="===h)return"operator";if("-"===h)return b.eat("-"),b.eatWhile(/\w/),"attribute";if(/\d/.test(h)&&(b.eatWhile(/\d/),!/\w/.test(b.peek())))return"number";b.eatWhile(/[\w-]/);var i=b.current();return"="===b.peek()&&/\w+/.test(i)?"def":a.hasOwnProperty(i)?a[i]:null}function d(a){return function(b,c){for(var d,f=!1,g=!1;null!=(d=b.next());){if(d===a&&!g){f=!0;break}if("$"===d&&!g&&"'"!==a){g=!0,b.backUp(1),c.tokens.unshift(e);break}g=!g&&"\\"===d}return(f||!g)&&c.tokens.shift(),"`"===a||")"===a?"quote":"string"}}function f(a,b){return(b.tokens[0]||c)(a,b)}var a={};b("atom","true false"),b("keyword","if then do else elif while until for in esac fi fin fil done exit set unset export function"),b("builtin","ab awk bash beep cat cc cd chown chmod chroot clear cp curl cut diff echo find gawk gcc get git grep kill killall ln ls make mkdir openssl mv nc node npm ping ps restart rm rmdir sed service sh shopt shred source sort sleep ssh start stop su sudo tee telnet top touch vi vim wall wc wget who write yes zsh");var e=function(a,b){b.tokens.length>1&&a.eat("$");var c=a.next(),e=/\w/;return"{"===c&&(e=/[^}]/),"("===c?(b.tokens[0]=d(")"),f(a,b)):(/\d/.test(c)||(a.eatWhile(e),a.eat("}")),b.tokens.shift(),"def")};return{startState:function(){return{tokens:[]}},token:function(a,b){return a.eatSpace()?null:f(a,b)}}}),CodeMirror.defineMIME("text/x-sh","shell"),CodeMirror.defineMode("sieve",function(a){function b(a){for(var b={},c=a.split(" "),d=0;c.length>d;++d)b[c[d]]=!0;return b}function f(a,b){var e=a.next();if("/"==e&&a.eat("*"))return b.tokenize=h,h(a,b);if("#"===e)return a.skipToEnd(),"comment";if('"'==e)return b.tokenize=i(e),b.tokenize(a,b);if("("==e)return b._indent.push("("),b._indent.push("{"),null;if("{"===e)return b._indent.push("{"),null;if(")"==e&&(b._indent.pop(),b._indent.pop()),"}"===e)return b._indent.pop(),null;if(","==e)return null;if(";"==e)return null;if(/[{}\(\),;]/.test(e))return null;if(/\d/.test(e))return a.eatWhile(/[\d]/),a.eat(/[KkMmGg]/),"number";if(":"==e)return a.eatWhile(/[a-zA-Z_]/),a.eatWhile(/[a-zA-Z0-9_]/),"operator";a.eatWhile(/\w/);var f=a.current();return"text"==f&&a.eat(":")?(b.tokenize=g,"string"):c.propertyIsEnumerable(f)?"keyword":d.propertyIsEnumerable(f)?"atom":null}function g(a,b){return b._multiLineString=!0,a.sol()?("."==a.next()&&a.eol()&&(b._multiLineString=!1,b.tokenize=f),"string"):(a.eatSpace(),"#"==a.peek()?(a.skipToEnd(),"comment"):(a.skipToEnd(),"string"))}function h(a,b){for(var d,c=!1;null!=(d=a.next());){if(c&&"/"==d){b.tokenize=f;break}c="*"==d}return"comment"}function i(a){return function(b,c){for(var e,d=!1;null!=(e=b.next())&&(e!=a||d);)d=!d&&"\\"==e;return d||(c.tokenize=f),"string"}}var c=b("if elsif else stop require"),d=b("true false not"),e=a.indentUnit;return{startState:function(a){return{tokenize:f,baseIndent:a||0,_indent:[]}},token:function(a,b){return a.eatSpace()?null:(b.tokenize||f)(a,b)},indent:function(a,b){var c=a._indent.length;return b&&"}"==b[0]&&c--,0>c&&(c=0),c*e},electricChars:"}"}}),CodeMirror.defineMIME("application/sieve","sieve"),CodeMirror.defineMode("smalltalk",function(a){var b=/[+\-\/\\*~<>=@%|&?!.,:;^]/,c=/true|false|nil|self|super|thisContext/,d=function(a,b){this.next=a,this.parent=b},e=function(a,b,c){this.name=a,this.context=b,this.eos=c},f=function(){this.context=new d(g,null),this.expectVariable=!0,this.indentation=0,this.userIndentationDelta=0};f.prototype.userIndent=function(b){this.userIndentationDelta=b>0?b/a.indentUnit-this.indentation:0};var g=function(a,f,g){var k=new e(null,f,!1),l=a.next();return'"'===l?k=h(a,new d(h,f)):"'"===l?k=i(a,new d(i,f)):"#"===l?(a.eatWhile(/[^ .\[\]()]/),k.name="string-2"):"$"===l?("<"===a.next()&&(a.eatWhile(/[^ >]/),a.next()),k.name="string-2"):"|"===l&&g.expectVariable?k.context=new d(j,f):/[\[\]{}()]/.test(l)?(k.name="bracket",k.eos=/[\[{(]/.test(l),"["===l?g.indentation++:"]"===l&&(g.indentation=Math.max(0,g.indentation-1))):b.test(l)?(a.eatWhile(b),k.name="operator",k.eos=";"!==l):/\d/.test(l)?(a.eatWhile(/[\w\d]/),k.name="number"):/[\w_]/.test(l)?(a.eatWhile(/[\w\d_]/),k.name=g.expectVariable?c.test(a.current())?"keyword":"variable":null):k.eos=g.expectVariable,k},h=function(a,b){return a.eatWhile(/[^"]/),new e("comment",a.eat('"')?b.parent:b,!0)},i=function(a,b){return a.eatWhile(/[^']/),new e("string",a.eat("'")?b.parent:b,!1)},j=function(a,b){var c=new e(null,b,!1),d=a.next();return"|"===d?(c.context=b.parent,c.eos=!0):(a.eatWhile(/[^|]/),c.name="variable"),c};return{startState:function(){return new f},token:function(a,b){if(b.userIndent(a.indentation()),a.eatSpace())return null;var c=b.context.next(a,b.context,b);return b.context=c.context,b.expectVariable=c.eos,c.name},blankLine:function(a){a.userIndent(0)},indent:function(b,c){var d=b.context.next===g&&c&&"]"===c.charAt(0)?-1:b.userIndentationDelta;return(b.indentation+d)*a.indentUnit},electricChars:"]"}}),CodeMirror.defineMIME("text/x-stsrc",{name:"smalltalk"}),CodeMirror.defineMode("smarty",function(a){"use strict";var b={rightDelimiter:"}",leftDelimiter:"{",smartyVersion:2};a.hasOwnProperty("leftDelimiter")&&(b.leftDelimiter=a.leftDelimiter),a.hasOwnProperty("rightDelimiter")&&(b.rightDelimiter=a.rightDelimiter),a.hasOwnProperty("smartyVersion")&&3===a.smartyVersion&&(b.smartyVersion=3);var d,c=["debug","extends","function","include","literal"],e={operatorChars:/[+\-*&%=<>!?]/,validIdentifier:/[a-zA-Z0-9_]/,stringChar:/['"]/},f={cont:function(a,b){return d=b,a},chain:function(a,b,c){return b.tokenize=c,c(a,b)}},g={tokenizer:function(a,c){if(a.match(b.leftDelimiter,!0)){if(a.eat("*"))return f.chain(a,c,g.inBlock("comment","*"+b.rightDelimiter));c.depth++;var e=a.eol(),h=/\s/.test(a.peek());return 3===b.smartyVersion&&"{"===b.leftDelimiter&&(e||h)?(c.depth--,null):(c.tokenize=g.smarty,d="startTag","tag")}return a.next(),null},smarty:function(a,h){if(a.match(b.rightDelimiter,!0))return 3===b.smartyVersion?(h.depth--,0>=h.depth&&(h.tokenize=g.tokenizer)):h.tokenize=g.tokenizer,f.cont("tag",null);if(a.match(b.leftDelimiter,!0))return h.depth++,f.cont("tag","startTag");var i=a.next();if("$"==i)return a.eatWhile(e.validIdentifier),f.cont("variable-2","variable");if("|"==i)return f.cont("operator","pipe");if("."==i)return f.cont("operator","property");if(e.stringChar.test(i))return h.tokenize=g.inAttribute(i),f.cont("string","string");if(e.operatorChars.test(i))return a.eatWhile(e.operatorChars),f.cont("operator","operator");if("["==i||"]"==i)return f.cont("bracket","bracket");if("("==i||")"==i)return f.cont("bracket","operator");if(/\d/.test(i))return a.eatWhile(/\d/),f.cont("number","number");if("variable"==h.last){if("@"==i)return a.eatWhile(e.validIdentifier),f.cont("property","property");if("|"==i)return a.eatWhile(e.validIdentifier),f.cont("qualifier","modifier")}else{if("pipe"==h.last)return a.eatWhile(e.validIdentifier),f.cont("qualifier","modifier");if("whitespace"==h.last)return a.eatWhile(e.validIdentifier),f.cont("attribute","modifier")}if("property"==h.last)return a.eatWhile(e.validIdentifier),f.cont("property",null);if(/\s/.test(i))return d="whitespace",null;var j="";"/"!=i&&(j+=i);for(var k=null;k=a.eat(e.validIdentifier);)j+=k;for(var l=0,m=c.length;m>l;l++)if(c[l]==j)return f.cont("keyword","keyword");return/\s/.test(i)?null:f.cont("tag","tag")},inAttribute:function(a){return function(b,c){for(var d=null,e=null;!b.eol();){if(e=b.peek(),b.next()==a&&"\\"!==d){c.tokenize=g.smarty;break}d=e}return"string"}},inBlock:function(a,b){return function(c,d){for(;!c.eol();){if(c.match(b)){d.tokenize=g.tokenizer;break}c.next()}return a}}};return{startState:function(){return{tokenize:g.tokenizer,mode:"smarty",last:null,depth:0}},token:function(a,b){var c=b.tokenize(a,b);return b.last=d,c},electricChars:""}}),CodeMirror.defineMIME("text/x-smarty","smarty"),CodeMirror.defineMode("sql",function(a,b){"use strict";function k(a,b){var k=a.next();if(i[k]){var n=i[k](a,b);if(n!==!1)return n}if(1==h.hexNumber&&("0"==k&&a.match(/^[xX][0-9a-fA-F]+/)||("x"==k||"X"==k)&&a.match(/^'[0-9a-fA-F]+'/)))return"number";if(1==h.binaryNumber&&(("b"==k||"B"==k)&&a.match(/^'[01]+'/)||"0"==k&&a.match(/^b[01]+/)))return"number";if(k.charCodeAt(0)>47&&58>k.charCodeAt(0))return a.match(/^[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?/),1==h.decimallessFloat&&a.eat("."),"number";if("?"==k&&(a.eatSpace()||a.eol()||a.eat(";")))return"variable-3";if("'"==k||'"'==k&&h.doubleQuote)return b.tokenize=l(k),b.tokenize(a,b);if((1==h.nCharCast&&("n"==k||"N"==k)||1==h.charsetCast&&"_"==k&&a.match(/[a-z][a-z0-9]*/i))&&("'"==a.peek()||'"'==a.peek()))return"keyword";if(/^[\(\),\;\[\]]/.test(k))return null;if(h.commentSlashSlash&&"/"==k&&a.eat("/"))return a.skipToEnd(),"comment";if(h.commentHash&&"#"==k||"-"==k&&a.eat("-")&&(!h.commentSpaceRequired||a.eat(" ")))return a.skipToEnd(),"comment";if("/"==k&&a.eat("*"))return b.tokenize=m,b.tokenize(a,b);if("."!=k){if(g.test(k))return a.eatWhile(g),null;if("{"==k&&(a.match(/^( )*(d|D|t|T|ts|TS)( )*'[^']*'( )*}/)||a.match(/^( )*(d|D|t|T|ts|TS)( )*"[^"]*"( )*}/)))return"number";a.eatWhile(/^[_\w\d]/);var o=a.current().toLowerCase();return j.hasOwnProperty(o)&&(a.match(/^( )+'[^']*'/)||a.match(/^( )+"[^"]*"/))?"number":d.hasOwnProperty(o)?"atom":e.hasOwnProperty(o)?"builtin":f.hasOwnProperty(o)?"keyword":c.hasOwnProperty(o)?"string-2":null}return 1==h.zerolessFloat&&a.match(/^(?:\d+(?:e[+-]?\d+)?)/i)?"number":1==h.ODBCdotTable&&a.match(/^[a-zA-Z_]+/)?"variable-2":void 0}function l(a){return function(b,c){for(var e,d=!1;null!=(e=b.next());){if(e==a&&!d){c.tokenize=k;break}d=!d&&"\\"==e}return"string"}}function m(a,b){for(;;){if(!a.skipTo("*")){a.skipToEnd();break}if(a.next(),a.eat("/")){b.tokenize=k;break}}return"comment"}function n(a,b,c){b.context={prev:b.context,indent:a.indentation(),col:a.column(),type:c}}function o(a){a.indent=a.context.indent,a.context=a.context.prev}var c=b.client||{},d=b.atoms||{"false":!0,"true":!0,"null":!0},e=b.builtin||{},f=b.keywords||{},g=b.operatorChars||/^[*+\-%<>!=&|~^]/,h=b.support||{},i=b.hooks||{},j=b.dateSQL||{date:!0,time:!0,timestamp:!0};return{startState:function(){return{tokenize:k,context:null}},token:function(a,b){if(a.sol()&&b.context&&null==b.context.align&&(b.context.align=!1),a.eatSpace())return null;var c=b.tokenize(a,b);if("comment"==c)return c;b.context&&null==b.context.align&&(b.context.align=!0);var d=a.current();return"("==d?n(a,b,")"):"["==d?n(a,b,"]"):b.context&&b.context.type==d&&o(b),c},indent:function(b,c){var d=b.context;return d?d.align?d.col+(c.charAt(0)==d.type?0:1):d.indent+a.indentUnit:CodeMirror.Pass}}}),function(){"use strict";function a(a){for(var b;null!=(b=a.next());)if("`"==b&&!a.eat("`"))return"variable-2";return null}function b(a){return a.eat("@")&&(a.match(/^session\./),a.match(/^local\./),a.match(/^global\./)),a.eat("'")?(a.match(/^.*'/),"variable-2"):a.eat('"')?(a.match(/^.*"/),"variable-2"):a.eat("`")?(a.match(/^.*`/),"variable-2"):a.match(/^[0-9a-zA-Z$\.\_]+/)?"variable-2":null}function c(a){return a.eat("N")?"atom":a.match(/^[a-zA-Z.#!?]/)?"variable-2":null}function e(a){for(var b={},c=a.split(" "),d=0;c.length>d;++d)b[c[d]]=!0;return b}var d="alter and as asc between by count create delete desc distinct drop from having in insert into is join like not on or order select set table union update values where ";CodeMirror.defineMIME("text/x-sql",{name:"sql",keywords:e(d+"begin"),builtin:e("bool boolean bit blob enum long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text bigint int int1 int2 int3 int4 int8 integer float float4 float8 double char varbinary varchar varcharacter precision real date datetime year unsigned signed decimal numeric"),atoms:e("false true null unknown"),operatorChars:/^[*+\-%<>!=]/,dateSQL:e("date time timestamp"),support:e("ODBCdotTable doubleQuote binaryNumber hexNumber")}),CodeMirror.defineMIME("text/x-mysql",{name:"sql",client:e("charset clear connect edit ego exit go help nopager notee nowarning pager print prompt quit rehash source status system tee"),keywords:e(d+"accessible action add after algorithm all analyze asensitive at authors auto_increment autocommit avg avg_row_length before binary binlog both btree cache call cascade cascaded case catalog_name chain change changed character check checkpoint checksum class_origin client_statistics close coalesce code collate collation collations column columns comment commit committed completion concurrent condition connection consistent constraint contains continue contributors convert cross current_date current_time current_timestamp current_user cursor data database databases day_hour day_microsecond day_minute day_second deallocate dec declare default delay_key_write delayed delimiter des_key_file describe deterministic dev_pop dev_samp deviance directory disable discard distinctrow div dual dumpfile each elseif enable enclosed end ends engine engines enum errors escape escaped even event events every execute exists exit explain extended fast fetch field fields first flush for force foreign found_rows full fulltext function general global grant grants group groupby_concat handler hash help high_priority hosts hour_microsecond hour_minute hour_second if ignore ignore_server_ids import index index_statistics infile inner innodb inout insensitive insert_method install interval invoker isolation iterate key keys kill language last leading leave left level limit linear lines list load local localtime localtimestamp lock logs low_priority master master_heartbeat_period master_ssl_verify_server_cert masters match max max_rows maxvalue message_text middleint migrate min min_rows minute_microsecond minute_second mod mode modifies modify mutex mysql_errno natural next no no_write_to_binlog offline offset one online open optimize option optionally out outer outfile pack_keys parser partition partitions password phase plugin plugins prepare preserve prev primary privileges procedure processlist profile profiles purge query quick range read read_write reads real rebuild recover references regexp relaylog release remove rename reorganize repair repeatable replace require resignal restrict resume return returns revoke right rlike rollback rollup row row_format rtree savepoint schedule schema schema_name schemas second_microsecond security sensitive separator serializable server session share show signal slave slow smallint snapshot soname spatial specific sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_no_cache sql_small_result sqlexception sqlstate sqlwarning ssl start starting starts status std stddev stddev_pop stddev_samp storage straight_join subclass_origin sum suspend table_name table_statistics tables tablespace temporary terminated to trailing transaction trigger triggers truncate uncommitted undo uninstall unique unlock upgrade usage use use_frm user user_resources user_statistics using utc_date utc_time utc_timestamp value variables varying view views warnings when while with work write xa xor year_month zerofill begin do then else loop repeat"),builtin:e("bool boolean bit blob decimal double enum float long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text bigint int int1 int2 int3 int4 int8 integer float float4 float8 double char varbinary varchar varcharacter precision date datetime year unsigned signed numeric"),atoms:e("false true null unknown"),operatorChars:/^[*+\-%<>!=&|^]/,dateSQL:e("date time timestamp"),support:e("ODBCdotTable decimallessFloat zerolessFloat binaryNumber hexNumber doubleQuote nCharCast charsetCast commentHash commentSpaceRequired"),hooks:{"@":b,"`":a,"\\":c}}),CodeMirror.defineMIME("text/x-mariadb",{name:"sql",client:e("charset clear connect edit ego exit go help nopager notee nowarning pager print prompt quit rehash source status system tee"),keywords:e(d+"accessible action add after algorithm all always analyze asensitive at authors auto_increment autocommit avg avg_row_length before binary binlog both btree cache call cascade cascaded case catalog_name chain change changed character check checkpoint checksum class_origin client_statistics close coalesce code collate collation collations column columns comment commit committed completion concurrent condition connection consistent constraint contains continue contributors convert cross current_date current_time current_timestamp current_user cursor data database databases day_hour day_microsecond day_minute day_second deallocate dec declare default delay_key_write delayed delimiter des_key_file describe deterministic dev_pop dev_samp deviance directory disable discard distinctrow div dual dumpfile each elseif enable enclosed end ends engine engines enum errors escape escaped even event events every execute exists exit explain extended fast fetch field fields first flush for force foreign found_rows full fulltext function general generated global grant grants group groupby_concat handler hard hash help high_priority hosts hour_microsecond hour_minute hour_second if ignore ignore_server_ids import index index_statistics infile inner innodb inout insensitive insert_method install interval invoker isolation iterate key keys kill language last leading leave left level limit linear lines list load local localtime localtimestamp lock logs low_priority master master_heartbeat_period master_ssl_verify_server_cert masters match max max_rows maxvalue message_text middleint migrate min min_rows minute_microsecond minute_second mod mode modifies modify mutex mysql_errno natural next no no_write_to_binlog offline offset one online open optimize option optionally out outer outfile pack_keys parser partition partitions password persistent phase plugin plugins prepare preserve prev primary privileges procedure processlist profile profiles purge query quick range read read_write reads real rebuild recover references regexp relaylog release remove rename reorganize repair repeatable replace require resignal restrict resume return returns revoke right rlike rollback rollup row row_format rtree savepoint schedule schema schema_name schemas second_microsecond security sensitive separator serializable server session share show signal slave slow smallint snapshot soft soname spatial specific sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_no_cache sql_small_result sqlexception sqlstate sqlwarning ssl start starting starts status std stddev stddev_pop stddev_samp storage straight_join subclass_origin sum suspend table_name table_statistics tables tablespace temporary terminated to trailing transaction trigger triggers truncate uncommitted undo uninstall unique unlock upgrade usage use use_frm user user_resources user_statistics using utc_date utc_time utc_timestamp value variables varying view views virtual warnings when while with work write xa xor year_month zerofill begin do then else loop repeat"),builtin:e("bool boolean bit blob decimal double enum float long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text bigint int int1 int2 int3 int4 int8 integer float float4 float8 double char varbinary varchar varcharacter precision date datetime year unsigned signed numeric"),atoms:e("false true null unknown"),operatorChars:/^[*+\-%<>!=&|^]/,dateSQL:e("date time timestamp"),support:e("ODBCdotTable decimallessFloat zerolessFloat binaryNumber hexNumber doubleQuote nCharCast charsetCast commentHash commentSpaceRequired"),hooks:{"@":b,"`":a,"\\":c}}),CodeMirror.defineMIME("text/x-cassandra",{name:"sql",client:{},keywords:e("use select from using consistency where limit first reversed first and in insert into values using consistency ttl update set delete truncate begin batch apply create keyspace with columnfamily primary key index on drop alter type add any one quorum all local_quorum each_quorum"),builtin:e("ascii bigint blob boolean counter decimal double float int text timestamp uuid varchar varint"),atoms:e("false true"),operatorChars:/^[<>=]/,dateSQL:{},support:e("commentSlashSlash decimallessFloat"),hooks:{}}),CodeMirror.defineMIME("text/x-plsql",{name:"sql",client:e("appinfo arraysize autocommit autoprint autorecovery autotrace blockterminator break btitle cmdsep colsep compatibility compute concat copycommit copytypecheck define describe echo editfile embedded escape exec execute feedback flagger flush heading headsep instance linesize lno loboffset logsource long longchunksize markup native newpage numformat numwidth pagesize pause pno recsep recsepchar release repfooter repheader serveroutput shiftinout show showmode size spool sqlblanklines sqlcase sqlcode sqlcontinue sqlnumber sqlpluscompatibility sqlprefix sqlprompt sqlterminator suffix tab term termout time timing trimout trimspool ttitle underline verify version wrap"),keywords:e("abort accept access add all alter and any array arraylen as asc assert assign at attributes audit authorization avg base_table begin between binary_integer body boolean by case cast char char_base check close cluster clusters colauth column comment commit compress connect connected constant constraint crash create current currval cursor data_base database date dba deallocate debugoff debugon decimal declare default definition delay delete desc digits dispose distinct do drop else elsif enable end entry escape exception exception_init exchange exclusive exists exit external fast fetch file for force form from function generic goto grant group having identified if immediate in increment index indexes indicator initial initrans insert interface intersect into is key level library like limited local lock log logging long loop master maxextents maxtrans member minextents minus mislabel mode modify multiset new next no noaudit nocompress nologging noparallel not nowait number_base object of off offline on online only open option or order out package parallel partition pctfree pctincrease pctused pls_integer positive positiven pragma primary prior private privileges procedure public raise range raw read rebuild record ref references refresh release rename replace resource restrict return returning reverse revoke rollback row rowid rowlabel rownum rows run savepoint schema segment select separate session set share snapshot some space split sql start statement storage subtype successful synonym tabauth table tables tablespace task terminate then to trigger truncate type union unique unlimited unrecoverable unusable update use using validate value values variable view views when whenever where while with work"),functions:e("abs acos add_months ascii asin atan atan2 average bfilename ceil chartorowid chr concat convert cos cosh count decode deref dual dump dup_val_on_index empty error exp false floor found glb greatest hextoraw initcap instr instrb isopen last_day least lenght lenghtb ln lower lpad ltrim lub make_ref max min mod months_between new_time next_day nextval nls_charset_decl_len nls_charset_id nls_charset_name nls_initcap nls_lower nls_sort nls_upper nlssort no_data_found notfound null nvl others power rawtohex reftohex round rowcount rowidtochar rpad rtrim sign sin sinh soundex sqlcode sqlerrm sqrt stddev substr substrb sum sysdate tan tanh to_char to_date to_label to_multi_byte to_number to_single_byte translate true trunc uid upper user userenv variance vsize"),builtin:e("bfile blob character clob dec float int integer mlslabel natural naturaln nchar nclob number numeric nvarchar2 real rowtype signtype smallint string varchar varchar2"),operatorChars:/^[*+\-%<>!=~]/,dateSQL:e("date time timestamp"),support:e("doubleQuote nCharCast zerolessFloat binaryNumber hexNumber")})+}(),CodeMirror.defineMode("sparql",function(a){function d(a){return RegExp("^(?:"+a.join("|")+")$","i")}function h(a,b){var d=a.next();if(c=null,"$"==d||"?"==d)return a.match(/^[\w\d]*/),"variable-2";if("<"!=d||a.match(/^[\s\u00a0=]/,!1)){if('"'==d||"'"==d)return b.tokenize=i(d),b.tokenize(a,b);if(/[{}\(\),\.;\[\]]/.test(d))return c=d,null;if("#"==d)return a.skipToEnd(),"comment";if(g.test(d))return a.eatWhile(g),null;if(":"==d)return a.eatWhile(/[\w\d\._\-]/),"atom";if(a.eatWhile(/[_\w\d]/),a.eat(":"))return a.eatWhile(/[\w\d_\-]/),"atom";var h=a.current();return e.test(h)?null:f.test(h)?"keyword":"variable"}return a.match(/^[^\s\u00a0>]*>?/),"atom"}function i(a){return function(b,c){for(var e,d=!1;null!=(e=b.next());){if(e==a&&!d){c.tokenize=h;break}d=!d&&"\\"==e}return"string"}}function j(a,b,c){a.context={prev:a.context,indent:a.indent,col:c,type:b}}function k(a){a.indent=a.context.indent,a.context=a.context.prev}var c,b=a.indentUnit,e=d(["str","lang","langmatches","datatype","bound","sameterm","isiri","isuri","isblank","isliteral","union","a"]),f=d(["base","prefix","select","distinct","reduced","construct","describe","ask","from","named","where","order","limit","offset","filter","optional","graph","by","asc","desc"]),g=/[*+\-<>=&|]/;return{startState:function(){return{tokenize:h,context:null,indent:0,col:0}},token:function(a,b){if(a.sol()&&(b.context&&null==b.context.align&&(b.context.align=!1),b.indent=a.indentation()),a.eatSpace())return null;var d=b.tokenize(a,b);if("comment"!=d&&b.context&&null==b.context.align&&"pattern"!=b.context.type&&(b.context.align=!0),"("==c)j(b,")",a.column());else if("["==c)j(b,"]",a.column());else if("{"==c)j(b,"}",a.column());else if(/[\]\}\)]/.test(c)){for(;b.context&&"pattern"==b.context.type;)k(b);b.context&&c==b.context.type&&k(b)}else"."==c&&b.context&&"pattern"==b.context.type?k(b):/atom|string|variable/.test(d)&&b.context&&(/[\}\]]/.test(b.context.type)?j(b,"pattern",a.column()):"pattern"!=b.context.type||b.context.align||(b.context.align=!0,b.context.col=a.column()));return d},indent:function(a,c){var d=c&&c.charAt(0),e=a.context;if(/[\]\}]/.test(d))for(;e&&"pattern"==e.type;)e=e.prev;var f=e&&d==e.type;return e?"pattern"==e.type?e.col:e.align?e.col+(f?0:1):e.indent+(f?0:b):0}}}),CodeMirror.defineMIME("application/x-sparql-query","sparql"),CodeMirror.defineMode("stex",function(){"use strict";function a(a,b){a.cmdState.push(b)}function b(a){return a.cmdState.length>0?a.cmdState[a.cmdState.length-1]:null}function c(a){var b=a.cmdState.pop();b&&b.closeBracket()}function d(a){for(var b=a.cmdState,c=b.length-1;c>=0;c--){var d=b[c];if("DEFAULT"!=d.name)return d}return{styleIdentifier:function(){return null}}}function e(a,b,c){return function(){this.name=a,this.bracketNo=0,this.style=b,this.styles=c,this.argument=null,this.styleIdentifier=function(){return this.styles[this.bracketNo-1]||null},this.openBracket=function(){return this.bracketNo++,"bracket"},this.closeBracket=function(){}}}function g(a,b){a.f=b}function h(c,e){var h;if(c.match(/^\\[a-zA-Z@]+/)){var l=c.current().slice(1);return h=f[l]||f.DEFAULT,h=new h,a(e,h),g(e,k),h.style}if(c.match(/^\\[$&%#{}_]/))return"tag";if(c.match(/^\\[,;!\/\\]/))return"tag";if(c.match("\\["))return g(e,function(a,b){return j(a,b,"\\]")}),"keyword";if(c.match("$$"))return g(e,function(a,b){return j(a,b,"$$")}),"keyword";if(c.match("$"))return g(e,function(a,b){return j(a,b,"$")}),"keyword";var m=c.next();return"%"==m?(c.eol()||g(e,i),"comment"):"}"==m||"]"==m?(h=b(e))?(h.closeBracket(m),g(e,k),"bracket"):"error":"{"==m||"["==m?(h=f.DEFAULT,h=new h,a(e,h),"bracket"):/\d/.test(m)?(c.eatWhile(/[\w.%]/),"atom"):(c.eatWhile(/[\w\-_]/),h=d(e),"begin"==h.name&&(h.argument=c.current()),h.styleIdentifier())}function i(a,b){return a.skipToEnd(),g(b,h),"comment"}function j(a,b,c){if(a.eatSpace())return null;if(a.match(c))return g(b,h),"keyword";if(a.match(/^\\[a-zA-Z@]+/))return"tag";if(a.match(/^[a-zA-Z]+/))return"variable-2";if(a.match(/^\\[$&%#{}_]/))return"tag";if(a.match(/^\\[,;!\/]/))return"tag";if(a.match(/^[\^_&]/))return"tag";if(a.match(/^[+\-<>|=,\/@!*:;'"`~#?]/))return null;if(a.match(/^(\d+\.\d*|\d*\.\d+|\d+)/))return"number";var d=a.next();return"{"==d||"}"==d||"["==d||"]"==d||"("==d||")"==d?"bracket":"%"==d?(a.eol()||a.skipToEnd(),"comment"):"error"}function k(a,d){var f,e=a.peek();return"{"==e||"["==e?(f=b(d),f.openBracket(e),a.eat(e),g(d,h),"bracket"):/[ \t\r]/.test(e)?(a.eat(e),null):(g(d,h),c(d),h(a,d))}var f={};return f.importmodule=e("importmodule","tag",["string","builtin"]),f.documentclass=e("documentclass","tag",["","atom"]),f.usepackage=e("usepackage","tag",["atom"]),f.begin=e("begin","tag",["atom"]),f.end=e("end","tag",["atom"]),f.DEFAULT=function(){this.name="DEFAULT",this.style="tag",this.styleIdentifier=this.openBracket=this.closeBracket=function(){}},{startState:function(){return{cmdState:[],f:h}},copyState:function(a){return{cmdState:a.cmdState.slice(),f:a.f}},token:function(a,b){return b.f(a,b)}}}),CodeMirror.defineMIME("text/x-stex","stex"),CodeMirror.defineMIME("text/x-latex","stex"),CodeMirror.defineMode("tcl",function(){function a(a){for(var b={},c=a.split(" "),d=0;c.length>d;++d)b[c[d]]=!0;return b}function e(a,b,c){return b.tokenize=c,c(a,b)}function f(a,f){var j=f.beforeParams;f.beforeParams=!1;var k=a.next();if('"'!=k&&"'"!=k||!f.inParams){if(/[\[\]{}\(\),;\.]/.test(k))return"("==k&&j?f.inParams=!0:")"==k&&(f.inParams=!1),null;if(/\d/.test(k))return a.eatWhile(/[\w\.]/),"number";if("#"==k&&a.eat("*"))return e(a,f,h);if("#"==k&&a.match(/ *\[ *\[/))return e(a,f,i);if("#"==k&&a.eat("#"))return a.skipToEnd(),"comment";if('"'==k)return a.skipTo(/"/),"comment";if("$"==k)return a.eatWhile(/[$_a-z0-9A-Z\.{:]/),a.eatWhile(/}/),f.beforeParams=!0,"builtin";if(d.test(k))return a.eatWhile(d),"comment";a.eatWhile(/[\w\$_{}]/);var l=a.current().toLowerCase();return b&&b.propertyIsEnumerable(l)?"keyword":c&&c.propertyIsEnumerable(l)?(f.beforeParams=!0,"keyword"):null}return e(a,f,g(k))}function g(a){return function(b,c){for(var e,d=!1,g=!1;null!=(e=b.next());){if(e==a&&!d){g=!0;break}d=!d&&"\\"==e}return g&&(c.tokenize=f),"string"}}function h(a,b){for(var d,c=!1;d=a.next();){if("#"==d&&c){b.tokenize=f;break}c="*"==d}return"comment"}function i(a,b){for(var d,c=0;d=a.next();){if("#"==d&&2==c){b.tokenize=f;break}"]"==d?c++:" "!=d&&(c=0)}return"meta"}var b=a("Tcl safe after append array auto_execok auto_import auto_load auto_mkindex auto_mkindex_old auto_qualify auto_reset bgerror binary break catch cd close concat continue dde eof encoding error eval exec exit expr fblocked fconfigure fcopy file fileevent filename filename flush for foreach format gets glob global history http if incr info interp join lappend lindex linsert list llength load lrange lreplace lsearch lset lsort memory msgcat namespace open package parray pid pkg::create pkg_mkIndex proc puts pwd re_syntax read regex regexp registry regsub rename resource return scan seek set socket source split string subst switch tcl_endOfWord tcl_findLibrary tcl_startOfNextWord tcl_wordBreakAfter tcl_startOfPreviousWord tcl_wordBreakBefore tcltest tclvars tell time trace unknown unset update uplevel upvar variable vwait"),c=a("if elseif else and not or eq ne in ni for foreach while switch"),d=/[+\-*&%=<>!?^\/\|]/;return{startState:function(){return{tokenize:f,beforeParams:!1,inParams:!1}},token:function(a,b){return a.eatSpace()?null:b.tokenize(a,b)}}}),CodeMirror.defineMIME("text/x-tcl","tcl"),CodeMirror.defineMode("tiddlywiki",function(){function o(a,b,c){return b.tokenize=c,c(a,b)}function r(a,b,c){return p=a,q=c,b}function s(b,m){var p,n=b.sol();if(m.block=!1,p=b.peek(),n&&/[<\/\*{}\-]/.test(p)){if(b.match(l))return m.block=!0,o(b,m,v);if(b.match(g))return r("quote","quote");if(b.match(e)||b.match(f))return r("code","comment");if(b.match(h)||b.match(i)||b.match(j)||b.match(k))return r("code","comment");if(b.match(d))return r("hr","hr")}if(p=b.next(),n&&/[\/\*!#;:>|]/.test(p)){if("!"==p)return b.skipToEnd(),r("header","header");if("*"==p)return b.eatWhile("*"),r("list","comment");if("#"==p)return b.eatWhile("#"),r("list","comment");if(";"==p)return b.eatWhile(";"),r("list","comment");if(":"==p)return b.eatWhile(":"),r("list","comment");if(">"==p)return b.eatWhile(">"),r("quote","quote");if("|"==p)return r("table","header")}if("{"==p&&b.match(/\{\{/))return o(b,m,v);if(/[hf]/i.test(p)&&/[ti]/i.test(b.peek())&&b.match(/\b(ttps?|tp|ile):\/\/[\-A-Z0-9+&@#\/%?=~_|$!:,.;]*[A-Z0-9+&@#\/%=~_|$]/i))return r("link","link");if('"'==p)return r("string","string");if("~"==p)return r("text","brace");if(/[\[\]]/.test(p)&&b.peek()==p)return b.next(),r("brace","brace");if("@"==p)return b.eatWhile(c),r("link","link");if(/\d/.test(p))return b.eatWhile(/\d/),r("number","number");if("/"==p){if(b.eat("%"))return o(b,m,t);if(b.eat("/"))return o(b,m,w)}if("_"==p&&b.eat("_"))return o(b,m,x);if("-"==p&&b.eat("-")){if(" "!=b.peek())return o(b,m,y);if(" "==b.peek())return r("text","brace")}if("'"==p&&b.eat("'"))return o(b,m,u);if("<"!=p)return r(p);if(b.eat("<"))return o(b,m,z);b.eatWhile(/[\w\$_]/);var q=b.current(),s=a.propertyIsEnumerable(q)&&a[q];return s?r(s.type,s.style,q):r("text",null,q)}function t(a,b){for(var d,c=!1;d=a.next();){if("/"==d&&c){b.tokenize=s;break}c="%"==d}return r("comment","comment")}function u(a,b){for(var d,c=!1;d=a.next();){if("'"==d&&c){b.tokenize=s;break}c="'"==d}return r("text","strong")}function v(a,b){var c,d=b.block;return d&&a.current()?r("code","comment"):!d&&a.match(n)?(b.tokenize=s,r("code","comment")):d&&a.sol()&&a.match(m)?(b.tokenize=s,r("code","comment")):(c=a.next(),d?r("code","comment"):r("code","comment"))}function w(a,b){for(var d,c=!1;d=a.next();){if("/"==d&&c){b.tokenize=s;break}c="/"==d}return r("text","em")}function x(a,b){for(var d,c=!1;d=a.next();){if("_"==d&&c){b.tokenize=s;break}c="_"==d}return r("text","underlined")}function y(a,b){for(var d,c=!1;d=a.next();){if("-"==d&&c){b.tokenize=s;break}c="-"==d}return r("text","strikethrough")}function z(a,c){var d,e,f;return"<<"==a.current()?r("brace","macro"):(d=a.next())?">"==d&&">"==a.peek()?(a.next(),c.tokenize=s,r("brace","macro")):(a.eatWhile(/[\w\$_]/),e=a.current(),f=b.propertyIsEnumerable(e)&&b[e],f?r(f.type,f.style,e):r("macro",null,e)):(c.tokenize=s,r(d))}var p,q,a={},b=function(){function a(a){return{type:a,style:"macro"}}return{allTags:a("allTags"),closeAll:a("closeAll"),list:a("list"),newJournal:a("newJournal"),newTiddler:a("newTiddler"),permaview:a("permaview"),saveChanges:a("saveChanges"),search:a("search"),slider:a("slider"),tabs:a("tabs"),tag:a("tag"),tagging:a("tagging"),tags:a("tags"),tiddler:a("tiddler"),timeline:a("timeline"),today:a("today"),version:a("version"),option:a("option"),"with":a("with"),filter:a("filter")}}(),c=/[\w_\-]/i,d=/^\-\-\-\-+$/,e=/^\/\*\*\*$/,f=/^\*\*\*\/$/,g=/^<<<$/,h=/^\/\/\{\{\{$/,i=/^\/\/\}\}\}$/,j=/^<!--\{\{\{-->$/,k=/^<!--\}\}\}-->$/,l=/^\{\{\{$/,m=/^\}\}\}$/,n=/.*?\}\}\}/;return{startState:function(){return{tokenize:s,indented:0,level:0}},token:function(a,b){if(a.eatSpace())return null;var c=b.tokenize(a,b);return c},electricChars:""}}),CodeMirror.defineMIME("text/x-tiddlywiki","tiddlywiki"),CodeMirror.defineMode("tiki",function(a){function b(a,b,c){return function(e,f){for(;!e.eol();){if(e.match(b)){f.tokenize=d;break}e.next()}return c&&(f.tokenize=c),a}}function c(a){return function(b,c){for(;!b.eol();)b.next();return c.tokenize=d,a}}function d(a,e){function f(b){return e.tokenize=b,b(a,e)}var g=a.sol(),i=a.next();switch(i){case"{":a.eat("/"),a.eatSpace();for(var k,j="";k=a.eat(/[^\s\u00a0=\"\'\/?(}]/);)j+=k;return e.tokenize=h,"tag";case"_":if(a.eat("_"))return f(b("strong","__",d));break;case"'":if(a.eat("'"))return f(b("em","''",d));break;case"(":if(a.eat("("))return f(b("variable-2","))",d));break;case"[":return f(b("variable-3","]",d));case"|":if(a.eat("|"))return f(b("comment","||"));break;case"-":if(a.eat("="))return f(b("header string","=-",d));if(a.eat("-"))return f(b("error tw-deleted","--",d));break;case"=":if(a.match("=="))return f(b("tw-underline","===",d));break;case":":if(a.eat(":"))return f(b("comment","::"));break;case"^":return f(b("tw-box","^"));case"~":if(a.match("np~"))return f(b("meta","~/np~"))}if(g)switch(i){case"!":return a.match("!!!!!")?f(c("header string")):a.match("!!!!")?f(c("header string")):a.match("!!!")?f(c("header string")):a.match("!!")?f(c("header string")):f(c("header string"));case"*":case"#":case"+":return f(c("tw-listitem bracket"))}return null}function h(a,b){var c=a.next(),e=a.peek();return"}"==c?(b.tokenize=d,"tag"):"("==c||")"==c?"bracket":"="==c?(g="equals",">"==e&&(c=a.next(),e=a.peek()),/[\'\"]/.test(e)||(b.tokenize=j()),"operator"):/[\'\"]/.test(c)?(b.tokenize=i(c),b.tokenize(a,b)):(a.eatWhile(/[^\s\u00a0=\"\'\/?]/),"keyword")}function i(a){return function(b,c){for(;!b.eol();)if(b.next()==a){c.tokenize=h;break}return"string"}}function j(){return function(a,b){for(;!a.eol();){var c=a.next(),d=a.peek();if(" "==c||","==c||/[ )}]/.test(d)){b.tokenize=h;break}}return"string"}}function m(){for(var a=arguments.length-1;a>=0;a--)k.cc.push(arguments[a])}function n(){return m.apply(null,arguments),!0}function o(a,b){var c=k.context&&k.context.noIndent;k.context={prev:k.context,pluginName:a,indent:k.indented,startOfLine:b,noIndent:c}}function p(){k.context&&(k.context=k.context.prev)}function q(a){if("openPlugin"==a)return k.pluginName=f,n(t,r(k.startOfLine));if("closePlugin"==a){var b=!1;return k.context?(b=k.context.pluginName!=f,p()):b=!0,b&&(l="error"),n(s(b))}return"string"==a?(k.context&&"!cdata"==k.context.name||o("!cdata"),k.tokenize==d&&p(),n()):n()}function r(a){return function(b){return"selfclosePlugin"==b||"endPlugin"==b?n():"endPlugin"==b?(o(k.pluginName,a),n()):n()}}function s(a){return function(b){return a&&(l="error"),"endPlugin"==b?n():m()}}function t(a){return"keyword"==a?(l="attribute",n(t)):"equals"==a?n(u,t):m()}function u(a){return"keyword"==a?(l="string",n()):"string"==a?n(v):m()}function v(a){return"string"==a?n(v):m()}var f,g,k,l,e=a.indentUnit;return{startState:function(){return{tokenize:d,cc:[],indented:0,startOfLine:!0,pluginName:null,context:null}},token:function(a,b){if(a.sol()&&(b.startOfLine=!0,b.indented=a.indentation()),a.eatSpace())return null;l=g=f=null;var c=b.tokenize(a,b);if((c||g)&&"comment"!=c)for(k=b;;){var d=b.cc.pop()||q;if(d(g||c))break}return b.startOfLine=!1,l||c},indent:function(a,b){var c=a.context;if(c&&c.noIndent)return 0;for(c&&/^{\//.test(b)&&(c=c.prev);c&&!c.startOfLine;)c=c.prev;return c?c.indent+e:0},electricChars:"/"}}),CodeMirror.defineMIME("text/tiki","tiki"),CodeMirror.defineMode("turtle",function(a){function d(a){return RegExp("^(?:"+a.join("|")+")$","i")}function h(a,b){var d=a.next();if(c=null,"<"==d&&!a.match(/^[\s\u00a0=]/,!1))return a.match(/^[^\s\u00a0>]*>?/),"atom";if('"'==d||"'"==d)return b.tokenize=i(d),b.tokenize(a,b);if(/[{}\(\),\.;\[\]]/.test(d))return c=d,null;if("#"==d)return a.skipToEnd(),"comment";if(g.test(d))return a.eatWhile(g),null;if(":"==d)return"operator";if(a.eatWhile(/[_\w\d]/),":"==a.peek())return"variable-3";var h=a.current();return f.test(h)?"meta":d>="A"&&"Z">=d?"comment":"keyword";var h}function i(a){return function(b,c){for(var e,d=!1;null!=(e=b.next());){if(e==a&&!d){c.tokenize=h;break}d=!d&&"\\"==e}return"string"}}function j(a,b,c){a.context={prev:a.context,indent:a.indent,col:c,type:b}}function k(a){a.indent=a.context.indent,a.context=a.context.prev}var c,b=a.indentUnit,f=(d([]),d(["@prefix","@base","a"])),g=/[*+\-<>=&|]/;return{startState:function(){return{tokenize:h,context:null,indent:0,col:0}},token:function(a,b){if(a.sol()&&(b.context&&null==b.context.align&&(b.context.align=!1),b.indent=a.indentation()),a.eatSpace())return null;var d=b.tokenize(a,b);if("comment"!=d&&b.context&&null==b.context.align&&"pattern"!=b.context.type&&(b.context.align=!0),"("==c)j(b,")",a.column());else if("["==c)j(b,"]",a.column());else if("{"==c)j(b,"}",a.column());else if(/[\]\}\)]/.test(c)){for(;b.context&&"pattern"==b.context.type;)k(b);b.context&&c==b.context.type&&k(b)}else"."==c&&b.context&&"pattern"==b.context.type?k(b):/atom|string|variable/.test(d)&&b.context&&(/[\}\]]/.test(b.context.type)?j(b,"pattern",a.column()):"pattern"!=b.context.type||b.context.align||(b.context.align=!0,b.context.col=a.column()));return d},indent:function(a,c){var d=c&&c.charAt(0),e=a.context;if(/[\]\}]/.test(d))for(;e&&"pattern"==e.type;)e=e.prev;var f=e&&d==e.type;return e?"pattern"==e.type?e.col:e.align?e.col+(f?0:1):e.indent+(f?0:b):0}}}),CodeMirror.defineMIME("text/turtle","turtle"),CodeMirror.defineMode("vb",function(a,b){function d(a){return RegExp("^(("+a.join(")|(")+"))\\b","i")}function z(a,b){b.currentIndent++}function A(a,b){b.currentIndent--}function B(a,b){if(a.eatSpace())return null;var d=a.peek();if("'"===d)return a.skipToEnd(),"comment";if(a.match(/^((&H)|(&O))?[0-9\.a-f]/i,!1)){var k=!1;if(a.match(/^\d*\.\d+F?/i)?k=!0:a.match(/^\d+\.\d*F?/)?k=!0:a.match(/^\.\d+F?/)&&(k=!0),k)return a.eat(/J/i),"number";var l=!1;if(a.match(/^&H[0-9a-f]+/i)?l=!0:a.match(/^&O[0-7]+/i)?l=!0:a.match(/^[1-9]\d*F?/)?(a.eat(/J/i),l=!0):a.match(/^0(?![\dx])/i)&&(l=!0),l)return a.eat(/L/i),"number"}return a.match(s)?(b.tokenize=C(a.current()),b.tokenize(a,b)):a.match(i)||a.match(h)?null:a.match(g)||a.match(e)||a.match(n)?"operator":a.match(f)?null:a.match(x)?(z(a,b),b.doInCurrentLine=!0,"keyword"):a.match(t)?(b.doInCurrentLine?b.doInCurrentLine=!1:z(a,b),"keyword"):a.match(u)?"keyword":a.match(w)?(A(a,b),A(a,b),"keyword"):a.match(v)?(A(a,b),"keyword"):a.match(r)?"keyword":a.match(q)?"keyword":a.match(j)?"variable":(a.next(),c)}function C(a){var d=1==a.length,e="string";return function(f,g){for(;!f.eol();){if(f.eatWhile(/[^'"]/),f.match(a))return g.tokenize=B,e;f.eat(/['"]/)}if(d){if(b.singleLineStringErrors)return c;g.tokenize=B}return e}}function D(a,b){var d=b.tokenize(a,b),e=a.current();if("."===e)return d=b.tokenize(a,b),e=a.current(),"variable"===d?"variable":c;var f="[({".indexOf(e);return-1!==f&&z(a,b),"dedent"===y&&A(a,b)?c:(f="])}".indexOf(e),-1!==f&&A(a,b)?c:d)}var c="error",e=RegExp("^[\\+\\-\\*/%&\\\\|\\^~<>!]"),f=RegExp("^[\\(\\)\\[\\]\\{\\}@,:`=;\\.]"),g=RegExp("^((==)|(<>)|(<=)|(>=)|(<>)|(<<)|(>>)|(//)|(\\*\\*))"),h=RegExp("^((\\+=)|(\\-=)|(\\*=)|(%=)|(/=)|(&=)|(\\|=)|(\\^=))"),i=RegExp("^((//=)|(>>=)|(<<=)|(\\*\\*=))"),j=RegExp("^[_A-Za-z][_A-Za-z0-9]*"),k=["class","module","sub","enum","select","while","if","function","get","set","property","try"],l=["else","elseif","case","catch"],m=["next","loop"],n=d(["and","or","not","xor","in"]),o=["as","dim","break","continue","optional","then","until","goto","byval","byref","new","handles","property","return","const","private","protected","friend","public","shared","static","true","false"],p=["integer","string","double","decimal","boolean","short","char","float","single"],q=d(o),r=d(p),s='"',t=d(k),u=d(l),v=d(m),w=d(["end"]),x=d(["do"]),y=null,E={electricChars:"dDpPtTfFeE ",startState:function(){return{tokenize:B,lastToken:null,currentIndent:0,nextLineIndent:0,doInCurrentLine:!1}},token:function(a,b){a.sol()&&(b.currentIndent+=b.nextLineIndent,b.nextLineIndent=0,b.doInCurrentLine=0);var c=D(a,b);return b.lastToken={style:c,content:a.current()},c},indent:function(b,c){var d=c.replace(/^\s+|\s+$/g,"");return d.match(v)||d.match(w)||d.match(u)?a.indentUnit*(b.currentIndent-1):0>b.currentIndent?0:b.currentIndent*a.indentUnit}};return E}),CodeMirror.defineMIME("text/x-vb","vb"),CodeMirror.defineMode("vbscript",function(){var a=/^(?:Call|Case|CDate|Clear|CInt|CLng|Const|CStr|Description|Dim|Do|Each|Else|ElseIf|End|Err|Error|Exit|False|For|Function|If|LCase|Loop|LTrim|Next|Nothing|Now|Number|On|Preserve|Quit|ReDim|Resume|RTrim|Select|Set|Sub|Then|To|Trim|True|UBound|UCase|Until|VbCr|VbCrLf|VbLf|VbTab)$/im;return{token:function(b){if(b.eatSpace())return null;var c=b.next();return"'"==c?(b.skipToEnd(),"comment"):'"'==c?(b.skipTo('"'),"string"):/\w/.test(c)&&(b.eatWhile(/\w/),a.test(b.current()))?"keyword":null}}}),CodeMirror.defineMIME("text/vbscript","vbscript"),CodeMirror.defineMode("velocity",function(){function a(a){for(var b={},c=a.split(" "),d=0;c.length>d;++d)b[c[d]]=!0;return b}function f(a,b,c){return b.tokenize=c,c(a,b)}function g(a,g){var k=g.beforeParams;g.beforeParams=!1;var l=a.next();if('"'!=l&&"'"!=l||!g.inParams){if(/[\[\]{}\(\),;\.]/.test(l))return"("==l&&k?g.inParams=!0:")"==l&&(g.inParams=!1),null;if(/\d/.test(l))return a.eatWhile(/[\w\.]/),"number";if("#"==l&&a.eat("*"))return f(a,g,i);if("#"==l&&a.match(/ *\[ *\[/))return f(a,g,j);if("#"==l&&a.eat("#"))return a.skipToEnd(),"comment";if("$"==l)return a.eatWhile(/[\w\d\$_\.{}]/),d&&d.propertyIsEnumerable(a.current().toLowerCase())?"keyword":(g.beforeParams=!0,"builtin");if(e.test(l))return a.eatWhile(e),"operator";a.eatWhile(/[\w\$_{}]/);var m=a.current().toLowerCase();return b&&b.propertyIsEnumerable(m)?"keyword":c&&c.propertyIsEnumerable(m)||a.current().match(/^#[a-z0-9_]+ *$/i)&&"("==a.peek()?(g.beforeParams=!0,"keyword"):null}return f(a,g,h(l))}function h(a){return function(b,c){for(var e,d=!1,f=!1;null!=(e=b.next());){if(e==a&&!d){f=!0;break}d=!d&&"\\"==e}return f&&(c.tokenize=g),"string"}}function i(a,b){for(var d,c=!1;d=a.next();){if("#"==d&&c){b.tokenize=g;break}c="*"==d}return"comment"}function j(a,b){for(var d,c=0;d=a.next();){if("#"==d&&2==c){b.tokenize=g;break}"]"==d?c++:" "!=d&&(c=0)}return"meta"}var b=a("#end #else #break #stop #[[ #]] #{end} #{else} #{break} #{stop}"),c=a("#if #elseif #foreach #set #include #parse #macro #define #evaluate #{if} #{elseif} #{foreach} #{set} #{include} #{parse} #{macro} #{define} #{evaluate}"),d=a("$foreach.count $foreach.hasNext $foreach.first $foreach.last $foreach.topmost $foreach.parent $velocityCount"),e=/[+\-*&%=<>!?:\/|]/;return{startState:function(){return{tokenize:g,beforeParams:!1,inParams:!1}},token:function(a,b){return a.eatSpace()?null:b.tokenize(a,b)}}}),CodeMirror.defineMIME("text/velocity","velocity"),CodeMirror.defineMode("verilog",function(a,b){function k(a,b){var c=a.next();if(g[c]){var h=g[c](a,b);if(h!==!1)return h}if('"'==c)return b.tokenize=l(c),b.tokenize(a,b);if(/[\[\]{}\(\),;\:\.]/.test(c))return j=c,null;if(/[\d']/.test(c))return a.eatWhile(/[\w\.']/),"number";if("/"==c){if(a.eat("*"))return b.tokenize=m,m(a,b);if(a.eat("/"))return a.skipToEnd(),"comment"}if(i.test(c))return a.eatWhile(i),"operator";a.eatWhile(/[\w\$_]/);var k=a.current();return d.propertyIsEnumerable(k)?(e.propertyIsEnumerable(k)&&(j="newstatement"),"keyword"):f.propertyIsEnumerable(k)?"atom":"variable"}function l(a){return function(b,c){for(var e,d=!1,f=!1;null!=(e=b.next());){if(e==a&&!d){f=!0;break}d=!d&&"\\"==e}return(f||!d&&!h)&&(c.tokenize=k),"string"}}function m(a,b){for(var d,c=!1;d=a.next();){if("/"==d&&c){b.tokenize=k;break}c="*"==d}return"comment"}function n(a,b,c,d,e){this.indented=a,this.column=b,this.type=c,this.align=d,this.prev=e}function o(a,b,c){return a.context=new n(a.indented,b,c,null,a.context)}function p(a){var b=a.context.type;return(")"==b||"]"==b||"}"==b)&&(a.indented=a.context.indented),a.context=a.context.prev}var j,c=a.indentUnit,d=b.keywords||{},e=b.blockKeywords||{},f=b.atoms||{},g=b.hooks||{},h=b.multiLineStrings,i=/[&|~><!\)\(*#%@+\/=?\:;}{,\.\^\-\[\]]/;return{startState:function(a){return{tokenize:null,context:new n((a||0)-c,0,"top",!1),indented:0,startOfLine:!0}},token:function(a,b){var c=b.context;if(a.sol()&&(null==c.align&&(c.align=!1),b.indented=a.indentation(),b.startOfLine=!0),a.eatSpace())return null;j=null;var d=(b.tokenize||k)(a,b);if("comment"==d||"meta"==d)return d;if(null==c.align&&(c.align=!0),";"!=j&&":"!=j||"statement"!=c.type)if("{"==j)o(b,a.column(),"}");else if("["==j)o(b,a.column(),"]");else if("("==j)o(b,a.column(),")");else if("}"==j){for(;"statement"==c.type;)c=p(b);for("}"==c.type&&(c=p(b));"statement"==c.type;)c=p(b)}else j==c.type?p(b):("}"==c.type||"top"==c.type||"statement"==c.type&&"newstatement"==j)&&o(b,a.column(),"statement");else p(b);return b.startOfLine=!1,d},indent:function(a,b){if(a.tokenize!=k&&null!=a.tokenize)return 0;var d=b&&b.charAt(0),e=a.context,f=d==e.type;return"statement"==e.type?e.indented+("{"==d?0:c):e.align?e.column+(f?0:1):e.indented+(f?0:c)},electricChars:"{}"}}),function(){function a(a){for(var b={},c=a.split(" "),d=0;c.length>d;++d)b[c[d]]=!0;return b}function d(a){return a.eatWhile(/[\w\$_]/),"meta"}var b="always and assign automatic begin buf bufif0 bufif1 case casex casez cell cmos config deassign default defparam design disable edge else end endcase endconfig endfunction endgenerate endmodule endprimitive endspecify endtable endtask event for force forever fork function generate genvar highz0 highz1 if ifnone incdir include initial inout input instance integer join large liblist library localparam macromodule medium module nand negedge nmos nor noshowcancelled not notif0 notif1 or output parameter pmos posedge primitive pull0 pull1 pulldown pullup pulsestyle_onevent pulsestyle_ondetect rcmos real realtime reg release repeat rnmos rpmos rtran rtranif0 rtranif1 scalared showcancelled signed small specify specparam strong0 strong1 supply0 supply1 table task time tran tranif0 tranif1 tri tri0 tri1 triand trior trireg unsigned use vectored wait wand weak0 weak1 while wire wor xnor xor",c="begin bufif0 bufif1 case casex casez config else end endcase endconfig endfunction endgenerate endmodule endprimitive endspecify endtable endtask for forever function generate if ifnone macromodule module primitive repeat specify table task while";CodeMirror.defineMIME("text/x-verilog",{name:"verilog",keywords:a(b),blockKeywords:a(c),atoms:a("null"),hooks:{"`":d,$:d}})}(),CodeMirror.defineMode("xml",function(a,b){function i(a,b){function c(c){return b.tokenize=c,c(a,b)}var d=a.next();if("<"==d){if(a.eat("!"))return a.eat("[")?a.match("CDATA[")?c(l("atom","]]>")):null:a.match("--")?c(l("comment","-->")):a.match("DOCTYPE",!0,!0)?(a.eatWhile(/[\w\._\-]/),c(m(1))):null;if(a.eat("?"))return a.eatWhile(/[\w\._\-]/),b.tokenize=l("meta","?>"),"meta";var e=a.eat("/");g="";for(var f;f=a.eat(/[^\s\u00a0=<>\"\'\/?]/);)g+=f;return g?(h=e?"closeTag":"openTag",b.tokenize=j,"tag"):"error"}if("&"==d){var i;return i=a.eat("#")?a.eat("x")?a.eatWhile(/[a-fA-F\d]/)&&a.eat(";"):a.eatWhile(/[\d]/)&&a.eat(";"):a.eatWhile(/[\w\.\-:]/)&&a.eat(";"),i?"atom":"error"}return a.eatWhile(/[^&<]/),null}function j(a,b){var c=a.next();return">"==c||"/"==c&&a.eat(">")?(b.tokenize=i,h=">"==c?"endTag":"selfcloseTag","tag"):"="==c?(h="equals",null):"<"==c?"error":/[\'\"]/.test(c)?(b.tokenize=k(c),b.tokenize(a,b)):(a.eatWhile(/[^\s\u00a0=<>\"\']/),"word")}function k(a){return function(b,c){for(;!b.eol();)if(b.next()==a){c.tokenize=j;break}return"string"}}function l(a,b){return function(c,d){for(;!c.eol();){if(c.match(b)){d.tokenize=i;break}c.next()}return a}}function m(a){return function(b,c){for(var d;null!=(d=b.next());){if("<"==d)return c.tokenize=m(a+1),c.tokenize(b,c);if(">"==d){if(1==a){c.tokenize=i;break}return c.tokenize=m(a-1),c.tokenize(b,c)}}return"meta"}}function q(){for(var a=arguments.length-1;a>=0;a--)n.cc.push(arguments[a])}function r(){return q.apply(null,arguments),!0}function s(a,b){var c=e.doNotIndent.hasOwnProperty(a)||n.context&&n.context.noIndent;n.context={prev:n.context,tagName:a,indent:n.indented,startOfLine:b,noIndent:c}}function t(){n.context&&(n.context=n.context.prev)}function u(a){if("openTag"==a)return n.tagName=g,n.tagStart=o.column(),r(y,v(n.startOfLine));if("closeTag"==a){var b=!1;return n.context?n.context.tagName!=g&&(e.implicitlyClosed.hasOwnProperty(n.context.tagName.toLowerCase())&&t(),b=!n.context||n.context.tagName!=g):b=!0,b&&(p="error"),r(w(b))}return r()}function v(a){return function(b){var c=n.tagName;return n.tagName=n.tagStart=null,"selfcloseTag"==b||"endTag"==b&&e.autoSelfClosers.hasOwnProperty(c.toLowerCase())?(x(c.toLowerCase()),r()):"endTag"==b?(x(c.toLowerCase()),s(c,a),r()):r()}}function w(a){return function(b){return a&&(p="error"),"endTag"==b?(t(),r()):(p="error",r(arguments.callee))}}function x(a){for(var b;;){if(!n.context)return;if(b=n.context.tagName.toLowerCase(),!e.contextGrabbers.hasOwnProperty(b)||!e.contextGrabbers[b].hasOwnProperty(a))return;t()}}function y(a){return"word"==a?(p="attribute",r(z,y)):"endTag"==a||"selfcloseTag"==a?q():(p="error",r(y))}function z(a){return"equals"==a?r(A,y):(e.allowMissing?"word"==a&&(p="attribute"):p="error","endTag"==a||"selfcloseTag"==a?q():r())}function A(a){return"string"==a?r(B):"word"==a&&e.allowUnquoted?(p="string",r()):(p="error","endTag"==a||"selfCloseTag"==a?q():r())}function B(a){return"string"==a?r(B):q()}var g,h,n,o,p,c=a.indentUnit,d=b.multilineTagIndentFactor||1,e=b.htmlMode?{autoSelfClosers:{area:!0,base:!0,br:!0,col:!0,command:!0,embed:!0,frame:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0},implicitlyClosed:{dd:!0,li:!0,optgroup:!0,option:!0,p:!0,rp:!0,rt:!0,tbody:!0,td:!0,tfoot:!0,th:!0,tr:!0},contextGrabbers:{dd:{dd:!0,dt:!0},dt:{dd:!0,dt:!0},li:{li:!0},option:{option:!0,optgroup:!0},optgroup:{optgroup:!0},p:{address:!0,article:!0,aside:!0,blockquote:!0,dir:!0,div:!0,dl:!0,fieldset:!0,footer:!0,form:!0,h1:!0,h2:!0,h3:!0,h4:!0,h5:!0,h6:!0,header:!0,hgroup:!0,hr:!0,menu:!0,nav:!0,ol:!0,p:!0,pre:!0,section:!0,table:!0,ul:!0},rp:{rp:!0,rt:!0},rt:{rp:!0,rt:!0},tbody:{tbody:!0,tfoot:!0},td:{td:!0,th:!0},tfoot:{tbody:!0},th:{td:!0,th:!0},thead:{tbody:!0,tfoot:!0},tr:{tr:!0}},doNotIndent:{pre:!0},allowUnquoted:!0,allowMissing:!0}:{autoSelfClosers:{},implicitlyClosed:{},contextGrabbers:{},doNotIndent:{},allowUnquoted:!1,allowMissing:!1},f=b.alignCDATA;return{startState:function(){return{tokenize:i,cc:[],indented:0,startOfLine:!0,tagName:null,tagStart:null,context:null}},token:function(a,b){if(!b.tagName&&a.sol()&&(b.startOfLine=!0,b.indented=a.indentation()),a.eatSpace())return null;p=h=g=null;var c=b.tokenize(a,b);if(b.type=h,(c||h)&&"comment"!=c)for(n=b,o=a;;){var d=b.cc.pop()||u;if(d(h||c))break}return b.startOfLine=!1,p||c},indent:function(a,b,e){var g=a.context;if(a.tokenize!=j&&a.tokenize!=i||g&&g.noIndent)return e?e.match(/^(\s*)/)[0].length:0;if(a.tagName)return a.tagStart+c*d;if(f&&/<!\[CDATA\[/.test(b))return 0;for(g&&/^<\//.test(b)&&(g=g.prev);g&&!g.startOfLine;)g=g.prev;return g?g.indent+c:0},electricChars:"/",blockCommentStart:"<!--",blockCommentEnd:"-->",configuration:b.htmlMode?"html":"xml"}}),CodeMirror.defineMIME("text/xml","xml"),CodeMirror.defineMIME("application/xml","xml"),CodeMirror.mimeModes.hasOwnProperty("text/html")||CodeMirror.defineMIME("text/html",{name:"xml",htmlMode:!0}),CodeMirror.defineMode("xquery",function(){function d(a,d,e){return b=a,c=e,d}function e(a,b,c){return b.tokenize=c,c(a,b)}function f(b,c){var f=b.next(),k=!1,p=s(b);if("<"==f){if(b.match("!--",!0))return e(b,c,l);if(b.match("![CDATA",!1))return c.tokenize=m,d("tag","tag");if(b.match("?",!1))return e(b,c,n);var r=b.eat("/");b.eatSpace();for(var w,t="";w=b.eat(/[^\s\u00a0=<>\"\'\/?]/);)t+=w;return e(b,c,j(t,r))}if("{"==f)return u(c,{type:"codeblock"}),d("",null);if("}"==f)return v(c),d("",null);if(o(c))return">"==f?d("tag","tag"):"/"==f&&b.eat(">")?(v(c),d("tag","tag")):d("word","variable");if(/\d/.test(f))return b.match(/^\d*(?:\.\d*)?(?:E[+\-]?\d+)?/),d("number","atom");if("("===f&&b.eat(":"))return u(c,{type:"comment"}),e(b,c,g);if(p||'"'!==f&&"'"!==f){if("$"===f)return e(b,c,i);if(":"===f&&b.eat("="))return d("operator","keyword");if("("===f)return u(c,{type:"paren"}),d("",null);if(")"===f)return v(c),d("",null);if("["===f)return u(c,{type:"bracket"}),d("",null);if("]"===f)return v(c),d("",null);var x=a.propertyIsEnumerable(f)&&a[f];if(p&&'"'===f)for(;'"'!==b.next(););if(p&&"'"===f)for(;"'"!==b.next(););x||b.eatWhile(/[\w\$_-]/);var y=b.eat(":");!b.eat(":")&&y&&b.eatWhile(/[\w\$_-]/),b.match(/^[ \t]*\(/,!1)&&(k=!0);var z=b.current();return x=a.propertyIsEnumerable(z)&&a[z],k&&!x&&(x={type:"function_call",style:"variable def"}),q(c)?(v(c),d("word","variable",z)):(("element"==z||"attribute"==z||"axis_specifier"==x.type)&&u(c,{type:"xmlconstructor"}),x?d(x.type,x.style,z):d("word","variable",z))+}return e(b,c,h(f))}function g(a,b){for(var g,c=!1,e=!1,f=0;g=a.next();){if(")"==g&&c){if(!(f>0)){v(b);break}f--}else":"==g&&e&&f++;c=":"==g,e="("==g}return d("comment","comment")}function h(a,b){return function(c,e){var g;if(r(e)&&c.current()==a)return v(e),b&&(e.tokenize=b),d("string","string");if(u(e,{type:"string",name:a,tokenize:h(a,b)}),c.match("{",!1)&&p(e))return e.tokenize=f,d("string","string");for(;g=c.next();){if(g==a){v(e),b&&(e.tokenize=b);break}if(c.match("{",!1)&&p(e))return e.tokenize=f,d("string","string")}return d("string","string")}}function i(a,b){var c=/[\w\$_-]/;if(a.eat('"')){for(;'"'!==a.next(););a.eat(":")}else a.eatWhile(c),a.match(":=",!1)||a.eat(":");return a.eatWhile(c),b.tokenize=f,d("variable","variable")}function j(a,b){return function(c,e){return c.eatSpace(),b&&c.eat(">")?(v(e),e.tokenize=f,d("tag","tag")):(c.eat("/")||u(e,{type:"tag",name:a,tokenize:f}),c.eat(">")?(e.tokenize=f,d("tag","tag")):(e.tokenize=k,d("tag","tag")))}}function k(a,b){var c=a.next();return"/"==c&&a.eat(">")?(p(b)&&v(b),o(b)&&v(b),d("tag","tag")):">"==c?(p(b)&&v(b),d("tag","tag")):"="==c?d("",null):'"'==c||"'"==c?e(a,b,h(c,k)):(p(b)||u(b,{type:"attribute",name:name,tokenize:k}),a.eat(/[a-zA-Z_:]/),a.eatWhile(/[-a-zA-Z0-9_:.]/),a.eatSpace(),(a.match(">",!1)||a.match("/",!1))&&(v(b),b.tokenize=f),d("attribute","attribute"))}function l(a,b){for(var c;c=a.next();)if("-"==c&&a.match("->",!0))return b.tokenize=f,d("comment","comment")}function m(a,b){for(var c;c=a.next();)if("]"==c&&a.match("]",!0))return b.tokenize=f,d("comment","comment")}function n(a,b){for(var c;c=a.next();)if("?"==c&&a.match(">",!0))return b.tokenize=f,d("comment","comment meta")}function o(a){return t(a,"tag")}function p(a){return t(a,"attribute")}function q(a){return t(a,"xmlconstructor")}function r(a){return t(a,"string")}function s(a){return'"'===a.current()?a.match(/^[^\"]+\"\:/,!1):"'"===a.current()?a.match(/^[^\"]+\'\:/,!1):!1}function t(a,b){return a.stack.length&&a.stack[a.stack.length-1].type==b}function u(a,b){a.stack.push(b)}function v(a){a.stack.pop();var b=a.stack.length&&a.stack[a.stack.length-1].tokenize;a.tokenize=b||f}var b,c,a=function(){function a(a){return{type:a,style:"keyword"}}for(var b=a("keyword a"),c=a("keyword b"),d=a("keyword c"),e=a("operator"),f={type:"atom",style:"atom"},g={type:"punctuation",style:null},h={type:"axis_specifier",style:"qualifier"},i={"if":b,"switch":b,"while":b,"for":b,"else":c,then:c,"try":c,"finally":c,"catch":c,element:d,attribute:d,let:d,"implements":d,"import":d,module:d,namespace:d,"return":d,"super":d,"this":d,"throws":d,where:d,"private":d,",":g,"null":f,"fn:false()":f,"fn:true()":f},j=["after","ancestor","ancestor-or-self","and","as","ascending","assert","attribute","before","by","case","cast","child","comment","declare","default","define","descendant","descendant-or-self","descending","document","document-node","element","else","eq","every","except","external","following","following-sibling","follows","for","function","if","import","in","instance","intersect","item","let","module","namespace","node","node","of","only","or","order","parent","precedes","preceding","preceding-sibling","processing-instruction","ref","return","returns","satisfies","schema","schema-element","self","some","sortby","stable","text","then","to","treat","typeswitch","union","variable","version","where","xquery","empty-sequence"],k=0,l=j.length;l>k;k++)i[j[k]]=a(j[k]);for(var m=["xs:string","xs:float","xs:decimal","xs:double","xs:integer","xs:boolean","xs:date","xs:dateTime","xs:time","xs:duration","xs:dayTimeDuration","xs:time","xs:yearMonthDuration","numeric","xs:hexBinary","xs:base64Binary","xs:anyURI","xs:QName","xs:byte","xs:boolean","xs:anyURI","xf:yearMonthDuration"],k=0,l=m.length;l>k;k++)i[m[k]]=f;for(var n=["eq","ne","lt","le","gt","ge",":=","=",">",">=","<","<=",".","|","?","and","or","div","idiv","mod","*","/","+","-"],k=0,l=n.length;l>k;k++)i[n[k]]=e;for(var o=["self::","attribute::","child::","descendant::","descendant-or-self::","parent::","ancestor::","ancestor-or-self::","following::","preceding::","following-sibling::","preceding-sibling::"],k=0,l=o.length;l>k;k++)i[o[k]]=h;return i}();return{startState:function(){return{tokenize:f,cc:[],stack:[]}},token:function(a,b){if(a.eatSpace())return null;var c=b.tokenize(a,b);return c}}}),CodeMirror.defineMIME("application/xquery","xquery"),CodeMirror.defineMode("yaml",function(){var a=["true","false","on","off","yes","no"],b=RegExp("\\b(("+a.join(")|(")+"))$","i");return{token:function(a,c){var d=a.peek(),e=c.escaped;if(c.escaped=!1,"#"==d&&(0==a.pos||/\s/.test(a.string.charAt(a.pos-1))))return a.skipToEnd(),"comment";if(c.literal&&a.indentation()>c.keyCol)return a.skipToEnd(),"string";if(c.literal&&(c.literal=!1),a.sol()){if(c.keyCol=0,c.pair=!1,c.pairStart=!1,a.match(/---/))return"def";if(a.match(/\.\.\./))return"def";if(a.match(/\s*-\s+/))return"meta"}if(!c.pair&&a.match(/^\s*([a-z0-9\._-])+(?=\s*:)/i))return c.pair=!0,c.keyCol=a.indentation(),"atom";if(c.pair&&a.match(/^:\s*/))return c.pairStart=!0,"meta";if(a.match(/^(\{|\}|\[|\])/))return"{"==d?c.inlinePairs++:"}"==d?c.inlinePairs--:"["==d?c.inlineList++:c.inlineList--,"meta";if(c.inlineList>0&&!e&&","==d)return a.next(),"meta";if(c.inlinePairs>0&&!e&&","==d)return c.keyCol=0,c.pair=!1,c.pairStart=!1,a.next(),"meta";if(c.pairStart){if(a.match(/^\s*(\||\>)\s*/))return c.literal=!0,"meta";if(a.match(/^\s*(\&|\*)[a-z0-9\._-]+\b/i))return"variable-2";if(0==c.inlinePairs&&a.match(/^\s*-?[0-9\.\,]+\s?$/))return"number";if(c.inlinePairs>0&&a.match(/^\s*-?[0-9\.\,]+\s?(?=(,|}))/))return"number";if(a.match(b))return"keyword"}return c.pairStart=!1,c.escaped="\\"==d,a.next(),null},startState:function(){return{pair:!1,pairStart:!1,keyCol:0,inlinePairs:0,inlineList:0,literal:!1,escaped:!1}}}}),CodeMirror.defineMIME("text/x-yaml","yaml"),CodeMirror.defineMode("z80",function(){var a=/^(exx?|(ld|cp|in)([di]r?)?|pop|push|ad[cd]|cpl|daa|dec|inc|neg|sbc|sub|and|bit|[cs]cf|x?or|res|set|r[lr]c?a?|r[lr]d|s[lr]a|srl|djnz|nop|rst|[de]i|halt|im|ot[di]r|out[di]?)\b/i,b=/^(call|j[pr]|ret[in]?)\b/i,c=/^b_?(call|jump)\b/i,d=/^(af?|bc?|c|de?|e|hl?|l|i[xy]?|r|sp)\b/i,e=/^(n?[zc]|p[oe]?|m)\b/i,f=/^([hl][xy]|i[xy][hl]|slia|sll)\b/i,g=/^([\da-f]+h|[0-7]+o|[01]+b|\d+)\b/i;return{startState:function(){return{context:0}},token:function(h,i){if(h.column()||(i.context=0),h.eatSpace())return null;var j;if(h.eatWhile(/\w/)){if(j=h.current(),!h.indentation())return g.test(j)?"number":null;if(1==i.context&&d.test(j))return"variable-2";if(2==i.context&&e.test(j))return"variable-3";if(a.test(j))return i.context=1,"keyword";if(b.test(j))return i.context=2,"keyword";if(c.test(j))return i.context=3,"keyword";if(f.test(j))return"error"}else{if(h.eat(";"))return h.skipToEnd(),"comment";if(h.eat('"')){for(;(j=h.next())&&'"'!=j;)"\\"==j&&h.next();return"string"}if(h.eat("'")){if(h.match(/\\?.'/))return"number"}else if(h.eat(".")||h.sol()&&h.eat("#")){if(i.context=4,h.eatWhile(/\w/))return"def"}else if(h.eat("$")){if(h.eatWhile(/[\da-f]/i))return"number"}else if(h.eat("%")){if(h.eatWhile(/[01]/))return"number"}else h.next()}return null}}}),CodeMirror.defineMIME("text/x-z80","z80");
@@ -0,0 +1,248 @@+/* BASICS */++.CodeMirror {+ /* Set height, width, borders, and global font properties here */+ font-family: monospace;+ height: 300px;+}+.CodeMirror-scroll {+ /* Set scrolling behaviour here */+ overflow: auto;+}++/* PADDING */++.CodeMirror-lines {+ padding: 4px 0; /* Vertical padding around content */+}+.CodeMirror pre {+ padding: 0 4px; /* Horizontal padding of content */+}++.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {+ background-color: white; /* The little square between H and V scrollbars */+}++/* GUTTER */++.CodeMirror-gutters {+ border-right: 1px solid #ddd;+ background-color: #f7f7f7;+ white-space: nowrap;+}+.CodeMirror-linenumbers {}+.CodeMirror-linenumber {+ padding: 0 3px 0 5px;+ min-width: 20px;+ text-align: right;+ color: #999;+}++/* CURSOR */++.CodeMirror div.CodeMirror-cursor {+ border-left: 1px solid black;+ z-index: 3;+}+/* Shown when moving in bi-directional text */+.CodeMirror div.CodeMirror-secondarycursor {+ border-left: 1px solid silver;+}+.CodeMirror.cm-keymap-fat-cursor div.CodeMirror-cursor {+ width: auto;+ border: 0;+ background: #7e7;+ z-index: 1;+}+/* Can style cursor different in overwrite (non-insert) mode */+.CodeMirror div.CodeMirror-cursor.CodeMirror-overwrite {}++.cm-tab { display: inline-block; }++/* DEFAULT THEME */++.cm-s-default .cm-keyword {color: #708;}+.cm-s-default .cm-atom {color: #219;}+.cm-s-default .cm-number {color: #164;}+.cm-s-default .cm-def {color: #00f;}+.cm-s-default .cm-variable {color: black;}+.cm-s-default .cm-variable-2 {color: #05a;}+.cm-s-default .cm-variable-3 {color: #085;}+.cm-s-default .cm-property {color: black;}+.cm-s-default .cm-operator {color: black;}+.cm-s-default .cm-comment {color: #a50;}+.cm-s-default .cm-string {color: #a11;}+.cm-s-default .cm-string-2 {color: #f50;}+.cm-s-default .cm-meta {color: #555;}+.cm-s-default .cm-error {color: #f00;}+.cm-s-default .cm-qualifier {color: #555;}+.cm-s-default .cm-builtin {color: #30a;}+.cm-s-default .cm-bracket {color: #997;}+.cm-s-default .cm-tag {color: #170;}+.cm-s-default .cm-attribute {color: #00c;}+.cm-s-default .cm-header {color: blue;}+.cm-s-default .cm-quote {color: #090;}+.cm-s-default .cm-hr {color: #999;}+.cm-s-default .cm-link {color: #00c;}++.cm-negative {color: #d44;}+.cm-positive {color: #292;}+.cm-header, .cm-strong {font-weight: bold;}+.cm-em {font-style: italic;}+.cm-link {text-decoration: underline;}++.cm-invalidchar {color: #f00;}++div.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;}+div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;}++/* STOP */++/* The rest of this file contains styles related to the mechanics of+ the editor. You probably shouldn't touch them. */++.CodeMirror {+ line-height: 1;+ position: relative;+ overflow: hidden;+ background: white;+ color: black;+}++.CodeMirror-scroll {+ /* 30px is the magic margin used to hide the element's real scrollbars */+ /* See overflow: hidden in .CodeMirror */+ margin-bottom: -30px; margin-right: -30px;+ padding-bottom: 30px; padding-right: 30px;+ height: 100%;+ outline: none; /* Prevent dragging from highlighting the element */+ position: relative;+}+.CodeMirror-sizer {+ position: relative;+}++/* The fake, visible scrollbars. Used to force redraw during scrolling+ before actuall scrolling happens, thus preventing shaking and+ flickering artifacts. */+.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {+ position: absolute;+ z-index: 6;+ display: none;+}+.CodeMirror-vscrollbar {+ right: 0; top: 0;+ overflow-x: hidden;+ overflow-y: scroll;+}+.CodeMirror-hscrollbar {+ bottom: 0; left: 0;+ overflow-y: hidden;+ overflow-x: scroll;+}+.CodeMirror-scrollbar-filler {+ right: 0; bottom: 0;+}+.CodeMirror-gutter-filler {+ left: 0; bottom: 0;+}++.CodeMirror-gutters {+ position: absolute; left: 0; top: 0;+ padding-bottom: 30px;+ z-index: 3;+}+.CodeMirror-gutter {+ white-space: normal;+ height: 100%;+ padding-bottom: 30px;+ margin-bottom: -32px;+ display: inline-block;+ /* Hack to make IE7 behave */+ *zoom:1;+ *display:inline;+}+.CodeMirror-gutter-elt {+ position: absolute;+ cursor: default;+ z-index: 4;+}++.CodeMirror-lines {+ cursor: text;+}+.CodeMirror pre {+ /* Reset some styles that the rest of the page might have set */+ -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0;+ border-width: 0;+ background: transparent;+ font-family: inherit;+ font-size: inherit;+ margin: 0;+ white-space: pre;+ word-wrap: normal;+ line-height: inherit;+ color: inherit;+ z-index: 2;+ position: relative;+ overflow: visible;+}+.CodeMirror-wrap pre {+ word-wrap: break-word;+ white-space: pre-wrap;+ word-break: normal;+}+.CodeMirror-linebackground {+ position: absolute;+ left: 0; right: 0; top: 0; bottom: 0;+ z-index: 0;+}++.CodeMirror-linewidget {+ position: relative;+ z-index: 2;+ overflow: auto;+}++.CodeMirror-widget {+}++.CodeMirror-wrap .CodeMirror-scroll {+ overflow-x: hidden;+}++.CodeMirror-measure {+ position: absolute;+ width: 100%; height: 0px;+ overflow: hidden;+ visibility: hidden;+}+.CodeMirror-measure pre { position: static; }++.CodeMirror div.CodeMirror-cursor {+ position: absolute;+ visibility: hidden;+ border-right: none;+ width: 0;+}+.CodeMirror-focused div.CodeMirror-cursor {+ visibility: visible;+}++.CodeMirror-selected { background: #d9d9d9; }+.CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; }++.cm-searching {+ background: #ffa;+ background: rgba(255, 255, 0, .4);+}++/* IE7 hack to prevent it from returning funny offsetTops on the spans */+.CodeMirror span { *vertical-align: text-bottom; }++@media print {+ /* Hide the cursor when printing */+ .CodeMirror div.CodeMirror-cursor {+ visibility: hidden;+ }+}
@@ -0,0 +1,10 @@+.cm-s-elegant span.cm-number, .cm-s-elegant span.cm-string, .cm-s-elegant span.cm-atom {color: #762;}+.cm-s-elegant span.cm-comment {color: #262; font-style: italic; line-height: 1em;}+.cm-s-elegant span.cm-meta {color: #555; font-style: italic; line-height: 1em;}+.cm-s-elegant span.cm-variable {color: black;}+.cm-s-elegant span.cm-variable-2 {color: #b11;}+.cm-s-elegant span.cm-qualifier {color: #555;}+.cm-s-elegant span.cm-keyword {color: #730;}+.cm-s-elegant span.cm-builtin {color: #30a;}+.cm-s-elegant span.cm-error {background-color: #fdd;}+.cm-s-elegant span.cm-link {color: #762;}
@@ -0,0 +1,60 @@+.hll { background-color: #ffffcc }+.c { color: #888888 } /* Comment */+.err { color: #a61717; background-color: #e3d2d2 } /* Error */+.k { color: #008800; font-weight: bold } /* Keyword */+.cm { color: #888888 } /* Comment.Multiline */+.cp { color: #cc0000; font-weight: bold } /* Comment.Preproc */+.c1 { color: #888888 } /* Comment.Single */+.cs { color: #cc0000; font-weight: bold; background-color: #fff0f0 } /* Comment.Special */+.gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */+.ge { font-style: italic } /* Generic.Emph */+.gr { color: #aa0000 } /* Generic.Error */+.gh { color: #303030 } /* Generic.Heading */+.gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */+.go { color: #888888 } /* Generic.Output */+.gp { color: #555555 } /* Generic.Prompt */+.gs { font-weight: bold } /* Generic.Strong */+.gu { color: #606060 } /* Generic.Subheading */+.gt { color: #aa0000 } /* Generic.Traceback */+.kc { color: #008800; font-weight: bold } /* Keyword.Constant */+.kd { color: #008800; font-weight: bold } /* Keyword.Declaration */+.kn { color: #008800; font-weight: bold } /* Keyword.Namespace */+.kp { color: #008800 } /* Keyword.Pseudo */+.kr { color: #008800; font-weight: bold } /* Keyword.Reserved */+.kt { color: #888888; font-weight: bold } /* Keyword.Type */+.m { color: #0000DD; font-weight: bold } /* Literal.Number */+.s { color: #dd2200; background-color: #fff0f0 } /* Literal.String */+.na { color: #336699 } /* Name.Attribute */+.nb { color: #003388 } /* Name.Builtin */+.nc { color: #bb0066; font-weight: bold } /* Name.Class */+.no { color: #003366; font-weight: bold } /* Name.Constant */+.nd { color: #555555 } /* Name.Decorator */+.ne { color: #bb0066; font-weight: bold } /* Name.Exception */+.nf { color: #0066bb; font-weight: bold } /* Name.Function */+.nl { color: #336699; font-style: italic } /* Name.Label */+.nn { color: #bb0066; font-weight: bold } /* Name.Namespace */+.py { color: #336699; font-weight: bold } /* Name.Property */+.nt { color: #bb0066; font-weight: bold } /* Name.Tag */+.nv { color: #336699 } /* Name.Variable */+.ow { color: #008800 } /* Operator.Word */+.w { color: #bbbbbb } /* Text.Whitespace */+.mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */+.mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */+.mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */+.mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */+.sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */+.sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */+.sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */+.s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */+.se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */+.sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */+.si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */+.sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */+.sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */+.s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */+.ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */+.bp { color: #003388 } /* Name.Builtin.Pseudo */+.vc { color: #336699 } /* Name.Variable.Class */+.vg { color: #dd7700 } /* Name.Variable.Global */+.vi { color: #3333bb } /* Name.Variable.Instance */+.il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
@@ -0,0 +1,1128 @@+/* adjust some bootstrap styles */++/* enlarge default font to normal browser default (16px, or local browser settings) */+body { font-size: 100%; }+label, button { font-size: 100%; }+input, select, textarea { font-size: 100% !important; }++/* shrink heading sizes back towards browser defaults (http://stackoverflow.com/a/6140504/84401) */+h1 { font-size:32px; }+h2 { font-size:24px; }+h3 { font-size:19px; }+h4 { font-size:16px; }+h5 { font-size:13px; }+h6 { font-size:11px; }+++/* darcsden styles */++.name { font-weight:bold; }++body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td { margin: 0; padding: 0; }+table { border-collapse: collapse; border-spacing: 0; }+fieldset,img { border: 0; }+address,caption,cite,code,dfn,em,strong,th,var { font-style: inherit; font-weight: inherit; }+li { list-style: none; }+caption,th { text-align: left; }+h1,h2,h3,h4,h5,h6 { font-weight: normal; }+abbr,acronym { border: 0; font-variant: normal; }+input,textarea,select { font-family: inherit; font-size: inherit; font-weight: inherit; }++/* a { color: inherit; } */+.header a,+.path a,+.user-repos a,+.repo-list a,+.repo-forks a,+.repo-files a,+.repo-changes a,+.repo-issues a,+.repo-patches a {+ text-decoration: none; color: inherit;+}+.head a:hover,+.path a:hover,+.user-repos a:hover,+.repo-list a:hover,+.repo-forks a:hover,+.repo-files a:hover,+.repo-changes a:hover,+.repo-patches a:hover,+.repo-issues a:hover {+ text-decoration: underline;+}++html {+ height: 100%;+ background-color: #fff;+ color: #000;+}++body {+ /* width: 60em; */+ /* margin: 0 auto; */+ /* padding: 1em 0; */+}++h1, h2, h3, h4, h5, h6 {+ margin-bottom: .5em;+}+h2, h3, h4, h5, h6 {+ font-weight:bold;+}++.crumb {+ font-size:30px;+}++form {+ padding: 1em;+ border: thin solid #ccc;+ border-radius:8px;+ float: left;+}+form.dependencies {+ padding: 0;+ border: 0;+ float: none;+}+form .field {+ clear: both;+ margin-bottom: .75em;+}+form div br {+ clear: both;+}+form label {+ float: right;+ display: inline-block;+ text-align: right;+ margin-right: 1em;+ padding: .5em;+}+form input[type="text"],+form input[type="password"],+form textarea {+ border: 0;+ padding: .5em;+ float: right;+ width: 12em;+ background-color:#eee;+}++form div.choices {+ border: 0;+ padding: .5em;+ float: right;+ width: 12em;+}++form input[type="checkbox"] {+ vertical-align: middle;+ margin-top: -.1em;+ background-color:#eee;+}+form .field > ul,+form .field .inline-wrapper {+ float: right;+ width: 12.83em;+ padding: .5em 0;+}+form textarea {+ width: 20em;+}+form .buttons input[type="submit"] {+ float: right;+ padding:.5em;+}+form .note {+ display: block;+ clear: both;+ text-align: right;+}+form.big input[type="text"],+form.big input[type="password"] {+ margin-right: 8em;+}+form.big h3 {+ margin-right: 7.25em;+ float: right;+ width: 12em;+}+form hr {+ width: 25em;+ margin: 2em auto;+ border: 0;+ border-bottom: thin solid #bbb;+}+form .cancel-buttons {+ color: #777;+}+form .cancel-buttons a.cancel {+ color: #f00;+ font-weight: bold;+}++.header {+}++.footer {+ margin-top: 4em;+ padding: 1em 0;+ font-size: small;+ border-top: thin solid #ccc;+ color: #777;+ line-height: 1.4em;+ text-align:center;+}+.footer li {+ display:inline-block;+ margin:0 2em;+}++.footer a:hover {+ color: #000;+}+.footer .donate {+ float: right;+}+.footer .donate a {+ background: #111;+ color: #fff;+ padding: .3em .5em;+ text-decoration: none;+ border-radius: .5em;+}+.footer .donate a:hover {+ background: #444;+ color: #fff;+}+.footer .donate a:active {+ background: #000;+}++.blurb {+ line-height: 1.4em;+ margin-bottom: .5em;+}++.notification {+ padding: .5em;+ margin-bottom: 1em;+}+.notification.warning {+ background: #c22;+ color: #fff;+}+.notification.success {+ background: #61c423;+ color: #fff;+}+.notification.message {+ background: #2272cc;+ color: #fff;+}++.sitenav {+ margin-top:1em;+ margin-bottom:1em;+ padding-top:0;+ padding-bottom:0;+ text-align:right;+}++.sitenav li {+ display:inline;+ margin-left:1em;+}++.pagenav {+}++.links {+ /* width: 11em; */+}+.links li {+ padding: .25em 0;+ margin-left: .5em;+ white-space: nowrap;+ /* overflow:hidden; */+}+.links li a, a.button {+ color: inherit;+ display: inline-block;+ margin-right: .25em;+ padding: .4em .7em .4em 2em;+ border: .1em solid #ddd;+ border-radius: 1em;+ text-decoration: none;+ background: rgba(255,255,255,0.75);+ box-shadow: 1px 1px hsl(0, 0%, 47%);+}+a.small.button {+ padding: .2em .8em .2em 2.2em;+ font-size:small;+}+.next .small.button, .prev .small.button {+ padding-left: .8em;+}+.links li a:hover,+a.button:hover {+ /* position: relative; */+ /* top: -3px; */+ /* left: -3px; */+ /* box-shadow: 1px 1px 0 #eee, 2px 2px #eee, 3px 3px #eee; */+ /* font-weight:bold; */+ color:black;+ /* -webkit-transition: all 0.125s ease-out; */+ /* -moz-transition: all 0.125s ease-out; */+ /* -o-transition: all 0.125s ease-out; */+}+.links li a:active,+a.button:active {+ background-color: #f0f0f0 !important;+ box-shadow: none;+}++.links li.fork {+ margin-top:1em;+}++.buttonform {+ border: none;+ float: right;+ padding: 0em;+ width: 200px;+ height: 40px;+}++form.buttonform input {+ width: 180px;+ height: 40px;+}++.links li.login a {+ background: rgba(255,255,255,0.75) url('/public/images/login.gif') no-repeat 9px 5px;+}+.links li.register a {+ background: rgba(255,255,255,0.75) url('/public/images/register.gif') no-repeat 9px 5px;+}+.links li.home a {+ background: rgba(255,255,255,0.75) url('/public/images/home.gif') no-repeat 9px 5px;+}+.links li.settings a {+ background: rgba(255,255,255,0.75) url('/public/images/edit.gif') no-repeat 9px 5px;+}+.links li.logout a {+ background: rgba(255,255,255,0.75) url('/public/images/logout.gif') no-repeat 9px 5px;+}++/* .links li.explore a { */+/* background: rgba(255,255,255,0.75) url('/public/images/explore.gif') no-repeat 9px 9px; */+/* } */+.links li.create a {+ background: rgba(255,255,255,0.75) url('/public/images/new.gif') no-repeat 9px 9px;+ font-weight:bold;+}++.links li.files a {+ background: rgba(255,255,255,0.75) url('/public/images/file.gif') no-repeat 9px 9px;+ font-weight:bold;+}+.links li.changes a {+ background: rgba(255,255,255,0.75) url('/public/images/log.gif') no-repeat 9px 9px;+ font-weight:bold;+}+.links li.patches a {+ background: rgba(255,255,255,0.75) url('/public/images/patches.gif') no-repeat 9px 9px;+ font-weight:bold;+}+.links li.issues a, .open-issues.button, .closed-issues.button, .all-issues.button {+ background: rgba(255,255,255,0.75) url('/public/images/issues.gif') no-repeat 9px 9px;+ font-weight:bold;+}++.links li.fork a {+ background: rgba(255,255,255,0.75) url('/public/images/fork.gif') no-repeat 9px 9px;+}+.links li.edit a {+ background: rgba(255,255,255,0.75) url('/public/images/edit.gif') no-repeat 9px 9px;+}+.links li.delete a {+ background: rgba(255,255,255,0.75) url('/public/images/delete.gif') no-repeat 9px 9px;+}++.links.frontpage .links, .explore .links, .user .links, .repo .links {+ /* float: left; */+ /* text-align: right; */+ /* margin-left: -12em; */+ /* position: relative; */+}+/* .links.nav { */+/* /\* float: right; *\/ */+/* /\* margin-right: -12em; *\/ */+/* } */++.repo-desc,+.repo-empty {+ margin-bottom: 2em;+}+.repo-empty {+ margin-bottom: 2em;+}+.repo-desc .repo-fork {+ color: #aaa;+}+.repo-desc .repo-fork a {+ color: #777;+}+.repo-empty code {+ color: #000;+}+.repo-readme {+}++.private-repo {+ padding-right: 22px;+ background: url('/public/images/private.gif') no-repeat right 4px;+}+.user-repos li .private-repo {+ padding-right: 20px;+ background-position: right 1px;+}++.user-repos .public-repo, .user-repos .private-repo, .user-repos .username {+ font-weight:bold;+}++.repo-files {+ padding-bottom: 1em;+ border-bottom: thin solid #ccc;+ margin-bottom: 2em;+}+.patch-summary {+ margin-bottom: 3em;+}+.user-repos {+ margin-bottom: 1em;+}+.repo-files li,+.patch-summary li,+.user-repos li {+}+.repo-files li a,+.patch-summary li a,+.patch-summary li.summary-preference,+.patch-summary li.summary-removed,+.patch-summary li.summary-replace {+ display: block;+ padding: .4em 0 .0em 24px;+}+.patch-summary li.summary-replace a {+ display: inline;+ padding: 0;+}+.repo-browse h1.path {+ border-bottom: .1em dotted;+ padding-bottom: .5em;+}+.repo-files li.directory a {+ background: url('/public/images/folder.gif') no-repeat left 4px;+ font-weight: bold;+}+.repo-files li.file a {+ background: url('/public/images/file.gif') no-repeat left 5px;+}++.repo-log {+ margin: 1em 0 2em;+}+.repo-log tr {+ vertical-align:top;+}++.repo-log td {+ padding:.25em;+}++.repo-log td.author, .repo-log td.date {+ white-space:nowrap;+}++.repo-log > li {+ /* border-top: thin solid #eee; */+ padding-bottom: 1em;+ /* line-height: 1.4em; */+}+.repo-log > li h2,+.patch-changes li h2 {+ margin-bottom: -1em;+}+.repo-log > li h2 .date,+.patch-changes li h2 .line {+ color: #777;+}+.repo-log > li p {+}+.repo-log .patch-name, .patch-changes .patch-name {+ font-weight: bold;+}+.repo-log .patch-name a, .patch-changes .patch-name a {+ /* text-decoration: none; */+}+.repo-log > li .patch-notes {+}+.repo-log > li .patch-notes pre {+}++.patch-changes {+ margin-top: 1em;+}+.patch-changes li {+ padding-bottom: 1.5em;+ margin-bottom: 1em;+ border-bottom: thin solid #eee;+}+.patch-changes li h2 {+}++.removed, .added {+ margin-left: -2em;+ margin-bottom: 1em;+ padding-left: 1em;+ border-left: 1em solid;+}+.removed {+ border-color: #c22;+}+.added {+ border-color: #61c423;+}++.patch-summary li.summary-added {+ background: url('/public/images/added.gif') no-repeat left center;+}+.patch-summary li.summary-removed {+ background: url('/public/images/removed.gif') no-repeat left center;+}+.patch-summary li.summary-modified {+ background: url('/public/images/modified.gif') no-repeat left center;+}+.patch-summary li.summary-preference {+ background: url('/public/images/preference.gif') no-repeat left center;+}++.dd-pagination {+ text-align:center;+ white-space: nowrap;+}+.dd-pagination li {+ display: inline-block;+}+.dd-pagination li.prev,+.dd-pagination li.next,+.dd-pagination li.prevnextspacer {+ width: 6em;+ margin: 0 .5em;+}+.dd-pagination li a {+ /* background: #000; */+ /* color: #fff; */+ padding: .5em 1em;+ text-decoration: none;+ font-size:small;+ border-radius: 1em;+}+.dd-pagination li a:hover {+ text-decoration:none;+}+.darcsden-pagination li a:active {+}++.repo-list {+ margin-top: 1em;+}+.repo-list > li {+ margin-bottom: 1em;+}+.repo-list li .repo-name {+}+.repo-list li .repo-desc {+ margin-bottom: 0;+}+.repo-list li .repo-forks-wrap {+ margin: 1em;+}+.repo-list li .repo-forks-wrap h3 {+ padding-bottom: 0;+ margin: 0;+ padding-bottom: .4em;+ line-height: 1em;+}+.repo-forks.links {+ margin: 0;+ width: auto;+}+.repo-forks.links li {+ margin: 0;+ padding: 0;+ display: block;+}+.repo-forks.links li a {+ float: left;+ margin: 0 1em 0 0;+ padding: .5em .75em;+ font-weight: bold;+}+.repo-forks.links li a:hover {+ color: #555;+}++.repo-patches .fork {+ margin-top:2em;+}+.repo-patch a {+ color: inherit;+}++.user-repos li {+ padding: .2em 0;+}+.user-repos li a {+}++.fork-log {+ width: 100%;+ /* box-shadow: #ddd 0 0 1em; */+}+.fork-log td {+ padding: .25em;+ text-align: left;+}+.fork-log td.merge {+ width: 1%;+ text-align: center;+}+.fork-log td input {+ vertical-align: middle;+}+.fork-log td.name {+ width: 46%;+}+.fork-log td.author {+ width: 1%;+ /* text-align: center; */+}+.fork-log td.date {+ width: 1%;+ /* text-align: right; */+ white-space:nowrap;+}++.new-issue.button {+ background: rgba(255,255,255,0.75) url('/public/images/new.gif') no-repeat 9px 9px;+ margin-bottom: 1.5em;+}++.issues-list .issue {+ /* padding: .25em; */+ margin-bottom: 1em;+ /* box-shadow: #ddd 0 0 1em; */+}+.issues-list .issue table {+ width:100%;+}+.issues-list .issue table td:first-child {+ width:1%;+}+.issues-list .issue .number {+ float: none;+ color: #ccc;+ padding-top: .25em;+ padding-right: .25em;+ vertical-align:top;+}+.issues-list .issue .details {+ display:inline-block;+ margin-bottom: .5em;+ /* background: #f5f5f5; */+ /* padding: .75em; */+}+.issues-list .issue .name {+ /* display:inline-block; */+}+.issues-list .issue .meta {+ display:inline-block;+}+.issues-list .issue .tags {+ /* float: right; */+ display:inline-block;+ font-size:small;+}+.issues-list .issue .tags li {+ display: inline;+ margin-left: .5em;+}++.tags li a {+ padding: .25em .5em;+ background: #444;+ color: #fff;+ text-decoration: none;+ border-radius: .5em;+}+.tags li a:hover {+ position: relative;+ top: -2px;+ left: -2px;+ background: #666;+ box-shadow: 1px 1px 0 #000, 2px 2px #000;+ -webkit-transition: all 0.125s ease-out;+ -moz-transition: all 0.125s ease-out;+ -o-transition: all 0.125s ease-out;+}++.issue .number {+ font-size: 2em;+ float: right;+ color: #ddd;+ font-weight: bold;+ margin-right: .25em;+ margin-top: -.125em;+}+.issue .description .user-info {+ padding: .75em;+ float: right;+ background: #222;+ color: #fff;+ font-weight: bold;+ text-align: center;+ margin: 0 0 1em 1em;+}+.issue .description .user-info img {+ display: block;+ margin-bottom: .5em;+ border: .5em solid #111;+}+.user-info a {+ text-decoration: none;+}++.issue-comments {+ margin-top: 2em;+}+.issue-comments .comment {+ margin: 0 0 2em;+}+.issue-comments .user-info {+ background: #f5f5f5;+ padding: .5em;+ margin: -1em -1em 1em -1em;+ font-weight: bold;+}+.issue-comments .user-info img {+ border: .25em solid #ddd;+ margin: -.5em;+ vertical-align: middle;+ margin-right: .75em;+}+.issue-comments .user-info .name {+ position: relative;+ bottom: -.1em;+}+.issue-comments .changes {+ list-style: none;+ margin-bottom: 1em;+ padding: 1em 1em 1em 2.5em;+ background: #f5f5ff;+ box-shadow: inset 0 0 1em #eee;+}++.issue-revise {+ margin-top: 4em;+}+.issue-revise .issue-tags,+.issue-new .issue-tags {+ /* width: 12em; */+ float: right;+ background: #f5f5ff;+ box-shadow: inset 0 0 1em #ddd;+ padding: 1em;+}+.issue-revise .issue-tags label,+.issue-new .issue-tags label {+ display: block;+ font-weight: bold;+}+.issue-revise .issue-tags select,+.issue-new .issue-tags select {+ margin-bottom: 2em;+}+.issue-tags form {+ padding: 0;+ border: 0;+ float: none;+ margin-top: 1.25em;+}+.issue-tags input {+ float: none !important;+}+.issue-tags #tag-name {+ width: 7em;+ margin-right: 1em;+ background: #fff;+ box-shadow: 0 0 .5em #ddd;+ color: #000;+}+.issue-revise .tags li,+.issue-new .tags li {+ margin-bottom: .5em;+}+.issue-revise .tags .kill,+.issue-new .tags .kill {+ margin-right: .75em;+ border-radius: .6em;+ padding: 0;+ background: #111 url('/public/images/delete-small.gif') no-repeat center center;+ float: left;+ width: 10px;+ height: 10px;+ margin-top: .35em;+}+.issue-revise .tags .kill:hover,+.issue-new .tags .kill:hover {+ background-color: #444;+ box-shadow: none;+ position: static;+}+.issue-revise .tags .kill:active,+.issue-new .tags .kill:active {+ background-color: #000;+}++form.issue-comment,+form.issue-body {+ /* width: 40em; */+ float: none;+}+form.issue-comment input,+form.issue-comment input[type="submit"],+form.issue-comment textarea,+form.issue-comment label,+form.issue-body input, +form.issue-body input[type="submit"],+form.issue-body textarea,+form.issue-body label {+ float: none;+}+form.issue-comment h3 {+ font-weight: bold;+}+form.issue-comment input[type="text"],+form.issue-body input[type="text"] {+ width: 20em;+}+form.issue-comment textarea,+form.issue-body textarea {+ /* width: 40em; */+ width:96%;+ margin: 0;+}+form.issue-comment #summary,+form.issue-body #summary {+ /* background: #222; */+}+form.issue-comment .buttons,+form.issue-body .buttons {+ width: 20em;+ margin: 0 auto;+}+form.issue-comment .buttons input,+form.issue-body .buttons input {+ position: relative;+ border: 0;+ padding: 1em;+ color: #fff;+ background: transparent;+ width: 10em;+ border-radius: 1em;+}+form.issue-comment .buttons input:hover,+form.issue-body .buttons input:hover {+ cursor: pointer;+ -webkit-transition: all 0.125s ease-out;+ -moz-transition: all 0.125s ease-out;+ -o-transition: all 0.125s ease-out;+}+form.issue-comment .buttons:hover #submit-comment {+ background: #333;+}+form.issue-comment .buttons #submit-comment {+ z-index: 2;+ background: #000;+ width: 13em;+}+form.issue-comment .buttons #submit-close {+ z-index: 1;+ background: #222;+ padding: 1em 1em 1em 4em;+ width: 10em;+ margin-left: -3em;+}+form.issue-comment .buttons #submit-close:hover {+ background: #333;+}+form.issue-body .buttons input {+ background: #000;+ width: 20em;+}+form.issue-body .buttons input:hover {+ background: #222;+}++.clear {+ clear: both;+}++form#add-tag {+ white-space:nowrap;+}++form.editfile {+ width: 95%;+}++form.editfile input#message {+ width: 85%;+}++/* markdown styles */++/* .markdown .highlight pre { */+/* background: #fff; */+/* color: #000; */+/* } */++.markdown {+ /* overflow: auto; */+}+.markdown p,+.markdown ol,+.markdown ul {+ padding-bottom: 1em;+}+/* .markdown ul, .markdown ol { */+/* padding-left: 1em; */+/* } */+.markdown ul li, .markdown ol li {+ margin-left:1.5em;+}+.markdown ul li {+ list-style: square;+}+.markdown ol li {+ list-style: decimal;+}+.markdown h1 {+ margin-top: .5em;+}+.markdown h2 {+}+.markdown h3 {+}+.markdown code {+}+.markdown pre {+ /* background: #000; */+ /* color: #fff; */+ padding: .6em 1em;+ margin-bottom: 1em;+ /* overflow: auto; */+}+.markdown em {+ font-style: italic;+}+.markdown strong {+ font-weight: bold;+}+.markdown code {+ /* font-family: monospace; */+}+++/* highlighter styles */++/* table.highlighttable .linenos, */+/* .highlight { */+/* line-height: 1.4em; */+/* } */+/* table.highlighttable .linenos { */+/* background: #000; */+/* color: #fff; */+/* } */+/* table.highlighttable .linenos a { */+/* text-decoration: none; */+/* padding: 0 .5em; */+/* } */+/* table.highlighttable .linenos a:target { */+/* color: #f22; */+/* font-weight: bold; */+/* } */+/* table.highlighttable .code .highlight { */+/* padding: 0 .5em; */+/* } */++div.code {+ /* overflow: auto; */+}+++/* highlighting-kate styles */++/* td.lineNumbers { */+/* border:0; */+/* } */+.lineNumbers a {+ white-space:nowrap;+ color:inherit;+}+.repo-readme pre.sourceCode, .repo-log pre, .sourceCode pre, .sourceCode code {+ font-size: 13px;+ margin:0 .5em;+ background-color:inherit;+ border:0;+ white-space:pre;+}++.repo-readme pre.sourceCode, .repo-log pre {+ margin: 0;+ padding: 0;+}++.repo-readme pre.sourceCode {+ font-size:14px;+}++/* haddock */+/* table.sourceCode, tr.sourceCode, td.lineNumbers, td.sourceCode { */+/* margin: 0; padding: 0; vertical-align: baseline; border: none; */+/* } */+/* table.sourceCode { width: 100%; } */+/* td.lineNumbers { text-align: right; padding-right: 4px; padding-left: 4px; color: #aaaaaa; border-right: 1px solid #aaaaaa; } */+/* td.sourceCode { padding-left: 5px; } */+/* code > span.kw { color: #0000ff; } */+/* code > span.ch { color: #008080; } */+/* code > span.st { color: #008080; } */+/* code > span.co { color: #008000; } */+/* code > span.ot { color: #ff4000; } */+/* code > span.al { color: #ff0000; } */+/* code > span.er { font-weight: bold; } */++/* pygments */+table.sourceCode, tr.sourceCode, td.lineNumbers, td.sourceCode {+ margin: 0; padding: 0; vertical-align: baseline; border: none; }+table.sourceCode { width: 100%; }+td.lineNumbers { text-align: right; padding-right: 4px; padding-left: 4px; color: #aaaaaa; border-right: 1px solid #aaaaaa; }+td.sourceCode { padding-left: 5px; }+code > span.kw { color: #007020; font-weight: bold; }+code > span.dt { color: #902000; }+code > span.dv { color: #40a070; }+code > span.bn { color: #40a070; }+code > span.fl { color: #40a070; }+code > span.ch { color: #4070a0; }+code > span.st { color: #4070a0; }+code > span.co { color: #60a0b0; font-style: italic; }+code > span.ot { color: #007020; }+code > span.al { color: #ff0000; font-weight: bold; }+code > span.fu { color: #06287e; }+code > span.er { color: #ff0000; font-weight: bold; }++/* /\* kate *\/ */+/* table.sourceCode, tr.sourceCode, td.lineNumbers, td.sourceCode { */+/* margin: 0; padding: 0; vertical-align: baseline; border: none; } */+/* table.sourceCode { width: 100%; } */+/* td.lineNumbers { text-align: right; padding-right: 4px; padding-left: 4px; background-color: #dddddd; } */+/* td.sourceCode { padding-left: 5px; } */+/* code > span.kw { font-weight: bold; } */+/* code > span.dt { color: #800000; } */+/* code > span.dv { color: #0000ff; } */+/* code > span.bn { color: #0000ff; } */+/* code > span.fl { color: #800080; } */+/* code > span.ch { color: #ff00ff; } */+/* code > span.st { color: #dd0000; } */+/* code > span.co { color: #808080; font-style: italic; } */+/* code > span.al { color: #00ff00; font-weight: bold; } */+/* /\* code > span.fu { color: #000080; } *\/ /\* don't know what this is, but it's wrong in haskell source *\/ */+/* code > span.er { color: #ff0000; font-weight: bold; } */++/* espresso */+/* table.sourceCode, tr.sourceCode, td.lineNumbers, td.sourceCode { */+/* margin: 0; padding: 0; vertical-align: baseline; border: none; } */+/* table.sourceCode { width: 100%; background-color: #2a211c; color: #bdae9d; } */+/* td.lineNumbers { text-align: right; padding-right: 4px; padding-left: 4px; background-color: #2a211c; color: #bdae9d; border-right: 1px solid #bdae9d; } */+/* td.sourceCode { padding-left: 5px; } */+/* pre, code { color: #bdae9d; background-color: #2a211c; } */+/* code > span.kw { color: #43a8ed; font-weight: bold; } */+/* code > span.dt { text-decoration: underline; } */+/* code > span.dv { color: #44aa43; } */+/* code > span.bn { color: #44aa43; } */+/* code > span.fl { color: #44aa43; } */+/* code > span.ch { color: #049b0a; } */+/* code > span.st { color: #049b0a; } */+/* code > span.co { color: #0066ff; font-style: italic; } */+/* code > span.al { color: #ffff00; } */+/* code > span.fu { color: #ff9358; font-weight: bold; } */+/* code > span.er { font-weight: bold; } */++/* tango */+/* table.sourceCode, tr.sourceCode, td.lineNumbers, td.sourceCode { */+/* margin: 0; padding: 0; vertical-align: baseline; border: none; } */+/* table.sourceCode { width: 100%; background-color: #f8f8f8; } */+/* td.lineNumbers { text-align: right; padding-right: 4px; padding-left: 4px; color: #aaaaaa; border-right: 1px solid #aaaaaa; } */+/* td.sourceCode { padding-left: 5px; } */+/* pre, code { background-color: #f8f8f8; } */+/* code > span.kw { color: #204a87; font-weight: bold; } */+/* code > span.dt { color: #204a87; } */+/* code > span.dv { color: #0000cf; } */+/* code > span.bn { color: #0000cf; } */+/* code > span.fl { color: #0000cf; } */+/* code > span.ch { color: #4e9a06; } */+/* code > span.st { color: #4e9a06; } */+/* code > span.co { color: #8f5902; font-style: italic; } */+/* code > span.ot { color: #8f5902; } */+/* code > span.al { color: #ef2929; } */+/* code > span.fu { color: #000000; } */+/* code > span.er { font-weight: bold; } */++/* monochrome */+/* table.sourceCode, tr.sourceCode, td.lineNumbers, td.sourceCode { */+/* margin: 0; padding: 0; vertical-align: baseline; border: none; } */+/* table.sourceCode { width: 100%; } */+/* td.lineNumbers { text-align: right; padding-right: 4px; padding-left: 4px; } */+/* td.sourceCode { padding-left: 5px; } */+/* code > span.kw { font-weight: bold; } */+/* code > span.dt { text-decoration: underline; } */+/* code > span.co { font-style: italic; } */+/* code > span.al { font-weight: bold; } */+/* code > span.er { font-weight: bold; } */++/* /\* zenburn *\/ */+/* table.sourceCode, tr.sourceCode, td.lineNumbers, td.sourceCode { */+/* margin: 0; padding: 0; vertical-align: baseline; border: none; } */+/* table.sourceCode { width: 100%; background-color: #303030; color: #cccccc; } */+/* td.lineNumbers { text-align: right; padding-right: 4px; padding-left: 4px; } */+/* td.sourceCode { padding-left: 5px; } */+/* pre, code { color: #cccccc; background-color: #303030; } */+/* code > span.kw { color: #f0dfaf; } */+/* code > span.dt { color: #dfdfbf; } */+/* code > span.dv { color: #dcdccc; } */+/* code > span.bn { color: #dca3a3; } */+/* code > span.fl { color: #c0bed1; } */+/* code > span.ch { color: #dca3a3; } */+/* code > span.st { color: #cc9393; } */+/* code > span.co { color: #7f9f7f; } */+/* code > span.ot { color: #efef8f; } */+/* code > span.al { color: #ffcfaf; } */+/* code > span.fu { color: #efef8f; } */+/* code > span.er { color: #c3bf9f; } */+
binary file changed (absent → 86 bytes)
binary file changed (absent → 1099 bytes)
binary file changed (absent → 79 bytes)
binary file changed (absent → 85 bytes)
binary file changed (absent → 1967 bytes)
binary file changed (absent → 105 bytes)
binary file changed (absent → 1314 bytes)
binary file changed (absent → 318 bytes)
binary file changed (absent → 3600 bytes)
binary file changed (absent → 2253 bytes)
binary file changed (absent → 90 bytes)
binary file changed (absent → 87 bytes)
binary file changed (absent → 85 bytes)
binary file changed (absent → 1309 bytes)
binary file changed (absent → 78 bytes)
binary file changed (absent → 86 bytes)
binary file changed (absent → 1286 bytes)
binary file changed (absent → 118 bytes)
binary file changed (absent → 82 bytes)
binary file changed (absent → 82 bytes)
binary file changed (absent → 85 bytes)
binary file changed (absent → 86 bytes)
binary file changed (absent → 1364 bytes)
binary file changed (absent → 112 bytes)
binary file changed (absent → 1749 bytes)
binary file changed (absent → 86 bytes)
binary file changed (absent → 89 bytes)
binary file changed (absent → 87 bytes)
binary file changed (absent → 88 bytes)
binary file changed (absent → 673 bytes)
binary file changed (absent → 64 bytes)
@@ -0,0 +1,2 @@+/*! jQuery v@1.8.1 jquery.com | jquery.org/license */ +(function(a,b){function G(a){var b=F[a]={};return p.each(a.split(s),function(a,c){b[c]=!0}),b}function J(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(I,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:+d+""===d?+d:H.test(d)?p.parseJSON(d):d}catch(f){}p.data(a,c,d)}else d=b}return d}function K(a){var b;for(b in a){if(b==="data"&&p.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function ba(){return!1}function bb(){return!0}function bh(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function bi(a,b){do a=a[b];while(a&&a.nodeType!==1);return a}function bj(a,b,c){b=b||0;if(p.isFunction(b))return p.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return p.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=p.grep(a,function(a){return a.nodeType===1});if(be.test(b))return p.filter(b,d,!c);b=p.filter(b,d)}return p.grep(a,function(a,d){return p.inArray(a,b)>=0===c})}function bk(a){var b=bl.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function bC(a,b){return a.getElementsByTagName(b)[0]||a.appendChild(a.ownerDocument.createElement(b))}function bD(a,b){if(b.nodeType!==1||!p.hasData(a))return;var c,d,e,f=p._data(a),g=p._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;d<e;d++)p.event.add(b,c,h[c][d])}g.data&&(g.data=p.extend({},g.data))}function bE(a,b){var c;if(b.nodeType!==1)return;b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase(),c==="object"?(b.parentNode&&(b.outerHTML=a.outerHTML),p.support.html5Clone&&a.innerHTML&&!p.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):c==="input"&&bv.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):c==="option"?b.selected=a.defaultSelected:c==="input"||c==="textarea"?b.defaultValue=a.defaultValue:c==="script"&&b.text!==a.text&&(b.text=a.text),b.removeAttribute(p.expando)}function bF(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bG(a){bv.test(a.type)&&(a.defaultChecked=a.checked)}function bY(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=bW.length;while(e--){b=bW[e]+c;if(b in a)return b}return d}function bZ(a,b){return a=b||a,p.css(a,"display")==="none"||!p.contains(a.ownerDocument,a)}function b$(a,b){var c,d,e=[],f=0,g=a.length;for(;f<g;f++){c=a[f];if(!c.style)continue;e[f]=p._data(c,"olddisplay"),b?(!e[f]&&c.style.display==="none"&&(c.style.display=""),c.style.display===""&&bZ(c)&&(e[f]=p._data(c,"olddisplay",cc(c.nodeName)))):(d=bH(c,"display"),!e[f]&&d!=="none"&&p._data(c,"olddisplay",d))}for(f=0;f<g;f++){c=a[f];if(!c.style)continue;if(!b||c.style.display==="none"||c.style.display==="")c.style.display=b?e[f]||"":"none"}return a}function b_(a,b,c){var d=bP.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function ca(a,b,c,d){var e=c===(d?"border":"content")?4:b==="width"?1:0,f=0;for(;e<4;e+=2)c==="margin"&&(f+=p.css(a,c+bV[e],!0)),d?(c==="content"&&(f-=parseFloat(bH(a,"padding"+bV[e]))||0),c!=="margin"&&(f-=parseFloat(bH(a,"border"+bV[e]+"Width"))||0)):(f+=parseFloat(bH(a,"padding"+bV[e]))||0,c!=="padding"&&(f+=parseFloat(bH(a,"border"+bV[e]+"Width"))||0));return f}function cb(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=!0,f=p.support.boxSizing&&p.css(a,"boxSizing")==="border-box";if(d<=0||d==null){d=bH(a,b);if(d<0||d==null)d=a.style[b];if(bQ.test(d))return d;e=f&&(p.support.boxSizingReliable||d===a.style[b]),d=parseFloat(d)||0}return d+ca(a,b,c||(f?"border":"content"),e)+"px"}function cc(a){if(bS[a])return bS[a];var b=p("<"+a+">").appendTo(e.body),c=b.css("display");b.remove();if(c==="none"||c===""){bI=e.body.appendChild(bI||p.extend(e.createElement("iframe"),{frameBorder:0,width:0,height:0}));if(!bJ||!bI.createElement)bJ=(bI.contentWindow||bI.contentDocument).document,bJ.write("<!doctype html><html><body>"),bJ.close();b=bJ.body.appendChild(bJ.createElement(a)),c=bH(b,"display"),e.body.removeChild(bI)}return bS[a]=c,c}function ci(a,b,c,d){var e;if(p.isArray(b))p.each(b,function(b,e){c||ce.test(a)?d(a,e):ci(a+"["+(typeof e=="object"?b:"")+"]",e,c,d)});else if(!c&&p.type(b)==="object")for(e in b)ci(a+"["+e+"]",b[e],c,d);else d(a,b)}function cz(a){return function(b,c){typeof b!="string"&&(c=b,b="*");var d,e,f,g=b.toLowerCase().split(s),h=0,i=g.length;if(p.isFunction(c))for(;h<i;h++)d=g[h],f=/^\+/.test(d),f&&(d=d.substr(1)||"*"),e=a[d]=a[d]||[],e[f?"unshift":"push"](c)}}function cA(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h,i=a[f],j=0,k=i?i.length:0,l=a===cv;for(;j<k&&(l||!h);j++)h=i[j](c,d,e),typeof h=="string"&&(!l||g[h]?h=b:(c.dataTypes.unshift(h),h=cA(a,c,d,e,h,g)));return(l||!h)&&!g["*"]&&(h=cA(a,c,d,e,"*",g)),h}function cB(a,c){var d,e,f=p.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((f[d]?a:e||(e={}))[d]=c[d]);e&&p.extend(!0,a,e)}function cC(a,c,d){var e,f,g,h,i=a.contents,j=a.dataTypes,k=a.responseFields;for(f in k)f in d&&(c[k[f]]=d[f]);while(j[0]==="*")j.shift(),e===b&&(e=a.mimeType||c.getResponseHeader("content-type"));if(e)for(f in i)if(i[f]&&i[f].test(e)){j.unshift(f);break}if(j[0]in d)g=j[0];else{for(f in d){if(!j[0]||a.converters[f+" "+j[0]]){g=f;break}h||(h=f)}g=g||h}if(g)return g!==j[0]&&j.unshift(g),d[g]}function cD(a,b){var c,d,e,f,g=a.dataTypes.slice(),h=g[0],i={},j=0;a.dataFilter&&(b=a.dataFilter(b,a.dataType));if(g[1])for(c in a.converters)i[c.toLowerCase()]=a.converters[c];for(;e=g[++j];)if(e!=="*"){if(h!=="*"&&h!==e){c=i[h+" "+e]||i["* "+e];if(!c)for(d in i){f=d.split(" ");if(f[1]===e){c=i[h+" "+f[0]]||i["* "+f[0]];if(c){c===!0?c=i[d]:i[d]!==!0&&(e=f[0],g.splice(j--,0,e));break}}}if(c!==!0)if(c&&a["throws"])b=c(b);else try{b=c(b)}catch(k){return{state:"parsererror",error:c?k:"No conversion from "+h+" to "+e}}}h=e}return{state:"success",data:b}}function cL(){try{return new a.XMLHttpRequest}catch(b){}}function cM(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function cU(){return setTimeout(function(){cN=b},0),cN=p.now()}function cV(a,b){p.each(b,function(b,c){var d=(cT[b]||[]).concat(cT["*"]),e=0,f=d.length;for(;e<f;e++)if(d[e].call(a,b,c))return})}function cW(a,b,c){var d,e=0,f=0,g=cS.length,h=p.Deferred().always(function(){delete i.elem}),i=function(){var b=cN||cU(),c=Math.max(0,j.startTime+j.duration-b),d=1-(c/j.duration||0),e=0,f=j.tweens.length;for(;e<f;e++)j.tweens[e].run(d);return h.notifyWith(a,[j,d,c]),d<1&&f?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:p.extend({},b),opts:p.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:cN||cU(),duration:c.duration,tweens:[],createTween:function(b,c,d){var e=p.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(e),e},stop:function(b){var c=0,d=b?j.tweens.length:0;for(;c<d;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;cX(k,j.opts.specialEasing);for(;e<g;e++){d=cS[e].call(j,a,k,j.opts);if(d)return d}return cV(j,k),p.isFunction(j.opts.start)&&j.opts.start.call(a,j),p.fx.timer(p.extend(i,{anim:j,queue:j.opts.queue,elem:a})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}function cX(a,b){var c,d,e,f,g;for(c in a){d=p.camelCase(c),e=b[d],f=a[c],p.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=p.cssHooks[d];if(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 cY(a,b,c){var d,e,f,g,h,i,j,k,l=this,m=a.style,n={},o=[],q=a.nodeType&&bZ(a);c.queue||(j=p._queueHooks(a,"fx"),j.unqueued==null&&(j.unqueued=0,k=j.empty.fire,j.empty.fire=function(){j.unqueued||k()}),j.unqueued++,l.always(function(){l.always(function(){j.unqueued--,p.queue(a,"fx").length||j.empty.fire()})})),a.nodeType===1&&("height"in b||"width"in b)&&(c.overflow=[m.overflow,m.overflowX,m.overflowY],p.css(a,"display")==="inline"&&p.css(a,"float")==="none"&&(!p.support.inlineBlockNeedsLayout||cc(a.nodeName)==="inline"?m.display="inline-block":m.zoom=1)),c.overflow&&(m.overflow="hidden",p.support.shrinkWrapBlocks||l.done(function(){m.overflow=c.overflow[0],m.overflowX=c.overflow[1],m.overflowY=c.overflow[2]}));for(d in b){f=b[d];if(cP.exec(f)){delete b[d];if(f===(q?"hide":"show"))continue;o.push(d)}}g=o.length;if(g){h=p._data(a,"fxshow")||p._data(a,"fxshow",{}),q?p(a).show():l.done(function(){p(a).hide()}),l.done(function(){var b;p.removeData(a,"fxshow",!0);for(b in n)p.style(a,b,n[b])});for(d=0;d<g;d++)e=o[d],i=l.createTween(e,q?h[e]:0),n[e]=h[e]||p.style(a,e),e in h||(h[e]=i.start,q&&(i.end=i.start,i.start=e==="width"||e==="height"?1:0))}}function cZ(a,b,c,d,e){return new cZ.prototype.init(a,b,c,d,e)}function c$(a,b){var c,d={height:a},e=0;b=b?1:0;for(;e<4;e+=2-b)c=bV[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function da(a){return p.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}var c,d,e=a.document,f=a.location,g=a.navigator,h=a.jQuery,i=a.$,j=Array.prototype.push,k=Array.prototype.slice,l=Array.prototype.indexOf,m=Object.prototype.toString,n=Object.prototype.hasOwnProperty,o=String.prototype.trim,p=function(a,b){return new p.fn.init(a,b,c)},q=/[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source,r=/\S/,s=/\s+/,t=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,u=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^[\],:{}\s]*$/,x=/(?:^|:|,)(?:\s*\[)+/g,y=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,z=/"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g,A=/^-ms-/,B=/-([\da-z])/gi,C=function(a,b){return(b+"").toUpperCase()},D=function(){e.addEventListener?(e.removeEventListener("DOMContentLoaded",D,!1),p.ready()):e.readyState==="complete"&&(e.detachEvent("onreadystatechange",D),p.ready())},E={};p.fn=p.prototype={constructor:p,init:function(a,c,d){var f,g,h,i;if(!a)return this;if(a.nodeType)return this.context=this[0]=a,this.length=1,this;if(typeof a=="string"){a.charAt(0)==="<"&&a.charAt(a.length-1)===">"&&a.length>=3?f=[null,a,null]:f=u.exec(a);if(f&&(f[1]||!c)){if(f[1])return c=c instanceof p?c[0]:c,i=c&&c.nodeType?c.ownerDocument||c:e,a=p.parseHTML(f[1],i,!0),v.test(f[1])&&p.isPlainObject(c)&&this.attr.call(a,c,!0),p.merge(this,a);g=e.getElementById(f[2]);if(g&&g.parentNode){if(g.id!==f[2])return d.find(a);this.length=1,this[0]=g}return this.context=e,this.selector=a,this}return!c||c.jquery?(c||d).find(a):this.constructor(c).find(a)}return p.isFunction(a)?d.ready(a):(a.selector!==b&&(this.selector=a.selector,this.context=a.context),p.makeArray(a,this))},selector:"",jquery:"1.8.1",length:0,size:function(){return this.length},toArray:function(){return k.call(this)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=p.merge(this.constructor(),a);return d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")"),d},each:function(a,b){return p.each(this,a,b)},ready:function(a){return p.ready.promise().done(a),this},eq:function(a){return a=+a,a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(k.apply(this,arguments),"slice",k.call(arguments).join(","))},map:function(a){return this.pushStack(p.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:j,sort:[].sort,splice:[].splice},p.fn.init.prototype=p.fn,p.extend=p.fn.extend=function(){var a,c,d,e,f,g,h=arguments[0]||{},i=1,j=arguments.length,k=!1;typeof h=="boolean"&&(k=h,h=arguments[1]||{},i=2),typeof h!="object"&&!p.isFunction(h)&&(h={}),j===i&&(h=this,--i);for(;i<j;i++)if((a=arguments[i])!=null)for(c in a){d=h[c],e=a[c];if(h===e)continue;k&&e&&(p.isPlainObject(e)||(f=p.isArray(e)))?(f?(f=!1,g=d&&p.isArray(d)?d:[]):g=d&&p.isPlainObject(d)?d:{},h[c]=p.extend(k,g,e)):e!==b&&(h[c]=e)}return h},p.extend({noConflict:function(b){return a.$===p&&(a.$=i),b&&a.jQuery===p&&(a.jQuery=h),p},isReady:!1,readyWait:1,holdReady:function(a){a?p.readyWait++:p.ready(!0)},ready:function(a){if(a===!0?--p.readyWait:p.isReady)return;if(!e.body)return setTimeout(p.ready,1);p.isReady=!0;if(a!==!0&&--p.readyWait>0)return;d.resolveWith(e,[p]),p.fn.trigger&&p(e).trigger("ready").off("ready")},isFunction:function(a){return p.type(a)==="function"},isArray:Array.isArray||function(a){return p.type(a)==="array"},isWindow:function(a){return a!=null&&a==a.window},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):E[m.call(a)]||"object"},isPlainObject:function(a){if(!a||p.type(a)!=="object"||a.nodeType||p.isWindow(a))return!1;try{if(a.constructor&&!n.call(a,"constructor")&&!n.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||n.call(a,d)},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},error:function(a){throw new Error(a)},parseHTML:function(a,b,c){var d;return!a||typeof a!="string"?null:(typeof b=="boolean"&&(c=b,b=0),b=b||e,(d=v.exec(a))?[b.createElement(d[1])]:(d=p.buildFragment([a],b,c?null:[]),p.merge([],(d.cacheable?p.clone(d.fragment):d.fragment).childNodes)))},parseJSON:function(b){if(!b||typeof b!="string")return null;b=p.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(w.test(b.replace(y,"@").replace(z,"]").replace(x,"")))return(new Function("return "+b))();p.error("Invalid JSON: "+b)},parseXML:function(c){var d,e;if(!c||typeof c!="string")return null;try{a.DOMParser?(e=new DOMParser,d=e.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(f){d=b}return(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&p.error("Invalid XML: "+c),d},noop:function(){},globalEval:function(b){b&&r.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(A,"ms-").replace(B,C)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var e,f=0,g=a.length,h=g===b||p.isFunction(a);if(d){if(h){for(e in a)if(c.apply(a[e],d)===!1)break}else for(;f<g;)if(c.apply(a[f++],d)===!1)break}else if(h){for(e in a)if(c.call(a[e],e,a[e])===!1)break}else for(;f<g;)if(c.call(a[f],f,a[f++])===!1)break;return a},trim:o&&!o.call(" ")?function(a){return a==null?"":o.call(a)}:function(a){return a==null?"":a.toString().replace(t,"")},makeArray:function(a,b){var c,d=b||[];return a!=null&&(c=p.type(a),a.length==null||c==="string"||c==="function"||c==="regexp"||p.isWindow(a)?j.call(d,a):p.merge(d,a)),d},inArray:function(a,b,c){var d;if(b){if(l)return l.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=c.length,e=a.length,f=0;if(typeof d=="number")for(;f<d;f++)a[e++]=c[f];else while(c[f]!==b)a[e++]=c[f++];return a.length=e,a},grep:function(a,b,c){var d,e=[],f=0,g=a.length;c=!!c;for(;f<g;f++)d=!!b(a[f],f),c!==d&&e.push(a[f]);return e},map:function(a,c,d){var e,f,g=[],h=0,i=a.length,j=a instanceof p||i!==b&&typeof i=="number"&&(i>0&&a[0]&&a[i-1]||i===0||p.isArray(a));if(j)for(;h<i;h++)e=c(a[h],h,d),e!=null&&(g[g.length]=e);else for(f in a)e=c(a[f],f,d),e!=null&&(g[g.length]=e);return g.concat.apply([],g)},guid:1,proxy:function(a,c){var d,e,f;return typeof c=="string"&&(d=a[c],c=a,a=d),p.isFunction(a)?(e=k.call(arguments,2),f=function(){return a.apply(c,e.concat(k.call(arguments)))},f.guid=a.guid=a.guid||f.guid||p.guid++,f):b},access:function(a,c,d,e,f,g,h){var i,j=d==null,k=0,l=a.length;if(d&&typeof d=="object"){for(k in d)p.access(a,c,k,d[k],1,g,e);f=1}else if(e!==b){i=h===b&&p.isFunction(e),j&&(i?(i=c,c=function(a,b,c){return i.call(p(a),c)}):(c.call(a,e),c=null));if(c)for(;k<l;k++)c(a[k],d,i?e.call(a[k],k,c(a[k],d)):e,h);f=1}return f?a:j?c.call(a):l?c(a[0],d):g},now:function(){return(new Date).getTime()}}),p.ready.promise=function(b){if(!d){d=p.Deferred();if(e.readyState==="complete")setTimeout(p.ready,1);else if(e.addEventListener)e.addEventListener("DOMContentLoaded",D,!1),a.addEventListener("load",p.ready,!1);else{e.attachEvent("onreadystatechange",D),a.attachEvent("onload",p.ready);var c=!1;try{c=a.frameElement==null&&e.documentElement}catch(f){}c&&c.doScroll&&function g(){if(!p.isReady){try{c.doScroll("left")}catch(a){return setTimeout(g,50)}p.ready()}}()}}return d.promise(b)},p.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){E["[object "+b+"]"]=b.toLowerCase()}),c=p(e);var F={};p.Callbacks=function(a){a=typeof a=="string"?F[a]||G(a):p.extend({},a);var c,d,e,f,g,h,i=[],j=!a.once&&[],k=function(b){c=a.memory&&b,d=!0,h=f||0,f=0,g=i.length,e=!0;for(;i&&h<g;h++)if(i[h].apply(b[0],b[1])===!1&&a.stopOnFalse){c=!1;break}e=!1,i&&(j?j.length&&k(j.shift()):c?i=[]:l.disable())},l={add:function(){if(i){var b=i.length;(function d(b){p.each(b,function(b,c){var e=p.type(c);e==="function"&&(!a.unique||!l.has(c))?i.push(c):c&&c.length&&e!=="string"&&d(c)})})(arguments),e?g=i.length:c&&(f=b,k(c))}return this},remove:function(){return i&&p.each(arguments,function(a,b){var c;while((c=p.inArray(b,i,c))>-1)i.splice(c,1),e&&(c<=g&&g--,c<=h&&h--)}),this},has:function(a){return p.inArray(a,i)>-1},empty:function(){return i=[],this},disable:function(){return i=j=c=b,this},disabled:function(){return!i},lock:function(){return j=b,c||l.disable(),this},locked:function(){return!j},fireWith:function(a,b){return b=b||[],b=[a,b.slice?b.slice():b],i&&(!d||j)&&(e?j.push(b):k(b)),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!d}};return l},p.extend({Deferred:function(a){var b=[["resolve","done",p.Callbacks("once memory"),"resolved"],["reject","fail",p.Callbacks("once memory"),"rejected"],["notify","progress",p.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return p.Deferred(function(c){p.each(b,function(b,d){var f=d[0],g=a[b];e[d[1]](p.isFunction(g)?function(){var a=g.apply(this,arguments);a&&p.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f+"With"](this===e?c:this,[a])}:c[f])}),a=null}).promise()},promise:function(a){return typeof a=="object"?p.extend(a,d):d}},e={};return d.pipe=d.then,p.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[a^1][2].disable,b[2][2].lock),e[f[0]]=g.fire,e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=k.call(arguments),d=c.length,e=d!==1||a&&p.isFunction(a.promise)?d:0,f=e===1?a:p.Deferred(),g=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?k.call(arguments):d,c===h?f.notifyWith(b,c):--e||f.resolveWith(b,c)}},h,i,j;if(d>1){h=new Array(d),i=new Array(d),j=new Array(d);for(;b<d;b++)c[b]&&p.isFunction(c[b].promise)?c[b].promise().done(g(b,j,c)).fail(f.reject).progress(g(b,i,h)):--e}return e||f.resolveWith(j,c),f.promise()}}),p.support=function(){var b,c,d,f,g,h,i,j,k,l,m,n=e.createElement("div");n.setAttribute("className","t"),n.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",c=n.getElementsByTagName("*"),d=n.getElementsByTagName("a")[0],d.style.cssText="top:1px;float:left;opacity:.5";if(!c||!c.length||!d)return{};f=e.createElement("select"),g=f.appendChild(e.createElement("option")),h=n.getElementsByTagName("input")[0],b={leadingWhitespace:n.firstChild.nodeType===3,tbody:!n.getElementsByTagName("tbody").length,htmlSerialize:!!n.getElementsByTagName("link").length,style:/top/.test(d.getAttribute("style")),hrefNormalized:d.getAttribute("href")==="/a",opacity:/^0.5/.test(d.style.opacity),cssFloat:!!d.style.cssFloat,checkOn:h.value==="on",optSelected:g.selected,getSetAttribute:n.className!=="t",enctype:!!e.createElement("form").enctype,html5Clone:e.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",boxModel:e.compatMode==="CSS1Compat",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},h.checked=!0,b.noCloneChecked=h.cloneNode(!0).checked,f.disabled=!0,b.optDisabled=!g.disabled;try{delete n.test}catch(o){b.deleteExpando=!1}!n.addEventListener&&n.attachEvent&&n.fireEvent&&(n.attachEvent("onclick",m=function(){b.noCloneEvent=!1}),n.cloneNode(!0).fireEvent("onclick"),n.detachEvent("onclick",m)),h=e.createElement("input"),h.value="t",h.setAttribute("type","radio"),b.radioValue=h.value==="t",h.setAttribute("checked","checked"),h.setAttribute("name","t"),n.appendChild(h),i=e.createDocumentFragment(),i.appendChild(n.lastChild),b.checkClone=i.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=h.checked,i.removeChild(h),i.appendChild(n);if(n.attachEvent)for(k in{submit:!0,change:!0,focusin:!0})j="on"+k,l=j in n,l||(n.setAttribute(j,"return;"),l=typeof n[j]=="function"),b[k+"Bubbles"]=l;return p(function(){var c,d,f,g,h="padding:0;margin:0;border:0;display:block;overflow:hidden;",i=e.getElementsByTagName("body")[0];if(!i)return;c=e.createElement("div"),c.style.cssText="visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px",i.insertBefore(c,i.firstChild),d=e.createElement("div"),c.appendChild(d),d.innerHTML="<table><tr><td></td><td>t</td></tr></table>",f=d.getElementsByTagName("td"),f[0].style.cssText="padding:0;margin:0;border:0;display:none",l=f[0].offsetHeight===0,f[0].style.display="",f[1].style.display="none",b.reliableHiddenOffsets=l&&f[0].offsetHeight===0,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%;",b.boxSizing=d.offsetWidth===4,b.doesNotIncludeMarginInBodyOffset=i.offsetTop!==1,a.getComputedStyle&&(b.pixelPosition=(a.getComputedStyle(d,null)||{}).top!=="1%",b.boxSizingReliable=(a.getComputedStyle(d,null)||{width:"4px"}).width==="4px",g=e.createElement("div"),g.style.cssText=d.style.cssText=h,g.style.marginRight=g.style.width="0",d.style.width="1px",d.appendChild(g),b.reliableMarginRight=!parseFloat((a.getComputedStyle(g,null)||{}).marginRight)),typeof d.style.zoom!="undefined"&&(d.innerHTML="",d.style.cssText=h+"width:1px;padding:1px;display:inline;zoom:1",b.inlineBlockNeedsLayout=d.offsetWidth===3,d.style.display="block",d.style.overflow="visible",d.innerHTML="<div></div>",d.firstChild.style.width="5px",b.shrinkWrapBlocks=d.offsetWidth!==3,c.style.zoom=1),i.removeChild(c),c=d=f=g=null}),i.removeChild(n),c=d=f=g=h=i=n=null,b}();var H=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,I=/([A-Z])/g;p.extend({cache:{},deletedIds:[],uuid:0,expando:"jQuery"+(p.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){return a=a.nodeType?p.cache[a[p.expando]]:a[p.expando],!!a&&!K(a)},data:function(a,c,d,e){if(!p.acceptData(a))return;var f,g,h=p.expando,i=typeof c=="string",j=a.nodeType,k=j?p.cache:a,l=j?a[h]:a[h]&&h;if((!l||!k[l]||!e&&!k[l].data)&&i&&d===b)return;l||(j?a[h]=l=p.deletedIds.pop()||++p.uuid:l=h),k[l]||(k[l]={},j||(k[l].toJSON=p.noop));if(typeof c=="object"||typeof c=="function")e?k[l]=p.extend(k[l],c):k[l].data=p.extend(k[l].data,c);return f=k[l],e||(f.data||(f.data={}),f=f.data),d!==b&&(f[p.camelCase(c)]=d),i?(g=f[c],g==null&&(g=f[p.camelCase(c)])):g=f,g},removeData:function(a,b,c){if(!p.acceptData(a))return;var d,e,f,g=a.nodeType,h=g?p.cache:a,i=g?a[p.expando]:p.expando;if(!h[i])return;if(b){d=c?h[i]:h[i].data;if(d){p.isArray(b)||(b in d?b=[b]:(b=p.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,f=b.length;e<f;e++)delete d[b[e]];if(!(c?K:p.isEmptyObject)(d))return}}if(!c){delete h[i].data;if(!K(h[i]))return}g?p.cleanData([a],!0):p.support.deleteExpando||h!=h.window?delete h[i]:h[i]=null},_data:function(a,b,c){return p.data(a,b,c,!0)},acceptData:function(a){var b=a.nodeName&&p.noData[a.nodeName.toLowerCase()];return!b||b!==!0&&a.getAttribute("classid")===b}}),p.fn.extend({data:function(a,c){var d,e,f,g,h,i=this[0],j=0,k=null;if(a===b){if(this.length){k=p.data(i);if(i.nodeType===1&&!p._data(i,"parsedAttrs")){f=i.attributes;for(h=f.length;j<h;j++)g=f[j].name,g.indexOf("data-")===0&&(g=p.camelCase(g.substring(5)),J(i,g,k[g]));p._data(i,"parsedAttrs",!0)}}return k}return typeof a=="object"?this.each(function(){p.data(this,a)}):(d=a.split(".",2),d[1]=d[1]?"."+d[1]:"",e=d[1]+"!",p.access(this,function(c){if(c===b)return k=this.triggerHandler("getData"+e,[d[0]]),k===b&&i&&(k=p.data(i,a),k=J(i,a,k)),k===b&&d[1]?this.data(d[0]):k;d[1]=c,this.each(function(){var b=p(this);b.triggerHandler("setData"+e,d),p.data(this,a,c),b.triggerHandler("changeData"+e,d)})},null,c,arguments.length>1,null,!1))},removeData:function(a){return this.each(function(){p.removeData(this,a)})}}),p.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=p._data(a,b),c&&(!d||p.isArray(c)?d=p._data(a,b,p.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=p.queue(a,b),d=c.length,e=c.shift(),f=p._queueHooks(a,b),g=function(){p.dequeue(a,b)};e==="inprogress"&&(e=c.shift(),d--),e&&(b==="fx"&&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 p._data(a,c)||p._data(a,c,{empty:p.Callbacks("once memory").add(function(){p.removeData(a,b+"queue",!0),p.removeData(a,c,!0)})})}}),p.fn.extend({queue:function(a,c){var d=2;return typeof a!="string"&&(c=a,a="fx",d--),arguments.length<d?p.queue(this[0],a):c===b?this:this.each(function(){var b=p.queue(this,a,c);p._queueHooks(this,a),a==="fx"&&b[0]!=="inprogress"&&p.dequeue(this,a)})},dequeue:function(a){return this.each(function(){p.dequeue(this,a)})},delay:function(a,b){return a=p.fx?p.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){var d,e=1,f=p.Deferred(),g=this,h=this.length,i=function(){--e||f.resolveWith(g,[g])};typeof a!="string"&&(c=a,a=b),a=a||"fx";while(h--)d=p._data(g[h],a+"queueHooks"),d&&d.empty&&(e++,d.empty.add(i));return i(),f.promise(c)}});var L,M,N,O=/[\t\r\n]/g,P=/\r/g,Q=/^(?:button|input)$/i,R=/^(?:button|input|object|select|textarea)$/i,S=/^a(?:rea|)$/i,T=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,U=p.support.getSetAttribute;p.fn.extend({attr:function(a,b){return p.access(this,p.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){p.removeAttr(this,a)})},prop:function(a,b){return p.access(this,p.prop,a,b,arguments.length>1)},removeProp:function(a){return a=p.propFix[a]||a,this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,f,g,h;if(p.isFunction(a))return this.each(function(b){p(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(s);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{f=" "+e.className+" ";for(g=0,h=b.length;g<h;g++)~f.indexOf(" "+b[g]+" ")||(f+=b[g]+" ");e.className=p.trim(f)}}}return this},removeClass:function(a){var c,d,e,f,g,h,i;if(p.isFunction(a))return this.each(function(b){p(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(s);for(h=0,i=this.length;h<i;h++){e=this[h];if(e.nodeType===1&&e.className){d=(" "+e.className+" ").replace(O," ");for(f=0,g=c.length;f<g;f++)while(d.indexOf(" "+c[f]+" ")>-1)d=d.replace(" "+c[f]+" "," ");e.className=a?p.trim(d):""}}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";return p.isFunction(a)?this.each(function(c){p(this).toggleClass(a.call(this,c,this.className,b),b)}):this.each(function(){if(c==="string"){var e,f=0,g=p(this),h=b,i=a.split(s);while(e=i[f++])h=d?h:!g.hasClass(e),g[h?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&p._data(this,"__className__",this.className),this.className=this.className||a===!1?"":p._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(O," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e,f=this[0];if(!arguments.length){if(f)return c=p.valHooks[f.type]||p.valHooks[f.nodeName.toLowerCase()],c&&"get"in c&&(d=c.get(f,"value"))!==b?d:(d=f.value,typeof d=="string"?d.replace(P,""):d==null?"":d);return}return e=p.isFunction(a),this.each(function(d){var f,g=p(this);if(this.nodeType!==1)return;e?f=a.call(this,d,g.val()):f=a,f==null?f="":typeof f=="number"?f+="":p.isArray(f)&&(f=p.map(f,function(a){return a==null?"":a+""})),c=p.valHooks[this.type]||p.valHooks[this.nodeName.toLowerCase()];if(!c||!("set"in c)||c.set(this,f,"value")===b)this.value=f})}}),p.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,f=a.selectedIndex,g=[],h=a.options,i=a.type==="select-one";if(f<0)return null;c=i?f:0,d=i?f+1:h.length;for(;c<d;c++){e=h[c];if(e.selected&&(p.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!p.nodeName(e.parentNode,"optgroup"))){b=p(e).val();if(i)return b;g.push(b)}}return i&&!g.length&&h.length?p(h[f]).val():g},set:function(a,b){var c=p.makeArray(b);return p(a).find("option").each(function(){this.selected=p.inArray(p(this).val(),c)>=0}),c.length||(a.selectedIndex=-1),c}}},attrFn:{},attr:function(a,c,d,e){var f,g,h,i=a.nodeType;if(!a||i===3||i===8||i===2)return;if(e&&p.isFunction(p.fn[c]))return p(a)[c](d);if(typeof a.getAttribute=="undefined")return p.prop(a,c,d);h=i!==1||!p.isXMLDoc(a),h&&(c=c.toLowerCase(),g=p.attrHooks[c]||(T.test(c)?M:L));if(d!==b){if(d===null){p.removeAttr(a,c);return}return g&&"set"in g&&h&&(f=g.set(a,d,c))!==b?f:(a.setAttribute(c,""+d),d)}return g&&"get"in g&&h&&(f=g.get(a,c))!==null?f:(f=a.getAttribute(c),f===null?b:f)},removeAttr:function(a,b){var c,d,e,f,g=0;if(b&&a.nodeType===1){d=b.split(s);for(;g<d.length;g++)e=d[g],e&&(c=p.propFix[e]||e,f=T.test(e),f||p.attr(a,e,""),a.removeAttribute(U?e:c),f&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(Q.test(a.nodeName)&&a.parentNode)p.error("type property can't be changed");else if(!p.support.radioValue&&b==="radio"&&p.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}},value:{get:function(a,b){return L&&p.nodeName(a,"button")?L.get(a,b):b in a?a.value:null},set:function(a,b,c){if(L&&p.nodeName(a,"button"))return L.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,f,g,h=a.nodeType;if(!a||h===3||h===8||h===2)return;return g=h!==1||!p.isXMLDoc(a),g&&(c=p.propFix[c]||c,f=p.propHooks[c]),d!==b?f&&"set"in f&&(e=f.set(a,d,c))!==b?e:a[c]=d:f&&"get"in f&&(e=f.get(a,c))!==null?e:a[c]},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):R.test(a.nodeName)||S.test(a.nodeName)&&a.href?0:b}}}}),M={get:function(a,c){var d,e=p.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;return b===!1?p.removeAttr(a,c):(d=p.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase())),c}},U||(N={name:!0,id:!0,coords:!0},L=p.valHooks.button={get:function(a,c){var d;return d=a.getAttributeNode(c),d&&(N[c]?d.value!=="":d.specified)?d.value:b},set:function(a,b,c){var d=a.getAttributeNode(c);return d||(d=e.createAttribute(c),a.setAttributeNode(d)),d.value=b+""}},p.each(["width","height"],function(a,b){p.attrHooks[b]=p.extend(p.attrHooks[b],{set:function(a,c){if(c==="")return a.setAttribute(b,"auto"),c}})}),p.attrHooks.contenteditable={get:L.get,set:function(a,b,c){b===""&&(b="false"),L.set(a,b,c)}}),p.support.hrefNormalized||p.each(["href","src","width","height"],function(a,c){p.attrHooks[c]=p.extend(p.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),p.support.style||(p.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),p.support.optSelected||(p.propHooks.selected=p.extend(p.propHooks.selected,{get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}})),p.support.enctype||(p.propFix.enctype="encoding"),p.support.checkOn||p.each(["radio","checkbox"],function(){p.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),p.each(["radio","checkbox"],function(){p.valHooks[this]=p.extend(p.valHooks[this],{set:function(a,b){if(p.isArray(b))return a.checked=p.inArray(p(a).val(),b)>=0}})});var V=/^(?:textarea|input|select)$/i,W=/^([^\.]*|)(?:\.(.+)|)$/,X=/(?:^|\s)hover(\.\S+|)\b/,Y=/^key/,Z=/^(?:mouse|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=function(a){return p.event.special.hover?a:a.replace(X,"mouseenter$1 mouseleave$1")};p.event={add:function(a,c,d,e,f){var g,h,i,j,k,l,m,n,o,q,r;if(a.nodeType===3||a.nodeType===8||!c||!d||!(g=p._data(a)))return;d.handler&&(o=d,d=o.handler,f=o.selector),d.guid||(d.guid=p.guid++),i=g.events,i||(g.events=i={}),h=g.handle,h||(g.handle=h=function(a){return typeof p!="undefined"&&(!a||p.event.triggered!==a.type)?p.event.dispatch.apply(h.elem,arguments):b},h.elem=a),c=p.trim(_(c)).split(" ");for(j=0;j<c.length;j++){k=W.exec(c[j])||[],l=k[1],m=(k[2]||"").split(".").sort(),r=p.event.special[l]||{},l=(f?r.delegateType:r.bindType)||l,r=p.event.special[l]||{},n=p.extend({type:l,origType:k[1],data:e,handler:d,guid:d.guid,selector:f,namespace:m.join(".")},o),q=i[l];if(!q){q=i[l]=[],q.delegateCount=0;if(!r.setup||r.setup.call(a,e,m,h)===!1)a.addEventListener?a.addEventListener(l,h,!1):a.attachEvent&&a.attachEvent("on"+l,h)}r.add&&(r.add.call(a,n),n.handler.guid||(n.handler.guid=d.guid)),f?q.splice(q.delegateCount++,0,n):q.push(n),p.event.global[l]=!0}a=null},global:{},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,q,r=p.hasData(a)&&p._data(a);if(!r||!(m=r.events))return;b=p.trim(_(b||"")).split(" ");for(f=0;f<b.length;f++){g=W.exec(b[f])||[],h=i=g[1],j=g[2];if(!h){for(h in m)p.event.remove(a,h+b[f],c,d,!0);continue}n=p.event.special[h]||{},h=(d?n.delegateType:n.bindType)||h,o=m[h]||[],k=o.length,j=j?new RegExp("(^|\\.)"+j.split(".").sort().join("\\.(?:.*\\.|)")+"(\\.|$)"):null;for(l=0;l<o.length;l++)q=o[l],(e||i===q.origType)&&(!c||c.guid===q.guid)&&(!j||j.test(q.namespace))&&(!d||d===q.selector||d==="**"&&q.selector)&&(o.splice(l--,1),q.selector&&o.delegateCount--,n.remove&&n.remove.call(a,q));o.length===0&&k!==o.length&&((!n.teardown||n.teardown.call(a,j,r.handle)===!1)&&p.removeEvent(a,h,r.handle),delete m[h])}p.isEmptyObject(m)&&(delete r.handle,p.removeData(a,"events",!0))},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,f,g){if(!f||f.nodeType!==3&&f.nodeType!==8){var h,i,j,k,l,m,n,o,q,r,s=c.type||c,t=[];if($.test(s+p.event.triggered))return;s.indexOf("!")>=0&&(s=s.slice(0,-1),i=!0),s.indexOf(".")>=0&&(t=s.split("."),s=t.shift(),t.sort());if((!f||p.event.customEvent[s])&&!p.event.global[s])return;c=typeof c=="object"?c[p.expando]?c:new p.Event(s,c):new p.Event(s),c.type=s,c.isTrigger=!0,c.exclusive=i,c.namespace=t.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+t.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,m=s.indexOf(":")<0?"on"+s:"";if(!f){h=p.cache;for(j in h)h[j].events&&h[j].events[s]&&p.event.trigger(c,d,h[j].handle.elem,!0);return}c.result=b,c.target||(c.target=f),d=d!=null?p.makeArray(d):[],d.unshift(c),n=p.event.special[s]||{};if(n.trigger&&n.trigger.apply(f,d)===!1)return;q=[[f,n.bindType||s]];if(!g&&!n.noBubble&&!p.isWindow(f)){r=n.delegateType||s,k=$.test(r+s)?f:f.parentNode;for(l=f;k;k=k.parentNode)q.push([k,r]),l=k;l===(f.ownerDocument||e)&&q.push([l.defaultView||l.parentWindow||a,r])}for(j=0;j<q.length&&!c.isPropagationStopped();j++)k=q[j][0],c.type=q[j][1],o=(p._data(k,"events")||{})[c.type]&&p._data(k,"handle"),o&&o.apply(k,d),o=m&&k[m],o&&p.acceptData(k)&&o.apply(k,d)===!1&&c.preventDefault();return c.type=s,!g&&!c.isDefaultPrevented()&&(!n._default||n._default.apply(f.ownerDocument,d)===!1)&&(s!=="click"||!p.nodeName(f,"a"))&&p.acceptData(f)&&m&&f[s]&&(s!=="focus"&&s!=="blur"||c.target.offsetWidth!==0)&&!p.isWindow(f)&&(l=f[m],l&&(f[m]=null),p.event.triggered=s,f[s](),p.event.triggered=b,l&&(f[m]=l)),c.result}return},dispatch:function(c){c=p.event.fix(c||a.event);var d,e,f,g,h,i,j,k,l,m,n=(p._data(this,"events")||{})[c.type]||[],o=n.delegateCount,q=[].slice.call(arguments),r=!c.exclusive&&!c.namespace,s=p.event.special[c.type]||{},t=[];q[0]=c,c.delegateTarget=this;if(s.preDispatch&&s.preDispatch.call(this,c)===!1)return;if(o&&(!c.button||c.type!=="click"))for(f=c.target;f!=this;f=f.parentNode||this)if(f.disabled!==!0||c.type!=="click"){h={},j=[];for(d=0;d<o;d++)k=n[d],l=k.selector,h[l]===b&&(h[l]=p(l,this).index(f)>=0),h[l]&&j.push(k);j.length&&t.push({elem:f,matches:j})}n.length>o&&t.push({elem:this,matches:n.slice(o)});for(d=0;d<t.length&&!c.isPropagationStopped();d++){i=t[d],c.currentTarget=i.elem;for(e=0;e<i.matches.length&&!c.isImmediatePropagationStopped();e++){k=i.matches[e];if(r||!c.namespace&&!k.namespace||c.namespace_re&&c.namespace_re.test(k.namespace))c.data=k.data,c.handleObj=k,g=((p.event.special[k.origType]||{}).handle||k.handler).apply(i.elem,q),g!==b&&(c.result=g,g===!1&&(c.preventDefault(),c.stopPropagation()))}}return s.postDispatch&&s.postDispatch.call(this,c),c.result},props:"attrChange attrName relatedNode srcElement 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 a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,c){var d,f,g,h=c.button,i=c.fromElement;return a.pageX==null&&c.clientX!=null&&(d=a.target.ownerDocument||e,f=d.documentElement,g=d.body,a.pageX=c.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=c.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?c.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0),a}},fix:function(a){if(a[p.expando])return a;var b,c,d=a,f=p.event.fixHooks[a.type]||{},g=f.props?this.props.concat(f.props):this.props;a=p.Event(d);for(b=g.length;b;)c=g[--b],a[c]=d[c];return a.target||(a.target=d.srcElement||e),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,f.filter?f.filter(a,d):a},special:{load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){p.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=p.extend(new p.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?p.event.trigger(e,null,b):p.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},p.event.handle=p.event.dispatch,p.removeEvent=e.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]=="undefined"&&(a[d]=null),a.detachEvent(d,c))},p.Event=function(a,b){if(this instanceof p.Event)a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?bb:ba):this.type=a,b&&p.extend(this,b),this.timeStamp=a&&a.timeStamp||p.now(),this[p.expando]=!0;else return new p.Event(a,b)},p.Event.prototype={preventDefault:function(){this.isDefaultPrevented=bb;var a=this.originalEvent;if(!a)return;a.preventDefault?a.preventDefault():a.returnValue=!1},stopPropagation:function(){this.isPropagationStopped=bb;var a=this.originalEvent;if(!a)return;a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=bb,this.stopPropagation()},isDefaultPrevented:ba,isPropagationStopped:ba,isImmediatePropagationStopped:ba},p.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){p.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj,g=f.selector;if(!e||e!==d&&!p.contains(d,e))a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b;return c}}}),p.support.submitBubbles||(p.event.special.submit={setup:function(){if(p.nodeName(this,"form"))return!1;p.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=p.nodeName(c,"input")||p.nodeName(c,"button")?c.form:b;d&&!p._data(d,"_submit_attached")&&(p.event.add(d,"submit._submit",function(a){a._submit_bubble=!0}),p._data(d,"_submit_attached",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&p.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){if(p.nodeName(this,"form"))return!1;p.event.remove(this,"._submit")}}),p.support.changeBubbles||(p.event.special.change={setup:function(){if(V.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")p.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),p.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),p.event.simulate("change",this,a,!0)});return!1}p.event.add(this,"beforeactivate._change",function(a){var b=a.target;V.test(b.nodeName)&&!p._data(b,"_change_attached")&&(p.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&p.event.simulate("change",this.parentNode,a,!0)}),p._data(b,"_change_attached",!0))})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){return p.event.remove(this,"._change"),!V.test(this.nodeName)}}),p.support.focusinBubbles||p.each({focus:"focusin",blur:"focusout"},function(a,b){var c=0,d=function(a){p.event.simulate(b,a.target,p.event.fix(a),!0)};p.event.special[b]={setup:function(){c++===0&&e.addEventListener(a,d,!0)},teardown:function(){--c===0&&e.removeEventListener(a,d,!0)}}}),p.fn.extend({on:function(a,c,d,e,f){var g,h;if(typeof a=="object"){typeof c!="string"&&(d=d||c,c=b);for(h in a)this.on(h,c,d,a[h],f);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=ba;else if(!e)return this;return f===1&&(g=e,e=function(a){return p().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=p.guid++)),this.each(function(){p.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,c,d){var e,f;if(a&&a.preventDefault&&a.handleObj)return e=a.handleObj,p(a.delegateTarget).off(e.namespace?e.origType+"."+e.namespace:e.origType,e.selector,e.handler),this;if(typeof a=="object"){for(f in a)this.off(f,c,a[f]);return this}if(c===!1||typeof c=="function")d=c,c=b;return d===!1&&(d=ba),this.each(function(){p.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){return p(this.context).on(a,this.selector,b,c),this},die:function(a,b){return p(this.context).off(a,this.selector||"**",b),this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,"**"):this.off(b,a||"**",c)},trigger:function(a,b){return this.each(function(){p.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return p.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||p.guid++,d=0,e=function(c){var e=(p._data(this,"lastToggle"+a.guid)||0)%d;return p._data(this,"lastToggle"+a.guid,e+1),c.preventDefault(),b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),p.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){p.fn[b]=function(a,c){return c==null&&(c=a,a=null),arguments.length>0?this.on(b,null,a,c):this.trigger(b)},Y.test(b)&&(p.event.fixHooks[b]=p.event.keyHooks),Z.test(b)&&(p.event.fixHooks[b]=p.event.mouseHooks)}),function(a,b){function $(a,b,c,d){c=c||[],b=b||q;var e,f,g,j,k=b.nodeType;if(k!==1&&k!==9)return[];if(!a||typeof a!="string")return c;g=h(b);if(!g&&!d)if(e=L.exec(a))if(j=e[1]){if(k===9){f=b.getElementById(j);if(!f||!f.parentNode)return c;if(f.id===j)return c.push(f),c}else if(b.ownerDocument&&(f=b.ownerDocument.getElementById(j))&&i(b,f)&&f.id===j)return c.push(f),c}else{if(e[2])return u.apply(c,t.call(b.getElementsByTagName(a),0)),c;if((j=e[3])&&X&&b.getElementsByClassName)return u.apply(c,t.call(b.getElementsByClassName(j),0)),c}return bk(a,b,c,d,g)}function _(a){return function(b){var c=b.nodeName.toLowerCase();return c==="input"&&b.type===a}}function ba(a){return function(b){var c=b.nodeName.toLowerCase();return(c==="input"||c==="button")&&b.type===a}}function bb(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}function bc(a,b,c,d){var e,g,h,i,j,k,l,m,n,p,r=!c&&b!==q,s=(r?"<s>":"")+a.replace(H,"$1<s>"),u=y[o][s];if(u)return d?0:t.call(u,0);j=a,k=[],m=0,n=f.preFilter,p=f.filter;while(j){if(!e||(g=I.exec(j)))g&&(j=j.slice(g[0].length),h.selector=l),k.push(h=[]),l="",r&&(j=" "+j);e=!1;if(g=J.exec(j))l+=g[0],j=j.slice(g[0].length),e=h.push({part:g.pop().replace(H," "),string:g[0],captures:g});for(i in p)(g=S[i].exec(j))&&(!n[i]||(g=n[i](g,b,c)))&&(l+=g[0],j=j.slice(g[0].length),e=h.push({part:i,string:g.shift(),captures:g}));if(!e)break}return l&&(h.selector=l),d?j.length:j?$.error(a):t.call(y(s,k),0)}function bd(a,b,e,f){var g=b.dir,h=s++;return a||(a=function(a){return a===e}),b.first?function(b){while(b=b[g])if(b.nodeType===1)return a(b)&&b}:f?function(b){while(b=b[g])if(b.nodeType===1&&a(b))return b}:function(b){var e,f=h+"."+c,i=f+"."+d;while(b=b[g])if(b.nodeType===1){if((e=b[o])===i)return b.sizset;if(typeof e=="string"&&e.indexOf(f)===0){if(b.sizset)return b}else{b[o]=i;if(a(b))return b.sizset=!0,b;b.sizset=!1}}}}function be(a,b){return a?function(c){var d=b(c);return d&&a(d===!0?c:d)}:b}function bf(a,b,c){var d,e,g=0;for(;d=a[g];g++)f.relative[d.part]?e=bd(e,f.relative[d.part],b,c):e=be(e,f.filter[d.part].apply(null,d.captures.concat(b,c)));return e}function bg(a){return function(b){var c,d=0;for(;c=a[d];d++)if(c(b))return!0;return!1}}function bh(a,b,c,d){var e=0,f=b.length;for(;e<f;e++)$(a,b[e],c,d)}function bi(a,b,c,d,e,g){var h,i=f.setFilters[b.toLowerCase()];return i||$.error(b),(a||!(h=e))&&bh(a||"*",d,h=[],e),h.length>0?i(h,c,g):[]}function bj(a,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s=0,t=a.length,v=S.POS,w=new RegExp("^"+v.source+"(?!"+A+")","i"),x=function(){var a=1,c=arguments.length-2;for(;a<c;a++)arguments[a]===b&&(n[a]=b)};for(;s<t;s++){f=a[s],g="",m=e;for(h=0,i=f.length;h<i;h++){j=f[h],k=j.string;if(j.part==="PSEUDO"){v.exec(""),l=0;while(n=v.exec(k)){o=!0,p=v.lastIndex=n.index+n[0].length;if(p>l){g+=k.slice(l,n.index),l=p,q=[c],J.test(g)&&(m&&(q=m),m=e);if(r=O.test(g))g=g.slice(0,-5).replace(J,"$&*"),l++;n.length>1&&n[0].replace(w,x),m=bi(g,n[1],n[2],q,m,r)}g=""}}o||(g+=k),o=!1}g?J.test(g)?bh(g,m||[c],d,e):$(g,c,d,e?e.concat(m):m):u.apply(d,m)}return t===1?d:$.uniqueSort(d)}function bk(a,b,e,g,h){a=a.replace(H,"$1");var i,k,l,m,n,o,p,q,r,s,v=bc(a,b,h),w=b.nodeType;if(S.POS.test(a))return bj(v,b,e,g);if(g)i=t.call(g,0);else if(v.length===1){if((o=t.call(v[0],0)).length>2&&(p=o[0]).part==="ID"&&w===9&&!h&&f.relative[o[1].part]){b=f.find.ID(p.captures[0].replace(R,""),b,h)[0];if(!b)return e;a=a.slice(o.shift().string.length)}r=(v=N.exec(o[0].string))&&!v.index&&b.parentNode||b,q="";for(n=o.length-1;n>=0;n--){p=o[n],s=p.part,q=p.string+q;if(f.relative[s])break;if(f.order.test(s)){i=f.find[s](p.captures[0].replace(R,""),r,h);if(i==null)continue;a=a.slice(0,a.length-q.length)+q.replace(S[s],""),a||u.apply(e,t.call(i,0));break}}}if(a){k=j(a,b,h),c=k.dirruns++,i==null&&(i=f.find.TAG("*",N.test(a)&&b.parentNode||b));for(n=0;m=i[n];n++)d=k.runs++,k(m)&&e.push(m)}return e}var c,d,e,f,g,h,i,j,k,l,m=!0,n="undefined",o=("sizcache"+Math.random()).replace(".",""),q=a.document,r=q.documentElement,s=0,t=[].slice,u=[].push,v=function(a,b){return a[o]=b||!0,a},w=function(){var a={},b=[];return v(function(c,d){return b.push(c)>f.cacheLength&&delete a[b.shift()],a[c]=d},a)},x=w(),y=w(),z=w(),A="[\\x20\\t\\r\\n\\f]",B="(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+",C=B.replace("w","w#"),D="([*^$|!~]?=)",E="\\["+A+"*("+B+")"+A+"*(?:"+D+A+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+C+")|)|)"+A+"*\\]",F=":("+B+")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:"+E+")|[^:]|\\\\.)*|.*))\\)|)",G=":(nth|eq|gt|lt|first|last|even|odd)(?:\\(((?:-\\d)?\\d*)\\)|)(?=[^-]|$)",H=new RegExp("^"+A+"+|((?:^|[^\\\\])(?:\\\\.)*)"+A+"+$","g"),I=new RegExp("^"+A+"*,"+A+"*"),J=new RegExp("^"+A+"*([\\x20\\t\\r\\n\\f>+~])"+A+"*"),K=new RegExp(F),L=/^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,M=/^:not/,N=/[\x20\t\r\n\f]*[+~]/,O=/:not\($/,P=/h\d/i,Q=/input|select|textarea|button/i,R=/\\(?!\\)/g,S={ID:new RegExp("^#("+B+")"),CLASS:new RegExp("^\\.("+B+")"),NAME:new RegExp("^\\[name=['\"]?("+B+")['\"]?\\]"),TAG:new RegExp("^("+B.replace("w","w*")+")"),ATTR:new RegExp("^"+E),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|nth|last|first)-child(?:\\("+A+"*(even|odd|(([+-]|)(\\d*)n|)"+A+"*(?:([+-]|)"+A+"*(\\d+)|))"+A+"*\\)|)","i"),POS:new RegExp(G,"ig"),needsContext:new RegExp("^"+A+"*[>+~]|"+G,"i")},T=function(a){var b=q.createElement("div");try{return a(b)}catch(c){return!1}finally{b=null}},U=T(function(a){return a.appendChild(q.createComment("")),!a.getElementsByTagName("*").length}),V=T(function(a){return a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!==n&&a.firstChild.getAttribute("href")==="#"}),W=T(function(a){a.innerHTML="<select></select>";var b=typeof a.lastChild.getAttribute("multiple");return b!=="boolean"&&b!=="string"}),X=T(function(a){return a.innerHTML="<div class='hidden e'></div><div class='hidden'></div>",!a.getElementsByClassName||!a.getElementsByClassName("e").length?!1:(a.lastChild.className="e",a.getElementsByClassName("e").length===2)}),Y=T(function(a){a.id=o+0,a.innerHTML="<a name='"+o+"'></a><div name='"+o+"'></div>",r.insertBefore(a,r.firstChild);var b=q.getElementsByName&&q.getElementsByName(o).length===2+q.getElementsByName(o+0).length;return e=!q.getElementById(o),r.removeChild(a),b});try{t.call(r.childNodes,0)[0].nodeType}catch(Z){t=function(a){var b,c=[];for(;b=this[a];a++)c.push(b);return c}}$.matches=function(a,b){return $(a,null,null,b)},$.matchesSelector=function(a,b){return $(b,null,null,[a]).length>0},g=$.getText=function(a){var b,c="",d=0,e=a.nodeType;if(e){if(e===1||e===9||e===11){if(typeof a.textContent=="string")return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=g(a)}else if(e===3||e===4)return a.nodeValue}else for(;b=a[d];d++)c+=g(b);return c},h=$.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?b.nodeName!=="HTML":!1},i=$.contains=r.contains?function(a,b){var c=a.nodeType===9?a.documentElement:a,d=b&&b.parentNode;return a===d||!!(d&&d.nodeType===1&&c.contains&&c.contains(d))}:r.compareDocumentPosition?function(a,b){return b&&!!(a.compareDocumentPosition(b)&16)}:function(a,b){while(b=b.parentNode)if(b===a)return!0;return!1},$.attr=function(a,b){var c,d=h(a);return d||(b=b.toLowerCase()),f.attrHandle[b]?f.attrHandle[b](a):W||d?a.getAttribute(b):(c=a.getAttributeNode(b),c?typeof a[b]=="boolean"?a[b]?b:null:c.specified?c.value:null:null)},f=$.selectors={cacheLength:50,createPseudo:v,match:S,order:new RegExp("ID|TAG"+(Y?"|NAME":"")+(X?"|CLASS":"")),attrHandle:V?{}:{href:function(a){return a.getAttribute("href",2)},type:function(a){return a.getAttribute("type")}},find:{ID:e?function(a,b,c){if(typeof b.getElementById!==n&&!c){var d=b.getElementById(a);return d&&d.parentNode?[d]:[]}}:function(a,c,d){if(typeof c.getElementById!==n&&!d){var e=c.getElementById(a);return e?e.id===a||typeof e.getAttributeNode!==n&&e.getAttributeNode("id").value===a?[e]:b:[]}},TAG:U?function(a,b){if(typeof b.getElementsByTagName!==n)return b.getElementsByTagName(a)}:function(a,b){var c=b.getElementsByTagName(a);if(a==="*"){var d,e=[],f=0;for(;d=c[f];f++)d.nodeType===1&&e.push(d);return e}return c},NAME:function(a,b){if(typeof b.getElementsByName!==n)return b.getElementsByName(name)},CLASS:function(a,b,c){if(typeof b.getElementsByClassName!==n&&!c)return b.getElementsByClassName(a)}},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(R,""),a[3]=(a[4]||a[5]||"").replace(R,""),a[2]==="~="&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),a[1]==="nth"?(a[2]||$.error(a[0]),a[3]=+(a[3]?a[4]+(a[5]||1):2*(a[2]==="even"||a[2]==="odd")),a[4]=+(a[6]+a[7]||a[2]==="odd")):a[2]&&$.error(a[0]),a},PSEUDO:function(a,b,c){var d,e;if(S.CHILD.test(a[0]))return null;if(a[3])a[2]=a[3];else if(d=a[4])K.test(d)&&(e=bc(d,b,c,!0))&&(e=d.indexOf(")",d.length-e)-d.length)&&(d=d.slice(0,e),a[0]=a[0].slice(0,e)),a[2]=d;return a.slice(0,3)}},filter:{ID:e?function(a){return a=a.replace(R,""),function(b){return b.getAttribute("id")===a}}:function(a){return a=a.replace(R,""),function(b){var c=typeof b.getAttributeNode!==n&&b.getAttributeNode("id");return c&&c.value===a}},TAG:function(a){return a==="*"?function(){return!0}:(a=a.replace(R,"").toLowerCase(),function(b){return b.nodeName&&b.nodeName.toLowerCase()===a})},CLASS:function(a){var b=x[o][a];return b||(b=x(a,new RegExp("(^|"+A+")"+a+"("+A+"|$)"))),function(a){return b.test(a.className||typeof a.getAttribute!==n&&a.getAttribute("class")||"")}},ATTR:function(a,b,c){return b?function(d){var e=$.attr(d,a),f=e+"";if(e==null)return b==="!=";switch(b){case"=":return f===c;case"!=":return f!==c;case"^=":return c&&f.indexOf(c)===0;case"*=":return c&&f.indexOf(c)>-1;case"$=":return c&&f.substr(f.length-c.length)===c;case"~=":return(" "+f+" ").indexOf(c)>-1;case"|=":return f===c||f.substr(0,c.length+1)===c+"-"}}:function(b){return $.attr(b,a)!=null}},CHILD:function(a,b,c,d){if(a==="nth"){var e=s++;return function(a){var b,f,g=0,h=a;if(c===1&&d===0)return!0;b=a.parentNode;if(b&&(b[o]!==e||!a.sizset)){for(h=b.firstChild;h;h=h.nextSibling)if(h.nodeType===1){h.sizset=++g;if(h===a)break}b[o]=e}return f=a.sizset-d,c===0?f===0:f%c===0&&f/c>=0}}return function(b){var c=b;switch(a){case"only":case"first":while(c=c.previousSibling)if(c.nodeType===1)return!1;if(a==="first")return!0;c=b;case"last":while(c=c.nextSibling)if(c.nodeType===1)return!1;return!0}}},PSEUDO:function(a,b,c,d){var e,g=f.pseudos[a]||f.pseudos[a.toLowerCase()];return g||$.error("unsupported pseudo: "+a),g[o]?g(b,c,d):g.length>1?(e=[a,a,"",b],function(a){return g(a,0,e)}):g}},pseudos:{not:v(function(a,b,c){var d=j(a.replace(H,"$1"),b,c);return function(a){return!d(a)}}),enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&!!a.checked||b==="option"&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},parent:function(a){return!f.pseudos.empty(a)},empty:function(a){var b;a=a.firstChild;while(a){if(a.nodeName>"@"||(b=a.nodeType)===3||b===4)return!1;a=a.nextSibling}return!0},contains:v(function(a){return function(b){return(b.textContent||b.innerText||g(b)).indexOf(a)>-1}}),has:v(function(a){return function(b){return $(a,b).length>0}}),header:function(a){return P.test(a.nodeName)},text:function(a){var b,c;return a.nodeName.toLowerCase()==="input"&&(b=a.type)==="text"&&((c=a.getAttribute("type"))==null||c.toLowerCase()===b)},radio:_("radio"),checkbox:_("checkbox"),file:_("file"),password:_("password"),image:_("image"),submit:ba("submit"),reset:ba("reset"),button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&a.type==="button"||b==="button"},input:function(a){return Q.test(a.nodeName)},focus:function(a){var b=a.ownerDocument;return a===b.activeElement&&(!b.hasFocus||b.hasFocus())&&(!!a.type||!!a.href)},active:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b,c){return c?a.slice(1):[a[0]]},last:function(a,b,c){var d=a.pop();return c?a:[d]},even:function(a,b,c){var d=[],e=c?1:0,f=a.length;for(;e<f;e=e+2)d.push(a[e]);return d},odd:function(a,b,c){var d=[],e=c?0:1,f=a.length;for(;e<f;e=e+2)d.push(a[e]);return d},lt:function(a,b,c){return c?a.slice(+b):a.slice(0,+b)},gt:function(a,b,c){return c?a.slice(0,+b+1):a.slice(+b+1)},eq:function(a,b,c){var d=a.splice(+b,1);return c?a:d}}},k=r.compareDocumentPosition?function(a,b){return a===b?(l=!0,0):(!a.compareDocumentPosition||!b.compareDocumentPosition?a.compareDocumentPosition:a.compareDocumentPosition(b)&4)?-1:1}:function(a,b){if(a===b)return l=!0,0;if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,h=b.parentNode,i=g;if(g===h)return bb(a,b);if(!g)return-1;if(!h)return 1;while(i)e.unshift(i),i=i.parentNode;i=h;while(i)f.unshift(i),i=i.parentNode;c=e.length,d=f.length;for(var j=0;j<c&&j<d;j++)if(e[j]!==f[j])return bb(e[j],f[j]);return j===c?bb(a,f[j],-1):bb(e[j],b,1)},[0,0].sort(k),m=!l,$.uniqueSort=function(a){var b,c=1;l=m,a.sort(k);if(l)for(;b=a[c];c++)b===a[c-1]&&a.splice(c--,1);return a},$.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},j=$.compile=function(a,b,c){var d,e,f,g=z[o][a];if(g&&g.context===b)return g;d=bc(a,b,c);for(e=0,f=d.length;e<f;e++)d[e]=bf(d[e],b,c);return g=z(a,bg(d)),g.context=b,g.runs=g.dirruns=0,g},q.querySelectorAll&&function(){var a,b=bk,c=/'|\\/g,d=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,e=[],f=[":active"],g=r.matchesSelector||r.mozMatchesSelector||r.webkitMatchesSelector||r.oMatchesSelector||r.msMatchesSelector;T(function(a){a.innerHTML="<select><option selected=''></option></select>",a.querySelectorAll("[selected]").length||e.push("\\["+A+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),a.querySelectorAll(":checked").length||e.push(":checked")}),T(function(a){a.innerHTML="<p test=''></p>",a.querySelectorAll("[test^='']").length&&e.push("[*^$]="+A+"*(?:\"\"|'')"),a.innerHTML="<input type='hidden'/>",a.querySelectorAll(":enabled").length||e.push(":enabled",":disabled")}),e=e.length&&new RegExp(e.join("|")),bk=function(a,d,f,g,h){if(!g&&!h&&(!e||!e.test(a)))if(d.nodeType===9)try{return u.apply(f,t.call(d.querySelectorAll(a),0)),f}catch(i){}else if(d.nodeType===1&&d.nodeName.toLowerCase()!=="object"){var j,k,l,m=d.getAttribute("id"),n=m||o,p=N.test(a)&&d.parentNode||d;m?n=n.replace(c,"\\$&"):d.setAttribute("id",n),j=bc(a,d,h),n="[id='"+n+"']";for(k=0,l=j.length;k<l;k++)j[k]=n+j[k].selector;try{return u.apply(f,t.call(p.querySelectorAll(j.join(",")),0)),f}catch(i){}finally{m||d.removeAttribute("id")}}return b(a,d,f,g,h)},g&&(T(function(b){a=g.call(b,"div");try{g.call(b,"[test!='']:sizzle"),f.push(S.PSEUDO.source,S.POS.source,"!=")}catch(c){}}),f=new RegExp(f.join("|")),$.matchesSelector=function(b,c){c=c.replace(d,"='$1']");if(!h(b)&&!f.test(c)&&(!e||!e.test(c)))try{var i=g.call(b,c);if(i||a||b.document&&b.document.nodeType!==11)return i}catch(j){}return $(c,null,null,[b]).length>0})}(),f.setFilters.nth=f.setFilters.eq,f.filters=f.pseudos,$.attr=p.attr,p.find=$,p.expr=$.selectors,p.expr[":"]=p.expr.pseudos,p.unique=$.uniqueSort,p.text=$.getText,p.isXMLDoc=$.isXML,p.contains=$.contains}(a);var bc=/Until$/,bd=/^(?:parents|prev(?:Until|All))/,be=/^.[^:#\[\.,]*$/,bf=p.expr.match.needsContext,bg={children:!0,contents:!0,next:!0,prev:!0};p.fn.extend({find:function(a){var b,c,d,e,f,g,h=this;if(typeof a!="string")return p(a).filter(function(){for(b=0,c=h.length;b<c;b++)if(p.contains(h[b],this))return!0});g=this.pushStack("","find",a);for(b=0,c=this.length;b<c;b++){d=g.length,p.find(a,this[b],g);if(b>0)for(e=d;e<g.length;e++)for(f=0;f<d;f++)if(g[f]===g[e]){g.splice(e--,1);break}}return g},has:function(a){var b,c=p(a,this),d=c.length;return this.filter(function(){for(b=0;b<d;b++)if(p.contains(this,c[b]))return!0})},not:function(a){return this.pushStack(bj(this,a,!1),"not",a)},filter:function(a){return this.pushStack(bj(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?bf.test(a)?p(a,this.context).index(this[0])>=0:p.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c,d=0,e=this.length,f=[],g=bf.test(a)||typeof a!="string"?p(a,b||this.context):0;for(;d<e;d++){c=this[d];while(c&&c.ownerDocument&&c!==b&&c.nodeType!==11){if(g?g.index(c)>-1:p.find.matchesSelector(c,a)){f.push(c);break}c=c.parentNode}}return f=f.length>1?p.unique(f):f,this.pushStack(f,"closest",a)},index:function(a){return a?typeof a=="string"?p.inArray(this[0],p(a)):p.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.prevAll().length:-1},add:function(a,b){var c=typeof a=="string"?p(a,b):p.makeArray(a&&a.nodeType?[a]:a),d=p.merge(this.get(),c);return this.pushStack(bh(c[0])||bh(d[0])?d:p.unique(d))},addBack:function(a){return this.add(a==null?this.prevObject:this.prevObject.filter(a))}}),p.fn.andSelf=p.fn.addBack,p.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return p.dir(a,"parentNode")},parentsUntil:function(a,b,c){return p.dir(a,"parentNode",c)},next:function(a){return bi(a,"nextSibling")},prev:function(a){return bi(a,"previousSibling")},nextAll:function(a){return p.dir(a,"nextSibling")},prevAll:function(a){return p.dir(a,"previousSibling")},nextUntil:function(a,b,c){return p.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return p.dir(a,"previousSibling",c)},siblings:function(a){return p.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return p.sibling(a.firstChild)},contents:function(a){return p.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:p.merge([],a.childNodes)}},function(a,b){p.fn[a]=function(c,d){var e=p.map(this,b,c);return bc.test(a)||(d=c),d&&typeof d=="string"&&(e=p.filter(d,e)),e=this.length>1&&!bg[a]?p.unique(e):e,this.length>1&&bd.test(a)&&(e=e.reverse()),this.pushStack(e,a,k.call(arguments).join(","))}}),p.extend({filter:function(a,b,c){return c&&(a=":not("+a+")"),b.length===1?p.find.matchesSelector(b[0],a)?[b[0]]:[]:p.find.matches(a,b)},dir:function(a,c,d){var e=[],f=a[c];while(f&&f.nodeType!==9&&(d===b||f.nodeType!==1||!p(f).is(d)))f.nodeType===1&&e.push(f),f=f[c];return e},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var bl="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",bm=/ jQuery\d+="(?:null|\d+)"/g,bn=/^\s+/,bo=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bp=/<([\w:]+)/,bq=/<tbody/i,br=/<|&#?\w+;/,bs=/<(?:script|style|link)/i,bt=/<(?:script|object|embed|option|style)/i,bu=new RegExp("<(?:"+bl+")[\\s/>]","i"),bv=/^(?:checkbox|radio)$/,bw=/checked\s*(?:[^=]|=\s*.checked.)/i,bx=/\/(java|ecma)script/i,by=/^\s*<!(?:\[CDATA\[|\-\-)|[\]\-]{2}>\s*$/g,bz={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bA=bk(e),bB=bA.appendChild(e.createElement("div"));bz.optgroup=bz.option,bz.tbody=bz.tfoot=bz.colgroup=bz.caption=bz.thead,bz.th=bz.td,p.support.htmlSerialize||(bz._default=[1,"X<div>","</div>"]),p.fn.extend({text:function(a){return p.access(this,function(a){return a===b?p.text(this):this.empty().append((this[0]&&this[0].ownerDocument||e).createTextNode(a))},null,a,arguments.length)},wrapAll:function(a){if(p.isFunction(a))return this.each(function(b){p(this).wrapAll(a.call(this,b))});if(this[0]){var b=p(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return p.isFunction(a)?this.each(function(b){p(this).wrapInner(a.call(this,b))}):this.each(function(){var b=p(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=p.isFunction(a);return this.each(function(c){p(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){p.nodeName(this,"body")||p(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.insertBefore(a,this.firstChild)})},before:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(a,this),"before",this.selector)}},after:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(this,a),"after",this.selector)}},remove:function(a,b){var c,d=0;for(;(c=this[d])!=null;d++)if(!a||p.filter(a,[c]).length)!b&&c.nodeType===1&&(p.cleanData(c.getElementsByTagName("*")),p.cleanData([c])),c.parentNode&&c.parentNode.removeChild(c);return this},empty:function(){var a,b=0;for(;(a=this[b])!=null;b++){a.nodeType===1&&p.cleanData(a.getElementsByTagName("*"));while(a.firstChild)a.removeChild(a.firstChild)}return this},clone:function(a,b){return a=a==null?!1:a,b=b==null?a:b,this.map(function(){return p.clone(this,a,b)})},html:function(a){return p.access(this,function(a){var c=this[0]||{},d=0,e=this.length;if(a===b)return c.nodeType===1?c.innerHTML.replace(bm,""):b;if(typeof a=="string"&&!bs.test(a)&&(p.support.htmlSerialize||!bu.test(a))&&(p.support.leadingWhitespace||!bn.test(a))&&!bz[(bp.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(bo,"<$1></$2>");try{for(;d<e;d++)c=this[d]||{},c.nodeType===1&&(p.cleanData(c.getElementsByTagName("*")),c.innerHTML=a);c=0}catch(f){}}c&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(a){return bh(this[0])?this.length?this.pushStack(p(p.isFunction(a)?a():a),"replaceWith",a):this:p.isFunction(a)?this.each(function(b){var c=p(this),d=c.html();c.replaceWith(a.call(this,b,d))}):(typeof a!="string"&&(a=p(a).detach()),this.each(function(){var b=this.nextSibling,c=this.parentNode;p(this).remove(),b?p(b).before(a):p(c).append(a)}))},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){a=[].concat.apply([],a);var e,f,g,h,i=0,j=a[0],k=[],l=this.length;if(!p.support.checkClone&&l>1&&typeof j=="string"&&bw.test(j))return this.each(function(){p(this).domManip(a,c,d)});if(p.isFunction(j))return this.each(function(e){var f=p(this);a[0]=j.call(this,e,c?f.html():b),f.domManip(a,c,d)});if(this[0]){e=p.buildFragment(a,this,k),g=e.fragment,f=g.firstChild,g.childNodes.length===1&&(g=f);if(f){c=c&&p.nodeName(f,"tr");for(h=e.cacheable||l-1;i<l;i++)d.call(c&&p.nodeName(this[i],"table")?bC(this[i],"tbody"):this[i],i===h?g:p.clone(g,!0,!0))}g=f=null,k.length&&p.each(k,function(a,b){b.src?p.ajax?p.ajax({url:b.src,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0}):p.error("no ajax"):p.globalEval((b.text||b.textContent||b.innerHTML||"").replace(by,"")),b.parentNode&&b.parentNode.removeChild(b)})}return this}}),p.buildFragment=function(a,c,d){var f,g,h,i=a[0];return c=c||e,c=!c.nodeType&&c[0]||c,c=c.ownerDocument||c,a.length===1&&typeof i=="string"&&i.length<512&&c===e&&i.charAt(0)==="<"&&!bt.test(i)&&(p.support.checkClone||!bw.test(i))&&(p.support.html5Clone||!bu.test(i))&&(g=!0,f=p.fragments[i],h=f!==b),f||(f=c.createDocumentFragment(),p.clean(a,c,f,d),g&&(p.fragments[i]=h&&f)),{fragment:f,cacheable:g}},p.fragments={},p.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){p.fn[a]=function(c){var d,e=0,f=[],g=p(c),h=g.length,i=this.length===1&&this[0].parentNode;if((i==null||i&&i.nodeType===11&&i.childNodes.length===1)&&h===1)return g[b](this[0]),this;for(;e<h;e++)d=(e>0?this.clone(!0):this).get(),p(g[e])[b](d),f=f.concat(d);return this.pushStack(f,a,g.selector)}}),p.extend({clone:function(a,b,c){var d,e,f,g;p.support.html5Clone||p.isXMLDoc(a)||!bu.test("<"+a.nodeName+">")?g=a.cloneNode(!0):(bB.innerHTML=a.outerHTML,bB.removeChild(g=bB.firstChild));if((!p.support.noCloneEvent||!p.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!p.isXMLDoc(a)){bE(a,g),d=bF(a),e=bF(g);for(f=0;d[f];++f)e[f]&&bE(d[f],e[f])}if(b){bD(a,g);if(c){d=bF(a),e=bF(g);for(f=0;d[f];++f)bD(d[f],e[f])}}return d=e=null,g},clean:function(a,b,c,d){var f,g,h,i,j,k,l,m,n,o,q,r,s=b===e&&bA,t=[];if(!b||typeof b.createDocumentFragment=="undefined")b=e;for(f=0;(h=a[f])!=null;f++){typeof h=="number"&&(h+="");if(!h)continue;if(typeof h=="string")if(!br.test(h))h=b.createTextNode(h);else{s=s||bk(b),l=b.createElement("div"),s.appendChild(l),h=h.replace(bo,"<$1></$2>"),i=(bp.exec(h)||["",""])[1].toLowerCase(),j=bz[i]||bz._default,k=j[0],l.innerHTML=j[1]+h+j[2];while(k--)l=l.lastChild;if(!p.support.tbody){m=bq.test(h),n=i==="table"&&!m?l.firstChild&&l.firstChild.childNodes:j[1]==="<table>"&&!m?l.childNodes:[];for(g=n.length-1;g>=0;--g)p.nodeName(n[g],"tbody")&&!n[g].childNodes.length&&n[g].parentNode.removeChild(n[g])}!p.support.leadingWhitespace&&bn.test(h)&&l.insertBefore(b.createTextNode(bn.exec(h)[0]),l.firstChild),h=l.childNodes,l.parentNode.removeChild(l)}h.nodeType?t.push(h):p.merge(t,h)}l&&(h=l=s=null);if(!p.support.appendChecked)for(f=0;(h=t[f])!=null;f++)p.nodeName(h,"input")?bG(h):typeof h.getElementsByTagName!="undefined"&&p.grep(h.getElementsByTagName("input"),bG);if(c){q=function(a){if(!a.type||bx.test(a.type))return d?d.push(a.parentNode?a.parentNode.removeChild(a):a):c.appendChild(a)};for(f=0;(h=t[f])!=null;f++)if(!p.nodeName(h,"script")||!q(h))c.appendChild(h),typeof h.getElementsByTagName!="undefined"&&(r=p.grep(p.merge([],h.getElementsByTagName("script")),q),t.splice.apply(t,[f+1,0].concat(r)),f+=r.length)}return t},cleanData:function(a,b){var c,d,e,f,g=0,h=p.expando,i=p.cache,j=p.support.deleteExpando,k=p.event.special;for(;(e=a[g])!=null;g++)if(b||p.acceptData(e)){d=e[h],c=d&&i[d];if(c){if(c.events)for(f in c.events)k[f]?p.event.remove(e,f):p.removeEvent(e,f,c.handle);i[d]&&(delete i[d],j?delete e[h]:e.removeAttribute?e.removeAttribute(h):e[h]=null,p.deletedIds.push(d))}}}}),function(){var a,b;p.uaMatch=function(a){a=a.toLowerCase();var b=/(chrome)[ \/]([\w.]+)/.exec(a)||/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||a.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},a=p.uaMatch(g.userAgent),b={},a.browser&&(b[a.browser]=!0,b.version=a.version),b.chrome?b.webkit=!0:b.webkit&&(b.safari=!0),p.browser=b,p.sub=function(){function a(b,c){return new a.fn.init(b,c)}p.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function c(c,d){return d&&d instanceof p&&!(d instanceof a)&&(d=a(d)),p.fn.init.call(this,c,d,b)},a.fn.init.prototype=a.fn;var b=a(e);return a}}();var bH,bI,bJ,bK=/alpha\([^)]*\)/i,bL=/opacity=([^)]*)/,bM=/^(top|right|bottom|left)$/,bN=/^(none|table(?!-c[ea]).+)/,bO=/^margin/,bP=new RegExp("^("+q+")(.*)$","i"),bQ=new RegExp("^("+q+")(?!px)[a-z%]+$","i"),bR=new RegExp("^([-+])=("+q+")","i"),bS={},bT={position:"absolute",visibility:"hidden",display:"block"},bU={letterSpacing:0,fontWeight:400},bV=["Top","Right","Bottom","Left"],bW=["Webkit","O","Moz","ms"],bX=p.fn.toggle;p.fn.extend({css:function(a,c){return p.access(this,function(a,c,d){return d!==b?p.style(a,c,d):p.css(a,c)},a,c,arguments.length>1)},show:function(){return b$(this,!0)},hide:function(){return b$(this)},toggle:function(a,b){var c=typeof a=="boolean";return p.isFunction(a)&&p.isFunction(b)?bX.apply(this,arguments):this.each(function(){(c?a:bZ(this))?p(this).show():p(this).hide()})}}),p.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bH(a,"opacity");return c===""?"1":c}}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":p.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!a||a.nodeType===3||a.nodeType===8||!a.style)return;var f,g,h,i=p.camelCase(c),j=a.style;c=p.cssProps[i]||(p.cssProps[i]=bY(j,i)),h=p.cssHooks[c]||p.cssHooks[i];if(d===b)return h&&"get"in h&&(f=h.get(a,!1,e))!==b?f:j[c];g=typeof d,g==="string"&&(f=bR.exec(d))&&(d=(f[1]+1)*f[2]+parseFloat(p.css(a,c)),g="number");if(d==null||g==="number"&&isNaN(d))return;g==="number"&&!p.cssNumber[i]&&(d+="px");if(!h||!("set"in h)||(d=h.set(a,d,e))!==b)try{j[c]=d}catch(k){}},css:function(a,c,d,e){var f,g,h,i=p.camelCase(c);return c=p.cssProps[i]||(p.cssProps[i]=bY(a.style,i)),h=p.cssHooks[c]||p.cssHooks[i],h&&"get"in h&&(f=h.get(a,!0,e)),f===b&&(f=bH(a,c)),f==="normal"&&c in bU&&(f=bU[c]),d||e!==b?(g=parseFloat(f),d||p.isNumeric(g)?g||0:f):f},swap:function(a,b,c){var d,e,f={};for(e in b)f[e]=a.style[e],a.style[e]=b[e];d=c.call(a);for(e in b)a.style[e]=f[e];return d}}),a.getComputedStyle?bH=function(b,c){var d,e,f,g,h=a.getComputedStyle(b,null),i=b.style;return h&&(d=h[c],d===""&&!p.contains(b.ownerDocument,b)&&(d=p.style(b,c)),bQ.test(d)&&bO.test(c)&&(e=i.width,f=i.minWidth,g=i.maxWidth,i.minWidth=i.maxWidth=i.width=d,d=h.width,i.width=e,i.minWidth=f,i.maxWidth=g)),d}:e.documentElement.currentStyle&&(bH=function(a,b){var c,d,e=a.currentStyle&&a.currentStyle[b],f=a.style;return e==null&&f&&f[b]&&(e=f[b]),bQ.test(e)&&!bM.test(b)&&(c=f.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":e,e=f.pixelLeft+"px",f.left=c,d&&(a.runtimeStyle.left=d)),e===""?"auto":e}),p.each(["height","width"],function(a,b){p.cssHooks[b]={get:function(a,c,d){if(c)return a.offsetWidth===0&&bN.test(bH(a,"display"))?p.swap(a,bT,function(){return cb(a,b,d)}):cb(a,b,d)},set:function(a,c,d){return b_(a,c,d?ca(a,b,d,p.support.boxSizing&&p.css(a,"boxSizing")==="border-box"):0)}}}),p.support.opacity||(p.cssHooks.opacity={get:function(a,b){return bL.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=p.isNumeric(b)?"alpha(opacity="+b*100+")":"",f=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&p.trim(f.replace(bK,""))===""&&c.removeAttribute){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bK.test(f)?f.replace(bK,e):f+" "+e}}),p(function(){p.support.reliableMarginRight||(p.cssHooks.marginRight={get:function(a,b){return p.swap(a,{display:"inline-block"},function(){if(b)return bH(a,"marginRight")})}}),!p.support.pixelPosition&&p.fn.position&&p.each(["top","left"],function(a,b){p.cssHooks[b]={get:function(a,c){if(c){var d=bH(a,b);return bQ.test(d)?p(a).position()[b]+"px":d}}}})}),p.expr&&p.expr.filters&&(p.expr.filters.hidden=function(a){return a.offsetWidth===0&&a.offsetHeight===0||!p.support.reliableHiddenOffsets&&(a.style&&a.style.display||bH(a,"display"))==="none"},p.expr.filters.visible=function(a){return!p.expr.filters.hidden(a)}),p.each({margin:"",padding:"",border:"Width"},function(a,b){p.cssHooks[a+b]={expand:function(c){var d,e=typeof c=="string"?c.split(" "):[c],f={};for(d=0;d<4;d++)f[a+bV[d]+b]=e[d]||e[d-2]||e[0];return f}},bO.test(a)||(p.cssHooks[a+b].set=b_)});var cd=/%20/g,ce=/\[\]$/,cf=/\r?\n/g,cg=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,ch=/^(?:select|textarea)/i;p.fn.extend({serialize:function(){return p.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?p.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ch.test(this.nodeName)||cg.test(this.type))}).map(function(a,b){var c=p(this).val();return c==null?null:p.isArray(c)?p.map(c,function(a,c){return{name:b.name,value:a.replace(cf,"\r\n")}}):{name:b.name,value:c.replace(cf,"\r\n")}}).get()}}),p.param=function(a,c){var d,e=[],f=function(a,b){b=p.isFunction(b)?b():b==null?"":b,e[e.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=p.ajaxSettings&&p.ajaxSettings.traditional);if(p.isArray(a)||a.jquery&&!p.isPlainObject(a))p.each(a,function(){f(this.name,this.value)});else for(d in a)ci(d,a[d],c,f);return e.join("&").replace(cd,"+")};var cj,ck,cl=/#.*$/,cm=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,cn=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,co=/^(?:GET|HEAD)$/,cp=/^\/\//,cq=/\?/,cr=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,cs=/([?&])_=[^&]*/,ct=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,cu=p.fn.load,cv={},cw={},cx=["*/"]+["*"];try{cj=f.href}catch(cy){cj=e.createElement("a"),cj.href="",cj=cj.href}ck=ct.exec(cj.toLowerCase())||[],p.fn.load=function(a,c,d){if(typeof a!="string"&&cu)return cu.apply(this,arguments);if(!this.length)return this;var e,f,g,h=this,i=a.indexOf(" ");return i>=0&&(e=a.slice(i,a.length),a=a.slice(0,i)),p.isFunction(c)?(d=c,c=b):c&&typeof c=="object"&&(f="POST"),p.ajax({url:a,type:f,dataType:"html",data:c,complete:function(a,b){d&&h.each(d,g||[a.responseText,b,a])}}).done(function(a){g=arguments,h.html(e?p("<div>").append(a.replace(cr,"")).find(e):a)}),this},p.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){p.fn[b]=function(a){return this.on(b,a)}}),p.each(["get","post"],function(a,c){p[c]=function(a,d,e,f){return p.isFunction(d)&&(f=f||e,e=d,d=b),p.ajax({type:c,url:a,data:d,success:e,dataType:f})}}),p.extend({getScript:function(a,c){return p.get(a,b,c,"script")},getJSON:function(a,b,c){return p.get(a,b,c,"json")},ajaxSetup:function(a,b){return b?cB(a,p.ajaxSettings):(b=a,a=p.ajaxSettings),cB(a,b),a},ajaxSettings:{url:cj,isLocal:cn.test(ck[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":cx},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":p.parseJSON,"text xml":p.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:cz(cv),ajaxTransport:cz(cw),ajax:function(a,c){function y(a,c,f,i){var k,s,t,u,w,y=c;if(v===2)return;v=2,h&&clearTimeout(h),g=b,e=i||"",x.readyState=a>0?4:0,f&&(u=cC(l,x,f));if(a>=200&&a<300||a===304)l.ifModified&&(w=x.getResponseHeader("Last-Modified"),w&&(p.lastModified[d]=w),w=x.getResponseHeader("Etag"),w&&(p.etag[d]=w)),a===304?(y="notmodified",k=!0):(k=cD(l,u),y=k.state,s=k.data,t=k.error,k=!t);else{t=y;if(!y||a)y="error",a<0&&(a=0)}x.status=a,x.statusText=""+(c||y),k?o.resolveWith(m,[s,y,x]):o.rejectWith(m,[x,y,t]),x.statusCode(r),r=b,j&&n.trigger("ajax"+(k?"Success":"Error"),[x,l,k?s:t]),q.fireWith(m,[x,y]),j&&(n.trigger("ajaxComplete",[x,l]),--p.active||p.event.trigger("ajaxStop"))}typeof a=="object"&&(c=a,a=b),c=c||{};var d,e,f,g,h,i,j,k,l=p.ajaxSetup({},c),m=l.context||l,n=m!==l&&(m.nodeType||m instanceof p)?p(m):p.event,o=p.Deferred(),q=p.Callbacks("once memory"),r=l.statusCode||{},t={},u={},v=0,w="canceled",x={readyState:0,setRequestHeader:function(a,b){if(!v){var c=a.toLowerCase();a=u[c]=u[c]||a,t[a]=b}return this},getAllResponseHeaders:function(){return v===2?e:null},getResponseHeader:function(a){var c;if(v===2){if(!f){f={};while(c=cm.exec(e))f[c[1].toLowerCase()]=c[2]}c=f[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){return v||(l.mimeType=a),this},abort:function(a){return a=a||w,g&&g.abort(a),y(0,a),this}};o.promise(x),x.success=x.done,x.error=x.fail,x.complete=q.add,x.statusCode=function(a){if(a){var b;if(v<2)for(b in a)r[b]=[r[b],a[b]];else b=a[x.status],x.always(b)}return this},l.url=((a||l.url)+"").replace(cl,"").replace(cp,ck[1]+"//"),l.dataTypes=p.trim(l.dataType||"*").toLowerCase().split(s),l.crossDomain==null&&(i=ct.exec(l.url.toLowerCase()),l.crossDomain=!(!i||i[1]==ck[1]&&i[2]==ck[2]&&(i[3]||(i[1]==="http:"?80:443))==(ck[3]||(ck[1]==="http:"?80:443)))),l.data&&l.processData&&typeof l.data!="string"&&(l.data=p.param(l.data,l.traditional)),cA(cv,l,c,x);if(v===2)return x;j=l.global,l.type=l.type.toUpperCase(),l.hasContent=!co.test(l.type),j&&p.active++===0&&p.event.trigger("ajaxStart");if(!l.hasContent){l.data&&(l.url+=(cq.test(l.url)?"&":"?")+l.data,delete l.data),d=l.url;if(l.cache===!1){var z=p.now(),A=l.url.replace(cs,"$1_="+z);l.url=A+(A===l.url?(cq.test(l.url)?"&":"?")+"_="+z:"")}}(l.data&&l.hasContent&&l.contentType!==!1||c.contentType)&&x.setRequestHeader("Content-Type",l.contentType),l.ifModified&&(d=d||l.url,p.lastModified[d]&&x.setRequestHeader("If-Modified-Since",p.lastModified[d]),p.etag[d]&&x.setRequestHeader("If-None-Match",p.etag[d])),x.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+(l.dataTypes[0]!=="*"?", "+cx+"; q=0.01":""):l.accepts["*"]);for(k in l.headers)x.setRequestHeader(k,l.headers[k]);if(!l.beforeSend||l.beforeSend.call(m,x,l)!==!1&&v!==2){w="abort";for(k in{success:1,error:1,complete:1})x[k](l[k]);g=cA(cw,l,c,x);if(!g)y(-1,"No Transport");else{x.readyState=1,j&&n.trigger("ajaxSend",[x,l]),l.async&&l.timeout>0&&(h=setTimeout(function(){x.abort("timeout")},l.timeout));try{v=1,g.send(t,y)}catch(B){if(v<2)y(-1,B);else throw B}}return x}return x.abort()},active:0,lastModified:{},etag:{}});var cE=[],cF=/\?/,cG=/(=)\?(?=&|$)|\?\?/,cH=p.now();p.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=cE.pop()||p.expando+"_"+cH++;return this[a]=!0,a}}),p.ajaxPrefilter("json jsonp",function(c,d,e){var f,g,h,i=c.data,j=c.url,k=c.jsonp!==!1,l=k&&cG.test(j),m=k&&!l&&typeof i=="string"&&!(c.contentType||"").indexOf("application/x-www-form-urlencoded")&&cG.test(i);if(c.dataTypes[0]==="jsonp"||l||m)return f=c.jsonpCallback=p.isFunction(c.jsonpCallback)?c.jsonpCallback():c.jsonpCallback,g=a[f],l?c.url=j.replace(cG,"$1"+f):m?c.data=i.replace(cG,"$1"+f):k&&(c.url+=(cF.test(j)?"&":"?")+c.jsonp+"="+f),c.converters["script json"]=function(){return h||p.error(f+" was not called"),h[0]},c.dataTypes[0]="json",a[f]=function(){h=arguments},e.always(function(){a[f]=g,c[f]&&(c.jsonpCallback=d.jsonpCallback,cE.push(f)),h&&p.isFunction(g)&&g(h[0]),h=g=b}),"script"}),p.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){return p.globalEval(a),a}}}),p.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),p.ajaxTransport("script",function(a){if(a.crossDomain){var c,d=e.head||e.getElementsByTagName("head")[0]||e.documentElement;return{send:function(f,g){c=e.createElement("script"),c.async="async",a.scriptCharset&&(c.charset=a.scriptCharset),c.src=a.url,c.onload=c.onreadystatechange=function(a,e){if(e||!c.readyState||/loaded|complete/.test(c.readyState))c.onload=c.onreadystatechange=null,d&&c.parentNode&&d.removeChild(c),c=b,e||g(200,"success")},d.insertBefore(c,d.firstChild)},abort:function(){c&&c.onload(0,1)}}}});var cI,cJ=a.ActiveXObject?function(){for(var a in cI)cI[a](0,1)}:!1,cK=0;p.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&cL()||cM()}:cL,function(a){p.extend(p.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(p.ajaxSettings.xhr()),p.support.ajax&&p.ajaxTransport(function(c){if(!c.crossDomain||p.support.cors){var d;return{send:function(e,f){var g,h,i=c.xhr();c.username?i.open(c.type,c.url,c.async,c.username,c.password):i.open(c.type,c.url,c.async);if(c.xhrFields)for(h in c.xhrFields)i[h]=c.xhrFields[h];c.mimeType&&i.overrideMimeType&&i.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(h in e)i.setRequestHeader(h,e[h])}catch(j){}i.send(c.hasContent&&c.data||null),d=function(a,e){var h,j,k,l,m;try{if(d&&(e||i.readyState===4)){d=b,g&&(i.onreadystatechange=p.noop,cJ&&delete cI[g]);if(e)i.readyState!==4&&i.abort();else{h=i.status,k=i.getAllResponseHeaders(),l={},m=i.responseXML,m&&m.documentElement&&(l.xml=m);try{l.text=i.responseText}catch(a){}try{j=i.statusText}catch(n){j=""}!h&&c.isLocal&&!c.crossDomain?h=l.text?200:404:h===1223&&(h=204)}}}catch(o){e||f(-1,o)}l&&f(h,j,l,k)},c.async?i.readyState===4?setTimeout(d,0):(g=++cK,cJ&&(cI||(cI={},p(a).unload(cJ)),cI[g]=d),i.onreadystatechange=d):d()},abort:function(){d&&d(0,1)}}}});var cN,cO,cP=/^(?:toggle|show|hide)$/,cQ=new RegExp("^(?:([-+])=|)("+q+")([a-z%]*)$","i"),cR=/queueHooks$/,cS=[cY],cT={"*":[function(a,b){var c,d,e,f=this.createTween(a,b),g=cQ.exec(b),h=f.cur(),i=+h||0,j=1;if(g){c=+g[2],d=g[3]||(p.cssNumber[a]?"":"px");if(d!=="px"&&i){i=p.css(f.elem,a,!0)||c||1;do e=j=j||".5",i=i/j,p.style(f.elem,a,i+d),j=f.cur()/h;while(j!==1&&j!==e)}f.unit=d,f.start=i,f.end=g[1]?i+(g[1]+1)*c:c}return f}]};p.Animation=p.extend(cW,{tweener:function(a,b){p.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");var c,d=0,e=a.length;for(;d<e;d++)c=a[d],cT[c]=cT[c]||[],cT[c].unshift(b)},prefilter:function(a,b){b?cS.unshift(a):cS.push(a)}}),p.Tween=cZ,cZ.prototype={constructor:cZ,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||(p.cssNumber[c]?"":"px")},cur:function(){var a=cZ.propHooks[this.prop];return a&&a.get?a.get(this):cZ.propHooks._default.get(this)},run:function(a){var b,c=cZ.propHooks[this.prop];return this.options.duration?this.pos=b=p.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=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):cZ.propHooks._default.set(this),this}},cZ.prototype.init.prototype=cZ.prototype,cZ.propHooks={_default:{get:function(a){var b;return a.elem[a.prop]==null||!!a.elem.style&&a.elem.style[a.prop]!=null?(b=p.css(a.elem,a.prop,!1,""),!b||b==="auto"?0:b):a.elem[a.prop]},set:function(a){p.fx.step[a.prop]?p.fx.step[a.prop](a):a.elem.style&&(a.elem.style[p.cssProps[a.prop]]!=null||p.cssHooks[a.prop])?p.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},cZ.propHooks.scrollTop=cZ.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},p.each(["toggle","show","hide"],function(a,b){var c=p.fn[b];p.fn[b]=function(d,e,f){return d==null||typeof d=="boolean"||!a&&p.isFunction(d)&&p.isFunction(e)?c.apply(this,arguments):this.animate(c$(b,!0),d,e,f)}}),p.fn.extend({fadeTo:function(a,b,c,d){return this.filter(bZ).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=p.isEmptyObject(a),f=p.speed(b,c,d),g=function(){var b=cW(this,p.extend({},a),f);e&&b.stop(!0)};return e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,c,d){var e=function(a){var b=a.stop;delete a.stop,b(d)};return typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,c=a!=null&&a+"queueHooks",f=p.timers,g=p._data(this);if(c)g[c]&&g[c].stop&&e(g[c]);else for(c in g)g[c]&&g[c].stop&&cR.test(c)&&e(g[c]);for(c=f.length;c--;)f[c].elem===this&&(a==null||f[c].queue===a)&&(f[c].anim.stop(d),b=!1,f.splice(c,1));(b||!d)&&p.dequeue(this,a)})}}),p.each({slideDown:c$("show"),slideUp:c$("hide"),slideToggle:c$("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){p.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),p.speed=function(a,b,c){var d=a&&typeof a=="object"?p.extend({},a):{complete:c||!c&&b||p.isFunction(a)&&a,duration:a,easing:c&&b||b&&!p.isFunction(b)&&b};d.duration=p.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in p.fx.speeds?p.fx.speeds[d.duration]:p.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";return d.old=d.complete,d.complete=function(){p.isFunction(d.old)&&d.old.call(this),d.queue&&p.dequeue(this,d.queue)},d},p.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},p.timers=[],p.fx=cZ.prototype.init,p.fx.tick=function(){var a,b=p.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||p.fx.stop()},p.fx.timer=function(a){a()&&p.timers.push(a)&&!cO&&(cO=setInterval(p.fx.tick,p.fx.interval))},p.fx.interval=13,p.fx.stop=function(){clearInterval(cO),cO=null},p.fx.speeds={slow:600,fast:200,_default:400},p.fx.step={},p.expr&&p.expr.filters&&(p.expr.filters.animated=function(a){return p.grep(p.timers,function(b){return a===b.elem}).length});var c_=/^(?:body|html)$/i;p.fn.offset=function(a){if(arguments.length)return a===b?this:this.each(function(b){p.offset.setOffset(this,a,b)});var c,d,e,f,g,h,i,j,k,l,m=this[0],n=m&&m.ownerDocument;if(!n)return;return(e=n.body)===m?p.offset.bodyOffset(m):(d=n.documentElement,p.contains(d,m)?(c=m.getBoundingClientRect(),f=da(n),g=d.clientTop||e.clientTop||0,h=d.clientLeft||e.clientLeft||0,i=f.pageYOffset||d.scrollTop,j=f.pageXOffset||d.scrollLeft,k=c.top+i-g,l=c.left+j-h,{top:k,left:l}):{top:0,left:0})},p.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;return p.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(p.css(a,"marginTop"))||0,c+=parseFloat(p.css(a,"marginLeft"))||0),{top:b,left:c}},setOffset:function(a,b,c){var d=p.css(a,"position");d==="static"&&(a.style.position="relative");var e=p(a),f=e.offset(),g=p.css(a,"top"),h=p.css(a,"left"),i=(d==="absolute"||d==="fixed")&&p.inArray("auto",[g,h])>-1,j={},k={},l,m;i?(k=e.position(),l=k.top,m=k.left):(l=parseFloat(g)||0,m=parseFloat(h)||0),p.isFunction(b)&&(b=b.call(a,c,f)),b.top!=null&&(j.top=b.top-f.top+l),b.left!=null&&(j.left=b.left-f.left+m),"using"in b?b.using.call(a,j):e.css(j)}},p.fn.extend({position:function(){if(!this[0])return;var a=this[0],b=this.offsetParent(),c=this.offset(),d=c_.test(b[0].nodeName)?{top:0,left:0}:b.offset();return c.top-=parseFloat(p.css(a,"marginTop"))||0,c.left-=parseFloat(p.css(a,"marginLeft"))||0,d.top+=parseFloat(p.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(p.css(b[0],"borderLeftWidth"))||0,{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||e.body;while(a&&!c_.test(a.nodeName)&&p.css(a,"position")==="static")a=a.offsetParent;return a||e.body})}}),p.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,c){var d=/Y/.test(c);p.fn[a]=function(e){return p.access(this,function(a,e,f){var g=da(a);if(f===b)return g?c in g?g[c]:g.document.documentElement[e]:a[e];g?g.scrollTo(d?p(g).scrollLeft():f,d?f:p(g).scrollTop()):a[e]=f},a,e,arguments.length,null)}}),p.each({Height:"height",Width:"width"},function(a,c){p.each({padding:"inner"+a,content:c,"":"outer"+a},function(d,e){p.fn[e]=function(e,f){var g=arguments.length&&(d||typeof e!="boolean"),h=d||(e===!0||f===!0?"margin":"border");return p.access(this,function(c,d,e){var f;return p.isWindow(c)?c.document.documentElement["client"+a]:c.nodeType===9?(f=c.documentElement,Math.max(c.body["scroll"+a],f["scroll"+a],c.body["offset"+a],f["offset"+a],f["client"+a])):e===b?p.css(c,d,e,h):p.style(c,d,e,h)},c,g?e:b,g,null)}})}),a.jQuery=a.$=p,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return p})})(window);
@@ -0,0 +1,184 @@+$(function(){+ var lineno = 1;+ $("span.lineBreak").each(function(){+ $(this).attr("id", "L" + lineno);+ lineno += 1;+ });++ $(".lineNumber").click(function(){+ $(".lineNumber").removeClass("lineNumberActive");+ $(this).addClass("lineNumberActive");+ });++ $(".relatize").each(function(){+ $(this).attr("title", $(this).text());+ $(this).relatizeDate();+ });++ if ($("form.dependencies").length)+ dependencyCanvas();+ + $(".issue-tags #assign").change(function(){+ if ($(this).val() == "")+ return;++ addTag("assign:" + $(this).val());+ });+ + $(".issue-tags #type").change(function(){+ if ($(this).val() == "")+ return;++ addTag("type:" + $(this).val());+ });++ $(".issue-tags .kill").live("click", function(){+ $(this).parent().remove();+ });++ $(".issue-comment, .issue-body").submit(function(){+ var tags = $(".issue-tags li").map(function(i, v){+ return $(v).find("a:nth(1)").text();+ }).toArray();++ console.log(tags);++ $("input#tags").val(tags.join(", "));+ });++ $("#add-tag").submit(function(){+ console.log(this, $(this));+ addTag($("#add-tag #tag-name").val());+ $("#add-tag #tag-name").val("");+ return false;+ });++ $("form.issue-comment .revise-fields").hide();++ $("form.issue-comment h3").click(function(){+ $(this).html("← close");+ $("form.issue-comment .revise-fields").slideToggle("fast", function(){+ if ($(this).css("display") == "none")+ $("form.issue-comment h3").html("revise issue →");+ });+ }).hover(function(){+ $(this).css("background", "#222");+ }, function(){+ $(this).css("background", "#151515");+ }).css({+ "background": "#151515",+ "padding": "0 .9em",+ "font-size": "1.2em",+ "color": "#fff",+ "margin-bottom": "1em",+ "-webkit-border-radius": "0.5em",+ "cursor": "pointer",+ "line-height": "2.5em"+ }).html("revise issue →");+});++function addTag(tag) {+ var url, link, kill, item;++ url =+ $(".head a:nth(2)").attr("href") + "/issues/tag/" + tag;++ link =+ $(document.createElement("a"))+ .attr("href", url)+ .text(tag);++ kill =+ $(document.createElement("a"))+ .attr("class", "kill")+ .attr("href", "javascript:void(0)");++ item = $(document.createElement("li"));+ item.append(kill);+ item.append(link);++ $(".issue-tags .tags").append(item);+}++function dependencyCanvas() {+ $(document.createElement("canvas"))+ .attr("id", "depends_canvas")+ .prependTo("form.subtle");++ $("#depends_canvas").css({+ float: "left",+ marginLeft: -300,+ marginTop: $("form.subtle h1").height() + parseInt($("form.subtle h1").css("margin-bottom"), 10),+ }).attr({+ width: 300,+ height: $(".fork-log").height()+ }); //.attr({ width: $(document).width(), height: $(document).height() });++ var canvas = document.getElementById("depends_canvas").getContext("2d");+ var dependency_displayed = [];++ $(".fork-log .change").each(function(){+ var change = $(this);++ $(this).find(":checkbox").click(function(){+ setChecked($(this), $(this).attr("checked"));+ });++ canvas.fillStyle = "#000";+ canvas.strokeStyle = "#ccc";+ canvas.lineWidth = 2;++ var depends = rowDependencies($(this));+ $(depends).each(function(i, dep){+ var depend = $("#change-"+ dep);++ var line_from_x = 300;+ var line_from_y = change.offset().top - $(".fork-log").offset().top + (change.height() / 2) - 1;++ var line_to_x = 299;+ var line_to_y = depend.offset().top - $(".fork-log").offset().top + (change.height() / 2) - 1;++ var height = line_to_y - line_from_y;+ var width = line_to_x - line_from_x;++ var median = line_from_y + (line_to_y - line_from_y);+ var height = line_to_y - line_from_y;+ var curve = line_from_x - 5 - (20 * (height / 50));++ canvas.beginPath();+ canvas.moveTo(line_from_x, line_from_y);+ canvas.quadraticCurveTo(curve, median, line_to_x, line_to_y);+ canvas.stroke();++ canvas.lineTo(line_to_x - 4, line_to_y - 4);+ canvas.moveTo(line_to_x, line_to_y);+ canvas.lineTo(line_to_x - 4, line_to_y + 4);+ canvas.stroke();+ });+ });+}++function setChecked(ele, checked) {+ ele.attr("checked", checked);+ var depends = rowDependencies(ele.closest(".change"));+ $(depends).each(function(i, dep){+ setChecked($("#change-"+ dep +" :checkbox"), checked);+ });+}++function rowDependencies(ele) {+ return ele.attr("class").split(" ").slice(1).map(function(c){+ return c.replace(/depends-on-/, "");+ });+}++function load_editor(mime) {+ var ta = document.getElementById("editor");+ window.cm = CodeMirror.fromTextArea(ta, {+ mode: mime,+ theme: "elegant",+ lineNumbers: true+ });+ var width = document.getElementsByClassName("editfile")[0].clientWidth * 0.9;+ window.cm.setSize(width, "100%");+}
@@ -0,0 +1,94 @@+// All credit goes to Rick Olson.+(function($) {+ $.fn.relatizeDate = function() {+ return $(this).each(function() {+ $(this).text( $.relatizeDate(this) )+ })+ }++ $.relatizeDate = function(element) {+ return $.relatizeDate.timeAgoInWords( new Date($(element).text()) )+ }++ // shortcut+ $r = $.relatizeDate++ $.extend($.relatizeDate, {+ shortDays: [ 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat' ],+ days: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],+ shortMonths: [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ],+ months: [ 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December' ],++ /**+ * Given a formatted string, replace the necessary items and return.+ * Example: Time.now().strftime("%B %d, %Y") => February 11, 2008+ * @param {String} format The formatted string used to format the results+ */+ strftime: function(date, format) {+ var day = date.getDay(), month = date.getMonth();+ var hours = date.getHours(), minutes = date.getMinutes();++ var pad = function(num) { + var string = num.toString(10);+ return new Array((2 - string.length) + 1).join('0') + string+ };++ return format.replace(/\%([aAbBcdHImMpSwyY])/g, function(part) {+ switch(part[1]) {+ case 'a': return $r.shortDays[day]; break;+ case 'A': return $r.days[day]; break;+ case 'b': return $r.shortMonths[month]; break;+ case 'B': return $r.months[month]; break;+ case 'c': return date.toString(); break;+ case 'd': return pad(date.getDate()); break;+ case 'H': return pad(hours); break;+ case 'I': return pad((hours + 12) % 12); break;+ case 'm': return pad(month + 1); break;+ case 'M': return pad(minutes); break;+ case 'p': return hours > 12 ? 'PM' : 'AM'; break;+ case 'S': return pad(date.getSeconds()); break;+ case 'w': return day; break;+ case 'y': return pad(date.getFullYear() % 100); break;+ case 'Y': return date.getFullYear().toString(); break;+ }+ })+ },+ + timeAgoInWords: function(targetDate, includeTime) {+ return $r.distanceOfTimeInWords(targetDate, new Date(), includeTime);+ },+ + /**+ * Return the distance of time in words between two Date's+ * Example: '5 days ago', 'about an hour ago'+ * @param {Date} fromTime The start date to use in the calculation+ * @param {Date} toTime The end date to use in the calculation+ * @param {Boolean} Include the time in the output+ */+ distanceOfTimeInWords: function(fromTime, toTime, includeTime) {+ var delta = parseInt((toTime.getTime() - fromTime.getTime()) / 1000);+ if (delta < 60) {+ return 'less than a minute ago';+ } else if (delta < 120) {+ return 'about a minute ago';+ } else if (delta < (45*60)) {+ return (parseInt(delta / 60)).toString() + ' minutes ago';+ } else if (delta < (120*60)) {+ return 'about an hour ago';+ } else if (delta < (24*60*60)) {+ return 'about ' + (parseInt(delta / 3600)).toString() + ' hours ago';+ } else if (delta < (48*60*60)) {+ return '1 day ago';+ } else {+ var days = (parseInt(delta / 86400)).toString();+ if (days > 5) {+ var fmt = '%B %d, %Y'+ if (includeTime) fmt += ' %I:%M %p'+ return $r.strftime(fromTime, fmt);+ } else {+ return days + " days ago"+ }+ }+ }+ })+})(jQuery);
@@ -0,0 +1,2 @@+#User-agent: *+#Disallow: /
@@ -0,0 +1,1 @@+success
@@ -0,0 +1,51 @@+{-# LANGUAGE ScopedTypeVariables,CPP #-}+module DarcsDen.Darcs where++import Control.Exception as E+import Control.Monad+import Control.Monad.Trans+#ifdef DARCS28+import Darcs.Commands (DarcsCommand(commandCommand))+import qualified Darcs.Commands.Get as G+import Darcs.Flags (DarcsFlag(..))+import Darcs.Utils (withCurrentDirectory)+#else+import Darcs.UI.Commands (DarcsCommand(commandCommand))+import qualified Darcs.UI.Commands.Get as G+import Darcs.UI.Flags (DarcsFlag(..))+import Darcs.Util.File (withCurrentDirectory)+import Darcs.Util.Path (ioAbsolute)+#endif+import System.Directory+import qualified Darcs.Repository as R+import DarcsDen.Settings+++sanityDarcs :: DarcsCommand -> [DarcsFlag] -> [String] -> IO ()+sanityDarcs c fs as =+#ifdef DARCS28+ withCurrentDirectory "." ((commandCommand c) (Quiet:fs) as)+#else+ do+ cwd <- ioAbsolute "."+ withCurrentDirectory "." ((commandCommand c) (cwd, cwd) (Quiet:fs) as)+#endif+++get :: MonadIO m => String -> m ()+get from = liftIO $ sanityDarcs G.get [] [from]+++getTo :: MonadIO m => String -> String -> m ()+getTo from to = liftIO $ sanityDarcs G.get [] [from, to]+++init :: MonadIO m => String -> m ()+init to = liftIO $ do+ createDirectoryIfMissing True to+#ifdef DARCS28+ withCurrentDirectory to (R.createRepository []) `E.catch` \(_ :: IOException) ->+#else+ withCurrentDirectory to (R.createRepository False False True) `E.catch` \(_ :: IOException) ->+#endif+ when deletefiles $ removeDirectoryRecursive to
@@ -0,0 +1,36 @@+module DarcsDen.Debug+(module DarcsDen.Debug, module Debug.Trace)+where++import Debug.Trace++-- | Trace an expression using a custom show function.+tracewith :: (a -> String) -> a -> a+tracewith f e = trace (f e) e++-- | trace (print on stdout at runtime) a showable expression+strace :: Show a => a -> a+strace a = trace (show a) a++-- | Trace a showable expression, prepending a label.+ltrace :: Show a => String -> a -> a+ltrace l = tracewith (((l++": ")++) . show)++-- | monadic trace - like strace, but works as a standalone line in a monad+mtrace :: (Monad m, Show a) => a -> m a+mtrace a = strace a `seq` return a++++debugging :: Bool+debugging = False++debug :: (Show a, Show b) => b -> a -> a+debug s v+ | debugging = trace (show s ++ ": " ++ show v) v+ | otherwise = v++dump :: (Monad m, Show a) => a -> m ()+dump x+ | debugging = trace (show x) (return ())+ | otherwise = return ()
@@ -0,0 +1,77 @@+{-# LANGUAGE OverloadedStrings #-}+module DarcsDen.Github.Handler where++import Prelude hiding (concat)+import Control.Monad.Trans (liftIO)+import Data.ByteString.Char8 (append, pack)+import Data.ByteString.Lazy.Char8 (unpack)+import Data.Maybe (fromJust)+import Data.List (find)+import Network.HTTP.Conduit (requestHeaders, queryString, urlEncodedBody, responseBody, withManager, httpLbs)+import Snap.Core (Snap)+import Text.JSON (decode, Result(..), fromJSObject, JSValue(..), JSObject, fromJSString)++import DarcsDen.WebUtils (input)+import DarcsDen.Github.Util (getGId, getGPwd)+import DarcsDen.Github.Paths++getAccessToken :: Snap String+getAccessToken = do+ cd <- fmap pack (input "code" "no-code")+ cid <- fmap pack getGId+ cs <- fmap pack getGPwd+ let request = (urlEncodedBody+ [ ("client_id", cid)+ , ("client_secret", cs)+ , ("code", cd)+ ]+ githubAccessTokenRequest)+ { requestHeaders = + [ ("Accept", "application/json")+ , ("User-Agent", "darcsden")+ , ("Content-Type", "application/x-www-form-urlencoded")+ ] + }+ response <- fmap responseBody $ liftIO $ withManager $ httpLbs request+ let Ok jo = decode (unpack response)+ access_token = fromJust $ lookup "access_token" (fromJSObject jo)+ return access_token++getLoginID :: String -> Snap String+getLoginID access_token = do+ let request = githubAuthUserRequest+ { queryString = append "access_token=" (pack access_token) + , requestHeaders = + [ ("Accept", "application/json")+ , ("User-Agent", "darcsden")+ ] + }+ response <- fmap responseBody $ liftIO $ withManager $ httpLbs request+ let Ok jo = decode (unpack response) :: Result (JSObject JSValue)+ JSString login = fromJust $ lookup "login" (fromJSObject jo)+ return (fromJSString login)++getEmailID :: String -> Snap String +getEmailID access_token = do+ let request = githubEmailRequest+ { requestHeaders = [ ("Accept", "application/vnd.github.v3+json")+ , ("User-Agent", "darcsden")+ ]+ , queryString = append "access_token=" (pack access_token)+ }+ response <- fmap responseBody $ liftIO $ withManager $ httpLbs request+ let Ok ja = decode (unpack response) :: Result [JSObject JSValue]+ JSString email = fromJust.lookup "email".fromJSObject.fromJust $ find ((==Just (JSBool True)).lookup "primary".fromJSObject) ja+ return (fromJSString email)++getKeys :: String -> Snap [String]+getKeys access_token = do+ let request = githubKeysRequest { queryString = append "access_token=" (pack access_token)+ , requestHeaders = + [ ("Accept", "application/json")+ , ("User-Agent", "darcsden")+ ]+ }+ response <- fmap responseBody $ liftIO $ withManager $ httpLbs request+ let Ok ja = decode (unpack response) :: Result [JSObject JSValue]+ return $ map (fromJSString.(\(JSString x) -> x).fromJust.lookup "key".fromJSObject) ja
@@ -0,0 +1,17 @@+module DarcsDen.Github.Paths where++import Data.Maybe (fromJust)+import Network.HTTP.Conduit (parseUrl, Request)++githubPath, githubApiPath :: String++githubPath = "https://github.com/"+githubApiPath = "https://api.github.com/"++githubAccessRequest, githubAccessTokenRequest, githubAuthUserRequest, githubEmailRequest, githubKeysRequest :: Request m++githubAccessRequest = fromJust . parseUrl $ githubPath ++ "login/oauth/authorize"+githubAccessTokenRequest = fromJust . parseUrl $ githubPath ++ "login/oauth/access_token"+githubAuthUserRequest = fromJust . parseUrl $ githubApiPath ++ "user"+githubEmailRequest = fromJust. parseUrl $ githubApiPath ++ "user/emails"+githubKeysRequest = fromJust . parseUrl $ githubApiPath ++ "user/keys"
@@ -0,0 +1,12 @@+module DarcsDen.Github.Util where++import Control.Monad.Trans (MonadIO, liftIO)+import System.Environment (getEnv)++import DarcsDen.Settings++getGId :: MonadIO m => m String+getGId = liftIO (getEnv githubAppIdVarName)++getGPwd :: MonadIO m => m String+getGPwd = liftIO (getEnv githubAppPwdVarName)
@@ -0,0 +1,52 @@+{-# LANGUAGE OverloadedStrings #-}+module DarcsDen.Google.Handler where++import Prelude hiding (concat)+import Control.Monad.Trans (liftIO)+import Data.ByteString.Char8 (pack)+import Data.ByteString.Lazy.Char8 (unpack)+import Data.Maybe (fromJust)+import Data.List (elemIndices)+import Network.HTTP.Conduit (requestHeaders, urlEncodedBody, responseBody, withManager, httpLbs)+import Snap.Core (Snap)+import Text.JSON (decode, Result(..), fromJSObject, fromJSString, JSObject, JSValue(..))+import qualified Codec.Binary.Base64.String as B64++import DarcsDen.WebUtils (input)+import DarcsDen.Google.Util (getGoogleClientId, getGoogleClientSecret)+import DarcsDen.Google.Paths+import DarcsDen.Settings++getSubAndEmail :: String -> Snap (String, String)+getSubAndEmail ruri = do+ cd <- fmap pack (input "code" "no-code")+ cid <- fmap pack getGoogleClientId+ cs <- fmap pack getGoogleClientSecret+ let request = (urlEncodedBody + [ ("code", cd)+ , ("client_id", cid)+ , ("client_secret", cs)+ , ("redirect_uri", pack $ baseUrl ++ ruri ++ "/google/response")+ , ("grant_type", "authorization_code")+ ] googleAccessTokenRequest)+ { requestHeaders = [("Content-Type", "application/x-www-form-urlencoded")] }+ response <- fmap responseBody $ liftIO $ withManager $ httpLbs request+ let Ok jo = decode (unpack response) :: Result (JSObject JSValue) + val = (\(JSString jstr) -> fromJSString jstr) $ fromJust $ lookup "id_token" (fromJSObject jo)+ [ps1, ps2] = elemIndices '.' val+ liftIO $ putStrLn val+ let Ok jo' = decode $ decodeUFB64 $ drop (ps1+1) $ take ps2 val :: Result (JSObject JSValue)+ sub = (\(JSString jstr) -> fromJSString jstr) $ fromJust $ lookup "sub" (fromJSObject jo')+ email = (\(JSString jstr) -> fromJSString jstr) $ fromJust $ lookup "email" (fromJSObject jo')+ return (sub, email)++-- decode Base 64 Encoding with URL and Filename Safe Alphabet, with padding removed+decodeUFB64 :: String -> String+decodeUFB64 xs' = B64.decode str+ where xs = foldr f [] xs'+ str = xs ++ replicate (mod (4 - mod (length xs) 4) 4) '='++ f :: Char -> String -> String+ f '-' ys = '+':ys+ f '_' ys = '/':ys+ f chr ys = chr:ys
@@ -0,0 +1,11 @@+module DarcsDen.Google.Paths where++import Data.Maybe (fromJust)+import Network.HTTP.Conduit (parseUrl, Request)++googleApiPath :: String+googleApiPath = "https://accounts.google.com/"++googleAccessRequest, googleAccessTokenRequest :: Request m+googleAccessRequest = fromJust . parseUrl $ googleApiPath ++ "o/oauth2/auth"+googleAccessTokenRequest = fromJust . parseUrl $ googleApiPath ++ "o/oauth2/token"
@@ -0,0 +1,12 @@+module DarcsDen.Google.Util where++import Control.Monad.Trans (MonadIO, liftIO)+import System.Environment (getEnv)++import DarcsDen.Settings++getGoogleClientId :: MonadIO m => m String+getGoogleClientId = liftIO (getEnv googleAppIdVarName)++getGoogleClientSecret :: MonadIO m => m String+getGoogleClientSecret = liftIO (getEnv googleAppPwdVarName)
@@ -0,0 +1,178 @@+{-# LANGUAGE OverloadedStrings #-}+module DarcsDen.Handler where++import Control.Applicative ((<|>))+import Control.Arrow (second)+import Control.Concurrent (threadDelay)+import Control.Monad.Trans+import Data.Monoid (mconcat)+import qualified Darcs.Repository as R+import qualified Darcs.Patch.V1.Core as P+import qualified Darcs.Patch.Prim.V1.Core as Pr+import Snap.Core+import Snap.Util.FileServe+import System.FilePath ((</>))+import qualified Data.Text as T+import qualified Data.ByteString as BS++import DarcsDen.Handler.Repository+import DarcsDen.Handler.Repository.Util (getRepo)+import DarcsDen.Handler.User+import DarcsDen.Settings+import DarcsDen.State.Repository+import DarcsDen.State.Session+import DarcsDen.State.User+import DarcsDen.State.Util+import DarcsDen.Util+import DarcsDen.WebUtils+import qualified DarcsDen.Pages.Base as Base++-- URL handling+handler :: FilePath -> Snap ()+handler cwd =+ route+ [ ("public", serveDirectory $ cwd </> "public")+ , ("robots.txt", serveFile $ cwd </> "public/robots.txt")+ , ("favicon.ico", serveFile $ cwd </> "public/images/favicon.ico")+ , (":user/:repo/_darcs", repoServe "_darcs")+ , (":user/:repo/raw", repoServe "")+ , ("delay/:seconds", dbgDelay)+ ] <|>+ withSession (\s -> ifTop (frontpage s) <|> route (routes s))++routes :: Session -> [(BS.ByteString, Snap ())]+routes s =+ [ -- Main+ ("explore", explore s)+ , ("explore/page/:page", explore s)+ , ("init", method GET (initialize s) <|> method POST (doInitialize s))++ -- Users+ , (":user", user s)+ ]+ ++ (if multiuser+ then [ ("register", method GET (register s) <|> method POST (doRegister s))+ , ("register/github", githubRegister s)+ , ("register/github/response", githubRegisterResponse s)+ , ("register/google", googleRegister s)+ , ("register/google/response", googleRegisterResponse s)+ ] + else [])+ ++ [+ ("login/github", githubLogin s)+ , ("login/github/response", githubLoginResponse s)+ , ("login/google", googleLogin s)+ , ("login/google/response", googleLoginResponse s)+ , ("login", method GET (login s) <|> method POST (doLogin s))+ , ("logout", logout s)+ , ("settings", method GET (settings s) <|> method POST (doSettings s))+ , ("forgotpassword", method GET (forgotPassword s) <|> method POST (forgotPasswordResponse s))+ , ("recovery", method GET (resetPassword s) <|> method POST (resetPasswordResponse s))+ , ("sync/github", syncWithGithub s)+ , ("sync/github/response", syncWithGithubResponse s)+ , ("sync/google", syncWithGoogle s)+ , ("sync/google/response", syncWithGoogleResponse s)+ ] ++++ -- Repositories+ map (second (validateRepo s)) (+ [ (":user/:repo", browseRepo)+ , (":user/:repo/browse", browseRepo)+ , (":user/:repo/edit-file", \u r s' ->+ method GET (editFile u r s') <|>+ method POST (editFilePost u r s'))+ , (":user/:repo/add-file", \u r s' ->+ method GET (addFile u r s') <|>+ method POST (addFilePost u r s'))+ , (":user/:repo/changes", repoChanges)+ , (":user/:repo/changes/atom", repoChangesAtom)+ , (":user/:repo/changes/page/:page", repoChanges)+ , (":user/:repo/delete", \u r s' ->+ method GET (deleteRepo u r s') <|>+ method POST (doDeleteRepo u r s'))+ , (":user/:repo/edit", \u r s' ->+ method GET (editRepo u r s') <|>+ method POST (doEditRepo u r s'))+ , (":user/:repo/packs", buildPacks)+ , (":user/:repo/fork", forkRepo)+ , (":user/:repo/fork-as", forkRepoAs)+ , (":user/:repo/patches", repoPatches)+ , (":user/:repo/merge", repoMerge)+ -- , (":user/:repo/patch1/:id", repoPatch1)+ , (":user/:repo/patch/:id", repoPatch)+ , (":user/:repo/renderedpatch/:id", renderedpatch)+ ]+ ++ if issuetrackers then+ [ (":user/:repo/issues", repoIssuesOpen)+ , (":user/:repo/issues/closed", repoIssuesClosed)+ , (":user/:repo/issues/all", repoIssuesAll)+ , (":user/:repo/issues/tag/:tag", repoIssuesTag)+ , (":user/:repo/issue/:number", repoIssue)+ , (":user/:repo/issue/:number/comment", repoComment)+ , (":user/:repo/new-issue", \u r s' ->+ method GET (newIssue u r s') <|>+ method POST (doNewIssue u r s'))+ ]+ else []+ )++dbgDelay :: Snap ()+dbgDelay = do+ Just delay <- getParam "seconds"+ let s = read $ fromBS delay+ s' = max s 300+ liftIO $ threadDelay $ s' * 1000000+ writeText $ mconcat [T.pack $ show s', "s delay complete"]++frontpage :: Page+frontpage s = do+ us <- getUsers+ doPage (Base.frontpage us) s++validateRepo :: Session -> (User -> Repository -> Page) -> Snap ()+validateRepo s p = do+ mo <- getParam "user"+ mn <- getParam "repo"++ case (mo, mn) of+ (Just o, Just n) -> do+ let (owner, name) = (fromBS o, fromBS n)+ mu <- getUser owner+ mr <- getValidRepo owner name+ darcsRepo <- liftIO (getRepo (repoDir owner name)) :: Snap (Either String (R.Repository (P.Patch Pr.Prim) wR wU wT))+ case (mu, mr, darcsRepo) of+ (Just u , Just r , Right _) -> p u r s+ (Nothing, _ , _ ) -> notFoundPage "user does not exist"+ (_ , Just _ , Left _ ) -> notFoundPage "repository invalid"+ (Just _ , Nothing, _ ) -> notFoundPage "repository does not exist"+ _ -> warn "no repository specified" s >> redirectTo baseUrl+ where+ getValidRepo owner name = do+ public <- getRepository (owner, name)++ -- repository is public+ if public /= Nothing+ then return public+ else do++ -- repository is private+ case sUser s of+ -- owner viewing their own repository+ Just un | un == owner ->+ getOwnerRepository (owner, name)++ -- some other user, check if they're a member+ Just mn -> do+ mm <- getUser mn+ case mm of+ Just (User { uName = un }) -> do+ ism <- isMember un (owner, name)+ if ism+ then getOwnerRepository (owner, name)+ else return Nothing++ -- invalid user+ _ -> return Nothing++ -- not logged in+ _ -> return Nothing
@@ -0,0 +1,781 @@+{-# LANGUAGE OverloadedStrings, ScopedTypeVariables, CPP #-}+module DarcsDen.Handler.Repository where++import Control.Monad (when)+import Control.Monad.Trans+import Data.Char (toLower, isSpace)+import Data.List (groupBy, inits, isPrefixOf, nub, partition, sortBy, elemIndex)+import Data.List.Split (wordsBy)+import Data.Map ((!))+import Data.Maybe (catMaybes, fromJust, isJust, isNothing)+import Data.Ord (comparing)+import Data.Time (getCurrentTime)+import System.Directory (setCurrentDirectory, getCurrentDirectory, createDirectory)+import System.Exit(ExitCode(..))+import System.FilePath ((</>))+import System.FilePath.Posix (isValid)+import System.IO (openFile, hClose, hGetContents, IOMode(..))+import System.Process (readProcessWithExitCode)+import Database.CouchDB (doc)+import Snap.Core+import Text.Printf (printf)++import qualified Darcs.Repository as R+import qualified Darcs.Patch.V1.Core as P+import qualified Darcs.Patch.Prim.V1.Core as Pr++#ifdef DARCS28+import Darcs.Commands.Record (record)+import Darcs.Flags (DarcsFlag(All, PatchName, Author, LookForAdds))+#else+import Darcs.UI.Commands.Optimize (doOptimizeHTTP)+import Darcs.UI.Commands.Record (record)+import Darcs.UI.Flags (DarcsFlag(All, PatchName, Author, LookForAdds))+#endif++import DarcsDen.Darcs (sanityDarcs)+import DarcsDen.Handler.Repository.Util+import DarcsDen.Handler.Repository.Browse+import DarcsDen.Handler.Repository.Changes+import DarcsDen.Handler.Repository.Forks+import DarcsDen.Settings+import DarcsDen.State.Comment+import DarcsDen.State.Issue+import DarcsDen.State.Repository+import DarcsDen.State.Session+import DarcsDen.State.User+import DarcsDen.State.Util+import DarcsDen.Util+import DarcsDen.Validate+import DarcsDen.WebUtils+import qualified DarcsDen.Pages.Repository as Page+++initialize :: Page+initialize s@(Session { sUser = Nothing }) = do+ warn "You must be logged in to create a repository." s+ redirectTo (baseUrl ++ "login")+initialize s = doPage (Page.init []) s++doInitialize :: Page+doInitialize s@(Session { sUser = Nothing }) = do+ warn "You must be logged in to create a repository." s+ redirectTo (baseUrl ++ "login")+doInitialize s@(Session { sUser = Just n }) = validate+ [ iff+ (And (nonEmpty "name") $+ predicate "name" isSane+ "contain only alphanumeric characters, -, or _")+ (\(OK i) ->+ io "destination repository already exists" $+ fmap isNothing (getRepository (n, i ! "name")))++ -- , Or (isEmpty "bootstrap")+ -- (Predicate "bootstrap"+ -- ((`elem` ["http", "https"]) . takeWhile (/= ':'))+ -- "start with http:// or https://")++ , io "user is not valid" (fmap (/= Nothing) (getUser n))+ ]+ (\(OK r) -> do+ now <- liftIO getCurrentTime+ desc <- input "description" ""+ site <- input "website" ""+ private <- getParam "private"+ issuetracker <- getParam "issuetracker"++ let repo = Repository+ { rID = Nothing+ , rRev = Nothing+ , rName = r ! "name"+ , rOwner = n+ , rDescription = desc+ , rWebsite = site+ , rCreated = now+ , rForkOf = Nothing+ , rMembers = []+ , rIsPrivate = isJust private+ , rIssueTracker = isJust issuetracker+ , rIssueCount = 0+ , rBuiltPacks = Nothing+ }++ -- url <- input "bootstrap" ""+ -- if length url > 0+ -- then bootstrapRepository repo url+ -- else+ newRepository repo++ success "Repository created." s+ redirectTo $ baseUrl ++ n ++ "/" ++ (r ! "name"))+ (\(Invalid f) -> do+ is <- getInputs+ notify Warning s f+ >>= doPage (Page.init is))++explore :: Page+explore s = do+ page <- input "page" "1"++ let p = read page :: Int+ perpage = 500+ paginated rs =+ paginate perpage p $+ sortBy (comparing (map toLower . rName . fst)) rs++ rs <- fmap groupForks getRepositories++ let totalPages = ceiling ((fromIntegral (length rs) :: Double) / fromIntegral perpage)++ doPage (Page.explore (paginated rs) p totalPages) s+ where+ groupForks rs = foldr addFork (map (flip (,) []) roots) forks+ where+ (forks, roots) = partition (isJust . rForkOf) rs++ addFork f [] = [(f, [])]+ addFork f ((r@(Repository { rID = y }), fs):rs)+ | rForkOf f == y = ((r, (f:fs)) : rs)+ | otherwise = (r, fs) : addFork f rs++buildPacks :: User -> Repository -> Page+buildPacks _ r s = validate+ [ io "you do not own this repository" $+ return $ Just (rOwner r) == sUser s+ ]+ (\(OK _) -> (liftIO $ do+#ifdef DARCS28+ warn "Packs not supported by this darcs version" s+#else+ Right dr <- getRepo (repoDir (rOwner r) (rName r)) :: IO (Either String (R.Repository (P.Patch Pr.Prim) wR wU wT))+ od <- getCurrentDirectory+ setCurrentDirectory $ repoDir (rOwner r) (rName r)+ doOptimizeHTTP dr+ success "Packs enabled" s+ setCurrentDirectory od+ now <- getCurrentTime+ updateRepository r { rBuiltPacks = Just now}+#endif+ ) >> redirectTo (baseUrl ++ (rOwner r) ++ "/" ++ (rName r)))+ (\(Invalid f) -> notify Warning s f >> redirectTo baseUrl)++browseRepo :: User -> Repository -> Page+browseRepo u r s = do+ Right dr <- liftIO $ getRepo (repoDir (rOwner r) (rName r)) :: Snap (Either String (R.Repository (P.Patch Pr.Prim) wR wU wT))++ member <-+ case sUser s of+ Just un ->+ return (un `elem` rMembers r)+ Nothing ->+ return False++ f <- filePath+ fs <- liftIO $ getFiles dr f+ bl <- liftIO $ getBlob dr f++ case (fs, bl) of+ (Nothing, Nothing) -> notFound+ (Just fs', _) -> do+ readme <- liftIO $ getReadme dr f++ let files =+ map (\i -> i+ { iPath = pathToFile (f ++ [iName i])+ }) fs'++ doPage (Page.repo u r files (crumb f) readme member) s+ (_, Just big) | isTooLarge big ->+ doPage (Page.blob u r (crumb f) Nothing) s+ (_, Just md) | isMarkdown (last f) ->+ doPage (Page.blob u r (crumb f) (Just . Left . doMarkdown' . fromLBS $ md)) s+ (_, Just source) -> do+ source' <- liftIO $ return $! Right $! highlightBlob (last f) (strictLBS source)+ doPage+ (Page.blob u r+ (crumb f)+ (Just source'))+ s+ where+ filePath = do+ rq <- getRequest+ return (wordsBy (== '/') (fromBS $ rqPathInfo rq))++ crumb = map pathToRepoItem . tail . inits++ pathToRepoItem p =+ RepoItem+ { iName = last p+ , iPath = pathToFile p+ , iIsDirectory = True+ }++addFile :: User -> Repository -> Page+addFile u r s = do+ let member = case sUser s of+ Just un -> (un `elem` rOwner r:rMembers r)+ Nothing -> False+ if member+ then do+ f <- filePath+ doPage (Page.addFile u r (crumb f)) s+ else do+ fp <- fmap (fromBS.rqPathInfo) getRequest+ warn "You do not have permission to edit this repository" s+ redirectTo (baseUrl ++ rOwner r ++ "/" ++ rName r ++ "/browse/" ++ fp)+ where+ filePath = do+ rq <- getRequest+ return (wordsBy (== '/') (fromBS $ rqPathInfo rq))++ crumb = map pathToRepoItem . tail . inits++ pathToRepoItem p =+ RepoItem+ { iName = last p+ , iPath = pathToFile p+ , iIsDirectory = True+ }++addFilePost :: User -> Repository -> Page+addFilePost _ r s = validate [+ nonEmpty "message",+ If (And (predicate "filepath" (const $ True) "") (nonEmpty "filename"))+ (\(OK a) -> io "invalid filename" $ return $ isValid ((a!"filepath") </> (a!"filename")))+ ]+ (\(OK a) -> do+ let member = case sUser s of+ Just un -> (un `elem` rOwner r:rMembers r)+ Nothing -> False+ if member+ then do+ t <- input "type" "file"+ let fp = a ! "filepath"+ fn = a ! "filename"+ msg = a ! "message"+ let Just un = sUser s+ Just email <- fmap (fmap uEmail) (getUser un)+ liftIO $ do+ od <- getCurrentDirectory+ setCurrentDirectory $ repoDir (rOwner r) (rName r)+ if t == "directory"+ then createDirectory (fp </> fn)+ else writeFile (fp </> fn) ""+ sanityDarcs record [All, PatchName msg, Author email, LookForAdds] []+ setCurrentDirectory od+ success (t ++ " created") s+ redirectTo (baseUrl ++ rOwner r ++ "/" ++ rName r ++ "/browse/" ++ (fp </> fn))+ else do+ warn "You do not have permission to edit this repository" s+ redirectTo (baseUrl ++ rOwner r ++ "/" ++ rName r ++ "/browse/" ++ (a!"filepath")))+ (\(Invalid f) -> do+ notify Warning s f+ fp <- input "filepath" ""+ redirectTo (baseUrl ++ rOwner r ++ "/" ++ rName r ++ "/add-file/" ++ fp))++editFile :: User -> Repository -> Page+editFile u r s = do+ let member = case sUser s of+ Just un -> (un `elem` rOwner r:rMembers r)+ Nothing -> False+ if member+ then do+ fp <- fmap (fromBS.rqPathInfo) getRequest+ let path' = repoDir (rOwner r) (rName r) </> fp+ mime <- getMime path'+ contents <- liftIO $ readFile path'+ f <- filePath+ Just s' <- getSession (sID s)+ doPage (Page.editFile u r (crumb f) mime contents) s'+ else do+ fp <- fmap (fromBS.rqPathInfo) getRequest+ warn "You do not have permission to edit this file" s+ redirectTo (baseUrl ++ rOwner r ++ "/" ++ rName r ++ "/browse/" ++ fp)+ where+ filePath = do+ rq <- getRequest+ return (wordsBy (== '/') (fromBS $ rqPathInfo rq))++ crumb = map pathToRepoItem . tail . inits+ + getMime p = do+ (exc, out, err) <- liftIO $ readProcessWithExitCode xdgMimePath ["query", "filetype", p] ""+ if exc == ExitSuccess+ then do+ let removeCharset xs = maybe xs (flip take xs) (elemIndex ';' xs)+ let out' = removeCharset out+ let msg = printf "Identifying %s as: %s" p out'+ flip message s msg+ liftIO $ putStrLn msg+ return $ filter (not.isSpace) out'+ else do+ let msg = printf "Could not run %s, defaulting to text/plain\nExit code: %s\nError:\n%s" xdgMimePath (show exc) err+ flip warn s msg+ liftIO $ putStrLn msg+ return $ "text/plain"++ pathToRepoItem p =+ RepoItem+ { iName = last p+ , iPath = pathToFile p+ , iIsDirectory = True+ }++editFilePost :: User -> Repository -> Page+editFilePost _ r s = do+ let member = case sUser s of+ Just un -> (un `elem` rOwner r:rMembers r)+ Nothing -> False+ if member+ then do+ ntext <- input "editor" ""+ msg <- input "message" ""+ fp <- fmap (fromBS.rqPathInfo) getRequest+ let Just un = sUser s+ Just email <- fmap (fmap uEmail) (getUser un)+ liftIO $ do+ od <- getCurrentDirectory+ setCurrentDirectory $ repoDir (rOwner r) (rName r)+ handle <- openFile fp ReadMode+ has_carriage_returns <- fmap (or.map (=='\r')) (hGetContents handle)+ hClose handle+ let ntext' = if has_carriage_returns then ntext else filter (not.(=='\r')) ntext+ writeFile fp ntext'+ sanityDarcs record [All, PatchName msg, Author email] [fp]+ setCurrentDirectory od+ success "File edited." s+ redirectTo (baseUrl ++ rOwner r ++ "/" ++ rName r ++ "/browse/" ++ fp)+ else do+ fp <- fmap (fromBS.rqPathInfo) getRequest+ warn "You do not have permission to edit this file" s+ redirectTo (baseUrl ++ rOwner r ++ "/" ++ rName r ++ "/browse/" ++ fp)++repoChanges :: User -> Repository -> Page+repoChanges u r s = do+ p <- input "page" "1"+ let page = read p+ (patches, totalPages) <- liftIO $ getChanges (repoDir (rOwner r) (rName r)) page++ doPage (Page.changes u r patches page totalPages) s++repoChangesAtom :: User -> Repository -> Page+repoChangesAtom u r s = do+ (patches, _) <- liftIO $ getChanges (repoDir (rOwner r) (rName r)) 1+ doAtomPage (Page.changesAtom u r patches) s++-- repoPatch1 :: User -> Repository -> Page+-- repoPatch1 u r s = do+-- p <- input "id" ""+-- when (null p) (errorPage "No patch ID specified.")++-- mpatch <- liftIO $ getPatch (repoDir (rOwner r) (rName r)) p+-- case mpatch of+-- Nothing -> notFound+-- Just patch ->+-- doPage+-- (Page.patch1 u r+-- (pPatch patch)+-- (summarize (pChanges patch))+-- (filter isModification (pChanges patch)))+-- s++repoPatch :: User -> Repository -> Page+repoPatch u r s = do+ p <- input "id" ""+ when (null p) (errorPage "No patch ID specified.")+ doPage (Page.patch u r p) s++renderedpatch :: User -> Repository -> Page+renderedpatch u r s = do+ p <- input "id" ""+ when (null p) (errorPage "No patch ID specified.")+ mpatch <- liftIO $ getPatch (repoDir (rOwner r) (rName r)) p+ case mpatch of+ Nothing -> notFound+ Just patch -> -- doPage (Page.renderedpatchHtml1 u r patch) s+ doPage+ (Page.renderedpatchHtml u r+ (pPatch patch)+ (summarize (pChanges patch))+ (filter isModification (pChanges patch)))+ s++editRepo :: User -> Repository -> Page+editRepo u r s = validate+ [ io "you do not own this repository" $+ return $ Just (rOwner r) == sUser s+ ]+ (\(OK _) -> do+ ms <- mapM getUser (rMembers r)++ let members = map fromJust . filter (/= Nothing) $ ms++ doPage (Page.edit u r members []) s)+ (\(Invalid f) -> notify Warning s f >> redirectTo baseUrl)++doEditRepo :: User -> Repository -> Page+doEditRepo _ r s = validate+ [ io "you do not own this repository" $+ return $ Just (rOwner r) == sUser s++ , nonEmpty "name"++ , predicate "name" isSane+ "contain only alphanumeric characters, -, or _"+ ]+ (\(OK i) -> do+ removed <- removeMembers r (rMembers r)++ toAdd <- input "add-members" ""+ added <- addMembers removed (map strip . wordsBy (== ',') $ toAdd)+ new <- rename added (i ! "name")++ desc <- input "description" (rDescription r)+ site <- input "website" (rWebsite r)+ private <- getParam "private"+ issuetracker <- getParam "issuetracker"+ updateRepository+ new { rDescription = desc+ , rWebsite = site+ , rIsPrivate = isJust private+ , rIssueTracker = isJust issuetracker+ }++ success "Repository updated." s++ redirectTo (baseUrl ++ (rOwner r) ++ "/" ++ (i ! "name") ++ "/edit"))+ (\(Invalid f) -> do+ notify Warning s f+ redirectTo (baseUrl ++ (rOwner r) ++ "/" ++ (rName r) ++ "/edit"))+ where+ rename r' n+ = if rName r' /= n+ then do+ res <- renameRepository n r'+ case res of+ Nothing -> do+ warn "There was an error renaming the repository." s+ return r'+ Just r'' -> return r''+ else return r'++ addMembers r' [] = return r'+ addMembers r' (m:ms) = do+ user <- getUser m+ case user of+ Just (User { uName = un }) -> do+ done <- addMember r' un+ case done of+ Just r'' ->+ addMembers r'' ms+ Nothing -> do+ warn ("There was an error adding member " ++ un ++ ".") s+ return r'+ _ -> do+ warn ("Could not add member " ++ m ++ "; user does not exist.") s+ addMembers r' ms++ removeMembers r' [] = return r'+ removeMembers r' (m:ms) = do+ remove <- getParam (toBS $ "remove-" ++ show m)+ maybe (removeMembers r' ms) (\_ -> do+ removed <- removeMember r m+ flip maybe (flip removeMembers ms) (do+ user <- getUser m+ case user of+ Just u' -> do+ warn ("There was an error removing member " ++ uName u' ++ ".") s+ removeMembers r' ms+ Nothing -> do+ warn failDunno s+ removeMembers r' ms) removed) remove++ failDunno = unwords+ [ "There was an error removing a member that doesn't exist."+ , "So I can't tell you who it was. Way to go."+ ]+++deleteRepo :: User -> Repository -> Page+deleteRepo u r s = validate+ [ io "you do not own this repository" $+ return $ Just (rOwner r) == sUser s+ ]+ (\(OK _) -> doPage (Page.delete u r) s)+ (\(Invalid f) -> notify Warning s f >> redirectTo baseUrl)++doDeleteRepo :: User -> Repository -> Page+doDeleteRepo _ r s = validate+ [ io "you do not own this repository" $+ return $ Just (rOwner r) == sUser s+ ]+ (\(OK _) -> do+ destroyed <- destroyRepository r++ if destroyed+ then do+ success "Repository deleted." s+ redirectTo baseUrl+ else do+ warn "Repository deletion failed." s+ redirectTo (baseUrl ++ rOwner r ++ "/" ++ rName r))+ (\(Invalid f) -> do+ notify Warning s f+ redirectTo (baseUrl ++ rOwner r ++ "/" ++ rName r))++forkRepo :: User -> Repository -> Page+forkRepo _ _ s@(Session { sUser = Nothing }) = do+ warn "You must be logged in to fork a repository." s+ redirectTo baseUrl+forkRepo u r s@(Session { sUser = Just n }) = validate+ [ io "destination repository already exists" $+ fmap isNothing (getOwnerRepository (n, rName r))+ ]+ (\(OK _) -> do+ forked <- forkRepository n (rName r) r+ success "Repository forked." s+ redirectTo (baseUrl ++ n ++ "/" ++ rName forked))+ (\(Invalid _) -> doPage (Page.fork u r (rName r)) s)++forkRepoAs :: User -> Repository -> Page+forkRepoAs _ _ s@(Session { sUser = Nothing }) = do+ warn "You must be logged in to fork a repository." s+ redirectTo baseUrl+forkRepoAs u r s@(Session { sUser = Just n }) = validate+ [ iff (nonEmpty "name") $ \(OK i) ->+ io "destination repository already exists" $+ fmap isNothing (getRepository (n, i ! "name"))+ ]+ (\(OK i) -> do+ forked <- forkRepository n (i ! "name") r+ success "Repository forked." s+ redirectTo (baseUrl ++ n ++ "/" ++ rName forked))+ (\(Invalid _) -> do+ name <- input "name" (rName r)+ doPage (Page.fork u r name) s)++repoPatches :: User -> Repository -> Page+repoPatches u r s = do+ fs <- getRepositoryForks (fromJust $ rID r)+ upstream <- liftIO $ getUpstreamChanges r+ downstream <- liftIO $ mapM getDownstreamChanges fs++ ownPrivFs <- fmap (filter isPrivateFork) (getOwnerRepositories (uName u))+ ownPrivForks <- liftIO $ mapM getDownstreamChanges ownPrivFs++ let changes = filter (canView (sUser s) . fRepo) $ catMaybes (upstream : downstream)+ privChanges = filter (canView (sUser s) . fRepo) $ catMaybes ownPrivForks++ doPage (Page.patches u r changes privChanges) s+ where+ isPrivateFork (Repository { rIsPrivate = True, rForkOf = f }) = f == rID r+ isPrivateFork _ = False++repoMerge :: User -> Repository -> Page+repoMerge _ r s = validate+ [ io "you do not own this repository" $+ return $ canMerge (sUser s) r+ ]+ (\(OK _) -> do+ is <- getInputs+ let ps = map (\(n, _) ->+ let split = wordsBy (== ':') n+ in (doc (split !! 1), split !! 2))+ (filter (\(n, _) -> "merge:" `isPrefixOf` n) is)+ gps = groupBy (\a b -> fst a == fst b) ps+ groupedPatches = map (\r'@((k, _):_) -> (k, map snd r')) gps++ merge <- mapM (\(r', ps') -> do+ Just f <- getRepositoryByID r'+ liftIO $ mergePatches r f ps' s) groupedPatches++ when (and merge) (success "Patches merged!" s >> return ())++ redirectTo (baseUrl ++ rOwner r ++ "/" ++ rName r ++ "/patches"))+ (\(Invalid f) -> notify Warning s f >> redirectTo baseUrl)++repoIssuesOpen :: User -> Repository -> Page+repoIssuesOpen u r s = do+ issues <- fmap (sortBy (flip $ comparing iUpdated)) $ getIssuesOpen r+ doPage (Page.issues u r "open issues" issues) s++repoIssuesClosed :: User -> Repository -> Page+repoIssuesClosed u r s = do+ issues <- fmap (sortBy (flip $ comparing iUpdated)) $ getIssuesClosed r+ doPage (Page.issues u r "closed issues" issues) s+ +repoIssuesAll :: User -> Repository -> Page+repoIssuesAll u r s = do+ issues <- fmap (sortBy (flip $ comparing iUpdated)) $ getIssuesAll r+ doPage (Page.issues u r "all issues" issues) s++repoIssuesTag :: User -> Repository -> Page+repoIssuesTag u r s = validate+ [ nonEmpty "tag"+ ]+ (\(OK is) -> do+ let tags = map (wordsBy (== '^')) $ wordsBy (== '~') (is ! "tag")++ issues <- orFind tags++ doPage+ (Page.issuesByTags u r+ (sortBy (flip $ comparing iUpdated) issues)+ tags)+ s)+ (\(Invalid f) -> do+ notify Warning s f+ redirectTo (repoURL r ++ "/issues"))+ where+ andFind :: [String] -> Snap [Issue]+ andFind (ft:ts) = do+ issues <- getIssuesByTag r ft+ return (foldr (\t i -> filter ((t `elem`) . iTags) i) issues ts)+ andFind _ = error "andFind: no tags"++ orFind :: [[String]] -> Snap [Issue]+ orFind as = do+ issues <- mapM andFind as+ return (nub (concat issues))++repoIssue :: User -> Repository -> Page+repoIssue u r s = validate+ [ numeric "number"+ ]+ (\(OK is) -> do+ mi <- getIssue (fromJust (rID r)) (read $ is ! "number")+ case mi of+ Just i -> do+ cs <- fmap (sortBy (comparing cUpdated)) $ getComments i+ doPage (Page.issue u r i cs) s+ Nothing -> notFound)+ (\(Invalid f) -> do+ notify Warning s f+ redirectTo (repoURL r))++newIssue :: User -> Repository -> Page+newIssue _ _ s@(Session { sUser = Nothing }) = do+ warn "You must be logged in to create an issue." s+ redirectTo baseUrl+newIssue u r s =+ doPage (Page.newIssue u r) s++doNewIssue :: User -> Repository -> Page+doNewIssue _ _ s@(Session { sUser = Nothing }) = do+ warn "You must be logged in to create an issue." s+ redirectTo baseUrl+doNewIssue _ r s@(Session { sUser = Just un }) = validate+ [ nonEmpty "summary"+ , Predicate "description" (const True) "be provided"+ , Predicate "tags" (const True) "be provided"+ ]+ (\(OK is) -> do+ now <- liftIO getCurrentTime+ i <- addIssue Issue+ { iID = Nothing+ , iRev = Nothing+ , iNumber = rIssueCount r + 1+ , iSummary = is ! "summary"+ , iOwner = un+ , iDescription = is ! "description"+ , iTags = map strip $ wordsBy (== ',') (is ! "tags")+ , iCreated = now+ , iUpdated = now+ , iIsClosed = False+ , iRepository = fromJust (rID r)+ }++ updateRepository r+ { rIssueCount = rIssueCount r + 1+ }++ redirectTo (issueURL r i))+ (\(Invalid f) -> do+ notify Warning s f+ redirectTo (repoURL r ++ "/new-issue"))++repoComment :: User -> Repository -> Page+repoComment _ _ s@(Session { sUser = Nothing }) = do+ warn "You must be logged in to comment on an issue." s+ redirectTo baseUrl+repoComment _ r s@(Session { sUser = Just un }) = validate+ [ iff (numeric "number") $ \(OK is) -> io "issue does not exist" $+ fmap isJust (getIssue (fromJust (rID r)) (read $ is ! "number"))+ ]+ (\(OK is) -> do+ Just i <- getIssue (fromJust (rID r)) (read $ is ! "number")+ submit <- input "submit" ""+ summary <- input "summary" ""+ description <- input "description" ""+ c <- input "comment" ""+ ts <- fmap (map strip . wordsBy (== ',')) $ input "tags" ""++ let closed =+ case submit of+ "and close" -> True+ "and reopen" -> False+ _ -> iIsClosed i++ issueChanged = or+ [ iSummary i /= summary+ , iDescription i /= description+ , not (null (diffTags (iTags i) ts))+ , iIsClosed i /= closed+ ]++ diffTags ots nts = concat+ [ map AddTag (filter (`notElem` ots) nts)+ , map RemoveTag (filter (`notElem` nts) ots)+ ]++ changes = concat+ [ if iSummary i /= summary+ then [Summary (iSummary i) summary]+ else []+ , if iDescription i /= description+ then [Description (iDescription i) description]+ else []+ , if iIsClosed i /= closed then [Closed closed] else []+ , if iTags i /= ts then diffTags (iTags i) ts else []+ ]++ if not issueChanged && null c+ then do+ warn "no changes and no comment; do something!" s+ redirectTo (issueURL r i)+ else do++ now <- liftIO getCurrentTime+ addComment Comment+ { cID = Nothing+ , cRev = Nothing+ , cBody = c+ , cChanges = changes+ , cAuthor = un+ , cIssue = fromJust (iID i)+ , cCreated = now+ , cUpdated = now+ }++ mni <-+ if issueChanged+ then updateIssue i+ { iSummary = summary+ , iDescription = description+ , iTags = ts+ , iIsClosed = closed+ , iUpdated = now+ }+ else return (Just i)++ case mni of+ Nothing -> do+ warn "issue could not be updated" s+ redirectTo (issueURL r i)+ Just ni -> do+ if not (null c)+ then success "comment added" s+ else success "issue updated" s++ redirectTo (issueURL r ni))+ (\(Invalid f) -> notify Warning s f >> redirectTo baseUrl)
@@ -0,0 +1,117 @@+{-# LANGUAGE DeriveDataTypeable, GADTs, CPP #-}+module DarcsDen.Handler.Repository.Browse where++#ifdef DARCS28+import Darcs.Utils (withCurrentDirectory)+#else+import Darcs.Util.File (withCurrentDirectory)+#endif+import Data.Char (toLower)+import Data.Data (Data)+import Data.List (intercalate, isPrefixOf, isSuffixOf, sort)+import Data.Maybe (isJust, listToMaybe)+import Data.Typeable (Typeable)+import qualified Darcs.Patch as P+import Darcs.Patch.Apply ( ApplyState )+import qualified Darcs.Repository as R+import qualified Darcs.Repository.InternalTypes as RI+import qualified Data.ByteString.Lazy as LBS+import qualified Storage.Hashed.Tree as T+import qualified Storage.Hashed.AnchoredPath as A++import DarcsDen.Handler.Repository.Util+import DarcsDen.Settings+import DarcsDen.Util+++data RepoItem =+ RepoItem+ { iName :: String+ , iPath :: String -- relative to the repo url, with leading slash.+ , iIsDirectory :: Bool+ }+ deriving (Eq, Show, Data, Typeable)++instance Ord RepoItem where+ compare (RepoItem _ _ True) (RepoItem _ _ False) = LT+ compare (RepoItem _ _ False) (RepoItem _ _ True) = GT+ compare (RepoItem a _ _) (RepoItem b _ _) = compare a b+++pathToFile :: [String] -> String+pathToFile [] = ""+pathToFile f = '/' : intercalate "/" f++getFiles :: (P.RepoPatch p, ApplyState p ~ T.Tree)+ => R.Repository p r u t -> [String] -> IO (Maybe [RepoItem])+getFiles r f = do+ tree <- repoTree r f+ return $ fmap (\t -> sort . map (item t . fst) . onelevel $ t) tree+ where+ onelevel = filter (\(A.AnchoredPath x, _) -> length x == 1) . T.list+ item t a = RepoItem+ { iIsDirectory = isJust (T.findTree t a)+ , iPath = "" -- Filled up before sending to template+ , iName = fromAnchored a+ }++getBlob :: (P.RepoPatch p, ApplyState p ~ T.Tree)+ => R.Repository p r u t -> [String] -> IO (Maybe LBS.ByteString)+getBlob dr@(RI.Repo p _ _ _) f = withCurrentDirectory p $ do+ tree <- repoTree dr []+ maybe (return Nothing) (\t ->+ case T.findFile t (toAnchored f) of+ Nothing -> return Nothing+ Just b -> fmap Just (T.readBlob b)) tree++isTooLarge :: LBS.ByteString -> Bool+isTooLarge = (> (fromIntegral maxFileDisplaySize)) . LBS.length++repoTree :: (P.RepoPatch p, ApplyState p ~ T.Tree)+ => R.Repository p r u t -> [String] -> IO (Maybe (T.Tree IO))+repoTree r@(RI.Repo p _ _ _) f = do+ root <- withCurrentDirectory p (R.readRecorded r >>= T.expand)+ return $+ if null f+ then Just root+ else T.findTree root (toAnchored f)++getReadme :: (P.RepoPatch p, ApplyState p ~ T.Tree)+ => R.Repository p r u t -> [String] -> IO (Maybe String)+getReadme dr f = do+ tree <- repoTree dr f+ case findReadmes tree of+ Nothing -> return Nothing+ Just r -> do+ s <- getBlob dr (f ++ [r])+ return $+ case s of+ Nothing -> Nothing+ Just big | isTooLarge big ->+ Just "README file too large. Sorry."+ Just md | isMarkdown r ->+ Just . doMarkdown . fromLBS $ md+ Just source ->+ Just . fromBS . highlight False r . strictLBS $ source+ where+ findReadmes+ = maybe Nothing listToMaybe+ . fmap (filter isReadme . map (fromAnchored . fst) . T.list)++isReadme :: String -> Bool+isReadme f = "readme" `isPrefixOf` f'+ where f' = map toLower f++isMarkdown :: String -> Bool+isMarkdown f = or+ [ ".markdown" `isSuffixOf` f'+ , ".mdwn" `isSuffixOf` f'+ , ".md" `isSuffixOf` f'+ ]+ where f' = map toLower f++toAnchored :: [String] -> A.AnchoredPath+toAnchored = A.AnchoredPath . map A.makeName++fromAnchored :: A.AnchoredPath -> String+fromAnchored = fromBS . A.flatten
@@ -0,0 +1,289 @@+{-# LANGUAGE GADTs, RankNTypes, FlexibleContexts, TypeFamilies, CPP #-}+module DarcsDen.Handler.Repository.Changes where++import Darcs.Patch.PatchInfoAnd (PatchInfoAnd, info)+import Darcs.Patch.Info (PatchInfo(..), piDate, makeFilename)+import Darcs.Patch.Patchy (Commute(..))+import Darcs.Patch.Permutations (commuteWhatWeCanFL)+import Darcs.Patch.Prim.V1.Core ( Prim(..), DirPatchType(..), FilePatchType(..))+-- import Darcs.Patch.Patchy ( Patchy )+-- import Darcs.Patch.Prim.Class ( FromPrim(..), PrimPatch)+import Darcs.Patch.Prim.Class (PrimPatchBase(..))+#ifdef DARCS28+import Darcs.Patch.FileName (fn2fp)+import Darcs.Witnesses.Ordered+import qualified Darcs.Witnesses.Ordered as WO+#else+import Darcs.Util.Path (fn2fp)+import Darcs.Patch.Rebase.NameHack ( NameHack(..) )+import Darcs.Patch.Witnesses.Ordered+import qualified Darcs.Patch.Witnesses.Ordered as WO+import Darcs.Repository.Flags+#endif+import Data.List (isPrefixOf, nub)+import Data.Time (UTCTime, readTime)+import System.Locale (defaultTimeLocale)+import System.Time (calendarTimeToString)+import qualified Darcs.Patch as P+import qualified Darcs.Repository as R+import qualified Data.ByteString as BS++import DarcsDen.Handler.Repository.Util+import DarcsDen.State.User+import DarcsDen.Util++--instance PrimPatch Prim+--instance Patchy Prim+--instance PrimPatchBase Prim where+-- type PrimOf Prim = Prim+--+--instance FromPrim Prim where+-- fromPrim = id+++data Summary+ = Removed FilePath+ | Added FilePath+ | Replaced FilePath String String+ | Modified FilePath+ | Preference String String String+ deriving (Eq, Show)++data PatchLog =+ PatchLog+ { pID :: String+ , pDate :: UTCTime+ , pName :: String+ , pAuthor :: String+ , pIsUser :: Bool+ , pLog :: String+ , pDepends :: [String]+ }+ deriving (Eq, Show)+++data PatchChange+ = Moved+ { cmFrom :: FilePath+ , cmTo :: FilePath+ }+ | DirChange+ { cdName :: FilePath+ , cdType :: DirChange+ }+ | FileChange+ { cfName :: FilePath+ , cfType :: FileChange+ }+ | PrefChange+ { cpName :: String+ , cpFrom :: String+ , cpTo :: String+ }+ deriving (Eq, Show)++data DirChange+ = DirRemoved+ | DirAdded+ deriving (Eq, Show)++data FileChange+ = FileRemoved+ | FileAdded+ | FileHunk+ { fchLine :: Int+ , fchRemove :: BS.ByteString+ , fchAdd :: BS.ByteString+ }+ | FileBinary+ | FileReplace+ { fchFind :: String+ , fchReplace :: String+ }+ deriving (Eq, Show)++data PatchChanges =+ PatchChanges+ { pPatch :: PatchLog+ , pChanges :: [PatchChange]+ }+ deriving (Eq, Show)+++toLog :: (PatchInfo, [PatchInfo]) -> PatchLog+toLog (i, ds) =+ PatchLog+ (take 20 $ makeFilename i)+ (readTime defaultTimeLocale "%c" (calendarTimeToString (piDate i)))+ (fromBS $ _piName i)+ (fromBS $ _piAuthor i)+ False+ (doMarkdown . unlines . filter (not . ("Ignore-this" `isPrefixOf`)) . map fromBS $ _piLog i)+ (map (take 20 . makeFilename) ds)++findUsers :: [PatchLog] -> IO [PatchLog]+findUsers = findUsers' []+ where+ findUsers' :: [(String, Maybe String)] -> [PatchLog] -> IO [PatchLog]+ findUsers' _ [] = return []+ findUsers' checked (p:ps) =+ case lookup (pAuthor p) checked of+ Just (Just n) -> do+ rest <- findUsers' checked ps+ return (p { pAuthor = n, pIsUser = True } : rest)+ Just Nothing -> do+ rest <- findUsers' checked ps+ return (p { pAuthor = safeAuthorFrom (pAuthor p) } : rest)+ Nothing -> do+ mu <- getUserByEmail (emailFrom (pAuthor p))+ case mu of+ Just u -> do+ rest <- findUsers' ((pAuthor p, Just (uName u)) : checked) ps+ return (p { pAuthor = uName u, pIsUser = True } : rest)+ Nothing -> do+ rest <- findUsers' ((pAuthor p, Nothing) : checked) ps+ return (p { pAuthor = safeAuthorFrom (pAuthor p) } : rest)++toChanges :: ((PatchInfo, [PatchInfo]), [PatchChange]) -> PatchChanges+toChanges (p, changes) =+ PatchChanges (toLog p) (simplify [] changes)+ where+ simplify a [] = reverse a+ simplify a (c@(FileChange n t):cs)+ | t == FileBinary =+ simplify (c:filter (notFile n) a) (filter (notFile n) cs)+ simplify a (c@(FileChange _ (FileReplace _ _)):cs) =+ simplify (c:a) cs+ simplify a (FileChange n (FileHunk l f t):cs) =+ simplify (FileChange n (FileHunk l (highlight False n f) (highlight False n t)):a) cs+ simplify a (c@(FileChange _ _):cs) = simplify (c:a) cs+ simplify a (c@(PrefChange _ _ _):cs) = simplify (c:a) cs+ simplify a (_:cs) = simplify a cs++ notFile n (FileChange { cfName = n' })+ | n == n' = False+ notFile _ _ = True++primToChange :: Prim x y -> PatchChange+primToChange (Move f t) = Moved (drop 2 $ fn2fp f) (drop 2 $ fn2fp t)+primToChange (DP f t) = DirChange (drop 2 $ fn2fp f) (fromDP t)+primToChange (FP f t) = FileChange (drop 2 $ fn2fp f) (fromFP t)+primToChange (ChangePref n f t) = PrefChange n f t+-- primToChange a = error ("primToChange not supported for " ++ show a)++fromDP :: DirPatchType x y -> DirChange+fromDP RmDir = DirRemoved+fromDP AddDir = DirAdded++fromFP :: FilePatchType x y -> FileChange+fromFP RmFile = FileRemoved+fromFP AddFile = FileAdded+fromFP (Hunk l rs as) = FileHunk l (unlinesBS rs) (unlinesBS as)+ where+ unlinesBS = BS.concat . map (`BS.append` toBS "\n") +fromFP (Binary _ _) = FileBinary+fromFP (TokReplace _ f r) = FileReplace f r++getChanges :: String -> Int -> IO ([PatchLog], Int)+#ifdef DARCS28+getChanges dir page = R.withRepositoryDirectory [] dir $ R.RepoJob $ \dr -> do+#else+getChanges dir page = R.withRepositoryDirectory YesUseCache dir $ R.RepoJob $ \dr -> do+#endif+ pset <- R.readRepo dr++ let ps = fromPS (\np -> (P.patch2patchinfo np, P.getdeps np)) pset+ patches = map toLog (paginate 30 page ps)++ prettyLog <- findUsers patches++ return+ ( prettyLog+ , ceiling ((fromIntegral (length ps) :: Double) / 30)+ )++getPatch :: String -> String -> IO (Maybe PatchChanges)+#ifdef DARCS28+getPatch dir patch = R.withRepositoryDirectory [] dir $ R.PrimV1Job $ \dr -> do+#else+getPatch dir patch = R.withRepositoryDirectory YesUseCache dir $ R.PrimV1Job $ \dr -> do+#endif+ pset <- R.readRepo dr++ let ps = fromPS makeList pset+ ps' = filter (\(n, _) -> take 20 n == patch) ps+ case ps' of+ [] -> return Nothing+ ((_, p):_) -> do+ let cs = toChanges p+ [l] <- findUsers [pPatch cs]+ return $ Just cs{pPatch = l}++makeList :: (P.Effect p, PrimOf p ~ Prim)+ => P.Named p x y+ -> (String, ((PatchInfo,[PatchInfo]), [PatchChange]))+makeList np =+ (P.patchname np,+ ((P.patch2patchinfo np, P.getdeps np), domap np))++domap :: (P.Effect p, PrimOf p ~ Prim)+ => P.Named p x y+ -> [PatchChange]+domap np = WO.mapFL primToChange $ (P.effect np)++--domap2 :: (P.Effect p)+-- => P.Named p x y+-- -> FL (forall a b . Prim a b) x y+--domap2 np = WO.mapFL_FL fromPrim (P.effect np)++fromPS :: P.RepoPatch p => (forall x0 y0 . P.Named p x0 y0 -> b) -> R.PatchSet p x1 y1 -> [b]+fromPS f = WO.mapRL f . WO.reverseFL . R.patchSetToPatches++summarize :: [PatchChange] -> [Summary]+summarize = nub . summarize'+ where+ summarize' [] = []+ summarize' (FileChange n FileRemoved:cs) = (Removed n) : summarize cs+ summarize' (FileChange n FileAdded:cs) = (Added n) : summarize cs+ summarize' (FileChange n (FileReplace f t):cs) = (Replaced n f t) : summarize cs+ summarize' (FileChange n _:cs) = (Modified n) : summarize cs+ summarize' (PrefChange n f t:cs) = (Preference n f t) : summarize cs+ summarize' (_:cs) = summarize cs++isModification :: PatchChange -> Bool+isModification (FileChange _ (FileHunk _ _ _)) = True+isModification _ = False++#ifdef DARCS28+findAllDeps :: Commute p+#else+findAllDeps :: (Commute p, NameHack p)+#endif+ => RL (PatchInfoAnd p) x y -> [(PatchInfo, [PatchInfo])]+findAllDeps NilRL = []+findAllDeps (p :<: ps) = (info p, findDeps ps NilFL p) : findAllDeps ps++#ifdef DARCS28+findDeps :: Commute p+#else+findDeps :: (Commute p, NameHack p)+#endif+ => RL (PatchInfoAnd p) x y+ -> FL (PatchInfoAnd p) y z+ -> PatchInfoAnd p z z1+ -> [PatchInfo]+findDeps NilRL _ _ = []+findDeps (p :<: ps) deps me =+ case commuteWhatWeCanFL (p :> deps) of+ deps' :> p' :> NilFL ->+ case commute (p' :> me) of+ Just (me' :> _) ->+ -- not a dependency+ findDeps ps deps' me'++ Nothing ->+ -- a direct dependency+ info p' : findDeps ps (p :>: deps) me+ _ ->+ -- an indirect dependency+ findDeps ps (p :>: deps) me
@@ -0,0 +1,145 @@+{-# LANGUAGE ScopedTypeVariables, TypeFamilies, CPP #-}+module DarcsDen.Handler.Repository.Forks where++import Darcs.Patch.PatchInfoAnd (hopefully, info)+import Darcs.Patch.Depends (findUncommon)+import Darcs.Patch.Info (makeFilename)+import Darcs.Patch (getdeps)+import Darcs.Patch.Permutations+import Darcs.Repository+ ( RepoJob(..)+ , applyToWorking+ , finalizeRepositoryChanges+ , identifyRepositoryFor+ , invalidateIndex+ , readRepo+ , tentativelyMergePatches+#ifdef DARCS28+ , withGutsOf+#endif+ , withRepoLock+ )+import qualified Darcs.Repository as R (Repository)+#ifdef DARCS28+import Darcs.Utils (withCurrentDirectory)+import Darcs.CommandsAux (checkPaths)+import Darcs.Flags as DUF (DarcsFlag(SkipConflicts))+import Darcs.SelectChanges (filterOutConflicts)+import Darcs.Witnesses.Ordered+import Darcs.Witnesses.Sealed+#else+import Darcs.Util.File (withCurrentDirectory)+import Darcs.Patch.Witnesses.Ordered ((:\/:)(..), (:>)(..), lengthFL, reverseFL, mapRL)+import Darcs.Patch.Witnesses.Sealed+import Darcs.UI.CommandsAux (checkPaths)+import qualified Darcs.Repository.Flags as DRF+import Darcs.Repository.State (filterOutConflicts)+#endif++import DarcsDen.Handler.Repository.Changes+import DarcsDen.State.Repository+import DarcsDen.State.Session+import DarcsDen.State.Util++data Fork =+ Fork+ { fRepo :: Repository+ , fPatches :: [PatchLog]+ } deriving (Show)++getUpstreamChanges :: Repository -> IO (Maybe Fork)+getUpstreamChanges r = withParent (getForkChanges r) r++getDownstreamChanges :: Repository -> IO (Maybe Fork)+getDownstreamChanges r = withParent (flip getForkChanges r) r++-- Get patches that are in rOther but not r+getForkChanges :: Repository -> Repository -> IO Fork+getForkChanges rOther r = do+ let pdir = repoDir (rOwner rOther) (rName rOther)+ cdir = repoDir (rOwner r) (rName r)+#ifdef DARCS28+ withCurrentDirectory pdir $ withRepoLock [] $ RepoJob $ \(pr :: R.Repository p wR wU wR) -> do+ cr <- identifyRepositoryFor pr cdir+#else+ withCurrentDirectory pdir $ withRepoLock DRF.NoDryRun DRF.YesUseCache DRF.YesUpdateWorking DRF.NoUMask $ RepoJob $ \(pr :: R.Repository p wR wU wR) -> do+ cr <- identifyRepositoryFor pr DRF.YesUseCache cdir+#endif+ pps <- readRepo pr+ cps <- readRepo cr+ let cs = case findUncommon pps cps of+ _ :\/: them ->+ let depends = map (\(p, ds) -> (makeFilename p, ds)) (findAllDeps (reverseFL them))+ in mapRL+ (\p ->+ let l = toLog (info p, getdeps (hopefully p))+ in case lookup (makeFilename (info p)) depends of+ Just ds -> l{pDepends = map (take 20 . makeFilename) ds}+ Nothing -> l)+ (reverseFL them)+ changes <- findUsers cs+ return $ Fork r changes++mergePatches :: Repository -> Repository -> [String] -> Session -> IO Bool+mergePatches rDest r ps s = do+#ifdef DARCS28+ withCurrentDirectory (origin rDest) $ withRepoLock [] $ RepoJob $ \(pr :: R.Repository p wR wU wR) -> do+ cr <- identifyRepositoryFor pr fork+#else+ withCurrentDirectory (origin rDest) $ withRepoLock DRF.NoDryRun DRF.YesUseCache DRF.YesUpdateWorking DRF.NoUMask $ RepoJob $ \(pr :: R.Repository p wR wU wR) -> do+ cr <- identifyRepositoryFor pr DRF.YesUseCache fork+#endif++ pps <- readRepo pr+ cps <- readRepo cr++ case findUncommon pps cps of+ us :\/: them ->+ case partitionFL ((`elem` ps) . take 20 . makeFilename . info) them of+ chosen :> _ -> do+#ifdef DARCS28+ (conflicts, Sealed merge) <- filterOutConflicts [DUF.SkipConflicts] (reverseFL us) pr chosen+#else+ (conflicts, Sealed merge) <- filterOutConflicts (reverseFL us) pr chosen+#endif++ if conflicts || lengthFL merge < length ps+ then do+ flip warn s . unwords $+ [ "Patches for fork"+ , "\"" ++ rOwner r ++ "/" ++ rName r ++ "\""+ , "could not be applied cleanly and have been skipped."+ ]+ return False+ else do++ checkPaths [] merge++#ifdef DARCS28+ Sealed pw <- tentativelyMergePatches pr "pull" [] us merge+#else+ Sealed pw <- tentativelyMergePatches pr "pull" DRF.NoAllowConflicts DRF.YesUpdateWorking DRF.NoExternalMerge DRF.NoWantGuiPause DRF.GzipCompression DRF.NormalVerbosity (DRF.UseIndex, DRF.ScanKnown) us merge+#endif+ invalidateIndex pr+#ifdef DARCS28+ withGutsOf pr $ do+ finalizeRepositoryChanges pr+ applyToWorking pr [] pw+ return ()+#else+ finalizeRepositoryChanges pr DRF.YesUpdateWorking DRF.GzipCompression+ applyToWorking pr DRF.NormalVerbosity pw+#endif+ return True+ where+ origin p = repoDir (rOwner p) (rName p)+ fork = repoDir (rOwner r) (rName r)++canView :: Maybe String -> Repository -> Bool+canView _ Repository{rIsPrivate=False} = True+canView (Just user) r | user == rOwner r || user `elem` rMembers r = True+canView _ _ = False++canMerge :: Maybe String -> Repository -> Bool+canMerge Nothing _ = False+canMerge (Just user) r = user == rOwner r || user `elem` rMembers r
@@ -0,0 +1,80 @@+{-# LANGUAGE TypeFamilies, CPP #-}+module DarcsDen.Handler.Repository.Util where++#ifndef DARCS28+import Darcs.Repository.Flags (UseCache(..))+#endif+import Darcs.Repository.Internal (IdentifyRepo(..))+import Darcs.Patch ( RepoPatch )+import Darcs.Patch.Apply ( ApplyState )+import Storage.Hashed.Tree ( Tree )+import qualified Darcs.Repository as R+import qualified Data.ByteString as BS++#ifdef HIGHLIGHTINGKATE+import Safe (headDef)+import Text.Highlighting.Kate+import Text.Blaze.Html.Renderer.Utf8 (renderHtml)+import qualified Data.ByteString.UTF8 as BUTF8++import DarcsDen.Util+#elif defined(HIGHLIGHTER)+import Text.Highlighter+import Text.Highlighter.Formatters.Html+import Text.Blaze.Renderer.Utf8 (renderHtml)++import DarcsDen.Util+#endif++++getRepo :: (RepoPatch p, ApplyState p ~ Tree) => String -> IO (Either String (R.Repository p r u t))+getRepo p = do+#ifdef DARCS28+ ir <- R.maybeIdentifyRepository [] p+#else+ ir <- R.maybeIdentifyRepository YesUseCache p+#endif+ case ir of+ GoodRepository r -> return (Right r)+ BadRepository s -> return (Left s)+ NonRepository s -> return (Left s)++highlightBlob :: FilePath -> BS.ByteString -> BS.ByteString+highlightBlob = highlight True++highlight :: Bool -> FilePath -> BS.ByteString -> BS.ByteString+#ifdef HIGHLIGHTINGKATE+highlight = highlightHighlightingKate+#elif defined(HIGHLIGHTER)+highlight = highlightHighlighter+#else+highlight _ _ s = s+#endif++#ifdef HIGHLIGHTINGKATE+highlightHighlightingKate :: Bool -> FilePath -> BS.ByteString -> BS.ByteString+highlightHighlightingKate linenums filename bs+ -- | '\xFFFD' `BS.elem` bs' = "Could not highlight, click the file name to view raw content"+ | otherwise = bs'+ where+ s = BUTF8.toString bs -- invalid characters replaced with '\xFFFD'+ lang = headDef "" $ languagesByFilename filename+ sourcelines = highlightAs lang s+ html = formatHtmlBlock defaultFormatOpts{numberLines=linenums, lineAnchors=True} sourcelines+ bs' = strictLBS $ renderHtml html+#endif++#ifdef HIGHLIGHTER+highlightHighlighter :: Bool -> FilePath -> BS.ByteString -> BS.ByteString+highlightHighlighter lineNums fn s =+ case lexer of+ Just l ->+ case runLexer l s of+ Right ts -> render ts+ Left _ -> render [Token Text s]+ Nothing -> render [Token Text s]+ where+ lexer = lexerFromFilename fn+ render = strictLBS . renderHtml . format lineNums+#endif
@@ -0,0 +1,461 @@+{-# LANGUAGE OverloadedStrings #-}+module DarcsDen.Handler.User where++import Control.Monad (when, replicateM)+import Control.Monad.Trans+import qualified Data.ByteString.Char8 as BS+import Data.Char (toLower)+import Data.Function (on)+import Data.Time (getCurrentTime)+import Data.Map ((!))+import Data.Maybe (fromJust, isJust)+import Data.List (intercalate, nub, nubBy)+import Data.Text (pack)+import qualified Data.Text.Lazy as DTL+import System.Random (randomRIO)+import Snap.Core+import Network.HTTP.Conduit (queryString)+import Network.Mail.Mime(simpleMail, Address(..), renderSendMail)++import DarcsDen.Settings+import DarcsDen.State.ForgotPassword+import DarcsDen.State.Repository+import DarcsDen.State.Session+import DarcsDen.State.User+import DarcsDen.State.Util+import DarcsDen.Util (fromBS, toUrl)+import DarcsDen.Validate+import DarcsDen.WebUtils+import DarcsDen.Github.Paths+import DarcsDen.Github.Util+import DarcsDen.Github.Handler+import DarcsDen.Google.Paths+import DarcsDen.Google.Util+import DarcsDen.Google.Handler+import qualified DarcsDen.Pages.User as Page+++user :: Page+user s = do+ mname <- getParam "user"+ when (mname == Nothing) (errorPage "Username not specified.")++ muser <- getUser . fromBS . fromJust $ mname+ case muser of+ Nothing -> notFound+ Just u -> do+ let getrepos | sUser s == Just (uName u) = getOwnerRepositories+ | otherwise = getUserRepositories+ rs <- getrepos (uName u)+ doPage (Page.user u rs) s++register :: Page+register s = doPage (Page.register []) s++githubLogin :: Page+githubLogin s = do+ cid <- getGId+ random <- liftIO $ replicateM 50 (randomRIO ('a', 'z'))+ let options = [("client_id", cid),+ ("redirect_uri", baseUrl++"login/github/response"),+ ("scope", "user,user:email"),+ ("state", random)]+ setOAuthReg (Just (Left random)) s+ redirectTo (BS.unpack $ toUrl $ githubAccessRequest { queryString = BS.pack $ intercalate "&" (map (\(x,y) -> x ++ "=" ++ y) options) } )++githubLoginResponse :: Page+githubLoginResponse s = validate+ [ predicate "state" ((sOAuthReg s ==). Just . Left) "state did not match!"+ ]+ (\(OK _) -> do+ access_token <- getAccessToken+ login' <- getLoginID access_token+ u <- getUserByGithub login'+ case u of+ Nothing -> do+ email <- getEmailID access_token+ keys <- getKeys access_token+ setOAuthReg (Just (Right (Github login'))) s+ message "There is no account with this github credentials, creating new account" s+ Just s' <- getSession (sID s)+ doPage (Page.register [("name", login'), ("email", email), ("keys", unlines keys), ("oauth", "yes")]) s'+ Just r -> do+ setUser (Just $ uName r) s+ success "Logged in!" s+ redirectTo (baseUrl ++ uName r))+ (\(Invalid failed) -> + notify Warning s failed+ >>= doPage (Page.login []))++googleLogin :: Page+googleLogin s = do+ cid <- getGoogleClientId+ random <- liftIO $ replicateM 50 (randomRIO ('a', 'z'))+ let options = [ ("client_id", cid)+ , ("response_type", "code")+ , ("scope", "openid email")+ , ("redirect_uri", baseUrl++"login/google/response")+ , ("state", random)+ ]+ setOAuthReg (Just (Left random)) s+ redirectTo (BS.unpack $ toUrl $ googleAccessRequest { queryString = BS.pack $ intercalate "&" (map (\(x,y) -> x ++ "=" ++ y) options) } )++googleLoginResponse :: Page+googleLoginResponse s = validate+ [ predicate "state" ((sOAuthReg s ==). Just . Left) "state did not match!"+ ]+ (\(OK _) -> do+ (sub, email) <- getSubAndEmail "login"+ u <- getUserByGoogle sub+ case u of+ Nothing -> do+ setOAuthReg (Just (Right (Google sub))) s+ message "There is no account with this google credentials, creating new account" s+ Just s' <- getSession (sID s)+ doPage (Page.register [("email", email), ("oauth", "yes")]) s'+ Just r -> do+ setUser (Just $ uName r) s+ success "Logged in!" s+ redirectTo (baseUrl ++ uName r))+ (\(Invalid failed) -> + notify Warning s failed+ >>= doPage (Page.login []))+++githubRegister :: Page+githubRegister s = do+ cid <- getGId+ random <- liftIO $ replicateM 50 (randomRIO ('a', 'z'))+ let options = [("client_id", cid),+ ("redirect_uri", baseUrl++"register/github/response"),+ ("scope", "user,user:email"),+ ("state", random)]+ setOAuthReg (Just (Left random)) s+ redirectTo (BS.unpack $ toUrl $ githubAccessRequest { queryString = BS.pack $ intercalate "&" (map (\(x,y) -> x ++ "=" ++ y) options) } )++githubRegisterResponse :: Page+githubRegisterResponse s = validate+ [ predicate "state" ((sOAuthReg s ==). Just. Left) "state did not match!"+ ]+ (\(OK _) -> do+ access_token <- getAccessToken+ login' <- getLoginID access_token+ u <- getUserByGithub login'+ case u of+ Nothing -> do+ email <- getEmailID access_token+ keys <- getKeys access_token+ setOAuthReg (Just (Right (Github login'))) s+ doPage (Page.register [("name", login'), ("email", email), ("keys", unlines keys), ("oauth", "yes")]) s+ Just _ -> do+ warn "This github account is already matched with an account!" s+ redirectTo baseUrl)+ (\(Invalid failed) ->+ notify Warning s failed+ >> redirectTo baseUrl)++googleRegister :: Page+googleRegister s = do+ cid <- getGoogleClientId+ random <- liftIO $ replicateM 50 (randomRIO ('a', 'z'))+ let options = [ ("client_id", cid)+ , ("response_type", "code")+ , ("scope", "openid email")+ , ("redirect_uri", baseUrl++"register/google/response")+ , ("state", random)+ ]+ setOAuthReg (Just (Left random)) s+ redirectTo (BS.unpack $ toUrl $ googleAccessRequest { queryString = BS.pack $ intercalate "&" (map (\(x,y) -> x ++ "=" ++ y) options) } )++googleRegisterResponse :: Page+googleRegisterResponse s = validate+ [ predicate "state" ((sOAuthReg s ==). Just. Left) "state did not match!"+ ]+ (\(OK _) -> do+ (sub, email) <- getSubAndEmail "register"+ u <- getUserByGoogle sub+ case u of+ Nothing -> do+ setOAuthReg (Just (Right (Google sub))) s+ doPage (Page.register [("email", email), ("oauth", "yes")]) s+ Just _ -> do+ warn "This google account is already matched with an account!" s+ redirectTo baseUrl)+ (\(Invalid failed) ->+ notify Warning s failed+ >> redirectTo baseUrl)++doRegister :: Page+doRegister s = validate+ [ iff (nonEmpty "name")+ (\(OK r) -> io "name is already in use" $ do+ u <- getUser (r ! "name")+ return (u == Nothing))+ , predicate "name" isSane+ "contain only alphanumeric characters, underscores, and hyphens"+ , nonEmpty "email"+ , iff (nonEmpty "password1" `And` nonEmpty "password2")+ (const $ equal "password1" "password2") `Or` predicate "password1" (const usingOAuth) ""+ , predicate "email" (const True) "be a valid email"+ , Predicate "security_question" ((=="darcs").map toLower) "be answered correctly" `Or` predicate "security_question" (const usingOAuth) ""+ ]+ (\(OK r) -> do+ now <- liftIO getCurrentTime+ slt <- liftIO (salt 32)+ keys <- input "keys" ""+ new <- newUser+ User { uID = Nothing+ , uRev = Nothing+ , uName = r ! "name"+ , uPaS = fmap (\p -> (hashPassword p slt, slt)) (let v = r ! "password1" in if null v then Nothing else Just v)+ , uOAuthIDs = oid+ , uFullName = ""+ , uWebsite = ""+ , uEmail = r ! "email"+ , uKeys = lines keys+ , uJoined = now+ }++ setUser (Just (uName new)) s+ success "You have been successfully registered and logged in." s+ redirectTo (baseUrl ++ (r ! "name")))+ (\(Invalid failed) -> do+ is <- getInputs+ notify Warning s failed+ >>= doPage (Page.register is))+ where sor = sOAuthReg s+ (oid, usingOAuth) = case sor of+ Just (Right oid') -> ([oid'], True)+ _ -> ([], False)++login :: Page+login s = doPage (Page.login []) s++doLogin :: Page+doLogin s = validate+ [ iff (nonEmpty "name" `And` nonEmpty "password") $ \(OK r) ->+ io "invalid username or password" $ do+ c <- getUser (r ! "name")+ case c of+ Nothing -> return False+ Just u -> return (checkPassword (r ! "password") u)+ ]+ (\(OK r) -> do+ setUser (Just $ r ! "name") s+ success "Logged in!" s+ redirectTo (baseUrl ++ (r ! "name")))+ (\(Invalid failed) -> do+ is <- getInputs+ notify Warning s failed+ >>= doPage (Page.login is))++logout :: Page+logout s = do+ setUser Nothing s+ success "Logged out." s+ redirectTo baseUrl++settings :: Page+settings s@(Session { sUser = Nothing }) = do+ warn "You must be logged in to change your settings." s+ redirectTo (baseUrl ++ "login")+settings s@(Session { sUser = Just n }) = validate+ [ io "you do not exist" $ fmap (/= Nothing) (getUser n)+ ]+ (\(OK _) -> do+ Just u <- getUser n+ doPage (Page.settings u) s)+ (\(Invalid f) -> notify Warning s f >> redirectTo baseUrl)++doSettings :: Page+doSettings s@(Session { sUser = Nothing }) = do+ warn "You must be logged in to change your settings." s+ redirectTo (baseUrl ++ "login")+doSettings s@(Session { sUser = Just n }) = validate+ [ io "you do not exist" $ fmap (/= Nothing) (getUser n)+ , onlyIf (nonEmpty "password1") $+ And (nonEmpty "password2" `And` equal "password1" "password2") $+ onlyIf (io "" $ do+ Just u <- getUser n+ return (isJust.uPaS $ u)) $+ iff (nonEmpty "password") $ \(OK is) -> io "password incorrect" $ do+ Just u <- getUser n+ return (checkPassword (is ! "password") u)+ ]+ (\(OK _) -> do+ Just u <- getUser n++ fullName <- input "full_name" (uFullName u)+ website <- input "website" (uWebsite u)+ keys <- input "keys" (unlines (uKeys u))++ oldp <- input "password" ""+ npass1 <- input "password1" ""+ npass2 <- input "password2" ""+ slt <- liftIO (salt 32)+ let npass+ | not ((null oldp && isJust (uPaS u)) || null npass1 || null npass2) && npass1 == npass2 =+ Just (hashPassword npass1 slt, slt)+ | otherwise =+ uPaS u++ updateUser u+ { uFullName = fullName+ , uWebsite = website+ , uKeys = lines keys+ , uPaS = npass+ }++ success "Settings updated." s++ redirectTo (baseUrl ++ "settings"))+ (\(Invalid f) -> notify Warning s f >> redirectTo (baseUrl ++ "settings"))++syncWithGithub :: Page+syncWithGithub s@(Session { sUser = Nothing }) = do+ warn "You must be logged in." s+ redirectTo (baseUrl ++ "login")+syncWithGithub s@(Session { sUser = Just n }) = validate+ [ io "you do not exist" $ fmap (/= Nothing) (getUser n)+ ]+ (\(OK _) -> do+ cid <- getGId+ random <- liftIO $ replicateM 50 (randomRIO ('a', 'z'))+ let options = [("client_id", cid),+ ("redirect_uri", baseUrl++"sync/github/response"),+ ("scope", "user"),+ ("state", random)]+ setOAuthReg (Just (Left random)) s+ redirectTo (BS.unpack $ toUrl $ githubAccessRequest { queryString = BS.pack $ intercalate "&" (map (\(x,y) -> x ++ "=" ++ y) options) } ))+ (\(Invalid f) -> notify Warning s f >> redirectTo baseUrl)++syncWithGithubResponse :: Page+syncWithGithubResponse s@(Session { sUser = Nothing }) = do+ warn "You must be logged in." s+ redirectTo (baseUrl ++ "login")+syncWithGithubResponse s@(Session { sUser = Just n }) = validate+ [ io "you do not exist" $ fmap (/= Nothing) (getUser n)+ , predicate "state" ((sOAuthReg s ==). Just . Left) "state did not match!"+ ]+ (\(OK _) -> do+ Just u' <- getUser n+ access_token <- getAccessToken+ login' <- getLoginID access_token+ u <- getUserByGithub login'+ case u of+ Just x | uName x /= uName u' -> do+ warn "This github account is already linked to another account!" s+ setOAuthReg Nothing s+ redirectTo (baseUrl ++ "settings")+ _ -> do+ keys <- getKeys access_token+ updateUser u'+ { uOAuthIDs = nub (Github login':uOAuthIDs u')+ , uKeys = nubBy (on (==) cp) (keys ++ uKeys u')+ }+ success "Account Synced." s+ setOAuthReg Nothing s+ redirectTo (baseUrl ++ "settings"))+ (\(Invalid f) -> notify Warning s f >> redirectTo baseUrl)+ where cp = take 2 . words++syncWithGoogle :: Page+syncWithGoogle s@(Session { sUser = Nothing }) = do+ warn "You must be logged in." s+ redirectTo (baseUrl ++ "login")+syncWithGoogle s@(Session { sUser = Just n }) = validate+ [ io "you do not exist" $ fmap (/= Nothing) (getUser n)+ ]+ (\(OK _) -> do+ cid <- getGoogleClientId+ random <- liftIO $ replicateM 50 (randomRIO ('a', 'z'))+ let options = [ ("client_id", cid)+ , ("response_type", "code")+ , ("scope", "openid email")+ , ("redirect_uri", baseUrl++"sync/google/response")+ , ("state", random)+ ]+ setOAuthReg (Just (Left random)) s+ redirectTo (BS.unpack $ toUrl $ googleAccessRequest { queryString = BS.pack $ intercalate "&" (map (\(x,y) -> x ++ "=" ++ y) options) } ))+ (\(Invalid f) -> notify Warning s f >> redirectTo baseUrl)++syncWithGoogleResponse :: Page+syncWithGoogleResponse s@(Session { sUser = Nothing }) = do+ warn "You must be logged in." s+ redirectTo (baseUrl ++ "login")+syncWithGoogleResponse s@(Session { sUser = Just n }) = validate+ [ io "you do not exist" $ fmap (/= Nothing) (getUser n)+ , predicate "state" ((sOAuthReg s ==). Just . Left) "state did not match!"+ ]+ (\(OK _) -> do+ Just u' <- getUser n+ (sub, _) <- getSubAndEmail "sync"+ u <- getUserByGoogle sub+ case u of+ Just x | uName x /= uName u' -> do+ warn "This google account is already linked to another account!" s+ setOAuthReg Nothing s+ redirectTo (baseUrl ++ "settings")+ _ -> do+ updateUser u'+ { uOAuthIDs = nub (Google sub:uOAuthIDs u')+ }+ success "Account Synced." s+ setOAuthReg Nothing s+ redirectTo (baseUrl ++ "settings"))+ (\(Invalid f) -> notify Warning s f >> redirectTo baseUrl)++forgotPassword :: Page+forgotPassword s = doPage (Page.forgotPassword []) s++forgotPasswordResponse :: Page+forgotPasswordResponse s = validate+ [ iff (nonEmpty "username") (\(OK r) -> io "User does not exist." (fmap isJust (getUser (r ! "username")))) ]+ (\(OK r) -> do+ Just u <- getUser (r ! "username")+ str <- createFpForUser u+ let v = baseUrl ++ "recovery?fpid=" ++ str+ liftIO $ simpleMail+ (Address (Just . pack $ uName u) (pack $ uEmail u))+ (Address (Just . pack $ sendName) (pack $ sendEmail))+ (pack $ "Reset Password")+ DTL.empty+ (DTL.pack $ "<a href="++v++">reset password</a>")+ []+ >>= renderSendMail+ success "Mail sent to user's email account." s+ redirectTo baseUrl)+ (\(Invalid f) -> notify Warning s f >> redirectTo (baseUrl ++ "forgotpassword"))++resetPassword :: Page+resetPassword s = validate+ [ iff (nonEmpty "fpid") (\(OK r) -> io "invalid or outdated fpid" (fmap isJust (getUserFromFp (r ! "fpid"))))+ ]+ (\(OK r) -> do+ Just u <- getUserFromFp (r ! "fpid")+ s' <- setUser (Just $ uName u) s+ deleteFp (r!"fpid")+ doPage (Page.resetPassword []) s'+ )+ (\(Invalid f) -> notify Warning s f >> redirectTo baseUrl)++resetPasswordResponse :: Page+resetPasswordResponse s@(Session { sUser = Nothing }) = do+ warn "You must be logged in." s+ redirectTo baseUrl+resetPasswordResponse s@(Session { sUser = Just n }) = validate+ [ nonEmpty "password1" + , equal "password1" "password2"+ ]+ (\(OK r) -> do+ Just u <- getUser n+ slt <- liftIO (salt 32)+ let npass = Just (hashPassword (r!"password1") slt, slt)+ updateUser u+ { uPaS = npass+ }+ success "Password Changed." s+ redirectTo baseUrl)+ (\(Invalid failed) -> do+ notify Warning s failed+ >>= doPage (Page.resetPassword []))
@@ -0,0 +1,191 @@+{-# LANGUAGE PatternGuards, CPP #-}+{-# OPTIONS_GHC -F -pgmF trhsx #-}+module DarcsDen.Pages.Base where++import Data.Char (toLower)+import Data.List (sortBy)+import Data.Maybe (fromMaybe)+import Data.Ord (comparing)+import HSP++import DarcsDen.Pages.HSPage ( HSPage )+import DarcsDen.State.Session+import DarcsDen.Settings+import DarcsDen.State.User+++base :: String -> Bool -> HSP XML -> HSP XML -> HSP XML -> HSPage+base title indexable crumb pagenav content sess =+ <html>+ <head>+ <title><% title %><% if not (null title) then " :: " else "" %><% hostname %></title>+ <% if indexable then <% "" %> else <% <meta name="robots" content="noindex" /> %> %>+ <link rel="shortcut icon" href=(baseUrl ++ "public/images/favicon.ico") />+ <link rel="stylesheet" href=(baseUrl ++ "public/bootstrap/css/bootstrap.min.css") type="text/css" />+ -- <meta name="viewport" content="width=device-width, initial-scale=1.0" />+ -- <link rel="stylesheet" href=(baseUrl ++ "public/bootstrap/css/bootstrap-responsive.css") type="text/css" />+ <link rel="stylesheet" href=(baseUrl ++ "public/css/main.css") type="text/css" />+#ifdef HIGHLIGHTER+ <link rel="stylesheet" href=(baseUrl ++ "public/css/highlight.css") />+#endif+ <link rel="stylesheet" href=(baseUrl ++ "public/codemirror-3.14/lib/codemirror.css") />+ <link rel="stylesheet" href=(baseUrl ++ "public/codemirror-3.14/theme/elegant.css") />+ <script src=(baseUrl ++ "public/js/jquery-1.8.1.min.js") type="text/javascript"></script>+ <script src=(baseUrl ++ "public/bootstrap/js/bootstrap.min.js") type="text/javascript"></script>+ <script src=(baseUrl ++ "public/js/relatize.js") type="text/javascript"></script>+ <script src=(baseUrl ++ "public/js/main.js") type="text/javascript"></script>+ <script src=(baseUrl ++ "public/codemirror-3.14/lib/codemirror-compressed.js") type="text/javascript"></script>+ </head>+ <body>+ <div class="container-fluid">+ <div class="row-fluid header">+ <div class="offset1 span11">+ <% sitenav (sUser sess) %>+ <h1 class="head">+ <% siteLink %>+ <span class="crumb">+ <% cdata " :: " %>+ <% crumb %>+ </span>+ </h1>+ </div>+ </div>++ <div class="row-fluid middle">+ <div class="offset1 span9 content">+ <% map notification (sNotifications sess) %>+ <% content %>+ </div>+ <div class="span2 navbar pagenav">+ <% pagenav %>+ </div>+ </div>++ <div class="row-fluid footer">+ <div class="span12">+ <% siteFooter %>+ </div>+ </div>++ </div>+ </body>+ </html>+ where+ sitenav (Just u) =+ <ul class="navbar sitenav links">+ <li class="home"><a class="small button" href=(baseUrl ++ u)>my repos</a></li>+ <li class="settings"><a class="small button" href=(baseUrl ++ "settings")>settings</a></li>+ <li class="logout"><a class="small button" href=(baseUrl ++ "logout")>log out</a></li>+ </ul>+ sitenav Nothing =+ <ul class="navbar sitenav links">+ <% if multiuser+ then <% <li class="register"><a class="small button" href=(baseUrl ++ "register")>register</a></li> %>+ else <% "" %>+ %>+ <li class="login"><a class="small button" href=(baseUrl ++ "login")>log in</a></li>+ </ul>++ notification :: Notification -> HSP XML+ notification (Success msg) = <div class="notification success"><% msg %></div>+ notification (Message msg) = <div class="notification message"><% msg %></div>+ notification (Warning msg) = <div class="notification warning"><% msg %></div>+++frontpage :: [User] -> HSPage+frontpage us = base+ ""+ True+ <span>home</span>+ <div></div>+ <div class="row-fluid frontpage">++ <div class="span3">+ <h2>users</h2>+ <ul class="user-repos"><% map userlink us' %></ul>++ <h2>repos</h2>+ <ul class="user-repos">+ <li class="username"><a href=(baseUrl ++ "explore")>All repos</a></li>+ </ul>+ </div>++ <div class="span9 markdown">+ <% frontPageContent %>+ </div>++ </div>+ where+ us' :: [User]+ us' = sortBy (comparing (map toLower . uName)) us+ userlink :: User -> HSP XML+ userlink User{uName=u} = <li class="username"><a href=(u)><% u %></a></li>++field :: HSP XML -> String -> String -> HSP XML+field f l n =+ <div class="field">+ <% f %>+ <label><% l %></label> -- TODO: for=+ <%+ if n /= ""+ then <span class="note"><% n %></span>+ else <br />+ %>+ </div>++input :: String -> String -> HSP XML+input n v = <input type="text" name=n id=n value=v size="40" maxlength="1000" />++inputWith :: String -> String -> [(String,String)] -> HSP XML+inputWith n v attrs = <input type="text" name=n id=n value=v (map (\(a,b) -> a := b) attrs) />++textarea :: Int -> String -> String -> HSP XML+textarea r n v = <textarea rows=r name=n id=n><% v %></textarea>++input' :: [(String, String)] -> String -> HSP XML+input' is n = input n (fromMaybe "" (lookup n is))++inputWith' :: [(String, String)] -> String -> [(String,String)] -> HSP XML+inputWith' is n attrs = inputWith n (fromMaybe "" (lookup n is)) attrs++checkbox' :: [(String, String)] -> String -> HSP XML+checkbox' is n+ | n `elem` (map fst is) =+ <div class="inline-wrapper"><% box `set` ("checked" := "checked") %></div>+ | otherwise = <div class="inline-wrapper"><% box %></div>+ where box = <input type="checkbox" name=n />++checkbox :: Bool -> [(String, String)] -> String -> HSP XML+checkbox False = checkbox'+checkbox True = \is n -> checkbox' ((n, "1"):is) n++password' :: [(String, String)] -> String -> HSP XML+password' is n = <input type="password" name=n id=n value=(fromMaybe "" (lookup n is)) />++passwordWith' :: [(String, String)] -> String -> [(String, String)] -> HSP XML+passwordWith' is n attrs = <input type="password" name=n id=n value=(fromMaybe "" (lookup n is)) (map (\(a,b) -> a := b) attrs) />++textarea' :: [(String, String)] -> Int -> String -> HSP XML+textarea' is r n = textarea r n (fromMaybe "" (lookup n is))++submit :: String -> HSP XML+submit l =+ <div class="buttons">+ <input type="submit" value=l />+ <br />+ </div>++paginate :: String -> Int -> Int -> HSP XML+paginate _ _ 1 = <div class="dd-pagination"></div>+paginate url page totalpages =+ <div class="dd-pagination">+ <ul>+ <% if page /= 1 then <% prev %> else <% spacer %> %>+ <li>page <% show page %> of <% show totalpages %></li>+ <% if page /= totalpages then <% next %> else <% spacer %> %>+ </ul>+ </div>+ where+ prev = <li class="prev"><a class="small button" href=(url ++ "/page/" ++ show (page - 1))><% "<-" %> prev</a></li>+ next = <li class="next"><a class="small button" href=(url ++ "/page/" ++ show (page + 1))>next <% "->" %></a></li>+ spacer = <li class="prevnextspacer"></li>
@@ -0,0 +1,6 @@+module DarcsDen.Pages.HSPage where++import HSP (XML, HSP )+import DarcsDen.State.Session++type HSPage = Session -> HSP XML
@@ -0,0 +1,953 @@+{-# OPTIONS_GHC -F -pgmF trhsx #-}+{-# LANGUAGE RecordWildCards #-}+module DarcsDen.Pages.Repository where++import Data.Digest.Pure.MD5 (md5)+import Data.List (sortBy)+import Data.Maybe (fromJust)+import Data.Time (UTCTime, formatTime)+import HSP+import System.Locale (defaultTimeLocale)+import qualified Data.ByteString as BS++import DarcsDen.Handler.Repository.Browse (RepoItem(..))+import DarcsDen.Handler.Repository.Changes+ ( FileChange(..)+ , PatchLog(..)+ , PatchChange(..)+ , Summary(..)+ )+import DarcsDen.Handler.Repository.Forks (Fork(..), canMerge)+import DarcsDen.Pages.HSPage ( HSPage )+import DarcsDen.Pages.Base+import DarcsDen.Pages.Util ( repoForkSourceDescription, links, links' )+import DarcsDen.Settings+import DarcsDen.State.Comment+import DarcsDen.State.Issue+import DarcsDen.State.Repository+import DarcsDen.State.Session+import DarcsDen.State.User+import DarcsDen.Util hiding (paginate)+++repoBase' :: User -> Bool -> Repository -> String -> HSP XML -> HSP XML -> HSP XML -> HSPage+repoBase' _ i r t b c l s = base+ t+ i+ <span>+ <a href=(repoOwnerURL r)><% rOwner r %></a> ->+ <a href=(repoURL r) class=(if rIsPrivate r then "private-repo" else "public-repo")><% rName r %></a>+ <% b %>+ </span>+ <div><% l %></div>+ <div class="repo">+ <div class="content">+ <p class="repo-desc">+ <% rDescription r %>+ <% repoForkSourceDescription r %>+ <%+ if rWebsite r /= ""+ then+ <%+ <span class="repo-website"> (<a href=(rWebsite r) rel="nofollow"><% rWebsite r %></a>)</span>+ %>+ else <% "" %>+ %>+ </p>+ <% c %>+ </div>+ </div>+ s++repoBase :: User -> Bool -> Repository -> String -> HSP XML -> HSP XML -> HSPage+repoBase u i r t b c s = repoBase' u i r t b c (links r (Just (rOwner r) == sUser s)) s++init :: [(String, String)] -> HSPage+init is = base+ "init"+ False+ <span>init</span>+ <div></div>+ <div class="init">+ <h2>initialize</h2>+ <form action=(baseUrl ++ "init") method="post">+ <fieldset>+ <% field (input' is "name") "name" "" %>+ <% field (input' is "description") "description" "" %>+ <% field (input' is "website") "website" "" %>+ -- <% field (input' is "bootstrap") "bootstrap" "" %>+ <% field (checkbox' is "private") "private?" "" %>+ <% submit "create repository" %>+ </fieldset>+ </form>+ </div>+++repo :: User -> Repository -> [RepoItem] -> [RepoItem] -> Maybe String -> Bool -> HSPage+repo u r files path readme member sess = repoBase' u True r+ (uName u ++ "'s " ++ rName r)+ <span> -> files</span>+ (filesList (null files))+ lks+ sess+ where+ lks = if (member || (Just (rOwner r) == sUser sess))+ then links' r [ <li class="edit"><a href=(repoURL r ++ "/edit")>repository settings</a></li>+ , <li class="delete"><a href=(repoURL r ++ "/delete")>delete</a></li>+ , <li class="create"><a href=(repoURL r ++ "/add-file" ++ (if null path then "" else iPath.last $ path))>add file</a></li>+ ]+ else links r False+ filesList :: Bool -> HSP XML+ filesList True =+ <div class="repo-browse no-files">+ <h2>nothing here yet!</h2>+ <%+ if Just (rOwner r) == sUser sess+ then ownerMessage+ else if member+ then memberMessage+ else otherMessage+ %>+ </div>+ where+ ownerMessage =+ <p class="repo-empty">+ push your code to <code><% uName u %>@<% hostname %>:<% rName r %></code> to get started+ </p>+ memberMessage =+ <p class="repo-empty">+ push your code to <code><% fromJust (sUser sess) %><% hostname %>:<% rOwner r %>/<% rName r %></code> to get started+ </p>+ otherMessage =+ <p class="repo-empty">move along, citizen</p>+ filesList False =+ <div class="repo-browse">+ <h2 class="path">+ <a href=(repoURL r ++ "/browse")>root</a>+ <% map (\p -> <span class="path-item"> / <a href=(repoURL r ++ "/browse" ++ iPath p)><% iName p %></a></span>) path %>+ </h2>++ <ul class="repo-files">+ <% map file files %>+ </ul>++ <%+ case readme of+ Nothing -> <% "" %>+ Just s ->+ <%+ <div class="repo-readme">+ <div class="markdown">+ <% cdata s %>+ </div>+ </div>+ %>+ %>+ </div>++ file :: RepoItem -> HSP XML+ file f =+ <li class=(if iIsDirectory f then "directory" else "file")>+ <a href=(repoURL r ++ "/browse" ++ iPath f)><% iName f %></a>+ </li>++edit :: User -> Repository -> [User] -> [(String, String)] -> HSPage+edit u r ms is = repoBase u False r+ "edit"+ <span> -> edit</span>+ <div class="repo-edit">+ <form action=(repoURL r ++ "/edit") method="post">+ <fieldset>+ <% field (input "name" (rName r)) "name" "" %>+ <% field (input "description" (rDescription r)) "description" "" %>+ <% field (input "website" (rWebsite r)) "website" "" %>+ <% if issuetrackers+ then <% field (checkbox (rIssueTracker r) is "issuetracker") "issue tracker ?" "" %>+ else <% "" %>+ %>+ <% field (checkbox (rIsPrivate r) is "private") "private ?" "" %>+ <% field (input' is "add-members") "add members" "comma separated" %>+ <%+ if not (null ms)+ then+ <%+ <div class="field">+ <ul>+ <% map (\m@(User { uID = Just uid }) ->+ <li>+ <input type="checkbox" name=("remove-" ++ show uid) />+ <% cdata " " %>+ <a href=(baseUrl ++ uName m)><% uName m %></a>+ </li>) ms %>+ </ul>++ <label for="remove-members">remove members</label>+ <br />+ </div>+ %>+ else <% "" %>+ %>+ <% submit "update repository" %>+ </fieldset>+ </form>+ <a href=(repoURL r ++ "/packs") style="border: thin solid #ccc; border-radius: 8px; float: right;">+ <p style="padding: 20px;"> Build Packs </p>+ </a>+ </div>++delete :: User -> Repository -> HSPage+delete u r = repoBase u False r+ "delete"+ <span> -> delete</span>+ <div class="repo-delete">+ <h2>are you sure you want to delete this repository?</h2>+ <p class="blurb">this action cannot be undone.</p>++ <form action=(repoURL r ++ "/delete") method="post">+ <fieldset>+ <div class="cancel-buttons">+ <input type="submit" value="yes, delete this repository" />+ <span class="cancel-text"> or <a href=(repoURL r) class="cancel">cancel</a></span>+ <br />+ </div>+ </fieldset>+ </form>+ </div>++fork :: User -> Repository -> String -> HSPage+fork u r n = repoBase u False r+ "fork"+ <span> -> fork</span>+ <div class="repo-fork">+ <h2>you already have a repository named "<a href=(userURL u ++ "/" ++ n)><% n %></a>"</h2>+ <p class="blurb">please create an alternative name:</p>++ <form action=(repoURL r ++ "/fork-as") method="post">+ <fieldset>+ <% field (input "name" (n ++ "-")) "new name" "" %>+ <% submit "fork!" %>+ </fieldset>+ </form>+ </div>++issues :: User -> Repository -> String -> [Issue] -> HSPage+issues u r t is s = repoBase u True r+ t+ <span> -> <% t %></span>+ <div class="repo-issues">+ <% issueLinks r %>+ <%+ if not (null is)+ then+ <ul class="issues-list">+ <% map (renderIssue r) is %>+ </ul>+ else+ <div class="no-issues">+ <h2>no issues!</h2>+ <p class="blurb">there don't seem to be any issues for this project.</p>+ </div>+ %>+ </div>+ s++issuesByTags :: User -> Repository -> [Issue] -> [[String]] -> HSPage+issuesByTags u r is ts s = repoBase u False r+ ("issues tagged with " ++ humanOr ts)+ <span> -> issues</span>+ <div class="repo-issues">+ <% issueLinks r %>+ <%+ if not (null is)+ then+ <ul class="issues-list">+ <h2>issues tagged with <% humanOr ts %></h2>+ <% map (renderIssue r) is %>+ </ul>+ else+ <div class="no-issues">+ <h2>no issues tagged with <% humanOr ts %></h2>+ <p class="blurb">there don't seem to be any issues with <% if length ts == 1 then "that tag" else "those tags" %>.</p>+ </div>+ %>+ </div>+ s+ where+ humanAnd [] = ""+ humanAnd [t] = t+ humanAnd [a, b] = a ++ " and " ++ b+ humanAnd (x:ys) = x ++ ", " ++ humanAnd ys++ humanOr [] = ""+ humanOr [t] = humanAnd t+ humanOr [a, b] = humanAnd a ++ " or " ++ humanAnd b+ humanOr (x:ys) = humanAnd x ++ ", " ++ humanOr ys++issueLinks :: Repository -> HSP XML+issueLinks r =+ <div>+ <a href=(repoURL r ++ "/issues") class="open-issues button">open</a>+ <a href=(repoURL r ++ "/issues/closed") class="closed-issues button">closed</a>+ <a href=(repoURL r ++ "/issues/all") class="all-issues button">all</a>+ <a href=(repoURL r ++ "/new-issue") class="new-issue button">new issue</a>+ </div>++renderIssue :: Repository -> Issue -> HSP XML+renderIssue r i =+ <li class="issue">+ <table>+ <tr>+ <td class="number"><a href=(issueURL r i)>#<% show $ iNumber i %></a></td>+ <td class="details">+ <div class="name">+ <a href=(issueURL r i)><% iSummary i %></a>+ <% if not (null (iTags i))+ then+ <%+ <ul class="tags">+ <% map (\t -> <li><a href=(tagURL r t)><% t %></a></li>) (iTags i) %>+ </ul>+ %>+ else <% "" %>+ %>+ </div>+ <div class="meta">+ reported by <% iOwner i %>+ <% cdata " " %>+ <span class="relatize date"><% formatTime defaultTimeLocale "%c" (iCreated i) %></span>+ <% if not (iCreated i == iUpdated i)+ then <% <span class="updated-date">, updated <span class="relatize date"><% formatTime defaultTimeLocale "%c" (iUpdated i) %></span></span> %>+ else <% "" %>+ %>+ </div>+ </td>+ </tr>+ </table>+ </li>++issue :: User -> Repository -> Issue -> [Comment] -> HSPage+issue u r i cs s = repoBase u True r+ ("#" ++ show (iNumber i) ++ ": " ++ iSummary i)+ <span> -> issue</span>+ <div class="issue">+ <h2>+ <span class="number">+ #<% show $ iNumber i %>+ </span>+ <% iSummary i %>+ </h2>+ <div class="description markdown">+ <% do+ mo <- getUser (iOwner i)+ case mo of+ Just o ->+ <div class="user-info">+ <a href=(userURL o)><img src=(gravatar o 64) /></a>+ <a href=(userURL o)><% if not (null (uFullName o)) then uFullName o else uName o %></a>+ </div>+ Nothing ->+ <div class="user-info unknown">unknown</div>+ %>++ <% cdata $ doMarkdown (iDescription i) %>++ <div class="clear"></div>+ </div>++ <ul class="issue-comments">+ <% map renderComment cs %>+ </ul>++ <%+ case sUser s of+ Just _ ->+ <div class="issue-revise">+ <div class="issue-tags">+{-+ <label for="assign">assign to:</label>+ <select id="assign">+ <option value=""></option>+ <option value=(rOwner r)><% rOwner r %></option>+ <% map (\m -> <option value=m><% m %></option>) (rMembers r) %>+ </select>++ <label for="type">set type:</label>+ <select id="type">+ <option value=""></option>+ <option value="bug">bug</option>+ <option value="enhancement">enhancement</option>+ </select>+-}+ <ul class="tags">+ <% map (\t -> <li><a href="javascript:void(0)" class="kill"></a><a href=(tagURL r t)><% t %></a></li>) (iTags i) %>+ </ul>++ <form id="add-tag" action="javascript:void(0)">+ <input type="text" id="tag-name" name="add-tag" placeholder="tag:value" />+ <input type="submit" id="add-tag-submit" maxlength="1000" value="add" />+ </form>+ </div>++ <form class="issue-comment" action=add method="post">+ <fieldset>+ <div class="field">+ <textarea name="comment" id="comment" rows="12"></textarea>+ </div>++ <h3>revise issue</h3>+ <div class="revise-fields">+ <div class="field">+ <textarea name="summary" id="summary" rows="2"><% iSummary i %></textarea>+ </div>++ <div class="field">+ <textarea name="description" id="description" rows="12"><% iDescription i %></textarea>+ </div>+ </div>++ <div class="buttons">+ <input type="submit" name="submit" id="submit-comment" value="comment" />+ <input type="submit" name="submit" id="submit-close" value=(if iIsClosed i then "and reopen" else "and close") />+ </div>++ <input type="hidden" name="tags" id="tags" />+ </fieldset>+ </form>+ </div>++ Nothing ->+ <span class="please-login">+ please <a href=(baseUrl ++ "login")>log in</a> to comment+ </span>+ %>+ </div>+ s+ where+ add = issueURL r i ++ "/comment"++ renderComment c =+ <li class="comment">+ <% do+ ma <- getUser (cAuthor c)+ case ma of+ Just a ->+ <div class="user-info">+ <a href=(userURL a)><img src=(gravatar a 24) /></a>+ <a href=(userURL a) class="name"><% if not (null (uFullName a)) then uFullName a else uName a %></a>+ </div>+ Nothing ->+ <div class="user-info unknown">unknown</div>+ %>+ <%+ if not (null (cChanges c))+ then+ <%+ <ul class="changes">+ <% map renderChange (cChanges c) %>+ </ul>+ %>+ else <% "" %>+ %>+ <div class="markdown">+ <% cdata (doMarkdown (cBody c)) %>+ </div>+ </li>++ renderChange (AddTag t) =+ <li>added tag <strong><% t %></strong></li>+ renderChange (RemoveTag t) =+ <li>removed tag <strong><% t %></strong></li>+ renderChange (Summary _ t) =+ <li>summary changed to <strong>"<% t %>"</strong></li>+ renderChange (Description _ _) =+ <li>description updated</li>+ renderChange (Closed True) =+ <li>status set to <strong>closed</strong></li>+ renderChange (Closed False) =+ <li>status set to <strong>open</strong></li>++newIssue :: User -> Repository -> HSPage+newIssue u r = repoBase u False r+ "new issue"+ <span> -> new issue</span>+ <div class="issue-new">+ <h2>new issue</h2>++ <div class="issue-tags">++{- disable hard-coded assignment & issue type fields, don't want to encourage enhancement issues right now+ <label for="assign">assign to:</label>+ <select id="assign">+ <option value=""></option>+ <option value=(rOwner r)><% rOwner r %></option>+ <% map (\m -> <option value=m><% m %></option>) (rMembers r) %>+ </select>++ <label for="type">set type:</label>+ <select id="type">+ <option value=""></option>+ <option value="bug">bug</option>+ <option value="enhancement">enhancement</option>+ </select>+-}++ <ul class="tags">+ </ul>++ <form id="add-tag" action="javascript:void(0)">+ <input type="text" id="tag-name" name="add-tag" placeholder="tag:value" />+ <input type="submit" id="add-tag-submit" maxlength="1000" value="add" />+ </form>+ </div>++ <form class="issue-body" action=(repoURL r ++ "/new-issue") method="post">+ <fieldset>+ <div class="field">+ <textarea name="summary" id="summary" rows="2"></textarea>+ </div>+ <div class="field">+ <textarea name="description" id="description" rows="12"></textarea>+ </div>+ <div class="buttons">+ <input type="submit" name="submit" value="create issue" />+ </div>++ <input type="hidden" name="tags" id="tags" />+ </fieldset>+ </form>+ </div>++patches :: User+ -> Repository+ -> [Fork] -- ^public forks+ -> [Fork] -- ^private forks owned by the current user+ -> HSPage+patches u r fs opfs s = repoBase u True r+ "branches"+ <span> -> branches</span>+ <div class="repo-patches">+ <% patchesForm %>+ </div>+ s+ where+ mergeablepatchesexist = any (not . null . fPatches) $ fs ++ opfs+ canmerge = canMerge (sUser s) r++ patchesForm :: HSP XML+ patchesForm =+ <form action=(repoURL r ++ "/merge") class="dependencies" method="post">+ <fieldset>+ <% map fork' opfs %>+ <% map fork' fs %>+ <%+ if mergeablepatchesexist && canmerge+ then+ <%+ <div class="merge-button">+ <br />+ <% submit "merge selected" %>+ </div>+ %>+ else <% "" %>+ %>+ </fieldset>+ <%+ if mergeablepatchesexist+ then <% "" %>+ else <%+ <div class="no-patches">+ <p class="blurb">There doesn't seem to be anything new.</p>+ </div>+ %>+ %>+ </form>++ fork' (Fork f cs) =+ <%+ <div class="fork">+ <h3><a href=(repoURL f)><% rOwner f %>'s <% rName f %></a></h3>+ <table class="fork-log">+ <% map (change' f) cs %>+ </table>+ </div>+ %>++ change' :: Repository -> PatchLog -> HSP XML+ change' f p =+ <tr id=("change-" ++ pID p) class=("change" ++ concatMap (" depends-on-" ++) (pDepends p))>+ <%+ if canmerge+ then+ <%+ <td class="merge">+ <input type="checkbox" name=("merge:" ++ show (fromJust (rID f)) ++ ":" ++ pID p) />+ </td>+ %>+ else <% "" %>+ %>+ <td class="name">+ <p><a href=(repoURL f ++ "/patch/" ++ pID p)><% pName p %></a></p>+ </td>+ <td class="author">+ <% author p %>+ </td>+ <td class="date">+ <span class="relatize date"><% formatTime defaultTimeLocale "%c" (pDate p) %></span>+ </td>+ </tr>++changes :: User -> Repository -> [PatchLog] -> Int -> Int -> HSPage+changes u r cs p tp = repoBase u True r+ "changes"+ <span> -> changes</span>+ <div class="repo-changes">+ <% paginate (repoURL r ++ "/changes") p tp %>+ <table class="repo-log">+ <% map (change r) cs %>+ </table>+ <% paginate (repoURL r ++ "/changes") p tp %>+ </div>++change :: Repository -> PatchLog -> HSP XML+change f p =+ <tr id=("change-" ++ pID p) class=("change" ++ concatMap (" depends-on-" ++) (pDepends p))>+ -- <%+ -- if canmerge+ -- then+ -- <%+ -- <td class="merge">+ -- <input type="checkbox" name=("merge:" ++ show (fromJust (rID f)) ++ ":" ++ pID p) />+ -- </td>+ -- %>+ -- else <% "" %>+ -- %>+ <td class="name-note">+ <p><a class="name" href=(repoURL f ++ "/patch/" ++ pID p)><% pName p %></a></p>+ <%+ if not (null (pLog p))+ then+ <%+ <div class="patch-notes markdown">+ <% cdata (pLog p) %>+ </div>+ %>+ else <% "" %>+ %>+ </td>+ <td class="author">+ <% author p %>+ </td>+ <td class="date">+ <span class="relatize date"><% formatTime defaultTimeLocale "%c" (pDate p) %></span>+ </td>+ </tr>++author :: PatchLog -> HSP XML+author p | pIsUser p = <a href=(baseUrl ++ pAuthor p)><% pAuthor p %></a>+ | otherwise = <span class="author"><% pAuthor p %></span>++changesAtom :: User -> Repository -> [PatchLog] -> HSPage+changesAtom u r cs _ =+ <feed xmlns="http://www.w3.org/2005/Atom">+ <title><% uName u %>/<% rName r %> changes</title>+ <id><% repoURL r ++ "/changes/atom" %></id>+ <%+ if not (null cs)+ then+ <%+ <updated><% asAtomDate latest %></updated>+ %>+ else <% "" %>+ %>+ <author>+ <name><% uName u %></name>+ <uri><% userURL u %></uri>+ </author>+ <link href=(repoURL r ++ "/changes/atom") rel="self" />+ <link href=(repoURL r ++ "/changes") />++ <% map entry cs %>+ </feed>+ where+ asAtomDate :: UTCTime -> String+ asAtomDate = formatTime defaultTimeLocale "%FT%TZ"++ latest :: UTCTime+ latest = head . sortBy (flip compare) . map pDate $ cs++ entry :: PatchLog -> HSP XML+ entry p =+ <entry>+ <title><% pName p %></title>+ <id><% repoURL r ++ "/patch/" ++ pID p %></id>+ <updated><% asAtomDate (pDate p) %></updated>+ <author>+ <name><% pAuthor p %></name>+ <%+ if pIsUser p+ then <% <uri><% baseUrl ++ pAuthor p %></uri> %>+ else <% "" %>+ %>+ </author>+ <summary>+ <% pName p %>+ </summary>+ <link href=(repoURL r ++ "/patch/" ++ pID p) />+ </entry>++blob :: User -> Repository -> [RepoItem] -> Maybe (Either String BS.ByteString) -> HSPage+blob u r fs b s = repoBase' u False r+ (iName file)+ <span> -> files</span>+ <div class="repo-blob">+ <h2 class="path">+ <a href=(repoURL r ++ "/browse")>root</a>+ <% map (\f -> <% <span class="path-item"> / <a href=(repoURL r ++ "/browse" ++ iPath f)><% iName f %></a></span> %>) (Prelude.init fs) %>+ <span class="path-item"> / <a href=(repoURL r ++ "/raw" ++ iPath file)><% iName file %></a></span>+ </h2>+ <%+ case b of+ Nothing ->+ <p class="blurb">sorry! this file is too gigantic to display. click the filename above to view the source.</p>+ Just (Left md) ->+ <div class="markdown">+ <% cdata md %>+ </div>+ Just (Right source) ->+ <div class="code">+ <% cdata . fromBS $ source %>+ </div>+ %>+ </div>+ lns+ s+ where+ file :: RepoItem+ file = last fs++ member = case sUser s of+ Just un -> (un `elem` rOwner r:rMembers r)+ Nothing -> False++ lns = if member+ then links' r [<li class="edit"><a href=(repoURL r ++ "/edit-file" ++ iPath file)>edit file</a></li>]+ else links' r []++addFile :: User -> Repository -> [RepoItem] -> HSPage+addFile u r fs = repoBase u False r+ file+ <span> -> add file/directory </span>+ <div class="repo-blob">+ <h2 class="path">+ <a href=(repoURL r ++ "/browse")>root</a>+ <% map (\f -> <% <span class="path-item"> / <a href=(repoURL r ++ "/browse" ++ iPath f)><% iName f %></a></span> %>) fs %>+ </h2>+ <%+ <form class="addfile" action=(repoURL r ++ "/add-file") method="post">+ <fieldset>+ <input type="hidden" name="filepath" id="filepath" value=file></input>+ <% field (input "filename" "") "File Name" "" %>+ <% field ft_opts "File type" "" %>+ <% field (input "message" "") "Message" "" %>+ <% submit "Create file/directory" %>+ </fieldset>+ </form>+ %>+ </div>+ where+ file = if null fs then "" else tail $ iPath $ last $ fs+ ft_opts = <div class="choices">+ <input type="radio" name="type" id="type" value="file" /> file <br />+ <input type="radio" name="type" id="type" value="directory" /> directory <br />+ </div>++editFile :: User -> Repository -> [RepoItem] -> String -> String -> HSPage+editFile u r fs mime contents = repoBase u False r+ (iName file)+ <span> -> edit file</span>+ <div class="repo-blob">+ <h2 class="path">+ <a href=(repoURL r ++ "/browse")>root</a>+ <% map (\f -> <% <span class="path-item"> / <a href=(repoURL r ++ "/browse" ++ iPath f)><% iName f %></a></span> %>) (Prelude.init fs) %>+ <span class="path-item"> / <a href=(repoURL r ++ "/raw" ++ iPath file)><% iName file %></a></span>+ </h2>+ <%+ <form class="editfile" action=(repoURL r ++ "/edit-file" ++ iPath file) method="post">+ <fieldset>+ <textarea name="editor" id="editor"><% pcdata contents %></textarea><br />+ <% field (input "message" "") "Message" "" %>+ <% submit "Update code" %>+ </fieldset>+ </form>+ %>+ <script> load_editor(<% show $ mime %>) </script>+ </div>+ where+ file :: RepoItem+ file = last fs++explore :: [(Repository, [Repository])] -> Int -> Int -> HSPage+explore rs p tp = base+ "all repos"+ True+ <span>all repos</span>+ <div></div>+ <div class="explore">+ <h2>all repositories</h2>+ <% paginate (baseUrl ++ "explore") p tp %>+ <ul class="repo-list">+ <% map repo' rs %>+ </ul>+ <% paginate (baseUrl ++ "explore") p tp %>+ </div>+ where+ repo' :: (Repository, [Repository]) -> HSP XML+ repo' (r, fs) =+ <li>+ <div class="repo-name-owner">+ <a class="name" href=(repoURL r)><% rName r %></a> :: <a href=(repoOwnerURL r)><% rOwner r %></a>+ </div>+ <p class="repo-desc">+ <% rDescription r %>+ </p>+ <%+ if length fs > 0+ then+ <%+ <div class="repo-forks-wrap">+ <p><a href=(repoURL r ++ "/patches")>forks</a>:</p>+ <ul class="repo-forks">+ <% map (\f -> <% <li><a href=(repoURL f)><% rOwner f %>'s <span class="name"><% rName f %></span></a></li> %>) fs %>+ </ul>+ <div class="clear"></div>+ </div>+ %>+ else <% "" %>+ %>+ </li>++patch :: User -> Repository -> String -> HSPage+patch u r pId =+ repoBase u False r+ "patch"+ <span> -> patch</span>+ <div class="repo-patch">+ <p>Fetching patch details... <img src="/public/images/spinner.gif" style="vertical-align:middle;" /></p>+ <script type="text/javascript">+ $(document).ready(function() {+ $('div.repo-patch').load(+ '<% rpurl %>',+ function(response, status, xhr) {+ if (status == "error") {+ var msg = "Sorry, fetching this patch timed out (or there was some other error)."; // + xhr.status + " " + xhr.statusText+ $('div.repo-patch').html(msg);+ }+ });+ });+ </script>+ </div>+ where+ rpurl = repoURL r ++ "/renderedpatch/" ++ pId++renderedpatchHtml :: User -> Repository -> PatchLog -> [Summary] -> [PatchChange]-> HSPage+renderedpatchHtml _ r p ss cs _ = do+ <div>+ <h2>patch</h2>+ <ul class="repo-log">+ <% change r p %>+ </ul>+ <%+ if not (null ss)+ then <% summaries ss %>+ else <% "" %>+ %>+ <%+ if not (null cs)+ then <% diffs cs %>+ else <% "" %>+ %>+ </div>++ where+ summaries :: [Summary] -> HSP XML+ summaries ss' =+ <div class="summary">+ <h3>summary</h3>+ <ul class="patch-summary">+ <% map summary ss' %>+ </ul>+ </div>++ summary :: Summary -> HSP XML+ summary (Removed n) =+ <li class="summary-removed"><% n %></li>+ summary (Added n) =+ <li class="summary-added">+ <a href=(repoURL r ++ "/browse/" ++ n)><% n %></a>+ </li>+ summary (Replaced n f t) =+ <li class="summary-replaced">+ <a href=(repoURL r ++ "/browse/" ++ n)><% n %></a>+ replaced <code><% f %></code> with <code><% t %></code>+ </li>+ summary (Modified f) =+ <li class="summary-modified">+ <a href=("#" ++ f)><% f %></a>+ </li>+ summary (Preference n f t) =+ <li class="summary-preference">+ changed "<% n %>" preference+ from "<% f %>"+ to "<% t %>"+ </li>++ diffs :: [PatchChange] -> HSP XML+ diffs cs' =+ <div class="patch-diffs">+ <h3>changes</h3>+ <ul class="patch-changes">+ <% map diff displayablecs %>+ <% if numelided > 0+ then <% <li><% "(and " ++ show numelided ++ " more hunks...)" %></li> %>+ else <% "" %>+ %>+ </ul>+ </div>+ where+ (displayablecs, numelided) = takeUpTo maxPatchDisplaySize cs'++ takeUpTo :: Int -> [PatchChange] -> ([PatchChange],Int)+ takeUpTo m ps = (reverse ds, length es) where (ds, es) = takeUpTo' m [] ps++ -- XXX likely inefficient+ takeUpTo' :: Int -> [PatchChange] -> [PatchChange] -> ([PatchChange],[PatchChange])+ takeUpTo' _ ds [] = (ds, [])+ takeUpTo' m ds (e:es)+ | size > m = (ds, (e:es))+ | otherwise = (takeUpTo' m ds' es)+ where+ size = sum $ map hunkSize ds'+ ds' = e:ds++ hunkSize :: PatchChange -> Int+ hunkSize (FileChange{cfType=FileHunk{..}}) = BS.length fchRemove + BS.length fchAdd+ hunkSize _ = 0++ diff :: PatchChange -> HSP XML+ diff c =+ <li id=(cfName c) class="diff">+ <a class="name" href=(repoURL r ++ "/browse/" ++ cfName c)><% cfName c %></a>+ <% cdata " :: " %>+ <span class="line">line <% show (fchLine (cfType c)) %></span>+ <div class="removed"><% cdata . fromBS $ fchRemove (cfType c) %></div>+ <div class="added"><% cdata . fromBS $ fchAdd (cfType c) %></div>+ </li>++gravatar :: User -> Int -> String+gravatar u s =+ "http://gravatar.com/avatar/" ++ email ++ "?s=" ++ show s ++ "&d=identicon"+ where+ email = show . md5 . toLBS $ uEmail u++tagURL :: Repository -> String -> String+tagURL r t = repoURL r ++ "/issues/tag/" ++ t
@@ -0,0 +1,167 @@+{-# OPTIONS_GHC -F -pgmF trhsx #-}+module DarcsDen.Pages.User where++import HSP++import Data.Maybe (fromMaybe, isJust)++import DarcsDen.Pages.Base+import DarcsDen.Pages.HSPage ( HSPage )+import DarcsDen.Pages.Util ( repoForkSourceDescription )+import DarcsDen.State.Repository+import DarcsDen.State.User+import DarcsDen.State.Session+import DarcsDen.Settings+++user :: User -> [Repository] -> HSPage+user u repos sess = base+ (uName u)+ True+ <span><% uName u %></span>+ <ul class="links">+ <% if sUser sess == Just (uName u) then <% createlink %> else <% "" %> %>+ </ul>+ <div class="user">+ <h2><% uName u %>'s repositories</h2>+ <% repositories repos %>+ </div>+ sess+ where+ createlink = <li class="create"><a href=(baseUrl ++ "init")>new repo</a></li>+ repositories :: [Repository] -> HSP XML+ repositories [] = <p class="blurb">nothing to see here, move along!</p>+ repositories rs = <ul class="user-repos"><% map repo rs %></ul>++repo :: Repository -> HSP XML+repo r =+ <li>+ <a href=(baseUrl ++ rOwner r ++ "/" ++ rName r) class=(if rIsPrivate r then "private-repo" else "public-repo")><% rName r %></a>+ <%+ if rDescription r /= ""+ then <% <span class="repo-description"><% cdata " — " %><% rDescription r %></span> %>+ else <% "" %>+ %>+ <% repoForkSourceDescription r %>+ <%+ if rWebsite r /= ""+ then <% <span class="repo-website"> (<a href=(rWebsite r) rel="nofollow"><% rWebsite r %></a>)</span> %>+ else <% "" %>+ %>+ </li>++register :: [(String, String)] -> HSPage+register is = base+ "register"+ False+ <span>register</span>+ <div></div>+ <div class="register">+ <h2>sign up</h2>+ <table>+ <tr><td><form class="big" action=(baseUrl ++ "register") method="post">+ <fieldset>+ <% field (input'' is "name") "username" "" %>+ <% field (input'' is "email") "email" "" %>+ <% field (password'' is "password1") "password" (convert is "oauth" "optional" "") %>+ <% field (password'' is "password2") "password, again" "" %>+ <% field (textarea' is 10 "keys") "ssh public key(s) (required for push)" "" %>+ <% field (security is "security_question") (convert is "oauth" "" "what RCS is hosted here ? (anti-spam)") "" %>+ <% submit "sign me up" %>+ </fieldset>+ </form></td></tr>+ <tr><td><form class="buttonform" action=(baseUrl++"register/github") method="get"><% submit "Sign up with Github" %></form></td></tr>+ <tr><td><form class="buttonform" action=(baseUrl++"register/google") method="get"><% submit "Sign up with Google" %></form></td></tr>+ </table>+ </div>+ where+ convert js i f nf = fromMaybe nf (fmap (const f) (lookup i js))+ input'' js n = inputWith' js n [("autocomplete","off")]+ security js n = <input type=(convert js "oauth" "hidden" "text") name=n id=n /> + password'' js n = passwordWith' js n [("autocomplete","off")]++login :: [(String, String)] -> HSPage+login is = base+ "login"+ False+ <span>login</span>+ <div></div>+ <div class="login">+ <h2>log in</h2>+ <table>+ <tr><td><form action=(baseUrl++"login") method="post">+ <fieldset>+ <% field (input' is "name") "name" "" %>+ <% field (password' is "password") "password" "" %>+ <% submit "log me in" %>+ </fieldset>+ </form></td></tr>+ <tr><td><form class="buttonform" action=(baseUrl++"login/github") method="get"><% submit "Sign in using Github" %></form></td></tr>+ <tr><td><form class="buttonform" action=(baseUrl++"login/google") method="get"><% submit "Sign in using Google" %></form></td></tr>+ <tr><td><a style="float:right" href=(baseUrl++"forgotpassword")> Forgot Password? </a></td></tr>+ </table>+ </div>++settings :: User -> HSPage+settings u = base+ "settings"+ False+ <span>settings</span>+ <div></div>+ <div class="settings">+ <h2>account settings</h2>+ <table>+ <tr><td><form class="big" action=(baseUrl ++ "settings") method="post">+ <fieldset>+ <% field (input "full_name" (uFullName u)) "full name" "" %>+ <% field (input "website" (uWebsite u)) "website" "" %>++ <h3>change password?</h3>+ <% if isJust (uPaS u) then field (password' [] "password") "current password" "" else <div></div> %>+ <% field (password' [] "password1") "new password" "" %>+ <% field (password' [] "password2") "(again)" "" %>++ <br />++ <% field (textarea 10 "keys" (unlines (uKeys u))) "pubkeys" "" %>++ <% submit "update settings" %>+ </fieldset>+ </form></td></tr>+ <tr><td><form class="buttonform" action=(baseUrl++"sync/github") method="get"><% submit "Link with Github" %></form></td></tr>+ <tr><td><form class="buttonform" action=(baseUrl++"sync/google") method="get"><% submit "Link with Google" %></form></td></tr>+ </table>+ </div>++forgotPassword :: [(String, String)] -> HSPage+forgotPassword is = base+ "forgot password"+ False+ <span>forgot password</span>+ <div></div>+ <div class="forgot-password">+ <h2>forgot password</h2>+ <form action=(baseUrl ++ "forgotpassword") method="post">+ <fieldset>+ <% field (input' is "username") "username" "" %>+ <% submit "submit" %>+ </fieldset>+ </form>+ </div>++resetPassword :: [(String, String)] -> HSPage+resetPassword _ = base+ "reset password"+ False+ <span>reset password</span>+ <div></div>+ <div class="reset-password">+ <h2>reset password</h2>+ <form action=(baseUrl ++ "recovery") method="post">+ <fieldset>+ <% field (password' [] "password1") "new password" "" %>+ <% field (password' [] "password2") "(again)" "" %>+ <% submit "submit" %>+ </fieldset>+ </form>+ </div>
@@ -0,0 +1,61 @@+{-# OPTIONS_GHC -F -pgmF trhsx #-}+module DarcsDen.Pages.Util where++import Control.Monad.Trans ( liftIO )+import HSP++import DarcsDen.Settings (issuetrackers)+import DarcsDen.State.Repository ( Repository(..), repoURL, getRepositoryByID, getRepositoryForks )++repoForkSourceDescription :: Repository -> HSP XML+repoForkSourceDescription repo = do+ f <- liftIO $ getForkedFromRepo repo+ case f of+ Nothing -> <span></span>+ Just f' ->+ <span class="repo-fork">+ <% cdata " " %>+ (fork of <a href=(repoURL f')><% rOwner f' %></a>'s <a href=(repoURL f')><% rName f' %></a>)+ </span>++getForkedFromRepo :: Repository -> IO (Maybe Repository)+getForkedFromRepo (Repository { rForkOf = Nothing }) = return Nothing+getForkedFromRepo (Repository { rForkOf = Just id' }) = getRepositoryByID id'++links :: Repository -> Bool -> HSP XML+links r True = links' r [ <li class="edit"><a href=(repoURL r ++ "/edit")>repository settings</a></li>+ , <li class="delete"><a href=(repoURL r ++ "/delete")>delete</a></li>+ ]+links r False = links' r []++links' :: Repository -> [HSP XML] -> HSP XML+links' r exls =+ <ul class="links">+ <li class="files"><a href=(repoURL r)>files</a></li>+ <li class="changes"><a href=(repoURL r ++ "/changes")>changes</a></li>+ <% patchesButton %>+ <% issuesButton r %>+ <li class="fork"><a href=(repoURL r ++ "/fork")>fork</a></li>+ <% exls %>+ <% packsTimeStamp (rBuiltPacks r) %>+ </ul>+ where+ patchesButton = do+ forks <- liftIO $ case (rID r, rRev r) of+ (Just id', Just _) -> getRepositoryForks id'+ _ -> return []+ if null forks && rForkOf r == Nothing+ then <div></div>+ else+ <li class="patches">+ <a href=(repoURL r ++ "/patches")>branches</a>+ </li>++ issuesButton r' =+ <% if issuetrackers && rIssueTracker r'+ then <% <li class="issues"><a href=(repoURL r' ++ "/issues")>issues</a></li> %>+ else <% "" %>+ %>++ packsTimeStamp Nothing = <div></div>+ packsTimeStamp (Just ts) = <div style="border: thin solid #ccc; border-radius: 8px; "> Packs built at <% show ts %> </div>
@@ -0,0 +1,103 @@+{-# OPTIONS_GHC -F -pgmF trhsx #-}+{-# LANGUAGE CPP #-}++module DarcsDen.Settings where+import HSP+import qualified Database.Redis.Redis as R+import Control.Monad.Trans (liftIO)+import DarcsDen.Util (doMarkdown')++multiuser, issuetrackers, deletefiles :: Bool+adminEmail, adminName, sendEmail, sendName, hostname, basePort, basePath, baseUrl, version, version', buildDate, buildTime, couchHost, redisHost, redisPort, githubAppIdVarName, githubAppPwdVarName, googleAppIdVarName, googleAppPwdVarName :: String+maxRequestTime, maxFileDisplaySize, maxPatchDisplaySize, couchPort :: Int+homeDir, usersDir, accessLog, errorLog, xdgMimePath :: FilePath+siteLink, siteFooter, frontPageContent :: HSP XML++-- hub.darcs.net settings:++-- optional features+multiuser = True -- Enable user registration ?+issuetrackers = True -- Enable optional issue trackers ?+deletefiles = True -- Delete repos from the filesystem when deleted in the web UI ?++-- app url+baseUrl = "http://" ++ hostname ++ basePort ++ basePath+hostname = "hub.darcs.net"+#ifndef DEBUG+basePort = ""+#else+basePort = ":8901"+#endif+basePath = "/" -- must end with a slash+++-- To enable github integration, register an application at github.+-- Store the client id and client secret as environment variables+githubAppIdVarName = "GITHUB_CLIENT_ID"+githubAppPwdVarName = "GITHUB_CLIENT_SECRET"++-- To enable google integration, register an application at google.+-- Store the client id and client secret as environment variables+googleAppIdVarName = "GOOGLE_CLIENT_ID"+googleAppPwdVarName = "GOOGLE_CLIENT_SECRET"++-- contact info+adminEmail = "simon@joyful.com"+adminName = "Simon"++-- send address: you need to be able to send mails from+-- this address using the default sendmail executable+sendEmail = "darcsden@"++hostname+sendName = "darcsden"++-- resource limits+maxRequestTime = 30 -- granularity is 5s, precision is +/-5s+maxFileDisplaySize = 200000+maxPatchDisplaySize = 200000++-- filesystem+homeDir = "/home/darcsden"+usersDir = homeDir ++ "/users"+#ifndef DEBUG+accessLog = homeDir ++ "/log/access.log" +errorLog = homeDir ++ "/log/error.log" +#else+accessLog = "access.log"+errorLog = ""+#endif+xdgMimePath = "xdg-mime"++-- databases+couchHost = "127.0.0.1"+couchPort = 5984+redisHost = "127.0.0.1"+redisPort = R.defaultPort++-- content++version = "1.1"+#ifndef DEBUG+version' = version+#else+version' = version ++ " DEV"+#endif+buildDate = __DATE__+buildTime = __TIME__++siteLink = <a class="name" href=(baseUrl) style="font-size:36px;"><% hostname %></a>++siteFooter =+ <ul>+ <li><a href="http://hub.darcs.net/simon/darcsden">darcsden</a> <% version' %> built <% buildDate %> <% buildTime %></li>+ <li><a href="http://stats.pingdom.com/olo874j6ixzj/632910">uptime</a></li>+ <% if null adminEmail+ then <% "" %>+ else <% <li>report problems to <a href=("mailto:"++adminEmail++"?subject=darcsden:%20")><% adminName %></a> or <a href="irc://irc.freenode.net/#darcs">#darcs</a> or the <a href="http://hub.darcs.net/simon/darcsden/issues">issue tracker</a></li> %>+ %>+ </ul>++frontPageContent =+ -- read front page content on each request for easy tweaking+ do h <- liftIO $ doMarkdown' `fmap` (readFile $ homeDir ++ "/docs/README.md")+ <div class="blurb markdown"><% cdata h %></div>+
@@ -0,0 +1,162 @@+module DarcsDen.State.Comment where++import Control.Monad.Trans+import Data.Time (UTCTime, formatTime)+import Database.CouchDB+import System.Locale (defaultTimeLocale)+import Text.JSON++import DarcsDen.State.Util+import DarcsDen.State.Issue+++data IssueChange+ = AddTag String+ | RemoveTag String+ | Summary String String+ | Description String String+ | Closed Bool+ deriving (Eq, Show)++instance JSON IssueChange where+ readJSON js = do+ ctype <- getAttr js "type"+ case ctype of+ "add-tag" -> do+ s <- getAttr js "name"+ return (AddTag s)++ "remove-tag" -> do+ s <- getAttr js "name"+ return (RemoveTag s)++ "summary" -> do+ f <- getAttrOr js "from" ""+ t <- getOneOf js "to" "value"+ return (Summary f t)++ "description" -> do+ f <- getAttrOr js "from" ""+ t <- getOneOf js "to" "value"+ return (Description f t)++ "closed" -> do+ b <- getAttr js "state"+ return (Closed b)++ _ -> fail ("unknown type: " ++ ctype)++ showJSON (AddTag t) = JSObject . toJSObject $+ [ ("type", showJSON "add-tag")+ , ("name", showJSON t)+ ]+ showJSON (RemoveTag t) = JSObject . toJSObject $+ [ ("type", showJSON "remove-tag")+ , ("name", showJSON t)+ ]+ showJSON (Summary f t) = JSObject . toJSObject $+ [ ("type", showJSON "summary")+ , ("from", showJSON f)+ , ("to", showJSON t)+ ]+ showJSON (Description f t) = JSObject . toJSObject $+ [ ("type", showJSON "description")+ , ("from", showJSON f)+ , ("to", showJSON t)+ ]+ showJSON (Closed c) = JSObject . toJSObject $+ [ ("type", showJSON "closed")+ , ("state", showJSON c)+ ]++data Comment =+ Comment+ { cID :: Maybe Doc+ , cRev :: Maybe Rev+ , cBody :: String+ , cChanges :: [IssueChange]+ , cAuthor :: String+ , cCreated :: UTCTime+ , cUpdated :: UTCTime+ , cIssue :: Doc+ }+ deriving (Eq, Show)++instance JSON Comment where+ readJSON o = do+ id' <- getID o+ rev' <- getRev o+ body <- getAttr o "body"+ changes <- getAttr o "changes"+ author <- getAttr o "author"+ created <- getTime o "created"+ updated <- getTime o "updated"+ issue <- getAttr o "issue"+ return Comment+ { cID = Just id'+ , cRev = Just rev'+ , cBody = body+ , cChanges = changes+ , cAuthor = author+ , cCreated = created+ , cUpdated = updated+ , cIssue = issue+ }++ showJSON c = JSObject . toJSObject $+ [ ("body", showJSON (cBody c))+ , ("changes", showJSON (cChanges c))+ , ("author", showJSON (cAuthor c))+ , ("created", showJSON (formatTime defaultTimeLocale "%F %T" (cCreated c)))+ , ("updated", showJSON (formatTime defaultTimeLocale "%F %T" (cUpdated c)))+ , ("issue", showJSON (cIssue c))+ ] ++ id' ++ rev'+ where+ id' =+ case cID c of+ Just id'' -> [("_id", showJSON (show id''))]+ Nothing -> []+ rev' =+ case cRev c of+ Just rev'' -> [("_rev", showJSON (show rev''))]+ Nothing -> []++getComment :: MonadIO m => Doc -> m (Maybe Comment)+getComment key = do+ res <- liftIO $ runDB (getDoc (db "comments") key)+ case res of+ Just (_, _, i) -> return (Just i)+ Nothing -> return Nothing++getComments :: MonadIO m => Issue -> m [Comment]+getComments (Issue { iID = Just issue }) =+ liftIO $ fmap (map snd) (runDB query)+ where+ query = queryView+ (db "comments")+ (doc "comments")+ (doc "by_issue")+ [("key", showJSON issue)]+getComments _ = error "getComments: unsaved issue"++addComment :: MonadIO m => Comment -> m Comment+addComment c = do+ (id', rev') <- liftIO $ runDB (newDoc (db "comments") c)+ return c { cID = Just id', cRev = Just rev' }++updateComment :: MonadIO m => Comment -> m (Maybe Comment)+updateComment c =+ case (cID c, cRev c) of+ (Just id', Just rev') -> do+ update <-+ liftIO . runDB $ updateDoc (db "comments") (id', rev') c+ { cID = Nothing }++ case update of+ Just (id'', rev'') -> return $ Just c+ { cID = Just id''+ , cRev = Just rev''+ }+ _ -> return Nothing+ _ -> return Nothing+
@@ -0,0 +1,28 @@+module DarcsDen.State.ForgotPassword where++import Control.Monad+import Control.Monad.Trans+import System.Random+import Database.Redis.Monad++import DarcsDen.State.User+import DarcsDen.State.Util++createFpForUser :: MonadIO m => User -> m String+createFpForUser u = withRedis $ do+ rs <- liftIO $ replicateM 50 (randomRIO ('a', 'z'))+ let k = "forgotpassword:"++rs+ set k (uName u)+ expire k (24*60*60)+ return rs++getUserFromFp :: MonadIO m => String -> m (Maybe User)+getUserFromFp str = withRedis $ do+ let k = "forgotpassword:"++str+ muid <- get k+ case muid of+ RBulk (Just un) -> getUser un+ _ -> return Nothing++deleteFp :: MonadIO m => String -> m (Reply Int)+deleteFp str = withRedis $ del ("forgotpassword:"++str)
@@ -0,0 +1,166 @@+module DarcsDen.State.Issue where++import Control.Monad.Trans+import Data.Time (UTCTime, formatTime)+import Database.CouchDB+import System.Locale (defaultTimeLocale)+import Text.JSON++import DarcsDen.Settings+import DarcsDen.State.Util+import DarcsDen.State.Repository+++data Issue =+ Issue+ { iID :: Maybe Doc+ , iRev :: Maybe Rev+ , iNumber :: Int+ , iSummary :: String+ , iOwner :: String+ , iDescription :: String+ , iTags :: [String]+ , iCreated :: UTCTime+ , iUpdated :: UTCTime+ , iIsClosed :: Bool+ , iRepository :: Doc+ }+ deriving Show++instance Eq Issue where+ a == b = iID a == iID b++instance JSON Issue where+ readJSON o = do+ id' <- getID o+ rev' <- getRev o+ number <- getAttrOr o "number" 0+ summary <- getAttr o "summary"+ owner <- getAttr o "owner"+ description <- getAttr o "description"+ tags <- getAttr o "tags"+ created <- getTime o "created"+ updated <- getTime o "updated"+ closed <- getAttr o "is_closed"+ repository <- getAttr o "repository"+ return Issue+ { iID = Just id'+ , iRev = Just rev'+ , iNumber = number+ , iSummary = summary+ , iOwner = owner+ , iDescription = description+ , iTags = tags+ , iCreated = created+ , iUpdated = updated+ , iIsClosed = closed+ , iRepository = repository+ }++ showJSON i = JSObject . toJSObject $+ [ ("number", showJSON (iNumber i))+ , ("summary", showJSON (iSummary i))+ , ("owner", showJSON (iOwner i))+ , ("description", showJSON (iDescription i))+ , ("tags", showJSON (iTags i))+ , ("created", showJSON (formatTime defaultTimeLocale "%F %T" (iCreated i)))+ , ("updated", showJSON (formatTime defaultTimeLocale "%F %T" (iUpdated i)))+ , ("is_closed", showJSON (iIsClosed i))+ , ("repository", showJSON (iRepository i))+ ] ++ id' ++ rev'+ where+ id' =+ case iID i of+ Just id'' -> [("_id", showJSON (show id''))]+ Nothing -> []+ rev' =+ case iRev i of+ Just rev'' -> [("_rev", showJSON (show rev''))]+ Nothing -> []++issueURL :: Repository -> Issue -> String+issueURL r i =+ baseUrl ++ rOwner r ++ "/" ++ rName r ++ "/issue/" ++ show (iNumber i)++getIssueByID :: MonadIO m => Doc -> m (Maybe Issue)+getIssueByID key = do+ res <- liftIO $ runDB (getDoc (db "issues") key)+ case res of+ Just (_, _, i) -> return (Just i)+ Nothing -> return Nothing++getIssue :: MonadIO m => Doc -> Int -> m (Maybe Issue)+getIssue repo num =+ liftIO (runDB query)+ where+ query = getDocByView+ (db "issues")+ (doc "issues")+ (doc "by_repository_and_number")+ [showJSON repo, showJSON num]++getIssuesOpen :: MonadIO m => Repository -> m [Issue]+getIssuesOpen (Repository { rID = Just repo }) =+ liftIO $ fmap (map snd) (runDB query)+ where+ query = queryView+ (db "issues")+ (doc "issues")+ (doc "by_repository_open")+ [("key", showJSON repo)]+getIssuesOpen _ = error "getIssuesOpen: unsaved repository"++getIssuesClosed :: MonadIO m => Repository -> m [Issue]+getIssuesClosed (Repository { rID = Just repo }) =+ liftIO $ fmap (map snd) (runDB query)+ where+ query = queryView+ (db "issues")+ (doc "issues")+ (doc "by_repository_closed")+ [("key", showJSON repo)]+getIssuesClosed _ = error "getIssuesClosed: unsaved repository"++getIssuesAll :: MonadIO m => Repository -> m [Issue]+getIssuesAll (Repository { rID = Just repo }) =+ liftIO $ fmap (map snd) (runDB query)+ where+ query = queryView+ (db "issues")+ (doc "issues")+ (doc "by_repository")+ [("key", showJSON repo)]+getIssuesAll _ = error "getIssuesAll: unsaved repository"++getIssuesByTag :: MonadIO m => Repository -> String -> m [Issue]+getIssuesByTag (Repository { rID = Just repo }) t =+ liftIO $ fmap (map snd) (runDB query)+ where+ query = queryView+ (db "issues")+ (doc "issues")+ (doc "by_repository_and_tag")+ [("key", showJSON [showJSON repo, showJSON t])]+getIssuesByTag _ _ = error "getIssuesByTag: unsaved repository"++addIssue :: MonadIO m => Issue -> m Issue+addIssue i = do+ (id', rev') <- liftIO $ runDB (newDoc (db "issues") i)+ return i { iID = Just id', iRev = Just rev' }++updateIssue :: MonadIO m => Issue -> m (Maybe Issue)+updateIssue i =+ case (iID i, iRev i) of+ (Just id', Just rev') -> do+ update <-+ liftIO . runDB $ updateDoc (db "issues") (id', rev') i+ { iID = Nothing }++ case update of+ Just (id'', rev'') -> return $ Just i+ { iID = Just id''+ , iRev = Just rev''+ }+ _ -> return Nothing+ _ -> return Nothing+
@@ -0,0 +1,269 @@+module DarcsDen.State.Repository where++import Control.Monad (forM_, when)+import Control.Monad.Trans+import Data.Char+import Data.Ord+import Data.List+import Data.Maybe (catMaybes, fromJust)+import Data.Time (UTCTime, formatTime)+import Database.CouchDB+import System.Directory+import System.Locale (defaultTimeLocale)+import Text.JSON++import DarcsDen.State.Util+import qualified DarcsDen.Darcs as Darcs+import DarcsDen.Settings+++data Repository =+ Repository+ { rID :: Maybe Doc+ , rRev :: Maybe Rev+ , rName :: String+ , rOwner :: String+ , rDescription :: String+ , rWebsite :: String+ , rCreated :: UTCTime+ , rForkOf :: Maybe Doc+ , rMembers :: [String]+ , rIsPrivate :: Bool+ , rIssueTracker :: Bool+ , rIssueCount :: Int+ , rBuiltPacks :: Maybe UTCTime+ }+ deriving (Eq, Show)++instance JSON Repository where+ readJSON o = do+ id' <- getID o+ rev' <- getRev o+ name <- getAttr o "name"+ owner <- getAttr o "owner"+ description <- getAttrOr o "description" ""+ website <- getAttrOr o "website" ""+ created <- getTime o "created"+ forkOf <- getAttrOr o "fork_of" Nothing+ members <- getAttrOr o "members" []+ isPrivate <- getAttrOr o "is_private" False+ issueTracker <- getAttrOr o "issue_tracker" False+ issueCount <- getAttrOr o "issue_count" 0+ builtPacks <- getMaybeTime o "packs_created"+ return Repository+ { rID = Just id'+ , rRev = Just rev'+ , rName = name+ , rOwner = owner+ , rDescription = description+ , rWebsite = website+ , rCreated = created+ , rForkOf = forkOf+ , rMembers = members+ , rIsPrivate = isPrivate+ , rIssueTracker = issueTracker+ , rIssueCount = issueCount+ , rBuiltPacks = builtPacks+ }++ showJSON r = JSObject . toJSObject $+ [ ("name", showJSON (rName r))+ , ("owner", showJSON (rOwner r))+ , ("description", showJSON (rDescription r))+ , ("website", showJSON (rWebsite r))+ , ("created", showJSON (formatTime defaultTimeLocale "%F %T" (rCreated r)))+ , ("fork_of", showJSON (rForkOf r))+ , ("members", showJSON (rMembers r))+ , ("is_private", showJSON (rIsPrivate r))+ , ("issue_tracker", showJSON (rIssueTracker r))+ , ("issue_count", showJSON (rIssueCount r))+ , ("packs_created", showJSON (fmap (formatTime defaultTimeLocale "%F %T") (rBuiltPacks r)))+ ] ++ id' ++ rev'+ where+ id' =+ case rID r of+ Just id'' -> [("_id", showJSON (show id''))]+ Nothing -> []+ rev' =+ case rRev r of+ Just rev'' -> [("_rev", showJSON (show rev''))]+ Nothing -> []+++repoOwnerURL :: Repository -> String+repoOwnerURL = (baseUrl ++) . rOwner++-- The named repo's url, no trailing slash.+repoURL :: Repository -> String+repoURL r = baseUrl ++ rOwner r ++ "/" ++ rName r++getRepositoryByID :: MonadIO m => Doc -> m (Maybe Repository)+getRepositoryByID key = do+ res <- liftIO $ runDB (getDoc (db "repositories") key)+ case res of+ Just (_, _, r) -> return (Just r)+ Nothing -> return Nothing++getRepository :: MonadIO m => (String, String) -> m (Maybe Repository)+getRepository = getRepositoryByOwnerAndName (doc "repositories")++getOwnerRepository :: MonadIO m => (String, String) -> m (Maybe Repository)+getOwnerRepository = getRepositoryByOwnerAndName (doc "private")++getRepositoryByOwnerAndName :: MonadIO m => Doc -> (String, String) -> m (Maybe Repository)+getRepositoryByOwnerAndName design (un, rn) =+ liftIO (runDB query)+ where+ query = getDocByView+ (db "repositories")+ design+ (doc "by_owner_and_name")+ [un, rn]++getRepositoryForks :: MonadIO m => Doc -> m [Repository]+getRepositoryForks key =+ liftIO $ fmap (map snd) (runDB query)+ where+ query = queryView+ (db "repositories")+ (doc "repositories")+ (doc "by_fork")+ [("key", showJSON key)]++getRepositories :: MonadIO m => m [Repository]+getRepositories = do+ ids <- liftIO $ runDB (getAllDocIds (db "repositories"))+ repos <- mapM getRepositoryByID ids+ return (filter (not . rIsPrivate) $ catMaybes repos)++getUserRepositories :: MonadIO m => String -> m [Repository]+getUserRepositories = getRepositoriesByOwner (doc "repositories")++getOwnerRepositories :: MonadIO m => String -> m [Repository]+getOwnerRepositories = getRepositoriesByOwner (doc "private")++getRepositoriesByOwner :: MonadIO m => Doc -> String -> m [Repository]+getRepositoriesByOwner design on =+ liftIO $+ fmap (sortBy (comparing (map toLower . rName)) . map snd)+ (runDB query)+ where+ query = queryView+ (db "repositories")+ design+ (doc "by_owner")+ [("key", showJSON on)]++addRepository :: MonadIO m => Repository -> m Repository+addRepository r = do+ (id', rev') <- liftIO $ runDB (newDoc (db "repositories") r)+ return r { rID = Just id', rRev = Just rev' }++updateRepository :: MonadIO m => Repository -> m (Maybe Repository)+updateRepository r =+ case (rID r, rRev r) of+ (Just id', Just rev') -> do+ update <-+ liftIO . runDB $ updateDoc (db "repositories") (id', rev') r+ { rID = Nothing }+ case update of+ Just (id'', rev'') -> return $ Just r+ { rID = Just id''+ , rRev = Just rev''+ }+ _ -> return Nothing+ _ -> return Nothing++deleteRepository :: MonadIO m => Repository -> m Bool+deleteRepository r =+ case (rID r, rRev r) of+ (Just id', Just rev') -> do+ -- orphan a repository's forks+ fs <- getRepositoryForks id'+ forM_ fs $ \f ->+ updateRepository f { rForkOf = Nothing }++ liftIO $ runDB (deleteDoc (db "repositories") (id', rev'))+ _ -> return False++newRepository :: MonadIO m => Repository -> m Repository+newRepository r = do+ new <- addRepository r+ Darcs.init repo+ return new+ where repo = repoDir (rOwner r) (rName r)++destroyRepository :: MonadIO m => Repository -> m Bool+destroyRepository r = do+ success <- deleteRepository r+ if success+ then do+ when (deletefiles) $+ liftIO . removeDirectoryRecursive $ repoDir (rOwner r) (rName r)+ return True+ else return False++bootstrapRepository :: MonadIO m => Repository -> String -> m Repository+bootstrapRepository r orig = do+ Darcs.getTo orig dest+ new <- addRepository r+ return new+ where+ dest = repoDir (rOwner r) (rName r)++forkRepository :: MonadIO m => String -> String -> Repository -> m Repository+forkRepository un rn r = do+ dest <- liftIO $ mrn (0-1)+ let fork = r {+ rID = Nothing+ , rRev = Nothing+ , rOwner = un+ , rName = dest+ , rForkOf = rID r+ }+ bootstrapRepository fork orig+ where+ orig = repoDir (rOwner r) (rName r)+ mrn :: Int -> IO String+ mrn i = do+ exists <- doesDirectoryExist (repoDir un rn++thenum)+ file_exists <- doesFileExist (repoDir un rn++thenum)+ if not exists && not file_exists+ then return (rn++thenum)+ else mrn $ i+1+ where thenum = if i == -1 then "" else "_"++show i++moveRepository :: MonadIO m => (String, String) -> Repository -> m ()+moveRepository (o, n) r =+ liftIO (renameDirectory (repoDir (rOwner r) (rName r)) (repoDir o n))++renameRepository :: MonadIO m => String -> Repository -> m (Maybe Repository)+renameRepository n r = do+ update <- updateRepository (r { rName = n })+ case update of+ Just _ -> moveRepository (rOwner r, n) r >> return update+ _ -> return Nothing++removeMember :: MonadIO m => Repository -> String -> m (Maybe Repository)+removeMember r m =+ updateRepository (r { rMembers = filter (/= m) (rMembers r) })++addMember :: MonadIO m => Repository -> String -> m (Maybe Repository)+addMember r m =+ updateRepository (r { rMembers = filter (/= m) (rMembers r) ++ [m] })++isMember :: MonadIO m => String -> (String, String) -> m Bool+isMember un key = do+ repos <- liftIO $ fmap (map snd) (runDB query)+ return (key `elem` repos)+ where+ query = queryView+ (db "repositories")+ (doc "private")+ (doc "by_member")+ [("key", showJSON un)]++withParent :: MonadIO m => (Repository -> m a) -> Repository -> m (Maybe a)+withParent f r = case rForkOf r of+ Nothing -> return Nothing+ Just p -> getRepositoryByID p >>= f . fromJust >>= return . Just
@@ -0,0 +1,109 @@+module DarcsDen.State.Schema+where++import Text.JSON++repoDesigns, userDesigns, issueDesigns, commentDesigns :: [JSValue]++repoDesigns =+ [ jsobj+ [ ("_id", jsstr "_design/repositories")+ , ("language", jsstr "javascript")+ , ("views", jsobj+ [ ("by_owner_and_name", jsobj+ [ ("map", jsstr "function(doc) {\n if (doc.owner && doc.name && !doc.is_private)\n emit([doc.owner, doc.name], doc);\n}")+ ])++ , ("by_owner", jsobj+ [ ("map", jsstr "function(doc) {\n if (doc.owner && !doc.is_private)\n emit(doc.owner, doc);\n}")+ ])++ , ("by_fork", jsobj+ [ ("map", jsstr "function(doc) {\n if (doc.fork_of.Just && !doc.is_private)\n emit(doc.fork_of.Just, doc);\n}")+ ])++ , ("by_member", jsobj+ [ ("map", jsstr "function(doc) {\n if (!doc.is_private)\n for (member in doc.members)\n emit(doc.members[member], doc._id);\n}")+ ])+ ])+ ]++ , jsobj+ [ ("_id", jsstr "_design/private")+ , ("language", jsstr "javascript")+ , ("views", jsobj+ [ ("by_owner", jsobj+ [ ("map", jsstr "function(doc) {\n emit(doc.owner, doc);\n}\n")+ ])+ , ("by_owner_and_name", jsobj+ [ ("map", jsstr "function(doc) {\n if (doc.owner && doc.name)\n emit([doc.owner, doc.name], doc);\n}")+ ])+ , ("by_member", jsobj+ [ ("map", jsstr "function(doc) {\n for (member in doc.members)\n emit(doc.members[member], [doc.owner, doc.name]);\n}")+ ])+ ])+ ]+ ]++userDesigns =+ [ jsobj+ [ ("_id", jsstr "_design/users")+ , ("language", jsstr "javascript")+ , ("views", jsobj+ [ ("by_email", jsobj+ [ ("map", jsstr "function(doc) {\n if (doc.email)\n emit(doc.email, doc);\n}")+ ])+ , ("by_name", jsobj+ [ ("map", jsstr "function(doc) {\n if (doc.name)\n emit(doc.name, doc);\n}")+ ])+ , ("by_gid", jsobj+ [ ("map", jsstr "function(doc) {\n if (doc.gid)\n emit (doc.gid, doc);\n}")+ ])+ , ("by_gsub", jsobj+ [ ("map", jsstr "function(doc) {\n if (doc.gsub)\n emit (doc.gsub, doc);\n}")+ ])+ ])+ ]+ ]++issueDesigns =+ [ jsobj+ [ ("_id", jsstr "_design/issues")+ , ("language", jsstr "javascript")+ , ("views", jsobj+ [ ("by_repository_and_number", jsobj+ [ ("map", jsstr "function(doc) {\n emit([doc.repository, doc.number], doc);\n}")+ ])+ , ("by_repository", jsobj+ [ ("map", jsstr "function(doc) {\n emit(doc.repository, doc);\n}")+ ])+ , ("by_repository_open", jsobj+ [ ("map", jsstr "function(doc) {\n if (!doc.is_closed)\n emit(doc.repository, doc);\n}")+ ])+ , ("by_repository_closed", jsobj+ [ ("map", jsstr "function(doc) {\n if (doc.is_closed)\n emit(doc.repository, doc);\n}")+ ])+ , ("by_repository_and_tag", jsobj+ [ ("map", jsstr "function(doc) {\n for(var i in doc.tags)\n emit([doc.repository, doc.tags[i]], doc);\n}")+ ])+ ])+ ]+ ]++commentDesigns =+ [ jsobj+ [ ("_id", jsstr "_design/comments")+ , ("language", jsstr "javascript")+ , ("views", jsobj+ [ ("by_issue", jsobj+ [ ("map", jsstr "function(doc) {\n emit(doc.issue, doc);\n}")+ ])+ ])+ ]+ ]++jsstr :: String -> JSValue+jsstr = JSString . toJSString++jsobj :: [(String, JSValue)] -> JSValue+jsobj = JSObject . toJSObject
@@ -0,0 +1,152 @@+module DarcsDen.State.Session where++import Control.Monad.Trans+import Database.Redis.Monad hiding (expireAt)+import Data.Time+import Data.Time.Clock.POSIX+import System.UUID.V4+import qualified Data.ByteString as BS+import qualified Control.Monad.Trans as MTL++import DarcsDen.State.Util+import DarcsDen.State.User (OAuthID)+import DarcsDen.Util (fromBS, toBS)+++data Notification+ = Success { nMessage :: String }+ | Message { nMessage :: String }+ | Warning { nMessage :: String }+ deriving (Eq, Show)++data Session =+ Session+ { sID :: BS.ByteString+ , sExpire :: UTCTime+ , sUser :: Maybe String+ , sNotifications :: [Notification]+ , sOAuthReg :: Maybe (Either String OAuthID) -- Nothing -> registration not in process+ -- Just (Left xs) -> secret key to prevent csrf+ -- Just (Right xid) -> oauth identity of the user+ }+ deriving (Eq, Show)+++expireAt :: WithRedis m => String -> Int -> m (Reply Int)+expireAt k t = do+ now <- MTL.liftIO getCurrentTime++ let relative = diffUTCTime (posixSecondsToUTCTime (fromIntegral t)) now++ expire k (ceiling relative)++getSession :: MonadIO m => BS.ByteString -> m (Maybe Session)+getSession sid = withRedis $ do+ RBulk mexpire <- get (sessionKey' sid "expire")++ case mexpire of+ Just e -> do+ RBulk user <- get (sessionKey' sid "user")+ RBulk gr <- get (sessionKey' sid "oauthreg")+ ws <- fmap (map Warning) $ getNotifications "warning"+ ms <- fmap (map Message) $ getNotifications "message"+ ss <- fmap (map Success) $ getNotifications "success"+ return . Just $ Session+ { sID = sid+ , sExpire = posixSecondsToUTCTime (fromIntegral (e :: Int))+ , sUser = user+ , sNotifications = concat [ws, ms, ss]+ , sOAuthReg = fmap read gr+ }+ Nothing -> return Nothing+ where+ getNotifications t = do+ RMulti res <- smembers (sessionKey' sid t)+ case res of+ Just mns ->+ return $ map (\(RBulk (Just n)) -> n) mns+ Nothing -> return []++newSession :: MonadIO m => m (Maybe Session)+newSession = do+ ui <- liftIO uuid++ now <- liftIO (getCurrentTime)+ let s = Session+ { sID = toBS . filter (/= '-') . show $ ui+ , sExpire = addUTCTime (60 * 60 * 24 * 30) now+ , sUser = Nothing+ , sNotifications = []+ , sOAuthReg = Nothing+ }++ withRedis $ do+ incrBy (sessionKey s "expire") (sessionExpire s)+ expireAt (sessionKey s "expire") (sessionExpire s)++ return (Just s)++deleteSession :: MonadIO m => Session -> m ()+deleteSession s = withRedis $ do+ del (sessionKey s "expire")+ del (sessionKey s "user")+ del (sessionKey s "warning")+ del (sessionKey s "message")+ del (sessionKey s "success")+ del (sessionKey s "oauthreg")+ return ()++setUser :: MonadIO m => Maybe String -> Session -> m Session+setUser mn s = withRedis $ do+ case mn of+ Just n -> do+ set key n+ expireAt key (sessionExpire s)+ Nothing -> del key+ return (s { sUser = mn })+ where key = sessionKey s "user"++setOAuthReg :: MonadIO m => Maybe (Either String OAuthID) -> Session -> m ()+setOAuthReg v s = withRedis $ do+ case v of+ Just n -> do+ set key (show n)+ expire key (24 * 60 * 60)+ return ()+ Nothing -> do+ del key+ return ()+ where key = sessionKey s "oauthreg"++clearNotifications :: MonadIO m => Session -> m ()+clearNotifications s = withRedis $+ mapM_ (del . sessionKey s)+ ["warning", "message", "success"]++notice :: MonadIO m => Notification -> Session -> m ()+notice n s = withRedis $ do+ sadd (key n) (nMessage n)+ expireAt (key n) (sessionExpire s)+ return ()+ where+ key (Warning _) = sessionKey s "warning"+ key (Message _) = sessionKey s "message"+ key (Success _) = sessionKey s "success"++warn :: MonadIO m => String -> Session -> m ()+warn = notice . Warning++success :: MonadIO m => String -> Session -> m ()+success = notice . Success++message :: MonadIO m => String -> Session -> m ()+message = notice . Message++sessionKey :: Session -> String -> String+sessionKey = sessionKey' . sID++sessionKey' :: BS.ByteString -> String -> String+sessionKey' sid n = "session:" ++ fromBS sid ++ ":" ++ n++sessionExpire :: Session -> Int+sessionExpire = ceiling . utcTimeToPOSIXSeconds . sExpire
@@ -0,0 +1,221 @@+module DarcsDen.State.User where++import Control.Monad.Trans+import Control.Monad (replicateM)+import Data.Digest.Pure.SHA (sha512, bytestringDigest)+import Data.Maybe (catMaybes, isJust)+import Data.Time (UTCTime, formatTime)+import Data.Word (Word8)+import Database.CouchDB+import System.Directory (createDirectoryIfMissing)+import System.Locale (defaultTimeLocale)+import System.Random+import Text.JSON+import qualified Data.ByteString.Lazy as LBS++import DarcsDen.State.Repository+import DarcsDen.State.Util+import DarcsDen.Settings+++data User =+ User+ { uID :: Maybe Doc+ , uRev :: Maybe Rev+ , uName :: String+ , uPaS :: Maybe ([Word8], [Word8]) -- uPassword, and uSalt+ , uOAuthIDs :: [OAuthID]+ , uFullName :: String+ , uWebsite :: String+ , uEmail :: String+ , uKeys :: [String]+ , uJoined :: UTCTime+ }+ deriving (Eq, Show)++data OAuthID = Github String -- Github login name+ | Google String -- Google sub+ deriving (Eq, Show, Read)++uPassword :: User -> Maybe [Word8]+uPassword u = fmap fst (uPaS u)++uSalt :: User -> Maybe [Word8]+uSalt u = fmap snd (uPaS u)++uGithubLoginName :: User -> Maybe String+uGithubLoginName u = foldl f Nothing (uOAuthIDs u)+ where f :: Maybe String -> OAuthID -> Maybe String+ f _ (Github xs) = Just xs+ f a _ = a++uGoogleSub :: User -> Maybe String+uGoogleSub u = foldl f Nothing (uOAuthIDs u)+ where f :: Maybe String -> OAuthID -> Maybe String+ f _ (Google xs) = Just xs+ f a _ = a++instance JSON User where+ readJSON o = do+ id' <- getID o+ rev' <- getRev o+ name <- getAttr o "name"+ pas <- gPas+ gid <- fmap (fmap Github) (getAttrOr o "gid" Nothing)+ gsub <- fmap (fmap Google) (getAttrOr o "gsub" Nothing)+ fullName <- getAttrOr o "full_name" ""+ website <- getAttrOr o "website" ""+ email <- getAttrOr o "email" ""+ keys <- getAttrOr o "keys" []+ joined <- getTime o "joined"+ return User+ { uID = Just id'+ , uRev = Just rev'+ , uName = name+ , uPaS = pas+ , uOAuthIDs = catMaybes [gid, gsub]+ , uFullName = fullName+ , uWebsite = website+ , uEmail = email+ , uKeys = keys+ , uJoined = joined+ }+ where+ gPas = do+ v <- getAttrOr o "pas" Nothing+ if isJust v+ then return v+ else do+ p <- getAttrOr o "password" []+ s <- getAttrOr o "salt" []+ if null p || null s then return Nothing else return (Just (p,s))++ showJSON u = JSObject . toJSObject $+ [ ("name", showJSON (uName u))+ , ("pas", showJSON (uPaS u))+ , ("gid", showJSON (uGithubLoginName u))+ , ("gsub", showJSON (uGoogleSub u))+ , ("full_name", showJSON (uFullName u))+ , ("website", showJSON (uWebsite u))+ , ("email", showJSON (uEmail u))+ , ("keys", showJSON (uKeys u))+ , ("joined", showJSON (formatTime defaultTimeLocale "%F %T" (uJoined u)))+ ] ++ id' ++ rev'+ where+ id' =+ case uID u of+ Just id'' -> [("_id", showJSON (show id''))]+ Nothing -> []+ rev' =+ case uRev u of+ Just rev'' -> [("_rev", showJSON (show rev''))]+ Nothing -> []+++userURL :: User -> String+userURL = (baseUrl ++) . uName++getUsers :: MonadIO m => m [User]+getUsers = do+ rs <- liftIO $ runDB $ queryView (db "users") (doc "users") (doc "by_name") []+ return $ map snd rs++-- getUsersWithRepos :: MonadIO m => m [User]+-- getUsersWithRepos = do+-- ids <- liftIO $ runDB (getAllDocIds (db "users"))+-- users <- mapM getUserByID ids+-- repos <- getRepositories+-- let userRepoCount u = \u -> (length $ filter ((u==).rOwner) repos)+-- userswithrepos = filter (\u -> userRepoCount u > 0) $ catMaybes users+-- return userswithrepos++getUser :: MonadIO m => String -> m (Maybe User)+getUser un = liftIO . runDB $+ getDocByView (db "users") (doc "users") (doc "by_name") un++getUserByID :: MonadIO m => Doc -> m (Maybe User)+getUserByID key = do+ res <- liftIO $ runDB (getDoc (db "users") key)+ case res of+ Just (_, _, r) -> return (Just r)+ Nothing -> return Nothing++getUserByEmail :: MonadIO m => String -> m (Maybe User)+getUserByEmail email = liftIO . runDB $+ getDocByView (db "users") (doc "users") (doc "by_email") email++getUserByGithub :: MonadIO m => String -> m (Maybe User)+getUserByGithub gid = liftIO . runDB $+ getDocByView (db "users") (doc "users") (doc "by_gid") (Just gid)++getUserByGoogle :: MonadIO m => String -> m (Maybe User)+getUserByGoogle gsub = liftIO . runDB $+ getDocByView (db "users") (doc "users") (doc "by_gsub") (Just gsub)++addUser :: MonadIO m => User -> m User+addUser u = do+ (id', rev') <- liftIO $ runDB (newDoc (db "users") u)+ return (u { uID = Just id', uRev = Just rev' })++updateUser :: MonadIO m => User -> m (Maybe User)+updateUser u =+ case (uID u, uRev u) of+ (Just id', Just rev') -> do+ update <- liftIO $ runDB (updateDoc (db "users") (id', rev') (u { uID = Nothing }))+ case update of+ Just (id'', rev'') ->+ return $ Just u+ { uID = Just id''+ , uRev = Just rev''+ }+ _ -> return Nothing+ _ -> return Nothing++deleteUser :: MonadIO m => User -> m Bool+deleteUser u =+ case (uID u, uRev u) of+ (Just id', Just rev') ->+ liftIO $ runDB (deleteDoc (db "users") (id', rev'))+ _ -> return False++salt :: Int -> IO [Word8]+salt num = do+ r <- replicateM num (randomRIO (0 :: Int, 255))+ return (map (\x -> fromIntegral x :: Word8) r)++hashPassword :: String -> [Word8] -> [Word8]+hashPassword p s+ = LBS.unpack+ . bytestringDigest+ . sha512+ . LBS.pack+ $ merge (map (fromIntegral . fromEnum) p) s+ where+ merge a b =+ concat (zipWith (\ x y -> [x, y]) a b) ++ remaining a b++ remaining a b+ | length a < length b = drop (length a) b+ | otherwise = drop (length b) a++checkPassword :: String -> User -> Bool+checkPassword p u = fmap (hashPassword p) (uSalt u) == uPassword u && isJust (uPaS u)++newUser :: MonadIO m => User -> m User+newUser u = do+ liftIO $ createDirectoryIfMissing True (userDir (uName u))+ addUser u++destroyUser :: MonadIO m => User -> m Bool+destroyUser u = do+ repos <- getUserRepositories (uName u)+ mapM_ destroyRepository repos+ deleteUser u++renameUser :: MonadIO m => String -> User -> m User+renameUser n u = do+ new <- newUser (u { uName = n })+ repos <- getUserRepositories n+ mapM_ (\r -> moveRepository (n, rName r) r) repos+ destroyUser u+ return new
@@ -0,0 +1,120 @@+module DarcsDen.State.Util where++import Control.Monad+import Control.Monad.Trans+import Data.Time (UTCTime, readTime)+import System.Directory+import System.FilePath+import System.Locale (defaultTimeLocale)+import Database.CouchDB+import Database.Redis.Monad.State (RedisM, runWithRedis)+import Database.Redis.Monad (flushAll)+import Text.JSON+import qualified Database.Redis.Redis as R++import DarcsDen.Settings+import DarcsDen.State.Schema+++runDB :: CouchMonad a -> IO a+runDB = runCouchDB couchHost couchPort++withRedis :: (MonadIO m) => RedisM a -> m a+withRedis a = liftIO $ do+ c <- R.connect redisHost redisPort+ runWithRedis c a++getDocByView :: (JSON a, JSON b) => DB -> Doc -> Doc -> a -> CouchMonad (Maybe b)+getDocByView db' design view key = do+ get <- queryView db' design view [("key", showJSON key)]+ case get of+ [] -> return Nothing+ ((_, val):_) -> return (Just val)++-- . is allowed in repo names except at the beginning,+-- for this to be safe / and \ must remain disallowed.+charIsSane :: Char -> Bool+charIsSane = flip elem (['a'..'z'] ++ ['A'..'Z'] ++ ['0'..'9'] ++ "-_.")++isSane :: String -> Bool+isSane ('.':_) = False+isSane s = all charIsSane s++saneName :: String -> String+saneName = filter charIsSane++userDir :: String -> FilePath+userDir un = usersDir </> saneName un++repoDir :: String -> String -> FilePath+repoDir un rn = userDir un </> saneName rn++getAttr :: JSON a => JSValue -> String -> Result a+getAttr (JSObject o) n =+ maybe+ (fail ("object missing `" ++ n ++ "': " ++ show o))+ readJSON+ (lookup n (fromJSObject o))+getAttr js n =+ fail ("not an object (needed `" ++ n ++ "' attribute): " ++ show js)++getAttrOr :: JSON a => JSValue -> String -> a -> Result a+getAttrOr (JSObject o) n d =+ maybe (return d) readJSON (lookup n (fromJSObject o))+getAttrOr js n _ =+ fail ("not an object (needed `" ++ n ++ "' attribute): " ++ show js)++getOneOf :: JSON a => JSValue -> String -> String -> Result a+getOneOf (JSObject o) a b =+ maybe (getAttr (JSObject o) b) readJSON (lookup a (fromJSObject o))+getOneOf js n _ =+ fail ("not an object (needed `" ++ n ++ "' attribute): " ++ show js)++getTime :: JSValue -> String -> Result UTCTime+getTime o n = fmap (readTime defaultTimeLocale "%F %T") (getAttr o n)++getMaybeTime :: JSValue -> String -> Result (Maybe UTCTime)+getMaybeTime o n =+ (getAttrOr o n Nothing :: Result (Maybe String)) >>=+ ((return.fmap (readTime defaultTimeLocale "%F %T")) :: Maybe String -> Result (Maybe UTCTime))++getID :: JSValue -> Result Doc+getID o = getAttr o "_id"++getRev :: JSValue -> Result Rev+getRev o = fmap rev (getAttr o "_rev")++resetAllState :: MonadIO m => m ()+resetAllState = do+ withRedis flushAll+ liftIO $ do+ runDB $ do+ mapM_ dropDB ["repositories", "users", "issues", "comments"]+ createFreshState False+ doesDirectoryExist usersDir >>= flip when (removeDirectoryRecursive usersDir)++createFreshState :: Bool -> CouchMonad ()+createFreshState verbose = do+ when verbose $ liftIO (putStrLn "creating databases...")+ createDB "repositories"+ createDB "users"+ createDB "issues"+ createDB "comments"++ when verbose $ liftIO (putStrLn "creating repository design documents...")+ forM_ repoDesigns $ \js ->+ newDoc (db "repositories") js++ when verbose $ liftIO (putStrLn "creating user design documents...")+ forM_ userDesigns $ \js ->+ newDoc (db "users") js++ when verbose $ liftIO (putStrLn "creating issue design documents...")+ forM_ issueDesigns $ \js ->+ newDoc (db "issues") js++ when verbose $ liftIO (putStrLn "creating comment design documents...")+ forM_ commentDesigns $ \js ->+ newDoc (db "comments") js++ when verbose $ liftIO (putStrLn "All set!")
@@ -0,0 +1,143 @@+module DarcsDen.Util+(module DarcsDen.Util, module DarcsDen.Debug)+where++import Control.Monad (unless, when)+import Data.Char (isAlphaNum, isSpace)+import System.Directory+import Text.Pandoc+import Data.Text.Encoding+import Text.Blaze.Html (toHtml)+import Text.Blaze.Html.Renderer.String (renderHtml)+import qualified Data.ByteString as BS+import qualified Data.ByteString.Char8 as BS8+import qualified Data.ByteString.Lazy as LBS+import qualified Data.Text as T+import Network.HTTP.Conduit (Request, host, path, queryString)++import DarcsDen.Debug+++recursively :: (FilePath -> IO ()) -> FilePath -> IO ()+recursively f p = do+ dir <- doesDirectoryExist p+ if dir+ then do+ f p+ contents <- getDirectoryContents p+ mapM_ (recursively f . ((p ++ "/") ++)) $+ filter (\d -> d /= "." && d /= "..") contents+ else f p++recursivelyOnDirs :: (FilePath -> IO ()) -> FilePath -> IO ()+recursivelyOnDirs f =+ recursively $ \p -> do+ dir <- doesDirectoryExist p+ when dir (f p)++recursivelyOnFiles :: (FilePath -> IO ()) -> FilePath -> IO ()+recursivelyOnFiles f =+ recursively $ \p -> do+ dir <- doesDirectoryExist p+ unless dir (f p)++toMaybe :: [a] -> Maybe [a]+toMaybe [] = Nothing+toMaybe x = Just x++paginate :: Int -> Int -> [a] -> [a]+paginate perpage page = take perpage . drop (perpage * (page - 1))++toBS :: String -> BS.ByteString+toBS = encodeUtf8 . T.pack++fromBS :: BS.ByteString -> String+fromBS = T.unpack . decodeUtf8++toBLBS :: String -> LBS.ByteString+toBLBS = LBS.pack . map (toEnum . fromEnum)++fromBLBS :: LBS.ByteString -> String+fromBLBS = map (toEnum . fromEnum) . LBS.unpack++toLBS :: String -> LBS.ByteString+toLBS = LBS.fromChunks . (:[]) . encodeUtf8 . T.pack++fromLBS :: LBS.ByteString -> String+fromLBS = fromBS . strictLBS++strictLBS :: LBS.ByteString -> BS.ByteString+strictLBS = BS.concat . LBS.toChunks++strictTake :: Integral n => n -> LBS.ByteString -> BS.ByteString+strictTake n = strictLBS . LBS.take (fromIntegral n)++strip :: String -> String+strip = strip' . strip'+ where+ strip' = reverse . dropWhile isSpace++doMarkdown :: String -> String+doMarkdown+ = fixEscapes+ . writeHtmlString def+ . readMarkdown def+ . renderHtml+ . toHtml+ . normalize++doMarkdown' :: String -> String+doMarkdown' =+ fixEscapes+ . writeHtmlString def+ . readMarkdown def+ . normalize++normalize :: String -> String+normalize "" = ""+normalize ('\r':'\n':cs) = '\n' : normalize cs+normalize ('\r':cs) = '\n' : normalize cs+normalize (c:cs) = c : normalize cs++fixEscapes :: String -> String+fixEscapes "" = ""+fixEscapes ('&':'a':'m':'p':';':ss) | and [not (null ele), not (null rest), head rest == ';', all isAlphaNum ele]+ = '&' : ele ++ fixEscapes rest+ where (ele, rest) = span (/= ';') ss+fixEscapes (s:ss) = s : fixEscapes ss++-- Convert a patch author string not corresponding to a local user to+-- something suitable for display, not revealing the full email address.+safeAuthorFrom :: String -> String+safeAuthorFrom s =+ case parseNameAndEmail s of+ ("","") -> ""+ ("",e) -> takeWhile (/='@') e+ (n,_) -> n++nameFrom :: String -> String+nameFrom = fst . parseNameAndEmail++emailFrom :: String -> String+emailFrom = snd . parseNameAndEmail++-- Parse a real-name-and-email-address string into name and email address+-- more or less following the usual <> and () conventions. May return the+-- empty string for either or both parts.+parseNameAndEmail :: String -> (String, String)+parseNameAndEmail s+ | '<' `elem` s && '>' `elem` s =+ let (a,bc) = span (/= '<') s+ (b,c') = span (/= '>') $ dropWhile (=='<') bc+ c = dropWhile (== '>') c'+ in (strip $ unwords $ words $ a++c, strip b)+ | '(' `elem` s && ')' `elem` s =+ let (a,bc) = span (/= '(') s+ (b,c') = span (/= ')') $ dropWhile (=='(') bc+ c = dropWhile (== ')') c'+ in (strip b, strip $ unwords $ words $a++c)+ | '@' `elem` s = ("", strip s)+ | otherwise = (strip s, "")++toUrl :: Request m -> BS8.ByteString+toUrl r = BS8.concat [BS8.pack "https://", host r, path r, BS8.singleton '?', queryString r]
@@ -0,0 +1,147 @@+module DarcsDen.Validate where++import Control.Monad.Trans+import Data.Char (isNumber)+import Data.Either (lefts)+import Snap.Core+import qualified Data.Map as M++import DarcsDen.State.Session+import DarcsDen.Util (fromBS, toBS)+++data Valid = Predicate String (String -> Bool) String+ | PredicateOp String String (String -> String -> Bool) String+ | Not Valid+ | Or Valid Valid+ | And Valid Valid+ | If Valid (OK -> Valid)+ | IOPred String (IO Bool)++data Invalid = Invalid [Valid]+ deriving Show+data OK = OK (M.Map String String)+ deriving Show++type Result = Either Invalid OK++instance Show Valid where+ show = explain++-- Explain a validation+explain :: Valid -> String+explain (Predicate a _ e) = a ++ " must " ++ e+explain (PredicateOp a b _ e) = a ++ " and " ++ b ++ " must " ++ e+explain (Not v) = "not: " ++ explain v+explain (Or v x) = explain v ++ " or " ++ explain x+explain (And v x) = explain v ++ " and " ++ explain x+explain (If v _) = "if (" ++ explain v ++ ") (...)"+explain (IOPred e _) = e++-- Helpers+ok :: [(String, String)] -> Result+ok = Right . OK . M.fromList++invalid :: [Valid] -> Result+invalid = Left . Invalid++param :: String -> Snap (Maybe String)+param a = do+ p <- getParam (toBS a)+ return (fmap fromBS p)++-- Verify a validation+verify :: Valid -> Snap Result+verify v@(Predicate a p _) = do+ mp <- param a+ case mp of+ Just x | p x -> return $ ok [(a, x)]+ _ -> return $ invalid [v]+verify v@(PredicateOp a b p _) = do+ ma <- param a+ mb <- param b+ case (ma, mb) of+ (Just x, Just y) | p x y -> return $ ok [(a, x), (b, y)]+ _ -> return $ invalid [v]+verify v@(Not t) = do+ r <- verify t+ return (either (const (ok [])) (const (invalid [v])) r)+verify (Or a b) = do+ x <- verify a+ case x of+ Left _ -> verify b+ Right _ -> return x+verify (And a b) = do+ x <- verify a+ y <- verify b+ case [x, y] of+ [Right (OK ra), Right (OK rb)] ->+ return $ Right $ OK (ra `M.union` rb)+ other ->+ return $ invalid (concatMap (\(Invalid i) -> i) $ lefts other)+verify (If a b) = do+ x <- verify a+ case x of+ Right o@(OK r) -> do+ t <- verify (b o)+ case t of+ Left _ -> return t+ Right (OK ts) -> return $ Right $ OK (r `M.union` ts)+ _ -> return x+verify v@(IOPred _ p) = do+ r <- liftIO p+ if r+ then return $ ok []+ else return $ invalid [v]++-- Check a bunch of validations+check :: [Valid] -> Snap Result+check = check' (ok [])+ where+ check' acc [] = return acc+ check' (Left (Invalid is)) (t:ts)+ = do v <- verify t+ case v of+ Left (Invalid i) -> check' (invalid (is ++ i)) ts+ _ -> check' (invalid is) ts+ check' (Right (OK vs)) (t:ts)+ = do v <- verify t+ case v of+ Right (OK r) -> check' (Right (OK (vs `M.union` r))) ts+ _ -> check' v ts++-- Validators+nonEmpty :: String -> Valid+nonEmpty a = Predicate a (/= "") "not be empty"++isEmpty :: String -> Valid+isEmpty a = Predicate a (== "") "be empty"++numeric :: String -> Valid+numeric a = nonEmpty a `And` Predicate a (all isNumber) "be numeric"++equal :: String -> String -> Valid+equal a b = PredicateOp a b (==) "be the same"++validate :: [Valid] -> (OK -> Snap a) -> (Invalid -> Snap a) -> Snap a+validate ts p f = check ts >>= either f p++predicate :: String -> (String -> Bool) -> String -> Valid+predicate = Predicate++iff :: Valid -> (OK -> Valid) -> Valid+iff = If++onlyIf :: Valid -> Valid -> Valid+onlyIf p v = Or (Not p) v++io :: String -> IO Bool -> Valid+io = IOPred++-- Notifications+notify :: MonadIO m => (String -> Notification) -> Session -> [Valid] -> m Session+notify n s vs = do+ mapM_ (flip notice s) ns+ return (s { sNotifications = sNotifications s ++ ns })+ where+ ns = map (n . explain) vs
@@ -0,0 +1,180 @@+{-# LANGUAGE OverloadedStrings #-}+module DarcsDen.WebUtils where++import Control.Exception+import Control.Monad.Trans+import Data.List (find)+import Data.Maybe (isNothing)+import Data.Monoid (mconcat)+import HSP (XML, evalHSP, renderXML, renderAsHTML)+import Snap.Core+import Snap.Util.FileServe+import System.FilePath+import qualified Data.ByteString as BS+import qualified Data.ByteString.Char8 as B8 (pack)+import qualified Data.Map as M++import DarcsDen.Pages.HSPage ( HSPage )+import DarcsDen.State.Session+import DarcsDen.State.Repository (getRepository)+import DarcsDen.State.Util (repoDir)+import DarcsDen.Util (fromBS, toBS)+++type Page = Session -> Snap ()+++notFound :: Snap ()+notFound = notFoundPage ""++notFoundPage :: BS.ByteString -> Snap ()+notFoundPage msg = do+ putResponse+ $ setResponseStatus 404 "Not Found"+ $ setContentType "text/html; charset=utf-8"+ emptyResponse+ r <- getRequest+ writeBS $ errorPageLayout r "background-color:#ffe; color:orange;" "not found" msg+ withResponse finishWith++tobs :: String -> BS.ByteString+tobs = B8.pack++exceptionPage :: SomeException -> Snap ()+exceptionPage e = do+ r <- getRequest+ errorPage' $ errorPageLayout r "background-color:#fee; color:red;" "error" (tobs $ show e)++errorPage :: BS.ByteString -> Snap ()+errorPage msg = do+ r <- getRequest+ errorPage' $ errorPageLayout r "background-color:#fee; color:red;" "error" msg++errorPageLayout :: Request -> BS.ByteString -> BS.ByteString -> BS.ByteString -> BS.ByteString+errorPageLayout req style title content =+ BS.intercalate "\n" $+ ["<html>"+ ,"<body style='text-align:center;'>"+ ,mconcat ["<div style='margin:auto; display:inline-block; padding:1em 3em;",style,"'>"]+ ,mconcat ["<h1 style='font-family:sans-serif; font-size:4em; margin:0;'>",title,"</h1>"]+ ,"<p style='font-family:sans-serif; font-size:1em;'>"+ ,mconcat ["Sorry.. your ", B8.pack $ show $ rqMethod req, " request to ", rqURI req, " failed. The details have been logged."]+ ,"</p>"+ ,"<pre style='font-family:sans-serif; font-size:1em;'>"+ ,humaniseError content+ ,"</pre>"+ ,"</div>"+ ,"</body>"+ ,"</html>"+ ]++humaniseError :: BS.ByteString -> BS.ByteString+humaniseError msg+ -- the most common cause of errors+ | match "thread killed"+ || (match "user error (internal error: server error: GET http://127.0.0.1:5984"+ && match "users/_view/by_email"+ && match "Content-Length: 0") =+ -- "That strange couchdb users by email error happened. We don't know the cause yet."+ -- "This request took too long and timed out. We need someone to add caching and background jobs to <a href=\"http://hub.darcs.net/simon/darcsden/browse/src/DarcsDen/Handler/Repository/Browse.hs\">darcsden</a>."+ "This request took too long and timed out."++ | match "failed to read patch" =+ "This request took too long and timed out, or there was a problem reading this patch."++ | match "CouchDB" || match "http://127.0.0.1:5984" =+ "There was a problem querying the database."++ | match "ExceptionAlreadyCaught" =+ "ExceptionAlreadyCaught. Hmm, that's unusual."++ | otherwise = msg++ where match = (`BS.isInfixOf` msg)++errorPage' :: BS.ByteString -> Snap ()+errorPage' html = do+ putResponse+ $ setResponseStatus 500 "Internal Server Error"+ $ setContentType "text/html; charset=utf-8"+ emptyResponse+ writeBS html+ withResponse finishWith+ -- finishWith+ -- $ setResponseStatus 500 "Internal Server Error"+ -- . setContentType "text/html; charset=utf-8"+ -- . setContentLength (fromIntegral $ B.length p)+ -- . modifyResponseBody (>==> enumBuilder (fromByteString p))+ -- $ emptyResponse+-- import Snap.Iteratee ((>==>), enumBuilder)++redirectTo :: String -> Snap ()+redirectTo dest = do+ putResponse (setResponseStatus 302 "Found" emptyResponse)+ withResponse (finishWith . addHeader "Location" (toBS dest))++withSession :: Page -> Snap ()+withSession p = do+ r <- getRequest+ case find ((== "DarcsDenSession") . cookieName) (rqCookies r) of+ Nothing -> withNewSession p+ Just (Cookie { cookieValue = sid }) -> do+ ms <- getSession sid+ case ms of+ Just s -> p s+ Nothing -> withNewSession p++withNewSession :: Page -> Snap ()+withNewSession r = do+ ms <- newSession++ case ms of+ Just s -> do+ modifyResponse $ addResponseCookie+ Cookie { cookieName = "DarcsDenSession"+ , cookieValue = sID s+ , cookieExpires = Just (sExpire s)+ , cookieDomain = Nothing+ , cookiePath = Just "/"+ , cookieSecure = False+ , cookieHttpOnly = False+ }+ r s+ Nothing -> errorPage "Session could not be created."++repoServe :: String -> Snap ()+repoServe b = do+ mo <- getParam "user"+ mr <- getParam "repo"+ case (mo, mr) of+ (Just owner, Just repo) -> do+ private <- fmap isNothing (getRepository (fromBS owner, fromBS repo))+ if private+ then notFound+ else serveDirectory (repoDir (fromBS owner) (fromBS repo) </> b)+ _ ->+ notFound++input :: String -> String -> Snap String+input p d = do+ param <- getParam (toBS p)+ return (maybe d fromBS param)++getInputs :: Snap [(String, String)]+getInputs = fmap+ (map (\(k, vs) -> (fromBS k, vs >>= fromBS)) . M.toList)+ (withRequest (return . rqParams))++-- Page helpers+doPage' :: (XML -> String) -> BS.ByteString -> HSPage -> Page+doPage' render contentType p s = do+ (_, page) <- liftIO $ evalHSP Nothing (p s)+ modifyResponse (addHeader "Content-Type" contentType)+ writeBS (toBS $ render page)+ clearNotifications s++doPage :: HSPage -> Page+doPage = doPage' (("<!DOCTYPE html>\n" ++) . renderAsHTML) "text/html; charset=utf-8"++doAtomPage :: HSPage -> Page+doAtomPage = doPage' (("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" ++) . renderXML) "application/atom+xml; charset=utf-8"
@@ -1,17 +1,18 @@-{-# LANGUAGE OverloadedStrings, CPP #-}+{-# LANGUAGE OverloadedStrings, CPP, ScopedTypeVariables #-} module Main where #ifndef SSH_FLAG main :: IO () main = error "darcsden was not built with ssh support" #else+import Control.Exception as C import Control.Monad.State import Data.List (isPrefixOf, stripPrefix) import Data.Time import SSH.Channel import SSH.Crypto import SSH.Session-import System.Directory (canonicalizePath)+import System.Directory (canonicalizePath, doesFileExist) import System.Environment import System.FilePath import System.Process@@ -22,7 +23,7 @@ import DarcsDen.State.Repository import DarcsDen.State.User import DarcsDen.State.Util-import DarcsDen.Util (toBLBS)+import DarcsDen.Util main :: IO ()@@ -35,10 +36,13 @@ case as of (p:_) -> return (fromIntegral (read p :: Int)) _ -> return 5022-- kp <- rsaKeyPairFromFile (homeDir </> ".ssh" </> "id_rsa")+ exists <- doesFileExist sshKeyFilePath+ unless exists $+ error $ "Cannot find required SSH keyfile: " ++ sshKeyFilePath+ kp <- rsaKeyPairFromFile sshKeyFilePath startSSH kp port where+ sshKeyFilePath = homeDir </> ".ssh" </> "id_rsa" startSSH kp = SSH.start (SessionConfig { scAuthMethods = ["publickey"]@@ -104,19 +108,29 @@ , rIsPrivate = False , rIssueTracker = False , rIssueCount = 0+ , rBuiltPacks = Nothing } finishWith "repository created" Just _ -> errorWith "repository already exists"- [oblit, repoName] | "oblit" `isPrefixOf` oblit ->- if null repoName || not (isSane repoName)- then errorWith "invalid repository name"- else saneRepo repoName obliterate+ (oblit:repoNameAnd) | "oblit" `isPrefixOf` oblit ->+ case repoNameAnd of+ [] -> errorWith "missing repository argument to obliterate"+ (repoName:_) -> if null repoName || not (isSane repoName)+ then errorWith "invalid repository name"+ else saneRepo repoName obliterate ["scp", "-f", "--", path] -> safePath path scp ["scp", "-f", path] -> safePath path scp- _ -> failWith ("invalid exec request: " ++ show cmd)+ _ -> failWith $ "invalid exec request: <" ++ show cmd ++ ">\n"+ ++ "Available interactive commands:\n"+ ++ unlines nonDarcsCommands where+ nonDarcsCommands :: [String]+ nonDarcsCommands = [ "initialise REPO_NAME DESCRIPTION"+ , "obliterate REPO_NAME"+ ]+ failWith :: String -> Channel () failWith msg = do channelError msg@@ -137,15 +151,15 @@ -- verify a path that may be two forms: -- -- foo/ a repository "foo" owned by the current user- -- bar/foo/ a repository "foo" owned by user "bar";- -- current user must be a member+ -- USER/foo/ a repository "foo" owned by USER;+ -- the current user must be a member (or the owner) saneRepo :: FilePath -> (Repository -> Channel ()) -> Channel () saneRepo p a = saneUser $ \(User { uName = un }) -> do case takeWhile (not . null) . map saneName . splitDirectories $ p of [ownerName, repoName] -> do mrepo <- getOwnerRepository (ownerName, repoName) case mrepo of- Just r | un `elem` rMembers r -> a r+ Just r | un `elem` (rOwner r : rMembers r) -> a r _ -> errorWith "invalid repository" [repoName] -> getOwnerRepository (un, repoName)@@ -154,8 +168,12 @@ safePath :: FilePath -> (FilePath -> Channel ()) -> Channel () safePath p a = saneUser $ \(User { uName = un }) -> do- cp <- liftIO (canonicalizePath (usersDir </> un </> p))- case stripPrefix (splitDirectories usersDir) $ takeWhile (not . null) . splitDirectories $ cp of+ cpE <- liftIO $ (Right `fmap` (canonicalizePath $ usersDir </> un </> p))+ `C.catch` (\(e::IOException) -> return $ Left $ show e)+ case cpE of+ Left e -> errorWith e+ Right cp ->+ case stripPrefix (splitDirectories usersDir) $ takeWhile (not . null) . splitDirectories $ cp of Just (ownerName:repoName:_) -> do mrepo <- getOwnerRepository (ownerName, repoName) case mrepo of
@@ -0,0 +1,95 @@+{-# LANGUAGE OverloadedStrings #-}++import Control.Monad.Trans+import Test.HUnit+import Test.WebDriver+import System.Environment++import DarcsDen.State.Util(resetAllState, repoDir)++import Test.User+import Test.Repository++import Test.Google+import Test.Github++createUserTest :: Assertion+createUserTest = do+ em <- getEnv "GOOGLE_USERNAME"+ resetAllState+ (runSession defaultSession defaultCaps $ do+ (na, _) <- createAccount em+ Just na' <- getUser+ return $ na' == na) >>= assertBool "Failed create user test!"++createAccountUsingOAuthTest :: String -> (String -> String -> WD String) -> Assertion+createAccountUsingOAuthTest ev ca = do+ em <- getEnv $ ev ++ "_USERNAME"+ pw <- getEnv $ ev ++ "_PASSWORD"+ resetAllState+ (runSession defaultSession defaultCaps $ do+ na <- ca em pw+ Just na' <- getUser+ return $ na == na') >>= (assertBool $ "Failed createAccountUsingOAuth: " ++ ev)++loginOAuthAccountTest :: String -> (String -> String -> WD String) -> WD () -> Assertion+loginOAuthAccountTest ev ca login = do+ em <- getEnv $ ev ++ "_USERNAME"+ pw <- getEnv $ ev ++ "_PASSWORD"+ resetAllState+ (runSession defaultSession defaultCaps $ do+ na <- ca em pw+ logout+ login+ Just na' <- getUser+ return $ na' == na) >>= (assertBool $ "Failed loginOAuthAccountTest: " ++ ev)++syncOAuthAccountTest :: String -> (String -> String -> WD ()) -> WD () -> Assertion+syncOAuthAccountTest ev sa login = do+ em <- getEnv $ ev ++ "_USERNAME"+ pw <- getEnv $ ev ++ "_PASSWORD"+ resetAllState+ (runSession defaultSession defaultCaps $ do+ (na,_) <- createAccount em+ sa em pw+ logout+ login+ Just na' <- getUser+ return $ na' == na) >>= (assertBool $ "Failed syncOAuthAccountTest: " ++ ev)++editFileTest :: Assertion+editFileTest = do+ em <- getEnv "GOOGLE_USERNAME"+ resetAllState+ (runSession defaultSession defaultCaps $ do+ (u, _) <- createAccount em+ r <- createRepository+ (d, f) <- createDirAndFile+ val <- editFile+ val' <- liftIO $ readFile (repoDir u r ++ "/" ++ d ++ "/" ++ f)+ return $ val == val') >>= assertBool "Failed edit file test!"++main :: IO Counts+main = runTestTT.TestList $ [+ TestCase createUserTest,+ TestLabel "OAuth" $ TestList [+ TestLabel "Google" $ TestList [+ TestCase $ createAccountUsingOAuthTest "GOOGLE" goc,+ TestCase $ loginOAuthAccountTest "GOOGLE" goc gol,+ TestCase $ syncOAuthAccountTest "GOOGLE" gos gol+ ],+ TestLabel "Github" $ TestList [+ TestCase $ createAccountUsingOAuthTest "GITHUB" gic,+ TestCase $ loginOAuthAccountTest "GITHUB" gic gil,+ TestCase $ syncOAuthAccountTest "GITHUB" gis gil+ ]+ ],+ TestCase editFileTest+ ]+ where+ goc = createOAuthAccount googleRegSelector googleLogin+ gos = syncOAuthAccount googleSyncSelector googleLogin+ gol = loginOAuthAccount googleLoginSelector (ById "submit_approve_access")+ gic = createOAuthAccount githubRegSelector githubLogin+ gis = syncOAuthAccount githubSyncSelector githubLogin+ gil = loginOAuthAccount githubLoginSelector (ByName "authorize")
@@ -0,0 +1,26 @@+{-# LANGUAGE OverloadedStrings #-}+module Test.Github where++import Control.Monad+import qualified Data.Text as T+import Test.WebDriver++import DarcsDen.Settings (baseUrl)++githubLogin :: String -> String -> WD ()+githubLogin user pass = do+ elems <- mapM (findElem.ById) ["login_field", "password"]+ mapM_ (uncurry sendKeys) (zip (map T.pack [user, pass]) elems)+ (findElem.ByName $ "commit") >>= click+ na <- fmap ((==baseUrl).take (length baseUrl)) getCurrentURL+ unless na $+ (findElem.ByName $ "authorize") >>= click++githubRegSelector :: T.Text+githubRegSelector = ".buttons > input[value=\"Sign up with Github\"]"++githubSyncSelector :: T.Text+githubSyncSelector = ".buttons > input[value=\"Link with Github\"]"++githubLoginSelector :: T.Text+githubLoginSelector = ".buttons > input[value=\"Sign in using Github\"]"
@@ -0,0 +1,30 @@+{-# LANGUAGE OverloadedStrings #-}+module Test.Google where++import Control.Monad+import qualified Data.Text as T+import Test.WebDriver++import DarcsDen.Settings (baseUrl)++-- make sure the app is approved for this+-- account before calling this function+googleLogin :: String -> String -> WD ()+googleLogin user pass = do+ elems <- mapM (findElem.ById) ["Email", "Passwd"]+ mapM_ (uncurry sendKeys) (zip (map T.pack [user, pass]) elems)+ (findElem.ById $ "signIn") >>= click+ na <- fmap ((==baseUrl).take (length baseUrl)) getCurrentURL+ unless na $+ -- findElem is not working here, so you+ -- need to approve access manually once+ (findElem.ById $ "submit_approve_access") >>= click++googleRegSelector :: T.Text+googleRegSelector = ".buttons > input[value=\"Sign up with Google\"]"++googleSyncSelector :: T.Text+googleSyncSelector = ".buttons > input[value=\"Link with Google\"]"++googleLoginSelector :: T.Text+googleLoginSelector = ".buttons > input[value=\"Sign in using Google\"]"
@@ -0,0 +1,49 @@+{-# LANGUAGE OverloadedStrings #-}+module Test.Repository where++import Control.Monad+import Control.Monad.Trans+import qualified Data.Text as T+import Data.Aeson.Types (Value)+import Test.WebDriver+import Test.WebDriver.Commands.Wait+import System.Random++findElem' :: Selector -> WD Element+findElem' = waitUntil 10 . findElem++createRepository :: WD String+createRepository = do+ (findElem'.ByCSS $ "li.home > a") >>= click -- click my repos+ (findElem'.ByCSS $ "li.create > a") >>= click -- click new repository+ elems <- mapM (findElem'.ById) ["name", "description"]+ rname <- liftIO $ replicateM 8 $ getStdRandom $ randomR ('a', 'z')+ mapM_ (uncurry sendKeys) (zip (map T.pack [rname, "webdriver test repo"]) elems)+ (findElem'.ByCSS $ "input[value=\"create repository\"]") >>= click+ return rname++createDirAndFile :: WD (String, String)+createDirAndFile = do+ d <- cf "input[value=\"directory\"]"+ f <- cf "input[value=\"file\"]"+ return (d, f)+ where+ cf s = do+ (findElem'.ByCSS $ "li.create > a") >>= click+ elems <- mapM (findElem'.ById) ["filename", "message"]+ name <- liftIO $ replicateM 8 $ getStdRandom $ randomR ('a', 'z')+ msg <- liftIO $ replicateM 8 $ getStdRandom $ randomR ('a', 'z')+ mapM_ (uncurry sendKeys) (zip (map T.pack [name, msg]) elems)+ (findElem'.ByCSS $ s) >>= click+ (findElem'.ByCSS $ "input[value=\"Create file/directory\"]") >>= click+ return name++editFile :: WD String+editFile = do+ (findElem'.ByCSS $ "li.edit > a") >>= click+ text <- liftIO $ fmap unlines $ replicateM 8 $ replicateM 8 $ getStdRandom $ randomR ('a', 'z')+ msg <- liftIO $ replicateM 8 $ getStdRandom $ randomR ('a', 'z')+ (findElem'.ById $ "message") >>= sendKeys (T.pack msg)+ executeJS [] (T.pack $ "window.cm.setValue(" ++ show text ++ ");") :: WD Value+ (findElem'.ByCSS $ "input[value=\"Update code\"]") >>= click+ return text
@@ -0,0 +1,53 @@+{-# LANGUAGE OverloadedStrings #-}+module Test.User where++import Control.Monad+import Control.Monad.Trans+import qualified Data.Text as T+import Data.Maybe+import Test.WebDriver+import Test.WebDriver.Commands.Wait+import System.Random++import DarcsDen.Settings (baseUrl)++createAccount :: String -> WD (String, String)+createAccount email = do+ openPage (baseUrl++"register")+ [name, password] <- replicateM 2 g8+ elems <- mapM (findElem.ById) ["name", "email", "password1", "password2", "security_question"]+ mapM_ (uncurry sendKeys) (zip (map T.pack [name, email, password, password, "darcs"]) elems)+ (findElem.ByCSS $ ".buttons > input[value=\"sign me up\"]") >>= click+ return $ (name, password)+ where+ g8 = liftIO $ replicateM 8 $ getStdRandom $ randomR ('a', 'z')++createOAuthAccount :: T.Text -> (String -> String -> WD ()) -> String -> String -> WD String+createOAuthAccount buttonSelector oAuthLogin user pass = do+ openPage (baseUrl ++ "register")+ (findElem.ByCSS $ buttonSelector) >>= click+ oAuthLogin user pass+ name <- liftIO $ replicateM 8 $ getStdRandom $ randomR ('a', 'z')+ (findElem.ById $ "name") >>= clearInput+ (findElem.ById $ "name") >>= sendKeys (T.pack name) + (findElem.ByCSS $ ".buttons > input[value=\"sign me up\"]") >>= click+ return name++syncOAuthAccount :: T.Text -> (String -> String -> WD ()) -> String -> String -> WD ()+syncOAuthAccount buttonSelector oAuthLogin user pass = do+ openPage (baseUrl ++ "settings")+ (findElem.ByCSS $ buttonSelector) >>= click+ oAuthLogin user pass++loginOAuthAccount :: T.Text -> Selector -> WD ()+loginOAuthAccount buttonSelector approveSelector = do+ (waitUntil 10 (findElem.ByCSS $ "li.login > a")) >>= click+ (waitUntil 10 (findElem.ByCSS $ buttonSelector)) >>= click+ na <- fmap ((==baseUrl).take (length baseUrl)) getCurrentURL+ unless na $ findElem approveSelector >>= click++getUser :: WD (Maybe String)+getUser = fmap (fmap (drop (length baseUrl).T.unpack)) (fmap listToMaybe (findElems.ByCSS $ "li.home > a") >>= maybe (return Nothing) (flip attr "href"))++logout :: WD ()+logout = (findElem.ByCSS $ "li.logout > a") >>= click
@@ -6,10 +6,11 @@ -- #ifdef DEBUG -- import Blaze.ByteString.Builder.Char8 (fromString) -- #endif+#ifdef WIN32+import Control.Concurrent (forkIO, killThread)+#endif import Control.Exception-import Control.Monad (forM_) import Control.Monad.Trans-import Database.CouchDB import qualified Data.ByteString as B import qualified Data.ByteString.Char8 as B8 (pack) import Data.Monoid (mconcat)@@ -17,54 +18,54 @@ import Snap.Http.Server import System.Directory (getCurrentDirectory) import System.Environment+import OpenSSL (withOpenSSL)+import System.IO ( Handle, stdout, hPutStrLn )+#ifdef WIN32+import System.Win32.SystemServices.Wrapper ( defineService, Service(..) )+#endif -- import DarcsDen.Debug import DarcsDen.Handler import DarcsDen.Settings-import DarcsDen.State.Schema-import DarcsDen.State.Util (runDB, withRedis)+import DarcsDen.State.Util (runDB, withRedis, createFreshState) import DarcsDen.WebUtils (exceptionPage) main :: IO ()-main = do+main = withOpenSSL $ do cwd <- liftIO getCurrentDirectory as <- getArgs- case as of- ("--install":_) -> runDB $ do- liftIO (putStrLn "creating databases...")-- createDB "repositories"- createDB "users"- createDB "issues"- createDB "comments"-- liftIO (putStrLn "creating repository design documents...")- forM_ repoDesigns $ \js ->- newDoc (db "repositories") js-- liftIO (putStrLn "creating user design documents...")- forM_ userDesigns $ \js ->- newDoc (db "users") js+ go False stdout cwd as - liftIO (putStrLn "creating issue design documents...")- forM_ issueDesigns $ \js ->- newDoc (db "issues") js+go :: Bool -> Handle -> FilePath -> [String] -> IO ()+go noVerboseSnap outH cwd as =+ case as of+ ("--install":_) -> runDB $ createFreshState True - liftIO (putStrLn "creating comment design documents...")- forM_ commentDesigns $ \js ->- newDoc (db "comments") js+ ("--root":root:as') -> go noVerboseSnap outH root as' - liftIO (putStrLn "All set!")+#ifdef WIN32+ ("--service":as') ->+ defineService $+ Service {+ serviceName = "Darcsden",+ -- when wrapping as a service, we have to take care that the+ -- service code doesn't try to use stdout/stderr, as they+ -- don't exist. This means stopping Snap from being verbose,+ -- and redirecting our own output to the service wrapper's log.+ serviceStart = \debugH -> forkIO (go True debugH cwd as'),+ serviceStop = killThread+ }+#endif [] -> do checkDBs- putStrLn "darcsden running on port 8900"+ hPutStrLn outH "darcsden running on port 8900" startHTTP 8900 hostname cwd ("--port":p:_) -> do checkDBs- putStrLn $ "darcsden running on port " ++ p+ hPutStrLn outH $ "darcsden running on port " ++ p startHTTP (read p) hostname cwd _ ->@@ -74,13 +75,17 @@ , " darcsden --install : set up CouchDB databases" , " darcsden : start webserver with defaults" , " darcsden --port PORT : start webserver on given port"+ , " darcsden --root DIR : select root directory (defaults to current directory)"+#ifdef WIN32+ , " darcsden --service : run as a Windows service"+#endif ] where checkDBs = do- putStrLn "checking couchdb..."+ hPutStrLn outH "checking couchdb..." runDB (return ()) - putStrLn "checking redis..."+ hPutStrLn outH "checking redis..." withRedis (return ()) startHTTP p h d = httpServe (config p h) (handler d)@@ -92,9 +97,7 @@ . setHostname (B8.pack h) . setDefaultTimeout maxRequestTime . setErrorHandler errorHandler-#ifdef DEBUG- -- . setVerbose False-#endif+ . (if noVerboseSnap then setVerbose False else id) $ defaultConfig errorHandler :: SomeException -> Snap ()