[
  {
    "path": ".gitignore",
    "content": "screens\n"
  },
  {
    "path": "LICENSE",
    "content": "        DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE \n                    Version 2, December 2004 \n\n Copyright (C) 2004 Sam Hocevar <sam@hocevar.net> \n\n Everyone is permitted to copy and distribute verbatim or modified \n copies of this license document, and changing it is allowed as long \n as the name is changed. \n\n            DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE \n   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION \n\n  0. You just DO WHAT THE FUCK YOU WANT TO.\n"
  },
  {
    "path": "README.md",
    "content": "GTA V Glitch map\n====\n\nThis interactive (Google) map shows you the location of current working GTA V glitches, wall breaches and vehicle spawn areas including an example video, credits and a short description: http://gta5-map.github.io/\n\n**Caution**: this is unmaintained since 12 years!\n\n## Screenshots\n\n![screenshot-1](./screenshot.png)\n\n## Usage\n\n1. Clone this repository\n2. [Download the missing map tiles](https://mega.co.nz/#!HR1xgIQQ!I2cq1hDeWfm6A3BleDfOlTz747EpCUlX15tCt1h2IN8) and extract them into an folder called \"tiles/\"\n3. Run `python -m SimpleHTTPServer` if you don't have an Nginx/Apache\n\n## License\n\n[WTFPL](LICENSE)\n\n## Version\n\n1.0\n\n## Credits\n\nTo [danharper](https://github.com/danharper/) for [his work](https://github.com/danharper/GTAV) on the GTA V map.\n"
  },
  {
    "path": "fontawesome/css/font-awesome.css",
    "content": "/*!\n *  Font Awesome 3.2.1\n *  the iconic font designed for Bootstrap\n *  ------------------------------------------------------------------------------\n *  The full suite of pictographic icons, examples, and documentation can be\n *  found at http://fontawesome.io.  Stay up to date on Twitter at\n *  http://twitter.com/fontawesome.\n *\n *  License\n *  ------------------------------------------------------------------------------\n *  - The Font Awesome font is licensed under SIL OFL 1.1 -\n *    http://scripts.sil.org/OFL\n *  - Font Awesome CSS, LESS, and SASS files are licensed under MIT License -\n *    http://opensource.org/licenses/mit-license.html\n *  - Font Awesome documentation licensed under CC BY 3.0 -\n *    http://creativecommons.org/licenses/by/3.0/\n *  - Attribution is no longer required in Font Awesome 3.0, but much appreciated:\n *    \"Font Awesome by Dave Gandy - http://fontawesome.io\"\n *\n *  Author - Dave Gandy\n *  ------------------------------------------------------------------------------\n *  Email: dave@fontawesome.io\n *  Twitter: http://twitter.com/davegandy\n *  Work: Lead Product Designer @ Kyruus - http://kyruus.com\n */\n/* FONT PATH\n * -------------------------- */\n@font-face {\n  font-family: 'FontAwesome';\n  src: url('../font/fontawesome-webfont.eot?v=3.2.1');\n  src: url('../font/fontawesome-webfont.eot?#iefix&v=3.2.1') format('embedded-opentype'), url('../font/fontawesome-webfont.woff?v=3.2.1') format('woff'), url('../font/fontawesome-webfont.ttf?v=3.2.1') format('truetype'), url('../font/fontawesome-webfont.svg#fontawesomeregular?v=3.2.1') format('svg');\n  font-weight: normal;\n  font-style: normal;\n}\n/* FONT AWESOME CORE\n * -------------------------- */\n[class^=\"icon-\"],\n[class*=\" icon-\"] {\n  font-family: FontAwesome;\n  font-weight: normal;\n  font-style: normal;\n  text-decoration: inherit;\n  -webkit-font-smoothing: antialiased;\n  *margin-right: .3em;\n}\n[class^=\"icon-\"]:before,\n[class*=\" icon-\"]:before {\n  text-decoration: inherit;\n  display: inline-block;\n  speak: none;\n}\n/* makes the font 33% larger relative to the icon container */\n.icon-large:before {\n  vertical-align: -10%;\n  font-size: 1.3333333333333333em;\n}\n/* makes sure icons active on rollover in links */\na [class^=\"icon-\"],\na [class*=\" icon-\"] {\n  display: inline;\n}\n/* increased font size for icon-large */\n[class^=\"icon-\"].icon-fixed-width,\n[class*=\" icon-\"].icon-fixed-width {\n  display: inline-block;\n  width: 1.1428571428571428em;\n  text-align: right;\n  padding-right: 0.2857142857142857em;\n}\n[class^=\"icon-\"].icon-fixed-width.icon-large,\n[class*=\" icon-\"].icon-fixed-width.icon-large {\n  width: 1.4285714285714286em;\n}\n.icons-ul {\n  margin-left: 2.142857142857143em;\n  list-style-type: none;\n}\n.icons-ul > li {\n  position: relative;\n}\n.icons-ul .icon-li {\n  position: absolute;\n  left: -2.142857142857143em;\n  width: 2.142857142857143em;\n  text-align: center;\n  line-height: inherit;\n}\n[class^=\"icon-\"].hide,\n[class*=\" icon-\"].hide {\n  display: none;\n}\n.icon-muted {\n  color: #eeeeee;\n}\n.icon-light {\n  color: #ffffff;\n}\n.icon-dark {\n  color: #333333;\n}\n.icon-border {\n  border: solid 1px #eeeeee;\n  padding: .2em .25em .15em;\n  -webkit-border-radius: 3px;\n  -moz-border-radius: 3px;\n  border-radius: 3px;\n}\n.icon-2x {\n  font-size: 2em;\n}\n.icon-2x.icon-border {\n  border-width: 2px;\n  -webkit-border-radius: 4px;\n  -moz-border-radius: 4px;\n  border-radius: 4px;\n}\n.icon-3x {\n  font-size: 3em;\n}\n.icon-3x.icon-border {\n  border-width: 3px;\n  -webkit-border-radius: 5px;\n  -moz-border-radius: 5px;\n  border-radius: 5px;\n}\n.icon-4x {\n  font-size: 4em;\n}\n.icon-4x.icon-border {\n  border-width: 4px;\n  -webkit-border-radius: 6px;\n  -moz-border-radius: 6px;\n  border-radius: 6px;\n}\n.icon-5x {\n  font-size: 5em;\n}\n.icon-5x.icon-border {\n  border-width: 5px;\n  -webkit-border-radius: 7px;\n  -moz-border-radius: 7px;\n  border-radius: 7px;\n}\n.pull-right {\n  float: right;\n}\n.pull-left {\n  float: left;\n}\n[class^=\"icon-\"].pull-left,\n[class*=\" icon-\"].pull-left {\n  margin-right: .3em;\n}\n[class^=\"icon-\"].pull-right,\n[class*=\" icon-\"].pull-right {\n  margin-left: .3em;\n}\n/* BOOTSTRAP SPECIFIC CLASSES\n * -------------------------- */\n/* Bootstrap 2.0 sprites.less reset */\n[class^=\"icon-\"],\n[class*=\" icon-\"] {\n  display: inline;\n  width: auto;\n  height: auto;\n  line-height: normal;\n  vertical-align: baseline;\n  background-image: none;\n  background-position: 0% 0%;\n  background-repeat: repeat;\n  margin-top: 0;\n}\n/* more sprites.less reset */\n.icon-white,\n.nav-pills > .active > a > [class^=\"icon-\"],\n.nav-pills > .active > a > [class*=\" icon-\"],\n.nav-list > .active > a > [class^=\"icon-\"],\n.nav-list > .active > a > [class*=\" icon-\"],\n.navbar-inverse .nav > .active > a > [class^=\"icon-\"],\n.navbar-inverse .nav > .active > a > [class*=\" icon-\"],\n.dropdown-menu > li > a:hover > [class^=\"icon-\"],\n.dropdown-menu > li > a:hover > [class*=\" icon-\"],\n.dropdown-menu > .active > a > [class^=\"icon-\"],\n.dropdown-menu > .active > a > [class*=\" icon-\"],\n.dropdown-submenu:hover > a > [class^=\"icon-\"],\n.dropdown-submenu:hover > a > [class*=\" icon-\"] {\n  background-image: none;\n}\n/* keeps Bootstrap styles with and without icons the same */\n.btn [class^=\"icon-\"].icon-large,\n.nav [class^=\"icon-\"].icon-large,\n.btn [class*=\" icon-\"].icon-large,\n.nav [class*=\" icon-\"].icon-large {\n  line-height: .9em;\n}\n.btn [class^=\"icon-\"].icon-spin,\n.nav [class^=\"icon-\"].icon-spin,\n.btn [class*=\" icon-\"].icon-spin,\n.nav [class*=\" icon-\"].icon-spin {\n  display: inline-block;\n}\n.nav-tabs [class^=\"icon-\"],\n.nav-pills [class^=\"icon-\"],\n.nav-tabs [class*=\" icon-\"],\n.nav-pills [class*=\" icon-\"],\n.nav-tabs [class^=\"icon-\"].icon-large,\n.nav-pills [class^=\"icon-\"].icon-large,\n.nav-tabs [class*=\" icon-\"].icon-large,\n.nav-pills [class*=\" icon-\"].icon-large {\n  line-height: .9em;\n}\n.btn [class^=\"icon-\"].pull-left.icon-2x,\n.btn [class*=\" icon-\"].pull-left.icon-2x,\n.btn [class^=\"icon-\"].pull-right.icon-2x,\n.btn [class*=\" icon-\"].pull-right.icon-2x {\n  margin-top: .18em;\n}\n.btn [class^=\"icon-\"].icon-spin.icon-large,\n.btn [class*=\" icon-\"].icon-spin.icon-large {\n  line-height: .8em;\n}\n.btn.btn-small [class^=\"icon-\"].pull-left.icon-2x,\n.btn.btn-small [class*=\" icon-\"].pull-left.icon-2x,\n.btn.btn-small [class^=\"icon-\"].pull-right.icon-2x,\n.btn.btn-small [class*=\" icon-\"].pull-right.icon-2x {\n  margin-top: .25em;\n}\n.btn.btn-large [class^=\"icon-\"],\n.btn.btn-large [class*=\" icon-\"] {\n  margin-top: 0;\n}\n.btn.btn-large [class^=\"icon-\"].pull-left.icon-2x,\n.btn.btn-large [class*=\" icon-\"].pull-left.icon-2x,\n.btn.btn-large [class^=\"icon-\"].pull-right.icon-2x,\n.btn.btn-large [class*=\" icon-\"].pull-right.icon-2x {\n  margin-top: .05em;\n}\n.btn.btn-large [class^=\"icon-\"].pull-left.icon-2x,\n.btn.btn-large [class*=\" icon-\"].pull-left.icon-2x {\n  margin-right: .2em;\n}\n.btn.btn-large [class^=\"icon-\"].pull-right.icon-2x,\n.btn.btn-large [class*=\" icon-\"].pull-right.icon-2x {\n  margin-left: .2em;\n}\n/* Fixes alignment in nav lists */\n.nav-list [class^=\"icon-\"],\n.nav-list [class*=\" icon-\"] {\n  line-height: inherit;\n}\n/* EXTRAS\n * -------------------------- */\n/* Stacked and layered icon */\n.icon-stack {\n  position: relative;\n  display: inline-block;\n  width: 2em;\n  height: 2em;\n  line-height: 2em;\n  vertical-align: -35%;\n}\n.icon-stack [class^=\"icon-\"],\n.icon-stack [class*=\" icon-\"] {\n  display: block;\n  text-align: center;\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  font-size: 1em;\n  line-height: inherit;\n  *line-height: 2em;\n}\n.icon-stack .icon-stack-base {\n  font-size: 2em;\n  *line-height: 1em;\n}\n/* Animated rotating icon */\n.icon-spin {\n  display: inline-block;\n  -moz-animation: spin 2s infinite linear;\n  -o-animation: spin 2s infinite linear;\n  -webkit-animation: spin 2s infinite linear;\n  animation: spin 2s infinite linear;\n}\n/* Prevent stack and spinners from being taken inline when inside a link */\na .icon-stack,\na .icon-spin {\n  display: inline-block;\n  text-decoration: none;\n}\n@-moz-keyframes spin {\n  0% {\n    -moz-transform: rotate(0deg);\n  }\n  100% {\n    -moz-transform: rotate(359deg);\n  }\n}\n@-webkit-keyframes spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(359deg);\n  }\n}\n@-o-keyframes spin {\n  0% {\n    -o-transform: rotate(0deg);\n  }\n  100% {\n    -o-transform: rotate(359deg);\n  }\n}\n@-ms-keyframes spin {\n  0% {\n    -ms-transform: rotate(0deg);\n  }\n  100% {\n    -ms-transform: rotate(359deg);\n  }\n}\n@keyframes spin {\n  0% {\n    transform: rotate(0deg);\n  }\n  100% {\n    transform: rotate(359deg);\n  }\n}\n/* Icon rotations and mirroring */\n.icon-rotate-90:before {\n  -webkit-transform: rotate(90deg);\n  -moz-transform: rotate(90deg);\n  -ms-transform: rotate(90deg);\n  -o-transform: rotate(90deg);\n  transform: rotate(90deg);\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);\n}\n.icon-rotate-180:before {\n  -webkit-transform: rotate(180deg);\n  -moz-transform: rotate(180deg);\n  -ms-transform: rotate(180deg);\n  -o-transform: rotate(180deg);\n  transform: rotate(180deg);\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);\n}\n.icon-rotate-270:before {\n  -webkit-transform: rotate(270deg);\n  -moz-transform: rotate(270deg);\n  -ms-transform: rotate(270deg);\n  -o-transform: rotate(270deg);\n  transform: rotate(270deg);\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);\n}\n.icon-flip-horizontal:before {\n  -webkit-transform: scale(-1, 1);\n  -moz-transform: scale(-1, 1);\n  -ms-transform: scale(-1, 1);\n  -o-transform: scale(-1, 1);\n  transform: scale(-1, 1);\n}\n.icon-flip-vertical:before {\n  -webkit-transform: scale(1, -1);\n  -moz-transform: scale(1, -1);\n  -ms-transform: scale(1, -1);\n  -o-transform: scale(1, -1);\n  transform: scale(1, -1);\n}\n/* ensure rotation occurs inside anchor tags */\na .icon-rotate-90:before,\na .icon-rotate-180:before,\na .icon-rotate-270:before,\na .icon-flip-horizontal:before,\na .icon-flip-vertical:before {\n  display: inline-block;\n}\n/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\n   readers do not read off random characters that represent icons */\n.icon-glass:before {\n  content: \"\\f000\";\n}\n.icon-music:before {\n  content: \"\\f001\";\n}\n.icon-search:before {\n  content: \"\\f002\";\n}\n.icon-envelope-alt:before {\n  content: \"\\f003\";\n}\n.icon-heart:before {\n  content: \"\\f004\";\n}\n.icon-star:before {\n  content: \"\\f005\";\n}\n.icon-star-empty:before {\n  content: \"\\f006\";\n}\n.icon-user:before {\n  content: \"\\f007\";\n}\n.icon-film:before {\n  content: \"\\f008\";\n}\n.icon-th-large:before {\n  content: \"\\f009\";\n}\n.icon-th:before {\n  content: \"\\f00a\";\n}\n.icon-th-list:before {\n  content: \"\\f00b\";\n}\n.icon-ok:before {\n  content: \"\\f00c\";\n}\n.icon-remove:before {\n  content: \"\\f00d\";\n}\n.icon-zoom-in:before {\n  content: \"\\f00e\";\n}\n.icon-zoom-out:before {\n  content: \"\\f010\";\n}\n.icon-power-off:before,\n.icon-off:before {\n  content: \"\\f011\";\n}\n.icon-signal:before {\n  content: \"\\f012\";\n}\n.icon-gear:before,\n.icon-cog:before {\n  content: \"\\f013\";\n}\n.icon-trash:before {\n  content: \"\\f014\";\n}\n.icon-home:before {\n  content: \"\\f015\";\n}\n.icon-file-alt:before {\n  content: \"\\f016\";\n}\n.icon-time:before {\n  content: \"\\f017\";\n}\n.icon-road:before {\n  content: \"\\f018\";\n}\n.icon-download-alt:before {\n  content: \"\\f019\";\n}\n.icon-download:before {\n  content: \"\\f01a\";\n}\n.icon-upload:before {\n  content: \"\\f01b\";\n}\n.icon-inbox:before {\n  content: \"\\f01c\";\n}\n.icon-play-circle:before {\n  content: \"\\f01d\";\n}\n.icon-rotate-right:before,\n.icon-repeat:before {\n  content: \"\\f01e\";\n}\n.icon-refresh:before {\n  content: \"\\f021\";\n}\n.icon-list-alt:before {\n  content: \"\\f022\";\n}\n.icon-lock:before {\n  content: \"\\f023\";\n}\n.icon-flag:before {\n  content: \"\\f024\";\n}\n.icon-headphones:before {\n  content: \"\\f025\";\n}\n.icon-volume-off:before {\n  content: \"\\f026\";\n}\n.icon-volume-down:before {\n  content: \"\\f027\";\n}\n.icon-volume-up:before {\n  content: \"\\f028\";\n}\n.icon-qrcode:before {\n  content: \"\\f029\";\n}\n.icon-barcode:before {\n  content: \"\\f02a\";\n}\n.icon-tag:before {\n  content: \"\\f02b\";\n}\n.icon-tags:before {\n  content: \"\\f02c\";\n}\n.icon-book:before {\n  content: \"\\f02d\";\n}\n.icon-bookmark:before {\n  content: \"\\f02e\";\n}\n.icon-print:before {\n  content: \"\\f02f\";\n}\n.icon-camera:before {\n  content: \"\\f030\";\n}\n.icon-font:before {\n  content: \"\\f031\";\n}\n.icon-bold:before {\n  content: \"\\f032\";\n}\n.icon-italic:before {\n  content: \"\\f033\";\n}\n.icon-text-height:before {\n  content: \"\\f034\";\n}\n.icon-text-width:before {\n  content: \"\\f035\";\n}\n.icon-align-left:before {\n  content: \"\\f036\";\n}\n.icon-align-center:before {\n  content: \"\\f037\";\n}\n.icon-align-right:before {\n  content: \"\\f038\";\n}\n.icon-align-justify:before {\n  content: \"\\f039\";\n}\n.icon-list:before {\n  content: \"\\f03a\";\n}\n.icon-indent-left:before {\n  content: \"\\f03b\";\n}\n.icon-indent-right:before {\n  content: \"\\f03c\";\n}\n.icon-facetime-video:before {\n  content: \"\\f03d\";\n}\n.icon-picture:before {\n  content: \"\\f03e\";\n}\n.icon-pencil:before {\n  content: \"\\f040\";\n}\n.icon-map-marker:before {\n  content: \"\\f041\";\n}\n.icon-adjust:before {\n  content: \"\\f042\";\n}\n.icon-tint:before {\n  content: \"\\f043\";\n}\n.icon-edit:before {\n  content: \"\\f044\";\n}\n.icon-share:before {\n  content: \"\\f045\";\n}\n.icon-check:before {\n  content: \"\\f046\";\n}\n.icon-move:before {\n  content: \"\\f047\";\n}\n.icon-step-backward:before {\n  content: \"\\f048\";\n}\n.icon-fast-backward:before {\n  content: \"\\f049\";\n}\n.icon-backward:before {\n  content: \"\\f04a\";\n}\n.icon-play:before {\n  content: \"\\f04b\";\n}\n.icon-pause:before {\n  content: \"\\f04c\";\n}\n.icon-stop:before {\n  content: \"\\f04d\";\n}\n.icon-forward:before {\n  content: \"\\f04e\";\n}\n.icon-fast-forward:before {\n  content: \"\\f050\";\n}\n.icon-step-forward:before {\n  content: \"\\f051\";\n}\n.icon-eject:before {\n  content: \"\\f052\";\n}\n.icon-chevron-left:before {\n  content: \"\\f053\";\n}\n.icon-chevron-right:before {\n  content: \"\\f054\";\n}\n.icon-plus-sign:before {\n  content: \"\\f055\";\n}\n.icon-minus-sign:before {\n  content: \"\\f056\";\n}\n.icon-remove-sign:before {\n  content: \"\\f057\";\n}\n.icon-ok-sign:before {\n  content: \"\\f058\";\n}\n.icon-question-sign:before {\n  content: \"\\f059\";\n}\n.icon-info-sign:before {\n  content: \"\\f05a\";\n}\n.icon-screenshot:before {\n  content: \"\\f05b\";\n}\n.icon-remove-circle:before {\n  content: \"\\f05c\";\n}\n.icon-ok-circle:before {\n  content: \"\\f05d\";\n}\n.icon-ban-circle:before {\n  content: \"\\f05e\";\n}\n.icon-arrow-left:before {\n  content: \"\\f060\";\n}\n.icon-arrow-right:before {\n  content: \"\\f061\";\n}\n.icon-arrow-up:before {\n  content: \"\\f062\";\n}\n.icon-arrow-down:before {\n  content: \"\\f063\";\n}\n.icon-mail-forward:before,\n.icon-share-alt:before {\n  content: \"\\f064\";\n}\n.icon-resize-full:before {\n  content: \"\\f065\";\n}\n.icon-resize-small:before {\n  content: \"\\f066\";\n}\n.icon-plus:before {\n  content: \"\\f067\";\n}\n.icon-minus:before {\n  content: \"\\f068\";\n}\n.icon-asterisk:before {\n  content: \"\\f069\";\n}\n.icon-exclamation-sign:before {\n  content: \"\\f06a\";\n}\n.icon-gift:before {\n  content: \"\\f06b\";\n}\n.icon-leaf:before {\n  content: \"\\f06c\";\n}\n.icon-fire:before {\n  content: \"\\f06d\";\n}\n.icon-eye-open:before {\n  content: \"\\f06e\";\n}\n.icon-eye-close:before {\n  content: \"\\f070\";\n}\n.icon-warning-sign:before {\n  content: \"\\f071\";\n}\n.icon-plane:before {\n  content: \"\\f072\";\n}\n.icon-calendar:before {\n  content: \"\\f073\";\n}\n.icon-random:before {\n  content: \"\\f074\";\n}\n.icon-comment:before {\n  content: \"\\f075\";\n}\n.icon-magnet:before {\n  content: \"\\f076\";\n}\n.icon-chevron-up:before {\n  content: \"\\f077\";\n}\n.icon-chevron-down:before {\n  content: \"\\f078\";\n}\n.icon-retweet:before {\n  content: \"\\f079\";\n}\n.icon-shopping-cart:before {\n  content: \"\\f07a\";\n}\n.icon-folder-close:before {\n  content: \"\\f07b\";\n}\n.icon-folder-open:before {\n  content: \"\\f07c\";\n}\n.icon-resize-vertical:before {\n  content: \"\\f07d\";\n}\n.icon-resize-horizontal:before {\n  content: \"\\f07e\";\n}\n.icon-bar-chart:before {\n  content: \"\\f080\";\n}\n.icon-twitter-sign:before {\n  content: \"\\f081\";\n}\n.icon-facebook-sign:before {\n  content: \"\\f082\";\n}\n.icon-camera-retro:before {\n  content: \"\\f083\";\n}\n.icon-key:before {\n  content: \"\\f084\";\n}\n.icon-gears:before,\n.icon-cogs:before {\n  content: \"\\f085\";\n}\n.icon-comments:before {\n  content: \"\\f086\";\n}\n.icon-thumbs-up-alt:before {\n  content: \"\\f087\";\n}\n.icon-thumbs-down-alt:before {\n  content: \"\\f088\";\n}\n.icon-star-half:before {\n  content: \"\\f089\";\n}\n.icon-heart-empty:before {\n  content: \"\\f08a\";\n}\n.icon-signout:before {\n  content: \"\\f08b\";\n}\n.icon-linkedin-sign:before {\n  content: \"\\f08c\";\n}\n.icon-pushpin:before {\n  content: \"\\f08d\";\n}\n.icon-external-link:before {\n  content: \"\\f08e\";\n}\n.icon-signin:before {\n  content: \"\\f090\";\n}\n.icon-trophy:before {\n  content: \"\\f091\";\n}\n.icon-github-sign:before {\n  content: \"\\f092\";\n}\n.icon-upload-alt:before {\n  content: \"\\f093\";\n}\n.icon-lemon:before {\n  content: \"\\f094\";\n}\n.icon-phone:before {\n  content: \"\\f095\";\n}\n.icon-unchecked:before,\n.icon-check-empty:before {\n  content: \"\\f096\";\n}\n.icon-bookmark-empty:before {\n  content: \"\\f097\";\n}\n.icon-phone-sign:before {\n  content: \"\\f098\";\n}\n.icon-twitter:before {\n  content: \"\\f099\";\n}\n.icon-facebook:before {\n  content: \"\\f09a\";\n}\n.icon-github:before {\n  content: \"\\f09b\";\n}\n.icon-unlock:before {\n  content: \"\\f09c\";\n}\n.icon-credit-card:before {\n  content: \"\\f09d\";\n}\n.icon-rss:before {\n  content: \"\\f09e\";\n}\n.icon-hdd:before {\n  content: \"\\f0a0\";\n}\n.icon-bullhorn:before {\n  content: \"\\f0a1\";\n}\n.icon-bell:before {\n  content: \"\\f0a2\";\n}\n.icon-certificate:before {\n  content: \"\\f0a3\";\n}\n.icon-hand-right:before {\n  content: \"\\f0a4\";\n}\n.icon-hand-left:before {\n  content: \"\\f0a5\";\n}\n.icon-hand-up:before {\n  content: \"\\f0a6\";\n}\n.icon-hand-down:before {\n  content: \"\\f0a7\";\n}\n.icon-circle-arrow-left:before {\n  content: \"\\f0a8\";\n}\n.icon-circle-arrow-right:before {\n  content: \"\\f0a9\";\n}\n.icon-circle-arrow-up:before {\n  content: \"\\f0aa\";\n}\n.icon-circle-arrow-down:before {\n  content: \"\\f0ab\";\n}\n.icon-globe:before {\n  content: \"\\f0ac\";\n}\n.icon-wrench:before {\n  content: \"\\f0ad\";\n}\n.icon-tasks:before {\n  content: \"\\f0ae\";\n}\n.icon-filter:before {\n  content: \"\\f0b0\";\n}\n.icon-briefcase:before {\n  content: \"\\f0b1\";\n}\n.icon-fullscreen:before {\n  content: \"\\f0b2\";\n}\n.icon-group:before {\n  content: \"\\f0c0\";\n}\n.icon-link:before {\n  content: \"\\f0c1\";\n}\n.icon-cloud:before {\n  content: \"\\f0c2\";\n}\n.icon-beaker:before {\n  content: \"\\f0c3\";\n}\n.icon-cut:before {\n  content: \"\\f0c4\";\n}\n.icon-copy:before {\n  content: \"\\f0c5\";\n}\n.icon-paperclip:before,\n.icon-paper-clip:before {\n  content: \"\\f0c6\";\n}\n.icon-save:before {\n  content: \"\\f0c7\";\n}\n.icon-sign-blank:before {\n  content: \"\\f0c8\";\n}\n.icon-reorder:before {\n  content: \"\\f0c9\";\n}\n.icon-list-ul:before {\n  content: \"\\f0ca\";\n}\n.icon-list-ol:before {\n  content: \"\\f0cb\";\n}\n.icon-strikethrough:before {\n  content: \"\\f0cc\";\n}\n.icon-underline:before {\n  content: \"\\f0cd\";\n}\n.icon-table:before {\n  content: \"\\f0ce\";\n}\n.icon-magic:before {\n  content: \"\\f0d0\";\n}\n.icon-truck:before {\n  content: \"\\f0d1\";\n}\n.icon-pinterest:before {\n  content: \"\\f0d2\";\n}\n.icon-pinterest-sign:before {\n  content: \"\\f0d3\";\n}\n.icon-google-plus-sign:before {\n  content: \"\\f0d4\";\n}\n.icon-google-plus:before {\n  content: \"\\f0d5\";\n}\n.icon-money:before {\n  content: \"\\f0d6\";\n}\n.icon-caret-down:before {\n  content: \"\\f0d7\";\n}\n.icon-caret-up:before {\n  content: \"\\f0d8\";\n}\n.icon-caret-left:before {\n  content: \"\\f0d9\";\n}\n.icon-caret-right:before {\n  content: \"\\f0da\";\n}\n.icon-columns:before {\n  content: \"\\f0db\";\n}\n.icon-sort:before {\n  content: \"\\f0dc\";\n}\n.icon-sort-down:before {\n  content: \"\\f0dd\";\n}\n.icon-sort-up:before {\n  content: \"\\f0de\";\n}\n.icon-envelope:before {\n  content: \"\\f0e0\";\n}\n.icon-linkedin:before {\n  content: \"\\f0e1\";\n}\n.icon-rotate-left:before,\n.icon-undo:before {\n  content: \"\\f0e2\";\n}\n.icon-legal:before {\n  content: \"\\f0e3\";\n}\n.icon-dashboard:before {\n  content: \"\\f0e4\";\n}\n.icon-comment-alt:before {\n  content: \"\\f0e5\";\n}\n.icon-comments-alt:before {\n  content: \"\\f0e6\";\n}\n.icon-bolt:before {\n  content: \"\\f0e7\";\n}\n.icon-sitemap:before {\n  content: \"\\f0e8\";\n}\n.icon-umbrella:before {\n  content: \"\\f0e9\";\n}\n.icon-paste:before {\n  content: \"\\f0ea\";\n}\n.icon-lightbulb:before {\n  content: \"\\f0eb\";\n}\n.icon-exchange:before {\n  content: \"\\f0ec\";\n}\n.icon-cloud-download:before {\n  content: \"\\f0ed\";\n}\n.icon-cloud-upload:before {\n  content: \"\\f0ee\";\n}\n.icon-user-md:before {\n  content: \"\\f0f0\";\n}\n.icon-stethoscope:before {\n  content: \"\\f0f1\";\n}\n.icon-suitcase:before {\n  content: \"\\f0f2\";\n}\n.icon-bell-alt:before {\n  content: \"\\f0f3\";\n}\n.icon-coffee:before {\n  content: \"\\f0f4\";\n}\n.icon-food:before {\n  content: \"\\f0f5\";\n}\n.icon-file-text-alt:before {\n  content: \"\\f0f6\";\n}\n.icon-building:before {\n  content: \"\\f0f7\";\n}\n.icon-hospital:before {\n  content: \"\\f0f8\";\n}\n.icon-ambulance:before {\n  content: \"\\f0f9\";\n}\n.icon-medkit:before {\n  content: \"\\f0fa\";\n}\n.icon-fighter-jet:before {\n  content: \"\\f0fb\";\n}\n.icon-beer:before {\n  content: \"\\f0fc\";\n}\n.icon-h-sign:before {\n  content: \"\\f0fd\";\n}\n.icon-plus-sign-alt:before {\n  content: \"\\f0fe\";\n}\n.icon-double-angle-left:before {\n  content: \"\\f100\";\n}\n.icon-double-angle-right:before {\n  content: \"\\f101\";\n}\n.icon-double-angle-up:before {\n  content: \"\\f102\";\n}\n.icon-double-angle-down:before {\n  content: \"\\f103\";\n}\n.icon-angle-left:before {\n  content: \"\\f104\";\n}\n.icon-angle-right:before {\n  content: \"\\f105\";\n}\n.icon-angle-up:before {\n  content: \"\\f106\";\n}\n.icon-angle-down:before {\n  content: \"\\f107\";\n}\n.icon-desktop:before {\n  content: \"\\f108\";\n}\n.icon-laptop:before {\n  content: \"\\f109\";\n}\n.icon-tablet:before {\n  content: \"\\f10a\";\n}\n.icon-mobile-phone:before {\n  content: \"\\f10b\";\n}\n.icon-circle-blank:before {\n  content: \"\\f10c\";\n}\n.icon-quote-left:before {\n  content: \"\\f10d\";\n}\n.icon-quote-right:before {\n  content: \"\\f10e\";\n}\n.icon-spinner:before {\n  content: \"\\f110\";\n}\n.icon-circle:before {\n  content: \"\\f111\";\n}\n.icon-mail-reply:before,\n.icon-reply:before {\n  content: \"\\f112\";\n}\n.icon-github-alt:before {\n  content: \"\\f113\";\n}\n.icon-folder-close-alt:before {\n  content: \"\\f114\";\n}\n.icon-folder-open-alt:before {\n  content: \"\\f115\";\n}\n.icon-expand-alt:before {\n  content: \"\\f116\";\n}\n.icon-collapse-alt:before {\n  content: \"\\f117\";\n}\n.icon-smile:before {\n  content: \"\\f118\";\n}\n.icon-frown:before {\n  content: \"\\f119\";\n}\n.icon-meh:before {\n  content: \"\\f11a\";\n}\n.icon-gamepad:before {\n  content: \"\\f11b\";\n}\n.icon-keyboard:before {\n  content: \"\\f11c\";\n}\n.icon-flag-alt:before {\n  content: \"\\f11d\";\n}\n.icon-flag-checkered:before {\n  content: \"\\f11e\";\n}\n.icon-terminal:before {\n  content: \"\\f120\";\n}\n.icon-code:before {\n  content: \"\\f121\";\n}\n.icon-reply-all:before {\n  content: \"\\f122\";\n}\n.icon-mail-reply-all:before {\n  content: \"\\f122\";\n}\n.icon-star-half-full:before,\n.icon-star-half-empty:before {\n  content: \"\\f123\";\n}\n.icon-location-arrow:before {\n  content: \"\\f124\";\n}\n.icon-crop:before {\n  content: \"\\f125\";\n}\n.icon-code-fork:before {\n  content: \"\\f126\";\n}\n.icon-unlink:before {\n  content: \"\\f127\";\n}\n.icon-question:before {\n  content: \"\\f128\";\n}\n.icon-info:before {\n  content: \"\\f129\";\n}\n.icon-exclamation:before {\n  content: \"\\f12a\";\n}\n.icon-superscript:before {\n  content: \"\\f12b\";\n}\n.icon-subscript:before {\n  content: \"\\f12c\";\n}\n.icon-eraser:before {\n  content: \"\\f12d\";\n}\n.icon-puzzle-piece:before {\n  content: \"\\f12e\";\n}\n.icon-microphone:before {\n  content: \"\\f130\";\n}\n.icon-microphone-off:before {\n  content: \"\\f131\";\n}\n.icon-shield:before {\n  content: \"\\f132\";\n}\n.icon-calendar-empty:before {\n  content: \"\\f133\";\n}\n.icon-fire-extinguisher:before {\n  content: \"\\f134\";\n}\n.icon-rocket:before {\n  content: \"\\f135\";\n}\n.icon-maxcdn:before {\n  content: \"\\f136\";\n}\n.icon-chevron-sign-left:before {\n  content: \"\\f137\";\n}\n.icon-chevron-sign-right:before {\n  content: \"\\f138\";\n}\n.icon-chevron-sign-up:before {\n  content: \"\\f139\";\n}\n.icon-chevron-sign-down:before {\n  content: \"\\f13a\";\n}\n.icon-html5:before {\n  content: \"\\f13b\";\n}\n.icon-css3:before {\n  content: \"\\f13c\";\n}\n.icon-anchor:before {\n  content: \"\\f13d\";\n}\n.icon-unlock-alt:before {\n  content: \"\\f13e\";\n}\n.icon-bullseye:before {\n  content: \"\\f140\";\n}\n.icon-ellipsis-horizontal:before {\n  content: \"\\f141\";\n}\n.icon-ellipsis-vertical:before {\n  content: \"\\f142\";\n}\n.icon-rss-sign:before {\n  content: \"\\f143\";\n}\n.icon-play-sign:before {\n  content: \"\\f144\";\n}\n.icon-ticket:before {\n  content: \"\\f145\";\n}\n.icon-minus-sign-alt:before {\n  content: \"\\f146\";\n}\n.icon-check-minus:before {\n  content: \"\\f147\";\n}\n.icon-level-up:before {\n  content: \"\\f148\";\n}\n.icon-level-down:before {\n  content: \"\\f149\";\n}\n.icon-check-sign:before {\n  content: \"\\f14a\";\n}\n.icon-edit-sign:before {\n  content: \"\\f14b\";\n}\n.icon-external-link-sign:before {\n  content: \"\\f14c\";\n}\n.icon-share-sign:before {\n  content: \"\\f14d\";\n}\n.icon-compass:before {\n  content: \"\\f14e\";\n}\n.icon-collapse:before {\n  content: \"\\f150\";\n}\n.icon-collapse-top:before {\n  content: \"\\f151\";\n}\n.icon-expand:before {\n  content: \"\\f152\";\n}\n.icon-euro:before,\n.icon-eur:before {\n  content: \"\\f153\";\n}\n.icon-gbp:before {\n  content: \"\\f154\";\n}\n.icon-dollar:before,\n.icon-usd:before {\n  content: \"\\f155\";\n}\n.icon-rupee:before,\n.icon-inr:before {\n  content: \"\\f156\";\n}\n.icon-yen:before,\n.icon-jpy:before {\n  content: \"\\f157\";\n}\n.icon-renminbi:before,\n.icon-cny:before {\n  content: \"\\f158\";\n}\n.icon-won:before,\n.icon-krw:before {\n  content: \"\\f159\";\n}\n.icon-bitcoin:before,\n.icon-btc:before {\n  content: \"\\f15a\";\n}\n.icon-file:before {\n  content: \"\\f15b\";\n}\n.icon-file-text:before {\n  content: \"\\f15c\";\n}\n.icon-sort-by-alphabet:before {\n  content: \"\\f15d\";\n}\n.icon-sort-by-alphabet-alt:before {\n  content: \"\\f15e\";\n}\n.icon-sort-by-attributes:before {\n  content: \"\\f160\";\n}\n.icon-sort-by-attributes-alt:before {\n  content: \"\\f161\";\n}\n.icon-sort-by-order:before {\n  content: \"\\f162\";\n}\n.icon-sort-by-order-alt:before {\n  content: \"\\f163\";\n}\n.icon-thumbs-up:before {\n  content: \"\\f164\";\n}\n.icon-thumbs-down:before {\n  content: \"\\f165\";\n}\n.icon-youtube-sign:before {\n  content: \"\\f166\";\n}\n.icon-youtube:before {\n  content: \"\\f167\";\n}\n.icon-xing:before {\n  content: \"\\f168\";\n}\n.icon-xing-sign:before {\n  content: \"\\f169\";\n}\n.icon-youtube-play:before {\n  content: \"\\f16a\";\n}\n.icon-dropbox:before {\n  content: \"\\f16b\";\n}\n.icon-stackexchange:before {\n  content: \"\\f16c\";\n}\n.icon-instagram:before {\n  content: \"\\f16d\";\n}\n.icon-flickr:before {\n  content: \"\\f16e\";\n}\n.icon-adn:before {\n  content: \"\\f170\";\n}\n.icon-bitbucket:before {\n  content: \"\\f171\";\n}\n.icon-bitbucket-sign:before {\n  content: \"\\f172\";\n}\n.icon-tumblr:before {\n  content: \"\\f173\";\n}\n.icon-tumblr-sign:before {\n  content: \"\\f174\";\n}\n.icon-long-arrow-down:before {\n  content: \"\\f175\";\n}\n.icon-long-arrow-up:before {\n  content: \"\\f176\";\n}\n.icon-long-arrow-left:before {\n  content: \"\\f177\";\n}\n.icon-long-arrow-right:before {\n  content: \"\\f178\";\n}\n.icon-apple:before {\n  content: \"\\f179\";\n}\n.icon-windows:before {\n  content: \"\\f17a\";\n}\n.icon-android:before {\n  content: \"\\f17b\";\n}\n.icon-linux:before {\n  content: \"\\f17c\";\n}\n.icon-dribbble:before {\n  content: \"\\f17d\";\n}\n.icon-skype:before {\n  content: \"\\f17e\";\n}\n.icon-foursquare:before {\n  content: \"\\f180\";\n}\n.icon-trello:before {\n  content: \"\\f181\";\n}\n.icon-female:before {\n  content: \"\\f182\";\n}\n.icon-male:before {\n  content: \"\\f183\";\n}\n.icon-gittip:before {\n  content: \"\\f184\";\n}\n.icon-sun:before {\n  content: \"\\f185\";\n}\n.icon-moon:before {\n  content: \"\\f186\";\n}\n.icon-archive:before {\n  content: \"\\f187\";\n}\n.icon-bug:before {\n  content: \"\\f188\";\n}\n.icon-vk:before {\n  content: \"\\f189\";\n}\n.icon-weibo:before {\n  content: \"\\f18a\";\n}\n.icon-renren:before {\n  content: \"\\f18b\";\n}\n"
  },
  {
    "path": "index.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n<head>\n\t<meta charset=\"utf-8\">\n\t<title>Interactive GTA V Glitch map</title>\n\t<link rel=\"stylesheet\" href=\"//fonts.googleapis.com/css?family=Roboto:400,100,300,500\">\n\t<link rel=\"stylesheet\" href=\"fontawesome/css/font-awesome.css\">\n\t<link rel=\"stylesheet\" href=\"style.css\">\n\n\t<script src=\"js/libs/jquery-min.js\"></script>\n\t<script src=\"js/libs/underscore-min.js\"></script>\n\t<script src=\"js/libs/backbone-min.js\"></script>\n\t<script src=\"js/libs/handlebars.js\"></script>\n\t<script src=\"//www.google.com/jsapi\"></script>\n\t<script src=\"//maps.googleapis.com/maps/api/js?v=3.exp&sensor=false\"></script>\n\t<script src=\"js/app.js\"></script>\n\t<script>\n\t  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){\n\t  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),\n\t  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)\n\t  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');\n\n\t  ga('create', 'UA-52712132-1', 'auto');\n\t  ga('require', 'displayfeatures');\n\t  ga('send', 'pageview');\n\n\t</script>\n\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, user-scalable=no\" />\n</head>\n<body class=\"\">\n\n\t<header>\n\t\t<p class=\"left\"><a href=\"//gta5-map.github.io/\">Interactive GTA V Glitch map</a></p>\n\t\t<ul class=\"right\">\n\t\t\t<li class=\"social-reddit\"><a href=\"http://www.reddit.com/r/gtaglitches/comments/29e25u/release_interactive_gta_v_glitch_and_wall_breach/\" target=\"_blank\"><img src=\"icons/reddit.png\" width=\"20px\" alt=\"Upvote on reddit\" /></a></li>\n\t\t\t<li class=\"social-github\"><iframe src=\"https://ghbtns.com/github-btn.html?user=gta5-map&repo=gta5-map.github.io&type=follow\" allowtransparency=\"true\" frameborder=\"0\" scrolling=\"0\" width=\"128\" height=\"20\"></iframe></li>\n\t\t\t<li class=\"social-twitter\"><a href=\"https://twitter.com/frdmn\" class=\"twitter-follow-button\" data-show-count=\"false\" data-lang=\"en\">Follow</a><script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=\"//platform.twitter.com/widgets.js\";fjs.parentNode.insertBefore(js,fjs);}}(document,\"script\",\"twitter-wjs\");</script></li>\n\t\t</ul>\n\t</header>\n\n\t<div id=\"tour-nav\">\n\t\t<a href=\"#\" class=\"left\">&laquo; <span id=\"tour-prev\"></span></a>\n\t\t<h3>Nuclear Waste Tour</h3>\n\t\t<a href=\"#\" class=\"right\"><span id=\"tour-next\"></span> &raquo;</a>\n\t</div>\n\n\t<div id=\"map\" style=\"background:#1862ad;\"></div>\n\n\t<div id=\"tour-info\"></div>\n\n\t<script type=\"x/template\" id=\"categoriesTemplate\">\n\t\t{{#each categories}}\n\t\t\t<section class=\"type\">\n\t\t\t\t<h3>{{name}}</h3>\n\t\t\t\t<ul>\n\t\t\t\t\t{{#each types}}\n\t\t\t\t\t\t<li><label><input type=\"checkbox\" {{#if enabled}}checked{{/if}} value=\"{{name}}\"> <img src=\"{{assetsUrl}}icons/{{icon}}\"> {{name}}</label> <a href=\"#\" class=\"details\" data-name=\"{{name}}\"><i class=\"icon-chevron-sign-right\"></i></a> <!--<a href=\"#tour\" class=\"tt\"></a>--></li>\n\t\t\t\t\t{{/each}}\n\t\t\t\t</ul>\n\t\t\t</section>\n\t\t{{/each}}\n\t</script>\n\n\t<script type=\"x/template\" id=\"categoryDetailsTemplate\">\n\t\t<section class=\"type\">\n\t\t\t<h3><a href=\"#\" class=\"back details\"><i class=\"icon-chevron-sign-left\"></i></a> {{type.name}}</h3>\n\t\t\t<ul>\n\t\t\t\t{{#each locations}}\n\t\t\t\t\t<li data-id=\"{{id}}\"><label>{{title}}</label></li>\n\t\t\t\t{{/each}}\n\t\t\t</ul>\n\t\t</section>\n\t</script>\n\n\t<script type=\"x/template\" id=\"markerPopupTemplate2\">\n\t\t<div id=\"info-window\" style=\"max-width:420px;\">\n\t\t\t<div class=\"scrollable\">\n\t\t\t\t<span class=\"header\">\n\t\t\t\t\t<h3>{{title}}</h3>\n\t\t\t\t</span>\n\t\t\t\t<div id=\"info-body\">\n\t\t\t\t\t{{#if notes}}\n\t\t\t\t\t\t<br>\n\t\t\t\t\t\t<p>{{notes}}</p>\n\t\t\t\t\t{{/if}}\n\t\t\t\t\t{{#if video}}\n\t\t\t\t\t\t<div class=\"video-{{id}}\">\n\t\t\t\t\t\t\t<br>\n\t\t\t\t\t\t\t<h4>Video</h4>\n\t\t\t\t\t\t\t<div class=\"youtubewrapper\">\n\t\t\t\t\t\t\t\t<iframe width=\"100%\" src=\"//www.youtube.com/embed/{{video.yt_id}}?theme=light&amp;autoplay=1&amp;autohide=1&amp;modestbranding=1&amp;iv_load_policy=3&amp;rel=0&amp;showinfo=0&amp;loop=1{{#if video.start}}&amp;start={{timestampToSeconds video.start}}{{/if}}{{#if video.end}}&amp;end={{timestampToSeconds video.end}}{{/if}}\" frameborder=\"0\" allowfullscreen></iframe>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t{{#if video.yt_user}}\n\t\t\t\t\t\t\t\t<p>\n\t\t\t\t\t\t\t\t\t<a href=\"//www.youtube.com/user/{{video.yt_user}}\" style=\"color:#222;font-size:.8em;float:right;\" target=\"_blank\">\n\t\t\t\t\t\t\t\t\t\tVideo by {{video.yt_user}}\n\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t{{/if}}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t{{/if}}\n\t\t\t\t\t{{#if images}}\n\t\t\t\t\t\t<br>\n\t\t\t     \t\t<h4>Images</h4>\n\t\t\t\t\t{{/if}}\n\t\t\t\t\t{{#each images}}\n\t\t\t\t\t\t<div class=\"image-{{id}}\">\n\t\t\t\t\t     \t<span>{{headline}}</span>\n\t\t\t\t\t     \t<img src=\"{{url}}\" class=\"image-{{id}}\">\n\t\t\t\t\t     \t<p>\n\t\t\t\t\t\t\t\t<a href=\"{{contact}}\" style=\"color:#222;font-size:.8em;float:right;\" target=\"_blank\">\n\t\t\t\t\t\t\t\t\tImage by {{author}}\n\t\t\t\t\t\t\t\t</a>              \n\t\t\t\t\t     \t</p>\n\t\t\t\t\t    </div>\n\t\t\t\t\t    <br>\n\t\t\t     \t{{/each}}\n\t\t\t\t\t{{#each credit}}\n\t\t\t\t\t\t<p style=\"overflow:hidden;clear:both;text-align:right;\">\n\t\t\t\t\t\t\t<a href=\"{{#if where}}{{where}}{{else}}#{{/if}}\" target=\"_blank\" style=\"color:#222;font-size:.8em;\">\n\t\t\t\t\t\t\t\t{{what}} by {{who}}\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t</p>\n\t\t\t\t\t{{/each}}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</script>\n\n\t<div id=\"typeDetails\" class=\"types\"></div>\n\n\t<div id=\"types\" class=\"types\"></div>\n\n</body>\n</html>\n"
  },
  {
    "path": "js/app.js",
    "content": "$(function() {\n\tvar showCoordinations = true;\n\n\n\n\tvar $types = $('.types');\n\n\tvar onResize = function() {\n\t\t$types.css({\n\t\t\tmaxHeight: $(window).height() - parseInt($types.css('marginTop'), 10) - parseInt($types.css('marginBottom'), 10) - parseInt($('header').height()) + 6\n\t\t});\n\t};\n\n\tonResize();\n\n\t$(window).resize(onResize);\n\n\n\t// window.isTourMode = false;\n\n\t// if (window.location.hash == '#tour') {\n\t// \t$('body').addClass('tour');\n\t// \twindow.isTourMode = true;\n\t// }\n\t// else {\n\t// \t$('body').removeClass('tour');\n\t// \twindow.isTourMode = false;\n\t// \t// $('#map').css({position:'absolute'});\n\t// }\n\n\t// $(window).on('hashchange', function() {\n\t// \tif (window.location.hash == '#tour') {\n\t// \t\t$('body').addClass('tour');\n\t// \t\t$('#map').css({position:'relative'});\n\t// \t\twindow.isTourMode = true;\n\t// \t\tvar x = locations.findWhere({ type: 'Nuclear Waste' }); \n\t// \t\tVent.trigger('location:clicked', x, true);\n\t// \t}\n\t// \telse {\n\t// \t\t$('body').removeClass('tour');\t\n\t// \t\t$('#map').css({position:'absolute'});\n\t// \t\twindow.isTourMode = false;\n\t// \t}\n\t// });\n\t\n\tvar currentMarker;\n\t\n\tvar assetsUrl = function() {\n\t\treturn window.location.hostname == 'localhost' ? '' : '/';\n\t};\n\n\tHandlebars.registerHelper('assetsUrl', assetsUrl);\n\n\tvar timestampToSeconds = function(stamp) {\n\t\tstamp = stamp.split(':');\n\t\treturn (parseInt(stamp[0], 10) * 60) + parseInt(stamp[1], 10);\n\t};\n\n\tHandlebars.registerHelper('timestampToSeconds', timestampToSeconds);\n\n\tvar Vent = _.extend({}, Backbone.Events);\n\n\tvar LocationModel = Backbone.Model.extend({\n\t\tinitialize: function() {\n\t\t\tvar marker = new google.maps.Marker({\n\t\t\t\tposition: new google.maps.LatLng(this.get('lat'), this.get('lng')),\n\t\t\t\ticon: {\n\t\t\t\t\turl: assetsUrl()+'icons/'+categories.getIcon(this.get('type')),\n\t\t\t\t\tscaledSize: new google.maps.Size(32, 37),\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t_.bindAll(this, 'markerClicked');\n\t\t\tgoogle.maps.event.addListener(marker, 'click', this.markerClicked);\n\n\t\t\tthis.set({ marker: marker });\n\t\t},\n\n\t\tmarkerClicked: function() {\n\t\t\tVent.trigger('location:clicked', this);\n\t\t},\n\n\t\tremoveHighlight: function() {\n\t\t\tthis.get('marker').setIcon({\n\t\t\t\turl: this.get('marker').getIcon().url,\n\t\t\t\tscaledSize: new google.maps.Size(22, 22)\n\t\t\t});\n\t\t},\n\n\t\thighlightMarker: function() {\n\t\t\tif (currentMarker == this) {\n\t\t\t\tVent.trigger('location:clicked', this);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (currentMarker) currentMarker.removeHighlight();\n\t\t\t\tmapView.closePopupLocation();\n\t\t\t\tcurrentMarker = this;\n\t\t\t\tthis.get('marker').setIcon({\n\t\t\t\t\turl: this.get('marker').getIcon().url,\n\t\t\t\t\tscaledSize: new google.maps.Size(32, 32)\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t});\n\tvar LocationsCollection = Backbone.Collection.extend({\n\t\tmodel: LocationModel,\n\t\turl: 'locations.json'\n\t});\n\n\tvar locations = window.locations = new LocationsCollection();\n\n\tvar CategoryModel = Backbone.Model.extend({ });\n\tvar CategoriesCollection = Backbone.Collection.extend({\n\n\t\tmodel: CategoryModel,\n\n\t\tgetIcon: function(type) {\n\t\t\tvar o = this.findWhere({ name: type });\n\t\t\tif (o) {\n\t\t\t\treturn o.get('icon');\n\t\t\t}\n\n\t\t\treturn assetsUrl() + (o ? o.get('icon') : 'blank.png');\n\t\t},\n\n\t\tforView: function(type) {\n\t\t\tvar g = this.groupBy('type');\n\t\t\treturn _(g).map(function(categories, type) {\n\t\t\t\treturn {\n\t\t\t\t\tname: type,\n\t\t\t\t\ttypes: _.map(categories, function(category) { return category.toJSON(); })\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t});\n\n\tvar categories = window.cats = new CategoriesCollection([\n\t\t{\n\t\t\tname: 'Glitches',\n\t\t\ticon: 'General/glitches.png',\n\t\t\ttype: 'General',\n\t\t\tenabled: true\n\t\t},\n\t\t{\n\t\t\tname: 'Wall breaches',\n\t\t\ticon: 'General/wall-breach.png',\n\t\t\ttype: 'General',\n\t\t\tenabled: true\n\t\t},\n\t\t{\n\t\t\tname: 'Vehicles',\n\t\t\ticon: 'General/cars.png',\n\t\t\ttype: 'General',\n\t\t\tenabled: true\n\t\t}\n\t]);\n\n\tvar CategoriesView = Backbone.View.extend({\n\n\t\tinitialize: function() {\n\t\t\tthis.template = Handlebars.compile($('#categoriesTemplate').html());\n\t\t},\n\n\t\trender: function() {\n\t\t\tthis.$el.html(this.template({\n\t\t\t\tcategories: categories.forView()\n\t\t\t}));\n\t\t\t$('#typeDetails').hide();\n\t\t\treturn this;\n\t\t},\n\n\t\tevents: {\n\t\t\t'change input': 'toggleLocations',\n\t\t\t'click .details': 'showDetails'\n\t\t},\n\n\t\ttoggleLocations: function(e) {\n\t\t\tvar $e = $(e.currentTarget),\n\t\t\t\ttype = $e.val(),\n\t\t\t\tshowLocations = $e.is(':checked'),\n\t\t\t\tmodels = locations.where({ type: type });\n\n\t\t\tif (showLocations) {\n\t\t\t\tVent.trigger('locations:visible', models);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tVent.trigger('locations:invisible', models);\n\t\t\t}\t\n\t\t},\n\n\t\tshowDetails: function(e) {\n\t\t\te.preventDefault();\n\t\t\tvar typeName = $(e.currentTarget).data('name');\n\t\t\tthis.$el.find('input[value=\"'+typeName+'\"]').prop('checked', true).trigger('change');\n\n\t\t\tvar type = categories.findWhere({ name: typeName });\n\n\t\t\tvar details = new CategoryDetailsView({\n\t\t\t\tel: '#typeDetails',\n\t\t\t\ttype: type\n\t\t\t});\n\t\t\tdetails.render();\n\n\t\t}\n\n\t});\n\n\tvar CategoryDetailsView = Backbone.View.extend({\n\n\t\tinitialize: function() {\n\t\t\tthis.template = Handlebars.compile($('#categoryDetailsTemplate').html());\n\t\t},\n\n\t\tevents: {\n\t\t\t'click a.back': 'goBack',\n\t\t\t'click li': 'showMarker'\n\t\t},\n\n\t\tgoBack: function(e) {\n\t\t\te.preventDefault();\n\t\t\tthis.$el.empty();\n\t\t\tthis.off();\n\t\t\t$('#types').show();\n\t\t},\n\n\t\tshowMarker: function(e) {\n\t\t\tvar location = locations.get($(e.currentTarget).data('id'));\n\t\t\tlocation.highlightMarker();\n\t\t\tmap.panTo(location.get('marker').getPosition());\n\t\t\tmap.setZoom(5);\n\t\t},\n\n\t\trender: function() {\n\t\t\tvar name = this.options.type.get('name');\n\t\t\tvar locs = locations.where({ type: name });\n\t\t\tthis.$el.html(this.template({\n\t\t\t\ttype: this.options.type.toJSON(),\n\t\t\t\tlocations: _(locs).map(function(x) {\n\t\t\t\t\tvar d = x.toJSON();\n\t\t\t\t\tif (name == 'Money') name = 'Hidden Package';\n\t\t\t\t\td.title = d.title.replace(name+' ', '');\n\t\t\t\t\treturn d;\n\t\t\t\t})\n\t\t\t}));\n\t\t\t$('#types').hide();\n\t\t\tthis.$el.show();\n\t\t\treturn this;\n\t\t}\n\n\t});\n\n\tvar MapView = Backbone.View.extend({\n\n\t\tinitialize: function() {\n\t\t\tthis.mapType = 'Road';\n\t\t\tthis.mapDetails = { 'Atlas': '#0fa8d2', 'Satellite': '#143d6b', 'Road': '#1862ad' };\n\t\t\tthis.mapOptions = {\n\t\t\t\tcenter: new google.maps.LatLng(66, -125),\n\t\t\t\tzoom: 4,\n\t\t\t\tdisableDefaultUI: true,\n\t\t\t\tmapTypeControl: true,\n\t\t\t\tmapTypeControlOptions: { mapTypeIds: _.keys(this.mapDetails) },\n\t\t\t\tmapTypeId: this.mapType,\n\t\t\t\tbackgroundColor: '#1862ad'\n\t\t\t};\n\n\t\t\t_.bindAll(this, 'getTileImage', 'updateMapBackground');\n\n\t\t\tthis.popupTemplate = Handlebars.compile($('#markerPopupTemplate2').html());\n\n\t\t\tthis.listenTo(Vent, 'locations:visible', this.showLocations);\n\t\t\tthis.listenTo(Vent, 'locations:invisible', this.hideLocations);\n\n\t\t\tthis.listenTo(Vent, 'location:clicked', this.popupLocation);\n\t\t},\n\n\t\trender: function() {\n\n\t\t\t// Function to update coordination info windows\n\t\t    function updateCoordinationWindow(markerobject){\n\t\t        // Create new info window\n\t\t\t\tvar infoWindow = new google.maps.InfoWindow;\n\n\t\t\t\t// onClick listener\n\t\t\t\tgoogle.maps.event.addListener(markerobject, 'click', function(evt){\n\t\t\t\t\t// Set content\n\t\t\t\t    infoWindow.setOptions({\n\t\t\t\t        content: '<p>' + 'Current Lat: ' + evt.latLng.lat().toFixed(3) + '<br>' + 'Current Lng: ' + evt.latLng.lng().toFixed(3) + '<br>' + 'Zoom Level: ' + map.getZoom() + '</p>'\n\t\t\t\t    });\n\n\t\t\t\t    // Open the info window\n\t\t\t\t    infoWindow.open(map, markerobject);\n\t\t\t\t});\n\n\t\t\t\t// onDrag listener\n\t\t\t\tgoogle.maps.event.addListener(markerobject, 'drag', function(evt){\n\t\t\t\t\t// Set content\n\t\t\t\t    infoWindow.setOptions({\n\t\t\t\t        content: '<p>' + 'Current Lat: ' + evt.latLng.lat().toFixed(3) + '<br>' + 'Current Lng: ' + evt.latLng.lng().toFixed(3) + '<br>' + 'Zoom Level: ' + map.getZoom() + '</p>'\n\t\t\t\t    });\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tvar map = this.map = window.map = new google.maps.Map(this.el, this.mapOptions);\n\n\t\t\tthis.initMapTypes(map, _.keys(this.mapDetails));\n\n\t\t\tgoogle.maps.event.addListener(map, 'maptypeid_changed', this.updateMapBackground);\n\n\t\t\tgoogle.maps.event.addDomListener(map, 'tilesloaded', function() {\n\t\t\t\tif ($('#mapControlWrap').length == 0) {\n\t\t\t\t\t$('div.gmnoprint').last().wrap('<div id=\"mapControlWrap\" />');\n\t\t\t\t}\n\t\t\t});\n\n\t\t\twindow.locs = [];\n\t\t\tgoogle.maps.event.addListener(map, 'rightclick', function(e) {\n\t\t\t\tvar marker = new google.maps.Marker({\n\t\t\t\t\tmap: map,\n\t\t\t\t\tmoveable: true,\n\t\t\t\t\tdraggable: true,\n\t\t\t\t\tposition: e.latLng\n\t\t\t\t});\n\t\t\t\twindow.locs.push(marker);\n\n\t\t\t\t// Check if coords mode is enabled\n\t\t\t\tif (showCoordinations) {\n\t\t\t\t\t// Update/create info window\n\t\t\t\t\tupdateCoordinationWindow(marker);\n\t\t\t\t};\n\t\t\t});\n\n\t\t\treturn this;\n\t\t},\n\n\t\tgetMap: function() {\n\t\t\treturn this.map;\n\t\t},\n\n\t\tinitMapTypes: function(map, types) {\n\t\t\t_.each(types, function(type) {\n\t\t\t\tvar mapTypeOptions = {\n\t\t\t\t\tmaxZoom: 7,\n\t\t\t\t\tminZoom: 3,\n\t\t\t\t\tname: type,\n\t\t\t\t\ttileSize: new google.maps.Size(256, 256),\n\t\t\t\t\tgetTileUrl: this.getTileImage\n\t\t\t\t};\n\t\t\t\tmap.mapTypes.set(type, new google.maps.ImageMapType(mapTypeOptions));\n\t\t\t}, this);\n\t\t},\n\n\t\tupdateMapBackground: function() {\n\t\t\tthis.mapType = this.map.getMapTypeId();\n\t\t\tthis.$el.css({\n\t\t\t\tbackgroundColor: this.mapDetails[this.mapType]\n\t\t\t});\n\t\t},\n\n\t\tgetTileImage: function(rawCoordinates, zoomLevel) {\n\t\t\tvar coord = this.normalizeCoordinates(rawCoordinates, zoomLevel);\n\t\t\tif ( ! coord) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\treturn assetsUrl() + 'tiles/' + this.mapType.toLowerCase() + '/' + zoomLevel + '-' + coord.x + '_' + coord.y + '.png';\n\t\t},\n\n\t\tnormalizeCoordinates: function(coord, zoom) {\n\t\t\tvar y = coord.y;\n\t\t\tvar x = coord.x;\n\n\t\t\t// tile range in one direction range is dependent on zoom level\n\t\t\t// 0 = 1 tile, 1 = 2 tiles, 2 = 4 tiles, 3 = 8 tiles, etc\n\t\t\tvar tileRange = 1 << zoom;\n\n\t\t\t// don't repeat across y-axis (vertically)\n\t\t\tif (y < 0 || y >= tileRange) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// repeat across x-axis\n\t\t\tif (x < 0 || x >= tileRange) {\n\t\t\t\tx = (x % tileRange + tileRange) % tileRange;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tx: x,\n\t\t\t\ty: y\n\t\t\t};\n\t\t},\n\n\t\tshowLocations: function(locations) {\n\t\t\t_.each(locations, function(location) {\n\t\t\t\tvar marker = location.get('marker');\n\t\t\t\tif ( ! marker.getMap()) {\n\t\t\t\t\tmarker.setMap(this.map);\n\t\t\t\t}\n\t\t\t\tmarker.setVisible(true);\n\t\t\t}, this);\n\t\t},\n\n\t\thideLocations: function(locations) {\n\t\t\t_.each(locations, function(location) {\n\t\t\t\tlocation.get('marker').setVisible(false);\n\t\t\t});\n\t\t},\n\n\t\tpopupLocation: function(location, panTo) {\n\t\t\t// if (window.isTourMode) {\n\t\t\t// \t$('#tour-info').html(this.popupTemplate(location.toJSON()));\n\t\t\t// \tvar n = locations.at(locations.indexOf(location) + 1);\n\t\t\t// \tif (n) {\n\t\t\t// \t\t$('#tour-next').text(n.get('title'));\n\t\t\t// \t}\n\t\t\t// \tvar p = locations.at(locations.indexOf(location) - 1);\n\t\t\t// \tif (p) {\n\t\t\t// \t\t$('#tour-prev').text(p.get('title'));\n\t\t\t// \t}\n\n\t\t\t// \tif (panTo) {\n\t\t\t// \t\tthis.map.panTo(location.get('marker').getPosition());\n\t\t\t// \t\tthis.map.setZoom(5);\n\t\t\t// \t}\n\t\t\t// }\n\t\t\t// else {\n\n\t\t\t\tvar infoWindow = new google.maps.InfoWindow({\n\t\t\t\t\tcontent: this.popupTemplate(location.toJSON()),\n\t\t\t\t});\n\n\t\t\t    infoWindow.setOptions({\n\t\t\t        maxHeight: 400\n\t\t\t    });\n\n\t\t\t\tif( /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) ) {\n\t\t\t\t    infoWindow.setOptions({\n\t\t\t\t        maxWidth: 180,\n\t\t\t        \tmaxHeight: 300\n\t\t\t\t    });\n\t\t\t\t}\n\n\t\t\t\tinfoWindow.open(this.map, location.get('marker'));\n\n\t\t\t\tthis.closePopupLocation();\n\t\t\t\tthis.currentInfoWindow = infoWindow;\n\t\t\t// }\n\t\t},\n\n\t\tclosePopupLocation: function() {\n\t\t\tif (this.currentInfoWindow) {\n\t\t\t\tthis.currentInfoWindow.close();\n\t\t\t}\n\t\t}\n\n\t});\n\n\tvar mapView = new MapView({\n\t\tel: '#map'\n\t});\n\n\n\tvar categoriesView = new CategoriesView({\n\t\tel: '#types',\n\t\tmap: mapView.getMap()\n\t});\n\n\tlocations.fetch().done(function() {\n\t\tmapView.render();\n\t\tcategoriesView.render();\n\n\t\tcategories.chain()\n\t\t\t\t  .filter(function(c) { return c.get('enabled'); })\n\t\t\t\t  .map(function(c) { return c.get('name'); })\n\t\t\t\t  .map(function(name) {\n\t\t\t\t  \treturn locations.where({ type: name })\n\t\t\t\t  })\n\t\t\t\t  .each(function(locs) {\n\t\t\t\t  \tVent.trigger('locations:visible', locs);\n\t\t\t\t  })\n\t\t\t\t  .value();\n\t});\n\n\t$('#tour-prev, #tour-next').click(function(e) {\n\t\te.preventDefault();\n\t\tvar navTo = $(this).text();\n\t\tvar x = locations.findWhere({ title: navTo });\n\t\tif (x) Vent.trigger('location:clicked', x, true);\n\t});\n\n});"
  },
  {
    "path": "js/libs/backbone-min.js",
    "content": "(function(){var t=this;var e=t.Backbone;var i=[];var r=i.push;var s=i.slice;var n=i.splice;var a;if(typeof exports!==\"undefined\"){a=exports}else{a=t.Backbone={}}a.VERSION=\"1.0.0\";var h=t._;if(!h&&typeof require!==\"undefined\")h=require(\"underscore\");a.$=t.jQuery||t.Zepto||t.ender||t.$;a.noConflict=function(){t.Backbone=e;return this};a.emulateHTTP=false;a.emulateJSON=false;var o=a.Events={on:function(t,e,i){if(!l(this,\"on\",t,[e,i])||!e)return this;this._events||(this._events={});var r=this._events[t]||(this._events[t]=[]);r.push({callback:e,context:i,ctx:i||this});return this},once:function(t,e,i){if(!l(this,\"once\",t,[e,i])||!e)return this;var r=this;var s=h.once(function(){r.off(t,s);e.apply(this,arguments)});s._callback=e;return this.on(t,s,i)},off:function(t,e,i){var r,s,n,a,o,u,c,f;if(!this._events||!l(this,\"off\",t,[e,i]))return this;if(!t&&!e&&!i){this._events={};return this}a=t?[t]:h.keys(this._events);for(o=0,u=a.length;o<u;o++){t=a[o];if(n=this._events[t]){this._events[t]=r=[];if(e||i){for(c=0,f=n.length;c<f;c++){s=n[c];if(e&&e!==s.callback&&e!==s.callback._callback||i&&i!==s.context){r.push(s)}}}if(!r.length)delete this._events[t]}}return this},trigger:function(t){if(!this._events)return this;var e=s.call(arguments,1);if(!l(this,\"trigger\",t,e))return this;var i=this._events[t];var r=this._events.all;if(i)c(i,e);if(r)c(r,arguments);return this},stopListening:function(t,e,i){var r=this._listeners;if(!r)return this;var s=!e&&!i;if(typeof e===\"object\")i=this;if(t)(r={})[t._listenerId]=t;for(var n in r){r[n].off(e,i,this);if(s)delete this._listeners[n]}return this}};var u=/\\s+/;var l=function(t,e,i,r){if(!i)return true;if(typeof i===\"object\"){for(var s in i){t[e].apply(t,[s,i[s]].concat(r))}return false}if(u.test(i)){var n=i.split(u);for(var a=0,h=n.length;a<h;a++){t[e].apply(t,[n[a]].concat(r))}return false}return true};var c=function(t,e){var i,r=-1,s=t.length,n=e[0],a=e[1],h=e[2];switch(e.length){case 0:while(++r<s)(i=t[r]).callback.call(i.ctx);return;case 1:while(++r<s)(i=t[r]).callback.call(i.ctx,n);return;case 2:while(++r<s)(i=t[r]).callback.call(i.ctx,n,a);return;case 3:while(++r<s)(i=t[r]).callback.call(i.ctx,n,a,h);return;default:while(++r<s)(i=t[r]).callback.apply(i.ctx,e)}};var f={listenTo:\"on\",listenToOnce:\"once\"};h.each(f,function(t,e){o[e]=function(e,i,r){var s=this._listeners||(this._listeners={});var n=e._listenerId||(e._listenerId=h.uniqueId(\"l\"));s[n]=e;if(typeof i===\"object\")r=this;e[t](i,r,this);return this}});o.bind=o.on;o.unbind=o.off;h.extend(a,o);var d=a.Model=function(t,e){var i;var r=t||{};e||(e={});this.cid=h.uniqueId(\"c\");this.attributes={};h.extend(this,h.pick(e,p));if(e.parse)r=this.parse(r,e)||{};if(i=h.result(this,\"defaults\")){r=h.defaults({},r,i)}this.set(r,e);this.changed={};this.initialize.apply(this,arguments)};var p=[\"url\",\"urlRoot\",\"collection\"];h.extend(d.prototype,o,{changed:null,validationError:null,idAttribute:\"id\",initialize:function(){},toJSON:function(t){return h.clone(this.attributes)},sync:function(){return a.sync.apply(this,arguments)},get:function(t){return this.attributes[t]},escape:function(t){return h.escape(this.get(t))},has:function(t){return this.get(t)!=null},set:function(t,e,i){var r,s,n,a,o,u,l,c;if(t==null)return this;if(typeof t===\"object\"){s=t;i=e}else{(s={})[t]=e}i||(i={});if(!this._validate(s,i))return false;n=i.unset;o=i.silent;a=[];u=this._changing;this._changing=true;if(!u){this._previousAttributes=h.clone(this.attributes);this.changed={}}c=this.attributes,l=this._previousAttributes;if(this.idAttribute in s)this.id=s[this.idAttribute];for(r in s){e=s[r];if(!h.isEqual(c[r],e))a.push(r);if(!h.isEqual(l[r],e)){this.changed[r]=e}else{delete this.changed[r]}n?delete c[r]:c[r]=e}if(!o){if(a.length)this._pending=true;for(var f=0,d=a.length;f<d;f++){this.trigger(\"change:\"+a[f],this,c[a[f]],i)}}if(u)return this;if(!o){while(this._pending){this._pending=false;this.trigger(\"change\",this,i)}}this._pending=false;this._changing=false;return this},unset:function(t,e){return this.set(t,void 0,h.extend({},e,{unset:true}))},clear:function(t){var e={};for(var i in this.attributes)e[i]=void 0;return this.set(e,h.extend({},t,{unset:true}))},hasChanged:function(t){if(t==null)return!h.isEmpty(this.changed);return h.has(this.changed,t)},changedAttributes:function(t){if(!t)return this.hasChanged()?h.clone(this.changed):false;var e,i=false;var r=this._changing?this._previousAttributes:this.attributes;for(var s in t){if(h.isEqual(r[s],e=t[s]))continue;(i||(i={}))[s]=e}return i},previous:function(t){if(t==null||!this._previousAttributes)return null;return this._previousAttributes[t]},previousAttributes:function(){return h.clone(this._previousAttributes)},fetch:function(t){t=t?h.clone(t):{};if(t.parse===void 0)t.parse=true;var e=this;var i=t.success;t.success=function(r){if(!e.set(e.parse(r,t),t))return false;if(i)i(e,r,t);e.trigger(\"sync\",e,r,t)};R(this,t);return this.sync(\"read\",this,t)},save:function(t,e,i){var r,s,n,a=this.attributes;if(t==null||typeof t===\"object\"){r=t;i=e}else{(r={})[t]=e}if(r&&(!i||!i.wait)&&!this.set(r,i))return false;i=h.extend({validate:true},i);if(!this._validate(r,i))return false;if(r&&i.wait){this.attributes=h.extend({},a,r)}if(i.parse===void 0)i.parse=true;var o=this;var u=i.success;i.success=function(t){o.attributes=a;var e=o.parse(t,i);if(i.wait)e=h.extend(r||{},e);if(h.isObject(e)&&!o.set(e,i)){return false}if(u)u(o,t,i);o.trigger(\"sync\",o,t,i)};R(this,i);s=this.isNew()?\"create\":i.patch?\"patch\":\"update\";if(s===\"patch\")i.attrs=r;n=this.sync(s,this,i);if(r&&i.wait)this.attributes=a;return n},destroy:function(t){t=t?h.clone(t):{};var e=this;var i=t.success;var r=function(){e.trigger(\"destroy\",e,e.collection,t)};t.success=function(s){if(t.wait||e.isNew())r();if(i)i(e,s,t);if(!e.isNew())e.trigger(\"sync\",e,s,t)};if(this.isNew()){t.success();return false}R(this,t);var s=this.sync(\"delete\",this,t);if(!t.wait)r();return s},url:function(){var t=h.result(this,\"urlRoot\")||h.result(this.collection,\"url\")||U();if(this.isNew())return t;return t+(t.charAt(t.length-1)===\"/\"?\"\":\"/\")+encodeURIComponent(this.id)},parse:function(t,e){return t},clone:function(){return new this.constructor(this.attributes)},isNew:function(){return this.id==null},isValid:function(t){return this._validate({},h.extend(t||{},{validate:true}))},_validate:function(t,e){if(!e.validate||!this.validate)return true;t=h.extend({},this.attributes,t);var i=this.validationError=this.validate(t,e)||null;if(!i)return true;this.trigger(\"invalid\",this,i,h.extend(e||{},{validationError:i}));return false}});var v=[\"keys\",\"values\",\"pairs\",\"invert\",\"pick\",\"omit\"];h.each(v,function(t){d.prototype[t]=function(){var e=s.call(arguments);e.unshift(this.attributes);return h[t].apply(h,e)}});var g=a.Collection=function(t,e){e||(e={});if(e.url)this.url=e.url;if(e.model)this.model=e.model;if(e.comparator!==void 0)this.comparator=e.comparator;this._reset();this.initialize.apply(this,arguments);if(t)this.reset(t,h.extend({silent:true},e))};var m={add:true,remove:true,merge:true};var y={add:true,merge:false,remove:false};h.extend(g.prototype,o,{model:d,initialize:function(){},toJSON:function(t){return this.map(function(e){return e.toJSON(t)})},sync:function(){return a.sync.apply(this,arguments)},add:function(t,e){return this.set(t,h.defaults(e||{},y))},remove:function(t,e){t=h.isArray(t)?t.slice():[t];e||(e={});var i,r,s,n;for(i=0,r=t.length;i<r;i++){n=this.get(t[i]);if(!n)continue;delete this._byId[n.id];delete this._byId[n.cid];s=this.indexOf(n);this.models.splice(s,1);this.length--;if(!e.silent){e.index=s;n.trigger(\"remove\",n,this,e)}this._removeReference(n)}return this},set:function(t,e){e=h.defaults(e||{},m);if(e.parse)t=this.parse(t,e);if(!h.isArray(t))t=t?[t]:[];var i,s,a,o,u,l;var c=e.at;var f=this.comparator&&c==null&&e.sort!==false;var d=h.isString(this.comparator)?this.comparator:null;var p=[],v=[],g={};for(i=0,s=t.length;i<s;i++){if(!(a=this._prepareModel(t[i],e)))continue;if(u=this.get(a)){if(e.remove)g[u.cid]=true;if(e.merge){u.set(a.attributes,e);if(f&&!l&&u.hasChanged(d))l=true}}else if(e.add){p.push(a);a.on(\"all\",this._onModelEvent,this);this._byId[a.cid]=a;if(a.id!=null)this._byId[a.id]=a}}if(e.remove){for(i=0,s=this.length;i<s;++i){if(!g[(a=this.models[i]).cid])v.push(a)}if(v.length)this.remove(v,e)}if(p.length){if(f)l=true;this.length+=p.length;if(c!=null){n.apply(this.models,[c,0].concat(p))}else{r.apply(this.models,p)}}if(l)this.sort({silent:true});if(e.silent)return this;for(i=0,s=p.length;i<s;i++){(a=p[i]).trigger(\"add\",a,this,e)}if(l)this.trigger(\"sort\",this,e);return this},reset:function(t,e){e||(e={});for(var i=0,r=this.models.length;i<r;i++){this._removeReference(this.models[i])}e.previousModels=this.models;this._reset();this.add(t,h.extend({silent:true},e));if(!e.silent)this.trigger(\"reset\",this,e);return this},push:function(t,e){t=this._prepareModel(t,e);this.add(t,h.extend({at:this.length},e));return t},pop:function(t){var e=this.at(this.length-1);this.remove(e,t);return e},unshift:function(t,e){t=this._prepareModel(t,e);this.add(t,h.extend({at:0},e));return t},shift:function(t){var e=this.at(0);this.remove(e,t);return e},slice:function(t,e){return this.models.slice(t,e)},get:function(t){if(t==null)return void 0;return this._byId[t.id!=null?t.id:t.cid||t]},at:function(t){return this.models[t]},where:function(t,e){if(h.isEmpty(t))return e?void 0:[];return this[e?\"find\":\"filter\"](function(e){for(var i in t){if(t[i]!==e.get(i))return false}return true})},findWhere:function(t){return this.where(t,true)},sort:function(t){if(!this.comparator)throw new Error(\"Cannot sort a set without a comparator\");t||(t={});if(h.isString(this.comparator)||this.comparator.length===1){this.models=this.sortBy(this.comparator,this)}else{this.models.sort(h.bind(this.comparator,this))}if(!t.silent)this.trigger(\"sort\",this,t);return this},sortedIndex:function(t,e,i){e||(e=this.comparator);var r=h.isFunction(e)?e:function(t){return t.get(e)};return h.sortedIndex(this.models,t,r,i)},pluck:function(t){return h.invoke(this.models,\"get\",t)},fetch:function(t){t=t?h.clone(t):{};if(t.parse===void 0)t.parse=true;var e=t.success;var i=this;t.success=function(r){var s=t.reset?\"reset\":\"set\";i[s](r,t);if(e)e(i,r,t);i.trigger(\"sync\",i,r,t)};R(this,t);return this.sync(\"read\",this,t)},create:function(t,e){e=e?h.clone(e):{};if(!(t=this._prepareModel(t,e)))return false;if(!e.wait)this.add(t,e);var i=this;var r=e.success;e.success=function(s){if(e.wait)i.add(t,e);if(r)r(t,s,e)};t.save(null,e);return t},parse:function(t,e){return t},clone:function(){return new this.constructor(this.models)},_reset:function(){this.length=0;this.models=[];this._byId={}},_prepareModel:function(t,e){if(t instanceof d){if(!t.collection)t.collection=this;return t}e||(e={});e.collection=this;var i=new this.model(t,e);if(!i._validate(t,e)){this.trigger(\"invalid\",this,t,e);return false}return i},_removeReference:function(t){if(this===t.collection)delete t.collection;t.off(\"all\",this._onModelEvent,this)},_onModelEvent:function(t,e,i,r){if((t===\"add\"||t===\"remove\")&&i!==this)return;if(t===\"destroy\")this.remove(e,r);if(e&&t===\"change:\"+e.idAttribute){delete this._byId[e.previous(e.idAttribute)];if(e.id!=null)this._byId[e.id]=e}this.trigger.apply(this,arguments)}});var _=[\"forEach\",\"each\",\"map\",\"collect\",\"reduce\",\"foldl\",\"inject\",\"reduceRight\",\"foldr\",\"find\",\"detect\",\"filter\",\"select\",\"reject\",\"every\",\"all\",\"some\",\"any\",\"include\",\"contains\",\"invoke\",\"max\",\"min\",\"toArray\",\"size\",\"first\",\"head\",\"take\",\"initial\",\"rest\",\"tail\",\"drop\",\"last\",\"without\",\"indexOf\",\"shuffle\",\"lastIndexOf\",\"isEmpty\",\"chain\"];h.each(_,function(t){g.prototype[t]=function(){var e=s.call(arguments);e.unshift(this.models);return h[t].apply(h,e)}});var w=[\"groupBy\",\"countBy\",\"sortBy\"];h.each(w,function(t){g.prototype[t]=function(e,i){var r=h.isFunction(e)?e:function(t){return t.get(e)};return h[t](this.models,r,i)}});var b=a.View=function(t){this.cid=h.uniqueId(\"view\");this._configure(t||{});this._ensureElement();this.initialize.apply(this,arguments);this.delegateEvents()};var x=/^(\\S+)\\s*(.*)$/;var E=[\"model\",\"collection\",\"el\",\"id\",\"attributes\",\"className\",\"tagName\",\"events\"];h.extend(b.prototype,o,{tagName:\"div\",$:function(t){return this.$el.find(t)},initialize:function(){},render:function(){return this},remove:function(){this.$el.remove();this.stopListening();return this},setElement:function(t,e){if(this.$el)this.undelegateEvents();this.$el=t instanceof a.$?t:a.$(t);this.el=this.$el[0];if(e!==false)this.delegateEvents();return this},delegateEvents:function(t){if(!(t||(t=h.result(this,\"events\"))))return this;this.undelegateEvents();for(var e in t){var i=t[e];if(!h.isFunction(i))i=this[t[e]];if(!i)continue;var r=e.match(x);var s=r[1],n=r[2];i=h.bind(i,this);s+=\".delegateEvents\"+this.cid;if(n===\"\"){this.$el.on(s,i)}else{this.$el.on(s,n,i)}}return this},undelegateEvents:function(){this.$el.off(\".delegateEvents\"+this.cid);return this},_configure:function(t){if(this.options)t=h.extend({},h.result(this,\"options\"),t);h.extend(this,h.pick(t,E));this.options=t},_ensureElement:function(){if(!this.el){var t=h.extend({},h.result(this,\"attributes\"));if(this.id)t.id=h.result(this,\"id\");if(this.className)t[\"class\"]=h.result(this,\"className\");var e=a.$(\"<\"+h.result(this,\"tagName\")+\">\").attr(t);this.setElement(e,false)}else{this.setElement(h.result(this,\"el\"),false)}}});a.sync=function(t,e,i){var r=k[t];h.defaults(i||(i={}),{emulateHTTP:a.emulateHTTP,emulateJSON:a.emulateJSON});var s={type:r,dataType:\"json\"};if(!i.url){s.url=h.result(e,\"url\")||U()}if(i.data==null&&e&&(t===\"create\"||t===\"update\"||t===\"patch\")){s.contentType=\"application/json\";s.data=JSON.stringify(i.attrs||e.toJSON(i))}if(i.emulateJSON){s.contentType=\"application/x-www-form-urlencoded\";s.data=s.data?{model:s.data}:{}}if(i.emulateHTTP&&(r===\"PUT\"||r===\"DELETE\"||r===\"PATCH\")){s.type=\"POST\";if(i.emulateJSON)s.data._method=r;var n=i.beforeSend;i.beforeSend=function(t){t.setRequestHeader(\"X-HTTP-Method-Override\",r);if(n)return n.apply(this,arguments)}}if(s.type!==\"GET\"&&!i.emulateJSON){s.processData=false}if(s.type===\"PATCH\"&&window.ActiveXObject&&!(window.external&&window.external.msActiveXFilteringEnabled)){s.xhr=function(){return new ActiveXObject(\"Microsoft.XMLHTTP\")}}var o=i.xhr=a.ajax(h.extend(s,i));e.trigger(\"request\",e,o,i);return o};var k={create:\"POST\",update:\"PUT\",patch:\"PATCH\",\"delete\":\"DELETE\",read:\"GET\"};a.ajax=function(){return a.$.ajax.apply(a.$,arguments)};var S=a.Router=function(t){t||(t={});if(t.routes)this.routes=t.routes;this._bindRoutes();this.initialize.apply(this,arguments)};var $=/\\((.*?)\\)/g;var T=/(\\(\\?)?:\\w+/g;var H=/\\*\\w+/g;var A=/[\\-{}\\[\\]+?.,\\\\\\^$|#\\s]/g;h.extend(S.prototype,o,{initialize:function(){},route:function(t,e,i){if(!h.isRegExp(t))t=this._routeToRegExp(t);if(h.isFunction(e)){i=e;e=\"\"}if(!i)i=this[e];var r=this;a.history.route(t,function(s){var n=r._extractParameters(t,s);i&&i.apply(r,n);r.trigger.apply(r,[\"route:\"+e].concat(n));r.trigger(\"route\",e,n);a.history.trigger(\"route\",r,e,n)});return this},navigate:function(t,e){a.history.navigate(t,e);return this},_bindRoutes:function(){if(!this.routes)return;this.routes=h.result(this,\"routes\");var t,e=h.keys(this.routes);while((t=e.pop())!=null){this.route(t,this.routes[t])}},_routeToRegExp:function(t){t=t.replace(A,\"\\\\$&\").replace($,\"(?:$1)?\").replace(T,function(t,e){return e?t:\"([^/]+)\"}).replace(H,\"(.*?)\");return new RegExp(\"^\"+t+\"$\")},_extractParameters:function(t,e){var i=t.exec(e).slice(1);return h.map(i,function(t){return t?decodeURIComponent(t):null})}});var I=a.History=function(){this.handlers=[];h.bindAll(this,\"checkUrl\");if(typeof window!==\"undefined\"){this.location=window.location;this.history=window.history}};var N=/^[#\\/]|\\s+$/g;var P=/^\\/+|\\/+$/g;var O=/msie [\\w.]+/;var C=/\\/$/;I.started=false;h.extend(I.prototype,o,{interval:50,getHash:function(t){var e=(t||this).location.href.match(/#(.*)$/);return e?e[1]:\"\"},getFragment:function(t,e){if(t==null){if(this._hasPushState||!this._wantsHashChange||e){t=this.location.pathname;var i=this.root.replace(C,\"\");if(!t.indexOf(i))t=t.substr(i.length)}else{t=this.getHash()}}return t.replace(N,\"\")},start:function(t){if(I.started)throw new Error(\"Backbone.history has already been started\");I.started=true;this.options=h.extend({},{root:\"/\"},this.options,t);this.root=this.options.root;this._wantsHashChange=this.options.hashChange!==false;this._wantsPushState=!!this.options.pushState;this._hasPushState=!!(this.options.pushState&&this.history&&this.history.pushState);var e=this.getFragment();var i=document.documentMode;var r=O.exec(navigator.userAgent.toLowerCase())&&(!i||i<=7);this.root=(\"/\"+this.root+\"/\").replace(P,\"/\");if(r&&this._wantsHashChange){this.iframe=a.$('<iframe src=\"javascript:0\" tabindex=\"-1\" />').hide().appendTo(\"body\")[0].contentWindow;this.navigate(e)}if(this._hasPushState){a.$(window).on(\"popstate\",this.checkUrl)}else if(this._wantsHashChange&&\"onhashchange\"in window&&!r){a.$(window).on(\"hashchange\",this.checkUrl)}else if(this._wantsHashChange){this._checkUrlInterval=setInterval(this.checkUrl,this.interval)}this.fragment=e;var s=this.location;var n=s.pathname.replace(/[^\\/]$/,\"$&/\")===this.root;if(this._wantsHashChange&&this._wantsPushState&&!this._hasPushState&&!n){this.fragment=this.getFragment(null,true);this.location.replace(this.root+this.location.search+\"#\"+this.fragment);return true}else if(this._wantsPushState&&this._hasPushState&&n&&s.hash){this.fragment=this.getHash().replace(N,\"\");this.history.replaceState({},document.title,this.root+this.fragment+s.search)}if(!this.options.silent)return this.loadUrl()},stop:function(){a.$(window).off(\"popstate\",this.checkUrl).off(\"hashchange\",this.checkUrl);clearInterval(this._checkUrlInterval);I.started=false},route:function(t,e){this.handlers.unshift({route:t,callback:e})},checkUrl:function(t){var e=this.getFragment();if(e===this.fragment&&this.iframe){e=this.getFragment(this.getHash(this.iframe))}if(e===this.fragment)return false;if(this.iframe)this.navigate(e);this.loadUrl()||this.loadUrl(this.getHash())},loadUrl:function(t){var e=this.fragment=this.getFragment(t);var i=h.any(this.handlers,function(t){if(t.route.test(e)){t.callback(e);return true}});return i},navigate:function(t,e){if(!I.started)return false;if(!e||e===true)e={trigger:e};t=this.getFragment(t||\"\");if(this.fragment===t)return;this.fragment=t;var i=this.root+t;if(this._hasPushState){this.history[e.replace?\"replaceState\":\"pushState\"]({},document.title,i)}else if(this._wantsHashChange){this._updateHash(this.location,t,e.replace);if(this.iframe&&t!==this.getFragment(this.getHash(this.iframe))){if(!e.replace)this.iframe.document.open().close();this._updateHash(this.iframe.location,t,e.replace)}}else{return this.location.assign(i)}if(e.trigger)this.loadUrl(t)},_updateHash:function(t,e,i){if(i){var r=t.href.replace(/(javascript:|#).*$/,\"\");t.replace(r+\"#\"+e)}else{t.hash=\"#\"+e}}});a.history=new I;var j=function(t,e){var i=this;var r;if(t&&h.has(t,\"constructor\")){r=t.constructor}else{r=function(){return i.apply(this,arguments)}}h.extend(r,i,e);var s=function(){this.constructor=r};s.prototype=i.prototype;r.prototype=new s;if(t)h.extend(r.prototype,t);r.__super__=i.prototype;return r};d.extend=g.extend=S.extend=b.extend=I.extend=j;var U=function(){throw new Error('A \"url\" property or function must be specified')};var R=function(t,e){var i=e.error;e.error=function(r){if(i)i(t,r,e);t.trigger(\"error\",t,r,e)}}}).call(this);\n/*\n//@ sourceMappingURL=backbone-min.map\n*/"
  },
  {
    "path": "js/libs/handlebars.js",
    "content": "/*\n\nCopyright (C) 2011 by Yehuda Katz\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n*/\n\n// lib/handlebars/browser-prefix.js\nvar Handlebars = {};\n\n(function(Handlebars, undefined) {\n;\n// lib/handlebars/base.js\n\nHandlebars.VERSION = \"1.0.0\";\nHandlebars.COMPILER_REVISION = 4;\n\nHandlebars.REVISION_CHANGES = {\n  1: '<= 1.0.rc.2', // 1.0.rc.2 is actually rev2 but doesn't report it\n  2: '== 1.0.0-rc.3',\n  3: '== 1.0.0-rc.4',\n  4: '>= 1.0.0'\n};\n\nHandlebars.helpers  = {};\nHandlebars.partials = {};\n\nvar toString = Object.prototype.toString,\n    functionType = '[object Function]',\n    objectType = '[object Object]';\n\nHandlebars.registerHelper = function(name, fn, inverse) {\n  if (toString.call(name) === objectType) {\n    if (inverse || fn) { throw new Handlebars.Exception('Arg not supported with multiple helpers'); }\n    Handlebars.Utils.extend(this.helpers, name);\n  } else {\n    if (inverse) { fn.not = inverse; }\n    this.helpers[name] = fn;\n  }\n};\n\nHandlebars.registerPartial = function(name, str) {\n  if (toString.call(name) === objectType) {\n    Handlebars.Utils.extend(this.partials,  name);\n  } else {\n    this.partials[name] = str;\n  }\n};\n\nHandlebars.registerHelper('helperMissing', function(arg) {\n  if(arguments.length === 2) {\n    return undefined;\n  } else {\n    throw new Error(\"Missing helper: '\" + arg + \"'\");\n  }\n});\n\nHandlebars.registerHelper('blockHelperMissing', function(context, options) {\n  var inverse = options.inverse || function() {}, fn = options.fn;\n\n  var type = toString.call(context);\n\n  if(type === functionType) { context = context.call(this); }\n\n  if(context === true) {\n    return fn(this);\n  } else if(context === false || context == null) {\n    return inverse(this);\n  } else if(type === \"[object Array]\") {\n    if(context.length > 0) {\n      return Handlebars.helpers.each(context, options);\n    } else {\n      return inverse(this);\n    }\n  } else {\n    return fn(context);\n  }\n});\n\nHandlebars.K = function() {};\n\nHandlebars.createFrame = Object.create || function(object) {\n  Handlebars.K.prototype = object;\n  var obj = new Handlebars.K();\n  Handlebars.K.prototype = null;\n  return obj;\n};\n\nHandlebars.logger = {\n  DEBUG: 0, INFO: 1, WARN: 2, ERROR: 3, level: 3,\n\n  methodMap: {0: 'debug', 1: 'info', 2: 'warn', 3: 'error'},\n\n  // can be overridden in the host environment\n  log: function(level, obj) {\n    if (Handlebars.logger.level <= level) {\n      var method = Handlebars.logger.methodMap[level];\n      if (typeof console !== 'undefined' && console[method]) {\n        console[method].call(console, obj);\n      }\n    }\n  }\n};\n\nHandlebars.log = function(level, obj) { Handlebars.logger.log(level, obj); };\n\nHandlebars.registerHelper('each', function(context, options) {\n  var fn = options.fn, inverse = options.inverse;\n  var i = 0, ret = \"\", data;\n\n  var type = toString.call(context);\n  if(type === functionType) { context = context.call(this); }\n\n  if (options.data) {\n    data = Handlebars.createFrame(options.data);\n  }\n\n  if(context && typeof context === 'object') {\n    if(context instanceof Array){\n      for(var j = context.length; i<j; i++) {\n        if (data) { data.index = i; }\n        ret = ret + fn(context[i], { data: data });\n      }\n    } else {\n      for(var key in context) {\n        if(context.hasOwnProperty(key)) {\n          if(data) { data.key = key; }\n          ret = ret + fn(context[key], {data: data});\n          i++;\n        }\n      }\n    }\n  }\n\n  if(i === 0){\n    ret = inverse(this);\n  }\n\n  return ret;\n});\n\nHandlebars.registerHelper('if', function(conditional, options) {\n  var type = toString.call(conditional);\n  if(type === functionType) { conditional = conditional.call(this); }\n\n  if(!conditional || Handlebars.Utils.isEmpty(conditional)) {\n    return options.inverse(this);\n  } else {\n    return options.fn(this);\n  }\n});\n\nHandlebars.registerHelper('unless', function(conditional, options) {\n  return Handlebars.helpers['if'].call(this, conditional, {fn: options.inverse, inverse: options.fn});\n});\n\nHandlebars.registerHelper('with', function(context, options) {\n  var type = toString.call(context);\n  if(type === functionType) { context = context.call(this); }\n\n  if (!Handlebars.Utils.isEmpty(context)) return options.fn(context);\n});\n\nHandlebars.registerHelper('log', function(context, options) {\n  var level = options.data && options.data.level != null ? parseInt(options.data.level, 10) : 1;\n  Handlebars.log(level, context);\n});\n;\n// lib/handlebars/compiler/parser.js\n/* Jison generated parser */\nvar handlebars = (function(){\nvar parser = {trace: function trace() { },\nyy: {},\nsymbols_: {\"error\":2,\"root\":3,\"program\":4,\"EOF\":5,\"simpleInverse\":6,\"statements\":7,\"statement\":8,\"openInverse\":9,\"closeBlock\":10,\"openBlock\":11,\"mustache\":12,\"partial\":13,\"CONTENT\":14,\"COMMENT\":15,\"OPEN_BLOCK\":16,\"inMustache\":17,\"CLOSE\":18,\"OPEN_INVERSE\":19,\"OPEN_ENDBLOCK\":20,\"path\":21,\"OPEN\":22,\"OPEN_UNESCAPED\":23,\"CLOSE_UNESCAPED\":24,\"OPEN_PARTIAL\":25,\"partialName\":26,\"params\":27,\"hash\":28,\"dataName\":29,\"param\":30,\"STRING\":31,\"INTEGER\":32,\"BOOLEAN\":33,\"hashSegments\":34,\"hashSegment\":35,\"ID\":36,\"EQUALS\":37,\"DATA\":38,\"pathSegments\":39,\"SEP\":40,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",5:\"EOF\",14:\"CONTENT\",15:\"COMMENT\",16:\"OPEN_BLOCK\",18:\"CLOSE\",19:\"OPEN_INVERSE\",20:\"OPEN_ENDBLOCK\",22:\"OPEN\",23:\"OPEN_UNESCAPED\",24:\"CLOSE_UNESCAPED\",25:\"OPEN_PARTIAL\",31:\"STRING\",32:\"INTEGER\",33:\"BOOLEAN\",36:\"ID\",37:\"EQUALS\",38:\"DATA\",40:\"SEP\"},\nproductions_: [0,[3,2],[4,2],[4,3],[4,2],[4,1],[4,1],[4,0],[7,1],[7,2],[8,3],[8,3],[8,1],[8,1],[8,1],[8,1],[11,3],[9,3],[10,3],[12,3],[12,3],[13,3],[13,4],[6,2],[17,3],[17,2],[17,2],[17,1],[17,1],[27,2],[27,1],[30,1],[30,1],[30,1],[30,1],[30,1],[28,1],[34,2],[34,1],[35,3],[35,3],[35,3],[35,3],[35,3],[26,1],[26,1],[26,1],[29,2],[21,1],[39,3],[39,1]],\nperformAction: function anonymous(yytext,yyleng,yylineno,yy,yystate,$$,_$) {\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 1: return $$[$0-1]; \nbreak;\ncase 2: this.$ = new yy.ProgramNode([], $$[$0]); \nbreak;\ncase 3: this.$ = new yy.ProgramNode($$[$0-2], $$[$0]); \nbreak;\ncase 4: this.$ = new yy.ProgramNode($$[$0-1], []); \nbreak;\ncase 5: this.$ = new yy.ProgramNode($$[$0]); \nbreak;\ncase 6: this.$ = new yy.ProgramNode([], []); \nbreak;\ncase 7: this.$ = new yy.ProgramNode([]); \nbreak;\ncase 8: this.$ = [$$[$0]]; \nbreak;\ncase 9: $$[$0-1].push($$[$0]); this.$ = $$[$0-1]; \nbreak;\ncase 10: this.$ = new yy.BlockNode($$[$0-2], $$[$0-1].inverse, $$[$0-1], $$[$0]); \nbreak;\ncase 11: this.$ = new yy.BlockNode($$[$0-2], $$[$0-1], $$[$0-1].inverse, $$[$0]); \nbreak;\ncase 12: this.$ = $$[$0]; \nbreak;\ncase 13: this.$ = $$[$0]; \nbreak;\ncase 14: this.$ = new yy.ContentNode($$[$0]); \nbreak;\ncase 15: this.$ = new yy.CommentNode($$[$0]); \nbreak;\ncase 16: this.$ = new yy.MustacheNode($$[$0-1][0], $$[$0-1][1]); \nbreak;\ncase 17: this.$ = new yy.MustacheNode($$[$0-1][0], $$[$0-1][1]); \nbreak;\ncase 18: this.$ = $$[$0-1]; \nbreak;\ncase 19:\n    // Parsing out the '&' escape token at this level saves ~500 bytes after min due to the removal of one parser node.\n    this.$ = new yy.MustacheNode($$[$0-1][0], $$[$0-1][1], $$[$0-2][2] === '&');\n  \nbreak;\ncase 20: this.$ = new yy.MustacheNode($$[$0-1][0], $$[$0-1][1], true); \nbreak;\ncase 21: this.$ = new yy.PartialNode($$[$0-1]); \nbreak;\ncase 22: this.$ = new yy.PartialNode($$[$0-2], $$[$0-1]); \nbreak;\ncase 23: \nbreak;\ncase 24: this.$ = [[$$[$0-2]].concat($$[$0-1]), $$[$0]]; \nbreak;\ncase 25: this.$ = [[$$[$0-1]].concat($$[$0]), null]; \nbreak;\ncase 26: this.$ = [[$$[$0-1]], $$[$0]]; \nbreak;\ncase 27: this.$ = [[$$[$0]], null]; \nbreak;\ncase 28: this.$ = [[$$[$0]], null]; \nbreak;\ncase 29: $$[$0-1].push($$[$0]); this.$ = $$[$0-1]; \nbreak;\ncase 30: this.$ = [$$[$0]]; \nbreak;\ncase 31: this.$ = $$[$0]; \nbreak;\ncase 32: this.$ = new yy.StringNode($$[$0]); \nbreak;\ncase 33: this.$ = new yy.IntegerNode($$[$0]); \nbreak;\ncase 34: this.$ = new yy.BooleanNode($$[$0]); \nbreak;\ncase 35: this.$ = $$[$0]; \nbreak;\ncase 36: this.$ = new yy.HashNode($$[$0]); \nbreak;\ncase 37: $$[$0-1].push($$[$0]); this.$ = $$[$0-1]; \nbreak;\ncase 38: this.$ = [$$[$0]]; \nbreak;\ncase 39: this.$ = [$$[$0-2], $$[$0]]; \nbreak;\ncase 40: this.$ = [$$[$0-2], new yy.StringNode($$[$0])]; \nbreak;\ncase 41: this.$ = [$$[$0-2], new yy.IntegerNode($$[$0])]; \nbreak;\ncase 42: this.$ = [$$[$0-2], new yy.BooleanNode($$[$0])]; \nbreak;\ncase 43: this.$ = [$$[$0-2], $$[$0]]; \nbreak;\ncase 44: this.$ = new yy.PartialNameNode($$[$0]); \nbreak;\ncase 45: this.$ = new yy.PartialNameNode(new yy.StringNode($$[$0])); \nbreak;\ncase 46: this.$ = new yy.PartialNameNode(new yy.IntegerNode($$[$0])); \nbreak;\ncase 47: this.$ = new yy.DataNode($$[$0]); \nbreak;\ncase 48: this.$ = new yy.IdNode($$[$0]); \nbreak;\ncase 49: $$[$0-2].push({part: $$[$0], separator: $$[$0-1]}); this.$ = $$[$0-2]; \nbreak;\ncase 50: this.$ = [{part: $$[$0]}]; \nbreak;\n}\n},\ntable: [{3:1,4:2,5:[2,7],6:3,7:4,8:6,9:7,11:8,12:9,13:10,14:[1,11],15:[1,12],16:[1,13],19:[1,5],22:[1,14],23:[1,15],25:[1,16]},{1:[3]},{5:[1,17]},{5:[2,6],7:18,8:6,9:7,11:8,12:9,13:10,14:[1,11],15:[1,12],16:[1,13],19:[1,19],20:[2,6],22:[1,14],23:[1,15],25:[1,16]},{5:[2,5],6:20,8:21,9:7,11:8,12:9,13:10,14:[1,11],15:[1,12],16:[1,13],19:[1,5],20:[2,5],22:[1,14],23:[1,15],25:[1,16]},{17:23,18:[1,22],21:24,29:25,36:[1,28],38:[1,27],39:26},{5:[2,8],14:[2,8],15:[2,8],16:[2,8],19:[2,8],20:[2,8],22:[2,8],23:[2,8],25:[2,8]},{4:29,6:3,7:4,8:6,9:7,11:8,12:9,13:10,14:[1,11],15:[1,12],16:[1,13],19:[1,5],20:[2,7],22:[1,14],23:[1,15],25:[1,16]},{4:30,6:3,7:4,8:6,9:7,11:8,12:9,13:10,14:[1,11],15:[1,12],16:[1,13],19:[1,5],20:[2,7],22:[1,14],23:[1,15],25:[1,16]},{5:[2,12],14:[2,12],15:[2,12],16:[2,12],19:[2,12],20:[2,12],22:[2,12],23:[2,12],25:[2,12]},{5:[2,13],14:[2,13],15:[2,13],16:[2,13],19:[2,13],20:[2,13],22:[2,13],23:[2,13],25:[2,13]},{5:[2,14],14:[2,14],15:[2,14],16:[2,14],19:[2,14],20:[2,14],22:[2,14],23:[2,14],25:[2,14]},{5:[2,15],14:[2,15],15:[2,15],16:[2,15],19:[2,15],20:[2,15],22:[2,15],23:[2,15],25:[2,15]},{17:31,21:24,29:25,36:[1,28],38:[1,27],39:26},{17:32,21:24,29:25,36:[1,28],38:[1,27],39:26},{17:33,21:24,29:25,36:[1,28],38:[1,27],39:26},{21:35,26:34,31:[1,36],32:[1,37],36:[1,28],39:26},{1:[2,1]},{5:[2,2],8:21,9:7,11:8,12:9,13:10,14:[1,11],15:[1,12],16:[1,13],19:[1,19],20:[2,2],22:[1,14],23:[1,15],25:[1,16]},{17:23,21:24,29:25,36:[1,28],38:[1,27],39:26},{5:[2,4],7:38,8:6,9:7,11:8,12:9,13:10,14:[1,11],15:[1,12],16:[1,13],19:[1,19],20:[2,4],22:[1,14],23:[1,15],25:[1,16]},{5:[2,9],14:[2,9],15:[2,9],16:[2,9],19:[2,9],20:[2,9],22:[2,9],23:[2,9],25:[2,9]},{5:[2,23],14:[2,23],15:[2,23],16:[2,23],19:[2,23],20:[2,23],22:[2,23],23:[2,23],25:[2,23]},{18:[1,39]},{18:[2,27],21:44,24:[2,27],27:40,28:41,29:48,30:42,31:[1,45],32:[1,46],33:[1,47],34:43,35:49,36:[1,50],38:[1,27],39:26},{18:[2,28],24:[2,28]},{18:[2,48],24:[2,48],31:[2,48],32:[2,48],33:[2,48],36:[2,48],38:[2,48],40:[1,51]},{21:52,36:[1,28],39:26},{18:[2,50],24:[2,50],31:[2,50],32:[2,50],33:[2,50],36:[2,50],38:[2,50],40:[2,50]},{10:53,20:[1,54]},{10:55,20:[1,54]},{18:[1,56]},{18:[1,57]},{24:[1,58]},{18:[1,59],21:60,36:[1,28],39:26},{18:[2,44],36:[2,44]},{18:[2,45],36:[2,45]},{18:[2,46],36:[2,46]},{5:[2,3],8:21,9:7,11:8,12:9,13:10,14:[1,11],15:[1,12],16:[1,13],19:[1,19],20:[2,3],22:[1,14],23:[1,15],25:[1,16]},{14:[2,17],15:[2,17],16:[2,17],19:[2,17],20:[2,17],22:[2,17],23:[2,17],25:[2,17]},{18:[2,25],21:44,24:[2,25],28:61,29:48,30:62,31:[1,45],32:[1,46],33:[1,47],34:43,35:49,36:[1,50],38:[1,27],39:26},{18:[2,26],24:[2,26]},{18:[2,30],24:[2,30],31:[2,30],32:[2,30],33:[2,30],36:[2,30],38:[2,30]},{18:[2,36],24:[2,36],35:63,36:[1,64]},{18:[2,31],24:[2,31],31:[2,31],32:[2,31],33:[2,31],36:[2,31],38:[2,31]},{18:[2,32],24:[2,32],31:[2,32],32:[2,32],33:[2,32],36:[2,32],38:[2,32]},{18:[2,33],24:[2,33],31:[2,33],32:[2,33],33:[2,33],36:[2,33],38:[2,33]},{18:[2,34],24:[2,34],31:[2,34],32:[2,34],33:[2,34],36:[2,34],38:[2,34]},{18:[2,35],24:[2,35],31:[2,35],32:[2,35],33:[2,35],36:[2,35],38:[2,35]},{18:[2,38],24:[2,38],36:[2,38]},{18:[2,50],24:[2,50],31:[2,50],32:[2,50],33:[2,50],36:[2,50],37:[1,65],38:[2,50],40:[2,50]},{36:[1,66]},{18:[2,47],24:[2,47],31:[2,47],32:[2,47],33:[2,47],36:[2,47],38:[2,47]},{5:[2,10],14:[2,10],15:[2,10],16:[2,10],19:[2,10],20:[2,10],22:[2,10],23:[2,10],25:[2,10]},{21:67,36:[1,28],39:26},{5:[2,11],14:[2,11],15:[2,11],16:[2,11],19:[2,11],20:[2,11],22:[2,11],23:[2,11],25:[2,11]},{14:[2,16],15:[2,16],16:[2,16],19:[2,16],20:[2,16],22:[2,16],23:[2,16],25:[2,16]},{5:[2,19],14:[2,19],15:[2,19],16:[2,19],19:[2,19],20:[2,19],22:[2,19],23:[2,19],25:[2,19]},{5:[2,20],14:[2,20],15:[2,20],16:[2,20],19:[2,20],20:[2,20],22:[2,20],23:[2,20],25:[2,20]},{5:[2,21],14:[2,21],15:[2,21],16:[2,21],19:[2,21],20:[2,21],22:[2,21],23:[2,21],25:[2,21]},{18:[1,68]},{18:[2,24],24:[2,24]},{18:[2,29],24:[2,29],31:[2,29],32:[2,29],33:[2,29],36:[2,29],38:[2,29]},{18:[2,37],24:[2,37],36:[2,37]},{37:[1,65]},{21:69,29:73,31:[1,70],32:[1,71],33:[1,72],36:[1,28],38:[1,27],39:26},{18:[2,49],24:[2,49],31:[2,49],32:[2,49],33:[2,49],36:[2,49],38:[2,49],40:[2,49]},{18:[1,74]},{5:[2,22],14:[2,22],15:[2,22],16:[2,22],19:[2,22],20:[2,22],22:[2,22],23:[2,22],25:[2,22]},{18:[2,39],24:[2,39],36:[2,39]},{18:[2,40],24:[2,40],36:[2,40]},{18:[2,41],24:[2,41],36:[2,41]},{18:[2,42],24:[2,42],36:[2,42]},{18:[2,43],24:[2,43],36:[2,43]},{5:[2,18],14:[2,18],15:[2,18],16:[2,18],19:[2,18],20:[2,18],22:[2,18],23:[2,18],25:[2,18]}],\ndefaultActions: {17:[2,1]},\nparseError: function parseError(str, hash) {\n    throw new Error(str);\n},\nparse: function parse(input) {\n    var self = this, stack = [0], vstack = [null], lstack = [], table = this.table, yytext = \"\", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n    this.lexer.setInput(input);\n    this.lexer.yy = this.yy;\n    this.yy.lexer = this.lexer;\n    this.yy.parser = this;\n    if (typeof this.lexer.yylloc == \"undefined\")\n        this.lexer.yylloc = {};\n    var yyloc = this.lexer.yylloc;\n    lstack.push(yyloc);\n    var ranges = this.lexer.options && this.lexer.options.ranges;\n    if (typeof this.yy.parseError === \"function\")\n        this.parseError = this.yy.parseError;\n    function popStack(n) {\n        stack.length = stack.length - 2 * n;\n        vstack.length = vstack.length - n;\n        lstack.length = lstack.length - n;\n    }\n    function lex() {\n        var token;\n        token = self.lexer.lex() || 1;\n        if (typeof token !== \"number\") {\n            token = self.symbols_[token] || token;\n        }\n        return token;\n    }\n    var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n    while (true) {\n        state = stack[stack.length - 1];\n        if (this.defaultActions[state]) {\n            action = this.defaultActions[state];\n        } else {\n            if (symbol === null || typeof symbol == \"undefined\") {\n                symbol = lex();\n            }\n            action = table[state] && table[state][symbol];\n        }\n        if (typeof action === \"undefined\" || !action.length || !action[0]) {\n            var errStr = \"\";\n            if (!recovering) {\n                expected = [];\n                for (p in table[state])\n                    if (this.terminals_[p] && p > 2) {\n                        expected.push(\"'\" + this.terminals_[p] + \"'\");\n                    }\n                if (this.lexer.showPosition) {\n                    errStr = \"Parse error on line \" + (yylineno + 1) + \":\\n\" + this.lexer.showPosition() + \"\\nExpecting \" + expected.join(\", \") + \", got '\" + (this.terminals_[symbol] || symbol) + \"'\";\n                } else {\n                    errStr = \"Parse error on line \" + (yylineno + 1) + \": Unexpected \" + (symbol == 1?\"end of input\":\"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n                }\n                this.parseError(errStr, {text: this.lexer.match, token: this.terminals_[symbol] || symbol, line: this.lexer.yylineno, loc: yyloc, expected: expected});\n            }\n        }\n        if (action[0] instanceof Array && action.length > 1) {\n            throw new Error(\"Parse Error: multiple actions possible at state: \" + state + \", token: \" + symbol);\n        }\n        switch (action[0]) {\n        case 1:\n            stack.push(symbol);\n            vstack.push(this.lexer.yytext);\n            lstack.push(this.lexer.yylloc);\n            stack.push(action[1]);\n            symbol = null;\n            if (!preErrorSymbol) {\n                yyleng = this.lexer.yyleng;\n                yytext = this.lexer.yytext;\n                yylineno = this.lexer.yylineno;\n                yyloc = this.lexer.yylloc;\n                if (recovering > 0)\n                    recovering--;\n            } else {\n                symbol = preErrorSymbol;\n                preErrorSymbol = null;\n            }\n            break;\n        case 2:\n            len = this.productions_[action[1]][1];\n            yyval.$ = vstack[vstack.length - len];\n            yyval._$ = {first_line: lstack[lstack.length - (len || 1)].first_line, last_line: lstack[lstack.length - 1].last_line, first_column: lstack[lstack.length - (len || 1)].first_column, last_column: lstack[lstack.length - 1].last_column};\n            if (ranges) {\n                yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]];\n            }\n            r = this.performAction.call(yyval, yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack);\n            if (typeof r !== \"undefined\") {\n                return r;\n            }\n            if (len) {\n                stack = stack.slice(0, -1 * len * 2);\n                vstack = vstack.slice(0, -1 * len);\n                lstack = lstack.slice(0, -1 * len);\n            }\n            stack.push(this.productions_[action[1]][0]);\n            vstack.push(yyval.$);\n            lstack.push(yyval._$);\n            newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n            stack.push(newState);\n            break;\n        case 3:\n            return true;\n        }\n    }\n    return true;\n}\n};\n/* Jison generated lexer */\nvar lexer = (function(){\nvar lexer = ({EOF:1,\nparseError:function parseError(str, hash) {\n        if (this.yy.parser) {\n            this.yy.parser.parseError(str, hash);\n        } else {\n            throw new Error(str);\n        }\n    },\nsetInput:function (input) {\n        this._input = input;\n        this._more = this._less = this.done = false;\n        this.yylineno = this.yyleng = 0;\n        this.yytext = this.matched = this.match = '';\n        this.conditionStack = ['INITIAL'];\n        this.yylloc = {first_line:1,first_column:0,last_line:1,last_column:0};\n        if (this.options.ranges) this.yylloc.range = [0,0];\n        this.offset = 0;\n        return this;\n    },\ninput:function () {\n        var ch = this._input[0];\n        this.yytext += ch;\n        this.yyleng++;\n        this.offset++;\n        this.match += ch;\n        this.matched += ch;\n        var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n        if (lines) {\n            this.yylineno++;\n            this.yylloc.last_line++;\n        } else {\n            this.yylloc.last_column++;\n        }\n        if (this.options.ranges) this.yylloc.range[1]++;\n\n        this._input = this._input.slice(1);\n        return ch;\n    },\nunput:function (ch) {\n        var len = ch.length;\n        var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n        this._input = ch + this._input;\n        this.yytext = this.yytext.substr(0, this.yytext.length-len-1);\n        //this.yyleng -= len;\n        this.offset -= len;\n        var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n        this.match = this.match.substr(0, this.match.length-1);\n        this.matched = this.matched.substr(0, this.matched.length-1);\n\n        if (lines.length-1) this.yylineno -= lines.length-1;\n        var r = this.yylloc.range;\n\n        this.yylloc = {first_line: this.yylloc.first_line,\n          last_line: this.yylineno+1,\n          first_column: this.yylloc.first_column,\n          last_column: lines ?\n              (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length:\n              this.yylloc.first_column - len\n          };\n\n        if (this.options.ranges) {\n            this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n        }\n        return this;\n    },\nmore:function () {\n        this._more = true;\n        return this;\n    },\nless:function (n) {\n        this.unput(this.match.slice(n));\n    },\npastInput:function () {\n        var past = this.matched.substr(0, this.matched.length - this.match.length);\n        return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n    },\nupcomingInput:function () {\n        var next = this.match;\n        if (next.length < 20) {\n            next += this._input.substr(0, 20-next.length);\n        }\n        return (next.substr(0,20)+(next.length > 20 ? '...':'')).replace(/\\n/g, \"\");\n    },\nshowPosition:function () {\n        var pre = this.pastInput();\n        var c = new Array(pre.length + 1).join(\"-\");\n        return pre + this.upcomingInput() + \"\\n\" + c+\"^\";\n    },\nnext:function () {\n        if (this.done) {\n            return this.EOF;\n        }\n        if (!this._input) this.done = true;\n\n        var token,\n            match,\n            tempMatch,\n            index,\n            col,\n            lines;\n        if (!this._more) {\n            this.yytext = '';\n            this.match = '';\n        }\n        var rules = this._currentRules();\n        for (var i=0;i < rules.length; i++) {\n            tempMatch = this._input.match(this.rules[rules[i]]);\n            if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n                match = tempMatch;\n                index = i;\n                if (!this.options.flex) break;\n            }\n        }\n        if (match) {\n            lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n            if (lines) this.yylineno += lines.length;\n            this.yylloc = {first_line: this.yylloc.last_line,\n                           last_line: this.yylineno+1,\n                           first_column: this.yylloc.last_column,\n                           last_column: lines ? lines[lines.length-1].length-lines[lines.length-1].match(/\\r?\\n?/)[0].length : this.yylloc.last_column + match[0].length};\n            this.yytext += match[0];\n            this.match += match[0];\n            this.matches = match;\n            this.yyleng = this.yytext.length;\n            if (this.options.ranges) {\n                this.yylloc.range = [this.offset, this.offset += this.yyleng];\n            }\n            this._more = false;\n            this._input = this._input.slice(match[0].length);\n            this.matched += match[0];\n            token = this.performAction.call(this, this.yy, this, rules[index],this.conditionStack[this.conditionStack.length-1]);\n            if (this.done && this._input) this.done = false;\n            if (token) return token;\n            else return;\n        }\n        if (this._input === \"\") {\n            return this.EOF;\n        } else {\n            return this.parseError('Lexical error on line '+(this.yylineno+1)+'. Unrecognized text.\\n'+this.showPosition(),\n                    {text: \"\", token: null, line: this.yylineno});\n        }\n    },\nlex:function lex() {\n        var r = this.next();\n        if (typeof r !== 'undefined') {\n            return r;\n        } else {\n            return this.lex();\n        }\n    },\nbegin:function begin(condition) {\n        this.conditionStack.push(condition);\n    },\npopState:function popState() {\n        return this.conditionStack.pop();\n    },\n_currentRules:function _currentRules() {\n        return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules;\n    },\ntopState:function () {\n        return this.conditionStack[this.conditionStack.length-2];\n    },\npushState:function begin(condition) {\n        this.begin(condition);\n    }});\nlexer.options = {};\nlexer.performAction = function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\n\nvar YYSTATE=YY_START\nswitch($avoiding_name_collisions) {\ncase 0: yy_.yytext = \"\\\\\"; return 14; \nbreak;\ncase 1:\n                                   if(yy_.yytext.slice(-1) !== \"\\\\\") this.begin(\"mu\");\n                                   if(yy_.yytext.slice(-1) === \"\\\\\") yy_.yytext = yy_.yytext.substr(0,yy_.yyleng-1), this.begin(\"emu\");\n                                   if(yy_.yytext) return 14;\n                                 \nbreak;\ncase 2: return 14; \nbreak;\ncase 3:\n                                   if(yy_.yytext.slice(-1) !== \"\\\\\") this.popState();\n                                   if(yy_.yytext.slice(-1) === \"\\\\\") yy_.yytext = yy_.yytext.substr(0,yy_.yyleng-1);\n                                   return 14;\n                                 \nbreak;\ncase 4: yy_.yytext = yy_.yytext.substr(0, yy_.yyleng-4); this.popState(); return 15; \nbreak;\ncase 5: return 25; \nbreak;\ncase 6: return 16; \nbreak;\ncase 7: return 20; \nbreak;\ncase 8: return 19; \nbreak;\ncase 9: return 19; \nbreak;\ncase 10: return 23; \nbreak;\ncase 11: return 22; \nbreak;\ncase 12: this.popState(); this.begin('com'); \nbreak;\ncase 13: yy_.yytext = yy_.yytext.substr(3,yy_.yyleng-5); this.popState(); return 15; \nbreak;\ncase 14: return 22; \nbreak;\ncase 15: return 37; \nbreak;\ncase 16: return 36; \nbreak;\ncase 17: return 36; \nbreak;\ncase 18: return 40; \nbreak;\ncase 19: /*ignore whitespace*/ \nbreak;\ncase 20: this.popState(); return 24; \nbreak;\ncase 21: this.popState(); return 18; \nbreak;\ncase 22: yy_.yytext = yy_.yytext.substr(1,yy_.yyleng-2).replace(/\\\\\"/g,'\"'); return 31; \nbreak;\ncase 23: yy_.yytext = yy_.yytext.substr(1,yy_.yyleng-2).replace(/\\\\'/g,\"'\"); return 31; \nbreak;\ncase 24: return 38; \nbreak;\ncase 25: return 33; \nbreak;\ncase 26: return 33; \nbreak;\ncase 27: return 32; \nbreak;\ncase 28: return 36; \nbreak;\ncase 29: yy_.yytext = yy_.yytext.substr(1, yy_.yyleng-2); return 36; \nbreak;\ncase 30: return 'INVALID'; \nbreak;\ncase 31: return 5; \nbreak;\n}\n};\nlexer.rules = [/^(?:\\\\\\\\(?=(\\{\\{)))/,/^(?:[^\\x00]*?(?=(\\{\\{)))/,/^(?:[^\\x00]+)/,/^(?:[^\\x00]{2,}?(?=(\\{\\{|$)))/,/^(?:[\\s\\S]*?--\\}\\})/,/^(?:\\{\\{>)/,/^(?:\\{\\{#)/,/^(?:\\{\\{\\/)/,/^(?:\\{\\{\\^)/,/^(?:\\{\\{\\s*else\\b)/,/^(?:\\{\\{\\{)/,/^(?:\\{\\{&)/,/^(?:\\{\\{!--)/,/^(?:\\{\\{![\\s\\S]*?\\}\\})/,/^(?:\\{\\{)/,/^(?:=)/,/^(?:\\.(?=[}\\/ ]))/,/^(?:\\.\\.)/,/^(?:[\\/.])/,/^(?:\\s+)/,/^(?:\\}\\}\\})/,/^(?:\\}\\})/,/^(?:\"(\\\\[\"]|[^\"])*\")/,/^(?:'(\\\\[']|[^'])*')/,/^(?:@)/,/^(?:true(?=[}\\s]))/,/^(?:false(?=[}\\s]))/,/^(?:-?[0-9]+(?=[}\\s]))/,/^(?:[^\\s!\"#%-,\\.\\/;->@\\[-\\^`\\{-~]+(?=[=}\\s\\/.]))/,/^(?:\\[[^\\]]*\\])/,/^(?:.)/,/^(?:$)/];\nlexer.conditions = {\"mu\":{\"rules\":[5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],\"inclusive\":false},\"emu\":{\"rules\":[3],\"inclusive\":false},\"com\":{\"rules\":[4],\"inclusive\":false},\"INITIAL\":{\"rules\":[0,1,2,31],\"inclusive\":true}};\nreturn lexer;})()\nparser.lexer = lexer;\nfunction Parser () { this.yy = {}; }Parser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})();;\n// lib/handlebars/compiler/base.js\n\nHandlebars.Parser = handlebars;\n\nHandlebars.parse = function(input) {\n\n  // Just return if an already-compile AST was passed in.\n  if(input.constructor === Handlebars.AST.ProgramNode) { return input; }\n\n  Handlebars.Parser.yy = Handlebars.AST;\n  return Handlebars.Parser.parse(input);\n};\n;\n// lib/handlebars/compiler/ast.js\nHandlebars.AST = {};\n\nHandlebars.AST.ProgramNode = function(statements, inverse) {\n  this.type = \"program\";\n  this.statements = statements;\n  if(inverse) { this.inverse = new Handlebars.AST.ProgramNode(inverse); }\n};\n\nHandlebars.AST.MustacheNode = function(rawParams, hash, unescaped) {\n  this.type = \"mustache\";\n  this.escaped = !unescaped;\n  this.hash = hash;\n\n  var id = this.id = rawParams[0];\n  var params = this.params = rawParams.slice(1);\n\n  // a mustache is an eligible helper if:\n  // * its id is simple (a single part, not `this` or `..`)\n  var eligibleHelper = this.eligibleHelper = id.isSimple;\n\n  // a mustache is definitely a helper if:\n  // * it is an eligible helper, and\n  // * it has at least one parameter or hash segment\n  this.isHelper = eligibleHelper && (params.length || hash);\n\n  // if a mustache is an eligible helper but not a definite\n  // helper, it is ambiguous, and will be resolved in a later\n  // pass or at runtime.\n};\n\nHandlebars.AST.PartialNode = function(partialName, context) {\n  this.type         = \"partial\";\n  this.partialName  = partialName;\n  this.context      = context;\n};\n\nHandlebars.AST.BlockNode = function(mustache, program, inverse, close) {\n  var verifyMatch = function(open, close) {\n    if(open.original !== close.original) {\n      throw new Handlebars.Exception(open.original + \" doesn't match \" + close.original);\n    }\n  };\n\n  verifyMatch(mustache.id, close);\n  this.type = \"block\";\n  this.mustache = mustache;\n  this.program  = program;\n  this.inverse  = inverse;\n\n  if (this.inverse && !this.program) {\n    this.isInverse = true;\n  }\n};\n\nHandlebars.AST.ContentNode = function(string) {\n  this.type = \"content\";\n  this.string = string;\n};\n\nHandlebars.AST.HashNode = function(pairs) {\n  this.type = \"hash\";\n  this.pairs = pairs;\n};\n\nHandlebars.AST.IdNode = function(parts) {\n  this.type = \"ID\";\n\n  var original = \"\",\n      dig = [],\n      depth = 0;\n\n  for(var i=0,l=parts.length; i<l; i++) {\n    var part = parts[i].part;\n    original += (parts[i].separator || '') + part;\n\n    if (part === \"..\" || part === \".\" || part === \"this\") {\n      if (dig.length > 0) { throw new Handlebars.Exception(\"Invalid path: \" + original); }\n      else if (part === \"..\") { depth++; }\n      else { this.isScoped = true; }\n    }\n    else { dig.push(part); }\n  }\n\n  this.original = original;\n  this.parts    = dig;\n  this.string   = dig.join('.');\n  this.depth    = depth;\n\n  // an ID is simple if it only has one part, and that part is not\n  // `..` or `this`.\n  this.isSimple = parts.length === 1 && !this.isScoped && depth === 0;\n\n  this.stringModeValue = this.string;\n};\n\nHandlebars.AST.PartialNameNode = function(name) {\n  this.type = \"PARTIAL_NAME\";\n  this.name = name.original;\n};\n\nHandlebars.AST.DataNode = function(id) {\n  this.type = \"DATA\";\n  this.id = id;\n};\n\nHandlebars.AST.StringNode = function(string) {\n  this.type = \"STRING\";\n  this.original =\n    this.string =\n    this.stringModeValue = string;\n};\n\nHandlebars.AST.IntegerNode = function(integer) {\n  this.type = \"INTEGER\";\n  this.original =\n    this.integer = integer;\n  this.stringModeValue = Number(integer);\n};\n\nHandlebars.AST.BooleanNode = function(bool) {\n  this.type = \"BOOLEAN\";\n  this.bool = bool;\n  this.stringModeValue = bool === \"true\";\n};\n\nHandlebars.AST.CommentNode = function(comment) {\n  this.type = \"comment\";\n  this.comment = comment;\n};\n;\n// lib/handlebars/utils.js\n\nvar errorProps = ['description', 'fileName', 'lineNumber', 'message', 'name', 'number', 'stack'];\n\nHandlebars.Exception = function(message) {\n  var tmp = Error.prototype.constructor.apply(this, arguments);\n\n  // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work.\n  for (var idx = 0; idx < errorProps.length; idx++) {\n    this[errorProps[idx]] = tmp[errorProps[idx]];\n  }\n};\nHandlebars.Exception.prototype = new Error();\n\n// Build out our basic SafeString type\nHandlebars.SafeString = function(string) {\n  this.string = string;\n};\nHandlebars.SafeString.prototype.toString = function() {\n  return this.string.toString();\n};\n\nvar escape = {\n  \"&\": \"&amp;\",\n  \"<\": \"&lt;\",\n  \">\": \"&gt;\",\n  '\"': \"&quot;\",\n  \"'\": \"&#x27;\",\n  \"`\": \"&#x60;\"\n};\n\nvar badChars = /[&<>\"'`]/g;\nvar possible = /[&<>\"'`]/;\n\nvar escapeChar = function(chr) {\n  return escape[chr] || \"&amp;\";\n};\n\nHandlebars.Utils = {\n  extend: function(obj, value) {\n    for(var key in value) {\n      if(value.hasOwnProperty(key)) {\n        obj[key] = value[key];\n      }\n    }\n  },\n\n  escapeExpression: function(string) {\n    // don't escape SafeStrings, since they're already safe\n    if (string instanceof Handlebars.SafeString) {\n      return string.toString();\n    } else if (string == null || string === false) {\n      return \"\";\n    }\n\n    // Force a string conversion as this will be done by the append regardless and\n    // the regex test will do this transparently behind the scenes, causing issues if\n    // an object's to string has escaped characters in it.\n    string = string.toString();\n\n    if(!possible.test(string)) { return string; }\n    return string.replace(badChars, escapeChar);\n  },\n\n  isEmpty: function(value) {\n    if (!value && value !== 0) {\n      return true;\n    } else if(toString.call(value) === \"[object Array]\" && value.length === 0) {\n      return true;\n    } else {\n      return false;\n    }\n  }\n};\n;\n// lib/handlebars/compiler/compiler.js\n\n/*jshint eqnull:true*/\nvar Compiler = Handlebars.Compiler = function() {};\nvar JavaScriptCompiler = Handlebars.JavaScriptCompiler = function() {};\n\n// the foundHelper register will disambiguate helper lookup from finding a\n// function in a context. This is necessary for mustache compatibility, which\n// requires that context functions in blocks are evaluated by blockHelperMissing,\n// and then proceed as if the resulting value was provided to blockHelperMissing.\n\nCompiler.prototype = {\n  compiler: Compiler,\n\n  disassemble: function() {\n    var opcodes = this.opcodes, opcode, out = [], params, param;\n\n    for (var i=0, l=opcodes.length; i<l; i++) {\n      opcode = opcodes[i];\n\n      if (opcode.opcode === 'DECLARE') {\n        out.push(\"DECLARE \" + opcode.name + \"=\" + opcode.value);\n      } else {\n        params = [];\n        for (var j=0; j<opcode.args.length; j++) {\n          param = opcode.args[j];\n          if (typeof param === \"string\") {\n            param = \"\\\"\" + param.replace(\"\\n\", \"\\\\n\") + \"\\\"\";\n          }\n          params.push(param);\n        }\n        out.push(opcode.opcode + \" \" + params.join(\" \"));\n      }\n    }\n\n    return out.join(\"\\n\");\n  },\n  equals: function(other) {\n    var len = this.opcodes.length;\n    if (other.opcodes.length !== len) {\n      return false;\n    }\n\n    for (var i = 0; i < len; i++) {\n      var opcode = this.opcodes[i],\n          otherOpcode = other.opcodes[i];\n      if (opcode.opcode !== otherOpcode.opcode || opcode.args.length !== otherOpcode.args.length) {\n        return false;\n      }\n      for (var j = 0; j < opcode.args.length; j++) {\n        if (opcode.args[j] !== otherOpcode.args[j]) {\n          return false;\n        }\n      }\n    }\n\n    len = this.children.length;\n    if (other.children.length !== len) {\n      return false;\n    }\n    for (i = 0; i < len; i++) {\n      if (!this.children[i].equals(other.children[i])) {\n        return false;\n      }\n    }\n\n    return true;\n  },\n\n  guid: 0,\n\n  compile: function(program, options) {\n    this.children = [];\n    this.depths = {list: []};\n    this.options = options;\n\n    // These changes will propagate to the other compiler components\n    var knownHelpers = this.options.knownHelpers;\n    this.options.knownHelpers = {\n      'helperMissing': true,\n      'blockHelperMissing': true,\n      'each': true,\n      'if': true,\n      'unless': true,\n      'with': true,\n      'log': true\n    };\n    if (knownHelpers) {\n      for (var name in knownHelpers) {\n        this.options.knownHelpers[name] = knownHelpers[name];\n      }\n    }\n\n    return this.program(program);\n  },\n\n  accept: function(node) {\n    return this[node.type](node);\n  },\n\n  program: function(program) {\n    var statements = program.statements, statement;\n    this.opcodes = [];\n\n    for(var i=0, l=statements.length; i<l; i++) {\n      statement = statements[i];\n      this[statement.type](statement);\n    }\n    this.isSimple = l === 1;\n\n    this.depths.list = this.depths.list.sort(function(a, b) {\n      return a - b;\n    });\n\n    return this;\n  },\n\n  compileProgram: function(program) {\n    var result = new this.compiler().compile(program, this.options);\n    var guid = this.guid++, depth;\n\n    this.usePartial = this.usePartial || result.usePartial;\n\n    this.children[guid] = result;\n\n    for(var i=0, l=result.depths.list.length; i<l; i++) {\n      depth = result.depths.list[i];\n\n      if(depth < 2) { continue; }\n      else { this.addDepth(depth - 1); }\n    }\n\n    return guid;\n  },\n\n  block: function(block) {\n    var mustache = block.mustache,\n        program = block.program,\n        inverse = block.inverse;\n\n    if (program) {\n      program = this.compileProgram(program);\n    }\n\n    if (inverse) {\n      inverse = this.compileProgram(inverse);\n    }\n\n    var type = this.classifyMustache(mustache);\n\n    if (type === \"helper\") {\n      this.helperMustache(mustache, program, inverse);\n    } else if (type === \"simple\") {\n      this.simpleMustache(mustache);\n\n      // now that the simple mustache is resolved, we need to\n      // evaluate it by executing `blockHelperMissing`\n      this.opcode('pushProgram', program);\n      this.opcode('pushProgram', inverse);\n      this.opcode('emptyHash');\n      this.opcode('blockValue');\n    } else {\n      this.ambiguousMustache(mustache, program, inverse);\n\n      // now that the simple mustache is resolved, we need to\n      // evaluate it by executing `blockHelperMissing`\n      this.opcode('pushProgram', program);\n      this.opcode('pushProgram', inverse);\n      this.opcode('emptyHash');\n      this.opcode('ambiguousBlockValue');\n    }\n\n    this.opcode('append');\n  },\n\n  hash: function(hash) {\n    var pairs = hash.pairs, pair, val;\n\n    this.opcode('pushHash');\n\n    for(var i=0, l=pairs.length; i<l; i++) {\n      pair = pairs[i];\n      val  = pair[1];\n\n      if (this.options.stringParams) {\n        if(val.depth) {\n          this.addDepth(val.depth);\n        }\n        this.opcode('getContext', val.depth || 0);\n        this.opcode('pushStringParam', val.stringModeValue, val.type);\n      } else {\n        this.accept(val);\n      }\n\n      this.opcode('assignToHash', pair[0]);\n    }\n    this.opcode('popHash');\n  },\n\n  partial: function(partial) {\n    var partialName = partial.partialName;\n    this.usePartial = true;\n\n    if(partial.context) {\n      this.ID(partial.context);\n    } else {\n      this.opcode('push', 'depth0');\n    }\n\n    this.opcode('invokePartial', partialName.name);\n    this.opcode('append');\n  },\n\n  content: function(content) {\n    this.opcode('appendContent', content.string);\n  },\n\n  mustache: function(mustache) {\n    var options = this.options;\n    var type = this.classifyMustache(mustache);\n\n    if (type === \"simple\") {\n      this.simpleMustache(mustache);\n    } else if (type === \"helper\") {\n      this.helperMustache(mustache);\n    } else {\n      this.ambiguousMustache(mustache);\n    }\n\n    if(mustache.escaped && !options.noEscape) {\n      this.opcode('appendEscaped');\n    } else {\n      this.opcode('append');\n    }\n  },\n\n  ambiguousMustache: function(mustache, program, inverse) {\n    var id = mustache.id,\n        name = id.parts[0],\n        isBlock = program != null || inverse != null;\n\n    this.opcode('getContext', id.depth);\n\n    this.opcode('pushProgram', program);\n    this.opcode('pushProgram', inverse);\n\n    this.opcode('invokeAmbiguous', name, isBlock);\n  },\n\n  simpleMustache: function(mustache) {\n    var id = mustache.id;\n\n    if (id.type === 'DATA') {\n      this.DATA(id);\n    } else if (id.parts.length) {\n      this.ID(id);\n    } else {\n      // Simplified ID for `this`\n      this.addDepth(id.depth);\n      this.opcode('getContext', id.depth);\n      this.opcode('pushContext');\n    }\n\n    this.opcode('resolvePossibleLambda');\n  },\n\n  helperMustache: function(mustache, program, inverse) {\n    var params = this.setupFullMustacheParams(mustache, program, inverse),\n        name = mustache.id.parts[0];\n\n    if (this.options.knownHelpers[name]) {\n      this.opcode('invokeKnownHelper', params.length, name);\n    } else if (this.options.knownHelpersOnly) {\n      throw new Error(\"You specified knownHelpersOnly, but used the unknown helper \" + name);\n    } else {\n      this.opcode('invokeHelper', params.length, name);\n    }\n  },\n\n  ID: function(id) {\n    this.addDepth(id.depth);\n    this.opcode('getContext', id.depth);\n\n    var name = id.parts[0];\n    if (!name) {\n      this.opcode('pushContext');\n    } else {\n      this.opcode('lookupOnContext', id.parts[0]);\n    }\n\n    for(var i=1, l=id.parts.length; i<l; i++) {\n      this.opcode('lookup', id.parts[i]);\n    }\n  },\n\n  DATA: function(data) {\n    this.options.data = true;\n    if (data.id.isScoped || data.id.depth) {\n      throw new Handlebars.Exception('Scoped data references are not supported: ' + data.original);\n    }\n\n    this.opcode('lookupData');\n    var parts = data.id.parts;\n    for(var i=0, l=parts.length; i<l; i++) {\n      this.opcode('lookup', parts[i]);\n    }\n  },\n\n  STRING: function(string) {\n    this.opcode('pushString', string.string);\n  },\n\n  INTEGER: function(integer) {\n    this.opcode('pushLiteral', integer.integer);\n  },\n\n  BOOLEAN: function(bool) {\n    this.opcode('pushLiteral', bool.bool);\n  },\n\n  comment: function() {},\n\n  // HELPERS\n  opcode: function(name) {\n    this.opcodes.push({ opcode: name, args: [].slice.call(arguments, 1) });\n  },\n\n  declare: function(name, value) {\n    this.opcodes.push({ opcode: 'DECLARE', name: name, value: value });\n  },\n\n  addDepth: function(depth) {\n    if(isNaN(depth)) { throw new Error(\"EWOT\"); }\n    if(depth === 0) { return; }\n\n    if(!this.depths[depth]) {\n      this.depths[depth] = true;\n      this.depths.list.push(depth);\n    }\n  },\n\n  classifyMustache: function(mustache) {\n    var isHelper   = mustache.isHelper;\n    var isEligible = mustache.eligibleHelper;\n    var options    = this.options;\n\n    // if ambiguous, we can possibly resolve the ambiguity now\n    if (isEligible && !isHelper) {\n      var name = mustache.id.parts[0];\n\n      if (options.knownHelpers[name]) {\n        isHelper = true;\n      } else if (options.knownHelpersOnly) {\n        isEligible = false;\n      }\n    }\n\n    if (isHelper) { return \"helper\"; }\n    else if (isEligible) { return \"ambiguous\"; }\n    else { return \"simple\"; }\n  },\n\n  pushParams: function(params) {\n    var i = params.length, param;\n\n    while(i--) {\n      param = params[i];\n\n      if(this.options.stringParams) {\n        if(param.depth) {\n          this.addDepth(param.depth);\n        }\n\n        this.opcode('getContext', param.depth || 0);\n        this.opcode('pushStringParam', param.stringModeValue, param.type);\n      } else {\n        this[param.type](param);\n      }\n    }\n  },\n\n  setupMustacheParams: function(mustache) {\n    var params = mustache.params;\n    this.pushParams(params);\n\n    if(mustache.hash) {\n      this.hash(mustache.hash);\n    } else {\n      this.opcode('emptyHash');\n    }\n\n    return params;\n  },\n\n  // this will replace setupMustacheParams when we're done\n  setupFullMustacheParams: function(mustache, program, inverse) {\n    var params = mustache.params;\n    this.pushParams(params);\n\n    this.opcode('pushProgram', program);\n    this.opcode('pushProgram', inverse);\n\n    if(mustache.hash) {\n      this.hash(mustache.hash);\n    } else {\n      this.opcode('emptyHash');\n    }\n\n    return params;\n  }\n};\n\nvar Literal = function(value) {\n  this.value = value;\n};\n\nJavaScriptCompiler.prototype = {\n  // PUBLIC API: You can override these methods in a subclass to provide\n  // alternative compiled forms for name lookup and buffering semantics\n  nameLookup: function(parent, name /* , type*/) {\n    if (/^[0-9]+$/.test(name)) {\n      return parent + \"[\" + name + \"]\";\n    } else if (JavaScriptCompiler.isValidJavaScriptVariableName(name)) {\n      return parent + \".\" + name;\n    }\n    else {\n      return parent + \"['\" + name + \"']\";\n    }\n  },\n\n  appendToBuffer: function(string) {\n    if (this.environment.isSimple) {\n      return \"return \" + string + \";\";\n    } else {\n      return {\n        appendToBuffer: true,\n        content: string,\n        toString: function() { return \"buffer += \" + string + \";\"; }\n      };\n    }\n  },\n\n  initializeBuffer: function() {\n    return this.quotedString(\"\");\n  },\n\n  namespace: \"Handlebars\",\n  // END PUBLIC API\n\n  compile: function(environment, options, context, asObject) {\n    this.environment = environment;\n    this.options = options || {};\n\n    Handlebars.log(Handlebars.logger.DEBUG, this.environment.disassemble() + \"\\n\\n\");\n\n    this.name = this.environment.name;\n    this.isChild = !!context;\n    this.context = context || {\n      programs: [],\n      environments: [],\n      aliases: { }\n    };\n\n    this.preamble();\n\n    this.stackSlot = 0;\n    this.stackVars = [];\n    this.registers = { list: [] };\n    this.compileStack = [];\n    this.inlineStack = [];\n\n    this.compileChildren(environment, options);\n\n    var opcodes = environment.opcodes, opcode;\n\n    this.i = 0;\n\n    for(l=opcodes.length; this.i<l; this.i++) {\n      opcode = opcodes[this.i];\n\n      if(opcode.opcode === 'DECLARE') {\n        this[opcode.name] = opcode.value;\n      } else {\n        this[opcode.opcode].apply(this, opcode.args);\n      }\n    }\n\n    return this.createFunctionContext(asObject);\n  },\n\n  nextOpcode: function() {\n    var opcodes = this.environment.opcodes;\n    return opcodes[this.i + 1];\n  },\n\n  eat: function() {\n    this.i = this.i + 1;\n  },\n\n  preamble: function() {\n    var out = [];\n\n    if (!this.isChild) {\n      var namespace = this.namespace;\n\n      var copies = \"helpers = this.merge(helpers, \" + namespace + \".helpers);\";\n      if (this.environment.usePartial) { copies = copies + \" partials = this.merge(partials, \" + namespace + \".partials);\"; }\n      if (this.options.data) { copies = copies + \" data = data || {};\"; }\n      out.push(copies);\n    } else {\n      out.push('');\n    }\n\n    if (!this.environment.isSimple) {\n      out.push(\", buffer = \" + this.initializeBuffer());\n    } else {\n      out.push(\"\");\n    }\n\n    // track the last context pushed into place to allow skipping the\n    // getContext opcode when it would be a noop\n    this.lastContext = 0;\n    this.source = out;\n  },\n\n  createFunctionContext: function(asObject) {\n    var locals = this.stackVars.concat(this.registers.list);\n\n    if(locals.length > 0) {\n      this.source[1] = this.source[1] + \", \" + locals.join(\", \");\n    }\n\n    // Generate minimizer alias mappings\n    if (!this.isChild) {\n      for (var alias in this.context.aliases) {\n        if (this.context.aliases.hasOwnProperty(alias)) {\n          this.source[1] = this.source[1] + ', ' + alias + '=' + this.context.aliases[alias];\n        }\n      }\n    }\n\n    if (this.source[1]) {\n      this.source[1] = \"var \" + this.source[1].substring(2) + \";\";\n    }\n\n    // Merge children\n    if (!this.isChild) {\n      this.source[1] += '\\n' + this.context.programs.join('\\n') + '\\n';\n    }\n\n    if (!this.environment.isSimple) {\n      this.source.push(\"return buffer;\");\n    }\n\n    var params = this.isChild ? [\"depth0\", \"data\"] : [\"Handlebars\", \"depth0\", \"helpers\", \"partials\", \"data\"];\n\n    for(var i=0, l=this.environment.depths.list.length; i<l; i++) {\n      params.push(\"depth\" + this.environment.depths.list[i]);\n    }\n\n    // Perform a second pass over the output to merge content when possible\n    var source = this.mergeSource();\n\n    if (!this.isChild) {\n      var revision = Handlebars.COMPILER_REVISION,\n          versions = Handlebars.REVISION_CHANGES[revision];\n      source = \"this.compilerInfo = [\"+revision+\",'\"+versions+\"'];\\n\"+source;\n    }\n\n    if (asObject) {\n      params.push(source);\n\n      return Function.apply(this, params);\n    } else {\n      var functionSource = 'function ' + (this.name || '') + '(' + params.join(',') + ') {\\n  ' + source + '}';\n      Handlebars.log(Handlebars.logger.DEBUG, functionSource + \"\\n\\n\");\n      return functionSource;\n    }\n  },\n  mergeSource: function() {\n    // WARN: We are not handling the case where buffer is still populated as the source should\n    // not have buffer append operations as their final action.\n    var source = '',\n        buffer;\n    for (var i = 0, len = this.source.length; i < len; i++) {\n      var line = this.source[i];\n      if (line.appendToBuffer) {\n        if (buffer) {\n          buffer = buffer + '\\n    + ' + line.content;\n        } else {\n          buffer = line.content;\n        }\n      } else {\n        if (buffer) {\n          source += 'buffer += ' + buffer + ';\\n  ';\n          buffer = undefined;\n        }\n        source += line + '\\n  ';\n      }\n    }\n    return source;\n  },\n\n  // [blockValue]\n  //\n  // On stack, before: hash, inverse, program, value\n  // On stack, after: return value of blockHelperMissing\n  //\n  // The purpose of this opcode is to take a block of the form\n  // `{{#foo}}...{{/foo}}`, resolve the value of `foo`, and\n  // replace it on the stack with the result of properly\n  // invoking blockHelperMissing.\n  blockValue: function() {\n    this.context.aliases.blockHelperMissing = 'helpers.blockHelperMissing';\n\n    var params = [\"depth0\"];\n    this.setupParams(0, params);\n\n    this.replaceStack(function(current) {\n      params.splice(1, 0, current);\n      return \"blockHelperMissing.call(\" + params.join(\", \") + \")\";\n    });\n  },\n\n  // [ambiguousBlockValue]\n  //\n  // On stack, before: hash, inverse, program, value\n  // Compiler value, before: lastHelper=value of last found helper, if any\n  // On stack, after, if no lastHelper: same as [blockValue]\n  // On stack, after, if lastHelper: value\n  ambiguousBlockValue: function() {\n    this.context.aliases.blockHelperMissing = 'helpers.blockHelperMissing';\n\n    var params = [\"depth0\"];\n    this.setupParams(0, params);\n\n    var current = this.topStack();\n    params.splice(1, 0, current);\n\n    // Use the options value generated from the invocation\n    params[params.length-1] = 'options';\n\n    this.source.push(\"if (!\" + this.lastHelper + \") { \" + current + \" = blockHelperMissing.call(\" + params.join(\", \") + \"); }\");\n  },\n\n  // [appendContent]\n  //\n  // On stack, before: ...\n  // On stack, after: ...\n  //\n  // Appends the string value of `content` to the current buffer\n  appendContent: function(content) {\n    this.source.push(this.appendToBuffer(this.quotedString(content)));\n  },\n\n  // [append]\n  //\n  // On stack, before: value, ...\n  // On stack, after: ...\n  //\n  // Coerces `value` to a String and appends it to the current buffer.\n  //\n  // If `value` is truthy, or 0, it is coerced into a string and appended\n  // Otherwise, the empty string is appended\n  append: function() {\n    // Force anything that is inlined onto the stack so we don't have duplication\n    // when we examine local\n    this.flushInline();\n    var local = this.popStack();\n    this.source.push(\"if(\" + local + \" || \" + local + \" === 0) { \" + this.appendToBuffer(local) + \" }\");\n    if (this.environment.isSimple) {\n      this.source.push(\"else { \" + this.appendToBuffer(\"''\") + \" }\");\n    }\n  },\n\n  // [appendEscaped]\n  //\n  // On stack, before: value, ...\n  // On stack, after: ...\n  //\n  // Escape `value` and append it to the buffer\n  appendEscaped: function() {\n    this.context.aliases.escapeExpression = 'this.escapeExpression';\n\n    this.source.push(this.appendToBuffer(\"escapeExpression(\" + this.popStack() + \")\"));\n  },\n\n  // [getContext]\n  //\n  // On stack, before: ...\n  // On stack, after: ...\n  // Compiler value, after: lastContext=depth\n  //\n  // Set the value of the `lastContext` compiler value to the depth\n  getContext: function(depth) {\n    if(this.lastContext !== depth) {\n      this.lastContext = depth;\n    }\n  },\n\n  // [lookupOnContext]\n  //\n  // On stack, before: ...\n  // On stack, after: currentContext[name], ...\n  //\n  // Looks up the value of `name` on the current context and pushes\n  // it onto the stack.\n  lookupOnContext: function(name) {\n    this.push(this.nameLookup('depth' + this.lastContext, name, 'context'));\n  },\n\n  // [pushContext]\n  //\n  // On stack, before: ...\n  // On stack, after: currentContext, ...\n  //\n  // Pushes the value of the current context onto the stack.\n  pushContext: function() {\n    this.pushStackLiteral('depth' + this.lastContext);\n  },\n\n  // [resolvePossibleLambda]\n  //\n  // On stack, before: value, ...\n  // On stack, after: resolved value, ...\n  //\n  // If the `value` is a lambda, replace it on the stack by\n  // the return value of the lambda\n  resolvePossibleLambda: function() {\n    this.context.aliases.functionType = '\"function\"';\n\n    this.replaceStack(function(current) {\n      return \"typeof \" + current + \" === functionType ? \" + current + \".apply(depth0) : \" + current;\n    });\n  },\n\n  // [lookup]\n  //\n  // On stack, before: value, ...\n  // On stack, after: value[name], ...\n  //\n  // Replace the value on the stack with the result of looking\n  // up `name` on `value`\n  lookup: function(name) {\n    this.replaceStack(function(current) {\n      return current + \" == null || \" + current + \" === false ? \" + current + \" : \" + this.nameLookup(current, name, 'context');\n    });\n  },\n\n  // [lookupData]\n  //\n  // On stack, before: ...\n  // On stack, after: data[id], ...\n  //\n  // Push the result of looking up `id` on the current data\n  lookupData: function(id) {\n    this.push('data');\n  },\n\n  // [pushStringParam]\n  //\n  // On stack, before: ...\n  // On stack, after: string, currentContext, ...\n  //\n  // This opcode is designed for use in string mode, which\n  // provides the string value of a parameter along with its\n  // depth rather than resolving it immediately.\n  pushStringParam: function(string, type) {\n    this.pushStackLiteral('depth' + this.lastContext);\n\n    this.pushString(type);\n\n    if (typeof string === 'string') {\n      this.pushString(string);\n    } else {\n      this.pushStackLiteral(string);\n    }\n  },\n\n  emptyHash: function() {\n    this.pushStackLiteral('{}');\n\n    if (this.options.stringParams) {\n      this.register('hashTypes', '{}');\n      this.register('hashContexts', '{}');\n    }\n  },\n  pushHash: function() {\n    this.hash = {values: [], types: [], contexts: []};\n  },\n  popHash: function() {\n    var hash = this.hash;\n    this.hash = undefined;\n\n    if (this.options.stringParams) {\n      this.register('hashContexts', '{' + hash.contexts.join(',') + '}');\n      this.register('hashTypes', '{' + hash.types.join(',') + '}');\n    }\n    this.push('{\\n    ' + hash.values.join(',\\n    ') + '\\n  }');\n  },\n\n  // [pushString]\n  //\n  // On stack, before: ...\n  // On stack, after: quotedString(string), ...\n  //\n  // Push a quoted version of `string` onto the stack\n  pushString: function(string) {\n    this.pushStackLiteral(this.quotedString(string));\n  },\n\n  // [push]\n  //\n  // On stack, before: ...\n  // On stack, after: expr, ...\n  //\n  // Push an expression onto the stack\n  push: function(expr) {\n    this.inlineStack.push(expr);\n    return expr;\n  },\n\n  // [pushLiteral]\n  //\n  // On stack, before: ...\n  // On stack, after: value, ...\n  //\n  // Pushes a value onto the stack. This operation prevents\n  // the compiler from creating a temporary variable to hold\n  // it.\n  pushLiteral: function(value) {\n    this.pushStackLiteral(value);\n  },\n\n  // [pushProgram]\n  //\n  // On stack, before: ...\n  // On stack, after: program(guid), ...\n  //\n  // Push a program expression onto the stack. This takes\n  // a compile-time guid and converts it into a runtime-accessible\n  // expression.\n  pushProgram: function(guid) {\n    if (guid != null) {\n      this.pushStackLiteral(this.programExpression(guid));\n    } else {\n      this.pushStackLiteral(null);\n    }\n  },\n\n  // [invokeHelper]\n  //\n  // On stack, before: hash, inverse, program, params..., ...\n  // On stack, after: result of helper invocation\n  //\n  // Pops off the helper's parameters, invokes the helper,\n  // and pushes the helper's return value onto the stack.\n  //\n  // If the helper is not found, `helperMissing` is called.\n  invokeHelper: function(paramSize, name) {\n    this.context.aliases.helperMissing = 'helpers.helperMissing';\n\n    var helper = this.lastHelper = this.setupHelper(paramSize, name, true);\n    var nonHelper = this.nameLookup('depth' + this.lastContext, name, 'context');\n\n    this.push(helper.name + ' || ' + nonHelper);\n    this.replaceStack(function(name) {\n      return name + ' ? ' + name + '.call(' +\n          helper.callParams + \") \" + \": helperMissing.call(\" +\n          helper.helperMissingParams + \")\";\n    });\n  },\n\n  // [invokeKnownHelper]\n  //\n  // On stack, before: hash, inverse, program, params..., ...\n  // On stack, after: result of helper invocation\n  //\n  // This operation is used when the helper is known to exist,\n  // so a `helperMissing` fallback is not required.\n  invokeKnownHelper: function(paramSize, name) {\n    var helper = this.setupHelper(paramSize, name);\n    this.push(helper.name + \".call(\" + helper.callParams + \")\");\n  },\n\n  // [invokeAmbiguous]\n  //\n  // On stack, before: hash, inverse, program, params..., ...\n  // On stack, after: result of disambiguation\n  //\n  // This operation is used when an expression like `{{foo}}`\n  // is provided, but we don't know at compile-time whether it\n  // is a helper or a path.\n  //\n  // This operation emits more code than the other options,\n  // and can be avoided by passing the `knownHelpers` and\n  // `knownHelpersOnly` flags at compile-time.\n  invokeAmbiguous: function(name, helperCall) {\n    this.context.aliases.functionType = '\"function\"';\n\n    this.pushStackLiteral('{}');    // Hash value\n    var helper = this.setupHelper(0, name, helperCall);\n\n    var helperName = this.lastHelper = this.nameLookup('helpers', name, 'helper');\n\n    var nonHelper = this.nameLookup('depth' + this.lastContext, name, 'context');\n    var nextStack = this.nextStack();\n\n    this.source.push('if (' + nextStack + ' = ' + helperName + ') { ' + nextStack + ' = ' + nextStack + '.call(' + helper.callParams + '); }');\n    this.source.push('else { ' + nextStack + ' = ' + nonHelper + '; ' + nextStack + ' = typeof ' + nextStack + ' === functionType ? ' + nextStack + '.apply(depth0) : ' + nextStack + '; }');\n  },\n\n  // [invokePartial]\n  //\n  // On stack, before: context, ...\n  // On stack after: result of partial invocation\n  //\n  // This operation pops off a context, invokes a partial with that context,\n  // and pushes the result of the invocation back.\n  invokePartial: function(name) {\n    var params = [this.nameLookup('partials', name, 'partial'), \"'\" + name + \"'\", this.popStack(), \"helpers\", \"partials\"];\n\n    if (this.options.data) {\n      params.push(\"data\");\n    }\n\n    this.context.aliases.self = \"this\";\n    this.push(\"self.invokePartial(\" + params.join(\", \") + \")\");\n  },\n\n  // [assignToHash]\n  //\n  // On stack, before: value, hash, ...\n  // On stack, after: hash, ...\n  //\n  // Pops a value and hash off the stack, assigns `hash[key] = value`\n  // and pushes the hash back onto the stack.\n  assignToHash: function(key) {\n    var value = this.popStack(),\n        context,\n        type;\n\n    if (this.options.stringParams) {\n      type = this.popStack();\n      context = this.popStack();\n    }\n\n    var hash = this.hash;\n    if (context) {\n      hash.contexts.push(\"'\" + key + \"': \" + context);\n    }\n    if (type) {\n      hash.types.push(\"'\" + key + \"': \" + type);\n    }\n    hash.values.push(\"'\" + key + \"': (\" + value + \")\");\n  },\n\n  // HELPERS\n\n  compiler: JavaScriptCompiler,\n\n  compileChildren: function(environment, options) {\n    var children = environment.children, child, compiler;\n\n    for(var i=0, l=children.length; i<l; i++) {\n      child = children[i];\n      compiler = new this.compiler();\n\n      var index = this.matchExistingProgram(child);\n\n      if (index == null) {\n        this.context.programs.push('');     // Placeholder to prevent name conflicts for nested children\n        index = this.context.programs.length;\n        child.index = index;\n        child.name = 'program' + index;\n        this.context.programs[index] = compiler.compile(child, options, this.context);\n        this.context.environments[index] = child;\n      } else {\n        child.index = index;\n        child.name = 'program' + index;\n      }\n    }\n  },\n  matchExistingProgram: function(child) {\n    for (var i = 0, len = this.context.environments.length; i < len; i++) {\n      var environment = this.context.environments[i];\n      if (environment && environment.equals(child)) {\n        return i;\n      }\n    }\n  },\n\n  programExpression: function(guid) {\n    this.context.aliases.self = \"this\";\n\n    if(guid == null) {\n      return \"self.noop\";\n    }\n\n    var child = this.environment.children[guid],\n        depths = child.depths.list, depth;\n\n    var programParams = [child.index, child.name, \"data\"];\n\n    for(var i=0, l = depths.length; i<l; i++) {\n      depth = depths[i];\n\n      if(depth === 1) { programParams.push(\"depth0\"); }\n      else { programParams.push(\"depth\" + (depth - 1)); }\n    }\n\n    return (depths.length === 0 ? \"self.program(\" : \"self.programWithDepth(\") + programParams.join(\", \") + \")\";\n  },\n\n  register: function(name, val) {\n    this.useRegister(name);\n    this.source.push(name + \" = \" + val + \";\");\n  },\n\n  useRegister: function(name) {\n    if(!this.registers[name]) {\n      this.registers[name] = true;\n      this.registers.list.push(name);\n    }\n  },\n\n  pushStackLiteral: function(item) {\n    return this.push(new Literal(item));\n  },\n\n  pushStack: function(item) {\n    this.flushInline();\n\n    var stack = this.incrStack();\n    if (item) {\n      this.source.push(stack + \" = \" + item + \";\");\n    }\n    this.compileStack.push(stack);\n    return stack;\n  },\n\n  replaceStack: function(callback) {\n    var prefix = '',\n        inline = this.isInline(),\n        stack;\n\n    // If we are currently inline then we want to merge the inline statement into the\n    // replacement statement via ','\n    if (inline) {\n      var top = this.popStack(true);\n\n      if (top instanceof Literal) {\n        // Literals do not need to be inlined\n        stack = top.value;\n      } else {\n        // Get or create the current stack name for use by the inline\n        var name = this.stackSlot ? this.topStackName() : this.incrStack();\n\n        prefix = '(' + this.push(name) + ' = ' + top + '),';\n        stack = this.topStack();\n      }\n    } else {\n      stack = this.topStack();\n    }\n\n    var item = callback.call(this, stack);\n\n    if (inline) {\n      if (this.inlineStack.length || this.compileStack.length) {\n        this.popStack();\n      }\n      this.push('(' + prefix + item + ')');\n    } else {\n      // Prevent modification of the context depth variable. Through replaceStack\n      if (!/^stack/.test(stack)) {\n        stack = this.nextStack();\n      }\n\n      this.source.push(stack + \" = (\" + prefix + item + \");\");\n    }\n    return stack;\n  },\n\n  nextStack: function() {\n    return this.pushStack();\n  },\n\n  incrStack: function() {\n    this.stackSlot++;\n    if(this.stackSlot > this.stackVars.length) { this.stackVars.push(\"stack\" + this.stackSlot); }\n    return this.topStackName();\n  },\n  topStackName: function() {\n    return \"stack\" + this.stackSlot;\n  },\n  flushInline: function() {\n    var inlineStack = this.inlineStack;\n    if (inlineStack.length) {\n      this.inlineStack = [];\n      for (var i = 0, len = inlineStack.length; i < len; i++) {\n        var entry = inlineStack[i];\n        if (entry instanceof Literal) {\n          this.compileStack.push(entry);\n        } else {\n          this.pushStack(entry);\n        }\n      }\n    }\n  },\n  isInline: function() {\n    return this.inlineStack.length;\n  },\n\n  popStack: function(wrapped) {\n    var inline = this.isInline(),\n        item = (inline ? this.inlineStack : this.compileStack).pop();\n\n    if (!wrapped && (item instanceof Literal)) {\n      return item.value;\n    } else {\n      if (!inline) {\n        this.stackSlot--;\n      }\n      return item;\n    }\n  },\n\n  topStack: function(wrapped) {\n    var stack = (this.isInline() ? this.inlineStack : this.compileStack),\n        item = stack[stack.length - 1];\n\n    if (!wrapped && (item instanceof Literal)) {\n      return item.value;\n    } else {\n      return item;\n    }\n  },\n\n  quotedString: function(str) {\n    return '\"' + str\n      .replace(/\\\\/g, '\\\\\\\\')\n      .replace(/\"/g, '\\\\\"')\n      .replace(/\\n/g, '\\\\n')\n      .replace(/\\r/g, '\\\\r')\n      .replace(/\\u2028/g, '\\\\u2028')   // Per Ecma-262 7.3 + 7.8.4\n      .replace(/\\u2029/g, '\\\\u2029') + '\"';\n  },\n\n  setupHelper: function(paramSize, name, missingParams) {\n    var params = [];\n    this.setupParams(paramSize, params, missingParams);\n    var foundHelper = this.nameLookup('helpers', name, 'helper');\n\n    return {\n      params: params,\n      name: foundHelper,\n      callParams: [\"depth0\"].concat(params).join(\", \"),\n      helperMissingParams: missingParams && [\"depth0\", this.quotedString(name)].concat(params).join(\", \")\n    };\n  },\n\n  // the params and contexts arguments are passed in arrays\n  // to fill in\n  setupParams: function(paramSize, params, useRegister) {\n    var options = [], contexts = [], types = [], param, inverse, program;\n\n    options.push(\"hash:\" + this.popStack());\n\n    inverse = this.popStack();\n    program = this.popStack();\n\n    // Avoid setting fn and inverse if neither are set. This allows\n    // helpers to do a check for `if (options.fn)`\n    if (program || inverse) {\n      if (!program) {\n        this.context.aliases.self = \"this\";\n        program = \"self.noop\";\n      }\n\n      if (!inverse) {\n       this.context.aliases.self = \"this\";\n        inverse = \"self.noop\";\n      }\n\n      options.push(\"inverse:\" + inverse);\n      options.push(\"fn:\" + program);\n    }\n\n    for(var i=0; i<paramSize; i++) {\n      param = this.popStack();\n      params.push(param);\n\n      if(this.options.stringParams) {\n        types.push(this.popStack());\n        contexts.push(this.popStack());\n      }\n    }\n\n    if (this.options.stringParams) {\n      options.push(\"contexts:[\" + contexts.join(\",\") + \"]\");\n      options.push(\"types:[\" + types.join(\",\") + \"]\");\n      options.push(\"hashContexts:hashContexts\");\n      options.push(\"hashTypes:hashTypes\");\n    }\n\n    if(this.options.data) {\n      options.push(\"data:data\");\n    }\n\n    options = \"{\" + options.join(\",\") + \"}\";\n    if (useRegister) {\n      this.register('options', options);\n      params.push('options');\n    } else {\n      params.push(options);\n    }\n    return params.join(\", \");\n  }\n};\n\nvar reservedWords = (\n  \"break else new var\" +\n  \" case finally return void\" +\n  \" catch for switch while\" +\n  \" continue function this with\" +\n  \" default if throw\" +\n  \" delete in try\" +\n  \" do instanceof typeof\" +\n  \" abstract enum int short\" +\n  \" boolean export interface static\" +\n  \" byte extends long super\" +\n  \" char final native synchronized\" +\n  \" class float package throws\" +\n  \" const goto private transient\" +\n  \" debugger implements protected volatile\" +\n  \" double import public let yield\"\n).split(\" \");\n\nvar compilerWords = JavaScriptCompiler.RESERVED_WORDS = {};\n\nfor(var i=0, l=reservedWords.length; i<l; i++) {\n  compilerWords[reservedWords[i]] = true;\n}\n\nJavaScriptCompiler.isValidJavaScriptVariableName = function(name) {\n  if(!JavaScriptCompiler.RESERVED_WORDS[name] && /^[a-zA-Z_$][0-9a-zA-Z_$]+$/.test(name)) {\n    return true;\n  }\n  return false;\n};\n\nHandlebars.precompile = function(input, options) {\n  if (input == null || (typeof input !== 'string' && input.constructor !== Handlebars.AST.ProgramNode)) {\n    throw new Handlebars.Exception(\"You must pass a string or Handlebars AST to Handlebars.precompile. You passed \" + input);\n  }\n\n  options = options || {};\n  if (!('data' in options)) {\n    options.data = true;\n  }\n  var ast = Handlebars.parse(input);\n  var environment = new Compiler().compile(ast, options);\n  return new JavaScriptCompiler().compile(environment, options);\n};\n\nHandlebars.compile = function(input, options) {\n  if (input == null || (typeof input !== 'string' && input.constructor !== Handlebars.AST.ProgramNode)) {\n    throw new Handlebars.Exception(\"You must pass a string or Handlebars AST to Handlebars.compile. You passed \" + input);\n  }\n\n  options = options || {};\n  if (!('data' in options)) {\n    options.data = true;\n  }\n  var compiled;\n  function compile() {\n    var ast = Handlebars.parse(input);\n    var environment = new Compiler().compile(ast, options);\n    var templateSpec = new JavaScriptCompiler().compile(environment, options, undefined, true);\n    return Handlebars.template(templateSpec);\n  }\n\n  // Template is only compiled on first use and cached after that point.\n  return function(context, options) {\n    if (!compiled) {\n      compiled = compile();\n    }\n    return compiled.call(this, context, options);\n  };\n};\n\n;\n// lib/handlebars/runtime.js\n\nHandlebars.VM = {\n  template: function(templateSpec) {\n    // Just add water\n    var container = {\n      escapeExpression: Handlebars.Utils.escapeExpression,\n      invokePartial: Handlebars.VM.invokePartial,\n      programs: [],\n      program: function(i, fn, data) {\n        var programWrapper = this.programs[i];\n        if(data) {\n          programWrapper = Handlebars.VM.program(i, fn, data);\n        } else if (!programWrapper) {\n          programWrapper = this.programs[i] = Handlebars.VM.program(i, fn);\n        }\n        return programWrapper;\n      },\n      merge: function(param, common) {\n        var ret = param || common;\n\n        if (param && common) {\n          ret = {};\n          Handlebars.Utils.extend(ret, common);\n          Handlebars.Utils.extend(ret, param);\n        }\n        return ret;\n      },\n      programWithDepth: Handlebars.VM.programWithDepth,\n      noop: Handlebars.VM.noop,\n      compilerInfo: null\n    };\n\n    return function(context, options) {\n      options = options || {};\n      var result = templateSpec.call(container, Handlebars, context, options.helpers, options.partials, options.data);\n\n      var compilerInfo = container.compilerInfo || [],\n          compilerRevision = compilerInfo[0] || 1,\n          currentRevision = Handlebars.COMPILER_REVISION;\n\n      if (compilerRevision !== currentRevision) {\n        if (compilerRevision < currentRevision) {\n          var runtimeVersions = Handlebars.REVISION_CHANGES[currentRevision],\n              compilerVersions = Handlebars.REVISION_CHANGES[compilerRevision];\n          throw \"Template was precompiled with an older version of Handlebars than the current runtime. \"+\n                \"Please update your precompiler to a newer version (\"+runtimeVersions+\") or downgrade your runtime to an older version (\"+compilerVersions+\").\";\n        } else {\n          // Use the embedded version info since the runtime doesn't know about this revision yet\n          throw \"Template was precompiled with a newer version of Handlebars than the current runtime. \"+\n                \"Please update your runtime to a newer version (\"+compilerInfo[1]+\").\";\n        }\n      }\n\n      return result;\n    };\n  },\n\n  programWithDepth: function(i, fn, data /*, $depth */) {\n    var args = Array.prototype.slice.call(arguments, 3);\n\n    var program = function(context, options) {\n      options = options || {};\n\n      return fn.apply(this, [context, options.data || data].concat(args));\n    };\n    program.program = i;\n    program.depth = args.length;\n    return program;\n  },\n  program: function(i, fn, data) {\n    var program = function(context, options) {\n      options = options || {};\n\n      return fn(context, options.data || data);\n    };\n    program.program = i;\n    program.depth = 0;\n    return program;\n  },\n  noop: function() { return \"\"; },\n  invokePartial: function(partial, name, context, helpers, partials, data) {\n    var options = { helpers: helpers, partials: partials, data: data };\n\n    if(partial === undefined) {\n      throw new Handlebars.Exception(\"The partial \" + name + \" could not be found\");\n    } else if(partial instanceof Function) {\n      return partial(context, options);\n    } else if (!Handlebars.compile) {\n      throw new Handlebars.Exception(\"The partial \" + name + \" could not be compiled when running in runtime-only mode\");\n    } else {\n      partials[name] = Handlebars.compile(partial, {data: data !== undefined});\n      return partials[name](context, options);\n    }\n  }\n};\n\nHandlebars.template = Handlebars.VM.template;\n;\n// lib/handlebars/browser-suffix.js\n})(Handlebars);\n;\n"
  },
  {
    "path": "js/libs/jquery-min.js",
    "content": "\n/*! jQuery v1.10.2 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license\n//@ sourceMappingURL=jquery.min.map\n*/\n(function(e,t){var n,r,i=typeof t,o=e.location,a=e.document,s=a.documentElement,l=e.jQuery,u=e.$,c={},p=[],f=\"1.10.2\",d=p.concat,h=p.push,g=p.slice,m=p.indexOf,y=c.toString,v=c.hasOwnProperty,b=f.trim,x=function(e,t){return new x.fn.init(e,t,r)},w=/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source,T=/\\S+/g,C=/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,N=/^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/,k=/^<(\\w+)\\s*\\/?>(?:<\\/\\1>|)$/,E=/^[\\],:{}\\s]*$/,S=/(?:^|:|,)(?:\\s*\\[)+/g,A=/\\\\(?:[\"\\\\\\/bfnrt]|u[\\da-fA-F]{4})/g,j=/\"[^\"\\\\\\r\\n]*\"|true|false|null|-?(?:\\d+\\.|)\\d+(?:[eE][+-]?\\d+|)/g,D=/^-ms-/,L=/-([\\da-z])/gi,H=function(e,t){return t.toUpperCase()},q=function(e){(a.addEventListener||\"load\"===e.type||\"complete\"===a.readyState)&&(_(),x.ready())},_=function(){a.addEventListener?(a.removeEventListener(\"DOMContentLoaded\",q,!1),e.removeEventListener(\"load\",q,!1)):(a.detachEvent(\"onreadystatechange\",q),e.detachEvent(\"onload\",q))};x.fn=x.prototype={jquery:f,constructor:x,init:function(e,n,r){var i,o;if(!e)return this;if(\"string\"==typeof e){if(i=\"<\"===e.charAt(0)&&\">\"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:N.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof x?n[0]:n,x.merge(this,x.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:a,!0)),k.test(i[1])&&x.isPlainObject(n))for(i in n)x.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(o=a.getElementById(i[2]),o&&o.parentNode){if(o.id!==i[2])return r.find(e);this.length=1,this[0]=o}return this.context=a,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):x.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),x.makeArray(e,this))},selector:\"\",length:0,toArray:function(){return g.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=x.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return x.each(this,e,t)},ready:function(e){return x.ready.promise().done(e),this},slice:function(){return this.pushStack(g.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(x.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:h,sort:[].sort,splice:[].splice},x.fn.init.prototype=x.fn,x.extend=x.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},l=1,u=arguments.length,c=!1;for(\"boolean\"==typeof s&&(c=s,s=arguments[1]||{},l=2),\"object\"==typeof s||x.isFunction(s)||(s={}),u===l&&(s=this,--l);u>l;l++)if(null!=(o=arguments[l]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(x.isPlainObject(r)||(n=x.isArray(r)))?(n?(n=!1,a=e&&x.isArray(e)?e:[]):a=e&&x.isPlainObject(e)?e:{},s[i]=x.extend(c,a,r)):r!==t&&(s[i]=r));return s},x.extend({expando:\"jQuery\"+(f+Math.random()).replace(/\\D/g,\"\"),noConflict:function(t){return e.$===x&&(e.$=u),t&&e.jQuery===x&&(e.jQuery=l),x},isReady:!1,readyWait:1,holdReady:function(e){e?x.readyWait++:x.ready(!0)},ready:function(e){if(e===!0?!--x.readyWait:!x.isReady){if(!a.body)return setTimeout(x.ready);x.isReady=!0,e!==!0&&--x.readyWait>0||(n.resolveWith(a,[x]),x.fn.trigger&&x(a).trigger(\"ready\").off(\"ready\"))}},isFunction:function(e){return\"function\"===x.type(e)},isArray:Array.isArray||function(e){return\"array\"===x.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+\"\":\"object\"==typeof e||\"function\"==typeof e?c[y.call(e)]||\"object\":typeof e},isPlainObject:function(e){var n;if(!e||\"object\"!==x.type(e)||e.nodeType||x.isWindow(e))return!1;try{if(e.constructor&&!v.call(e,\"constructor\")&&!v.call(e.constructor.prototype,\"isPrototypeOf\"))return!1}catch(r){return!1}if(x.support.ownLast)for(n in e)return v.call(e,n);for(n in e);return n===t||v.call(e,n)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||\"string\"!=typeof e)return null;\"boolean\"==typeof t&&(n=t,t=!1),t=t||a;var r=k.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=x.buildFragment([e],t,i),i&&x(i).remove(),x.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:\"string\"==typeof n&&(n=x.trim(n),n&&E.test(n.replace(A,\"@\").replace(j,\"]\").replace(S,\"\")))?Function(\"return \"+n)():(x.error(\"Invalid JSON: \"+n),t)},parseXML:function(n){var r,i;if(!n||\"string\"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,\"text/xml\")):(r=new ActiveXObject(\"Microsoft.XMLDOM\"),r.async=\"false\",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName(\"parsererror\").length||x.error(\"Invalid XML: \"+n),r},noop:function(){},globalEval:function(t){t&&x.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(D,\"ms-\").replace(L,H)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(a){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:b&&!b.call(\"\\ufeff\\u00a0\")?function(e){return null==e?\"\":b.call(e)}:function(e){return null==e?\"\":(e+\"\").replace(C,\"\")},makeArray:function(e,t){var n=t||[];return null!=e&&(M(Object(e))?x.merge(n,\"string\"==typeof e?[e]:e):h.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(m)return m.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if(\"number\"==typeof r)for(;r>o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,a=M(e),s=[];if(a)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(s[s.length]=r);return d.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return\"string\"==typeof n&&(o=e[n],n=e,e=o),x.isFunction(e)?(r=g.call(arguments,2),i=function(){return e.apply(n||this,r.concat(g.call(arguments)))},i.guid=e.guid=e.guid||x.guid++,i):t},access:function(e,n,r,i,o,a,s){var l=0,u=e.length,c=null==r;if(\"object\"===x.type(r)){o=!0;for(l in r)x.access(e,n,l,r[l],!0,a,s)}else if(i!==t&&(o=!0,x.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(x(e),n)})),n))for(;u>l;l++)n(e[l],r,s?i:i.call(e[l],l,n(e[l],r)));return o?e:c?n.call(e):u?n(e[0],r):a},now:function(){return(new Date).getTime()},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),x.ready.promise=function(t){if(!n)if(n=x.Deferred(),\"complete\"===a.readyState)setTimeout(x.ready);else if(a.addEventListener)a.addEventListener(\"DOMContentLoaded\",q,!1),e.addEventListener(\"load\",q,!1);else{a.attachEvent(\"onreadystatechange\",q),e.attachEvent(\"onload\",q);var r=!1;try{r=null==e.frameElement&&a.documentElement}catch(i){}r&&r.doScroll&&function o(){if(!x.isReady){try{r.doScroll(\"left\")}catch(e){return setTimeout(o,50)}_(),x.ready()}}()}return n.promise(t)},x.each(\"Boolean Number String Function Array Date RegExp Object Error\".split(\" \"),function(e,t){c[\"[object \"+t+\"]\"]=t.toLowerCase()});function M(e){var t=e.length,n=x.type(e);return x.isWindow(e)?!1:1===e.nodeType&&t?!0:\"array\"===n||\"function\"!==n&&(0===t||\"number\"==typeof t&&t>0&&t-1 in e)}r=x(a),function(e,t){var n,r,i,o,a,s,l,u,c,p,f,d,h,g,m,y,v,b=\"sizzle\"+-new Date,w=e.document,T=0,C=0,N=st(),k=st(),E=st(),S=!1,A=function(e,t){return e===t?(S=!0,0):0},j=typeof t,D=1<<31,L={}.hasOwnProperty,H=[],q=H.pop,_=H.push,M=H.push,O=H.slice,F=H.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},B=\"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",P=\"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",R=\"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\",W=R.replace(\"w\",\"w#\"),$=\"\\\\[\"+P+\"*(\"+R+\")\"+P+\"*(?:([*^$|!~]?=)\"+P+\"*(?:(['\\\"])((?:\\\\\\\\.|[^\\\\\\\\])*?)\\\\3|(\"+W+\")|)|)\"+P+\"*\\\\]\",I=\":(\"+R+\")(?:\\\\(((['\\\"])((?:\\\\\\\\.|[^\\\\\\\\])*?)\\\\3|((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\"+$.replace(3,8)+\")*)|.*)\\\\)|)\",z=RegExp(\"^\"+P+\"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\"+P+\"+$\",\"g\"),X=RegExp(\"^\"+P+\"*,\"+P+\"*\"),U=RegExp(\"^\"+P+\"*([>+~]|\"+P+\")\"+P+\"*\"),V=RegExp(P+\"*[+~]\"),Y=RegExp(\"=\"+P+\"*([^\\\\]'\\\"]*)\"+P+\"*\\\\]\",\"g\"),J=RegExp(I),G=RegExp(\"^\"+W+\"$\"),Q={ID:RegExp(\"^#(\"+R+\")\"),CLASS:RegExp(\"^\\\\.(\"+R+\")\"),TAG:RegExp(\"^(\"+R.replace(\"w\",\"w*\")+\")\"),ATTR:RegExp(\"^\"+$),PSEUDO:RegExp(\"^\"+I),CHILD:RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\"+P+\"*(even|odd|(([+-]|)(\\\\d*)n|)\"+P+\"*(?:([+-]|)\"+P+\"*(\\\\d+)|))\"+P+\"*\\\\)|)\",\"i\"),bool:RegExp(\"^(?:\"+B+\")$\",\"i\"),needsContext:RegExp(\"^\"+P+\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\"+P+\"*((?:-\\\\d)?\\\\d*)\"+P+\"*\\\\)|)(?=[^-]|$)\",\"i\")},K=/^[^{]+\\{\\s*\\[native \\w/,Z=/^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,et=/^(?:input|select|textarea|button)$/i,tt=/^h\\d$/i,nt=/'|\\\\/g,rt=RegExp(\"\\\\\\\\([\\\\da-f]{1,6}\"+P+\"?|(\"+P+\")|.)\",\"ig\"),it=function(e,t,n){var r=\"0x\"+t-65536;return r!==r||n?t:0>r?String.fromCharCode(r+65536):String.fromCharCode(55296|r>>10,56320|1023&r)};try{M.apply(H=O.call(w.childNodes),w.childNodes),H[w.childNodes.length].nodeType}catch(ot){M={apply:H.length?function(e,t){_.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function at(e,t,n,i){var o,a,s,l,u,c,d,m,y,x;if((t?t.ownerDocument||t:w)!==f&&p(t),t=t||f,n=n||[],!e||\"string\"!=typeof e)return n;if(1!==(l=t.nodeType)&&9!==l)return[];if(h&&!i){if(o=Z.exec(e))if(s=o[1]){if(9===l){if(a=t.getElementById(s),!a||!a.parentNode)return n;if(a.id===s)return n.push(a),n}else if(t.ownerDocument&&(a=t.ownerDocument.getElementById(s))&&v(t,a)&&a.id===s)return n.push(a),n}else{if(o[2])return M.apply(n,t.getElementsByTagName(e)),n;if((s=o[3])&&r.getElementsByClassName&&t.getElementsByClassName)return M.apply(n,t.getElementsByClassName(s)),n}if(r.qsa&&(!g||!g.test(e))){if(m=d=b,y=t,x=9===l&&e,1===l&&\"object\"!==t.nodeName.toLowerCase()){c=mt(e),(d=t.getAttribute(\"id\"))?m=d.replace(nt,\"\\\\$&\"):t.setAttribute(\"id\",m),m=\"[id='\"+m+\"'] \",u=c.length;while(u--)c[u]=m+yt(c[u]);y=V.test(e)&&t.parentNode||t,x=c.join(\",\")}if(x)try{return M.apply(n,y.querySelectorAll(x)),n}catch(T){}finally{d||t.removeAttribute(\"id\")}}}return kt(e.replace(z,\"$1\"),t,n,i)}function st(){var e=[];function t(n,r){return e.push(n+=\" \")>o.cacheLength&&delete t[e.shift()],t[n]=r}return t}function lt(e){return e[b]=!0,e}function ut(e){var t=f.createElement(\"div\");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function ct(e,t){var n=e.split(\"|\"),r=e.length;while(r--)o.attrHandle[n[r]]=t}function pt(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||D)-(~e.sourceIndex||D);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function ft(e){return function(t){var n=t.nodeName.toLowerCase();return\"input\"===n&&t.type===e}}function dt(e){return function(t){var n=t.nodeName.toLowerCase();return(\"input\"===n||\"button\"===n)&&t.type===e}}function ht(e){return lt(function(t){return t=+t,lt(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}s=at.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?\"HTML\"!==t.nodeName:!1},r=at.support={},p=at.setDocument=function(e){var n=e?e.ownerDocument||e:w,i=n.defaultView;return n!==f&&9===n.nodeType&&n.documentElement?(f=n,d=n.documentElement,h=!s(n),i&&i.attachEvent&&i!==i.top&&i.attachEvent(\"onbeforeunload\",function(){p()}),r.attributes=ut(function(e){return e.className=\"i\",!e.getAttribute(\"className\")}),r.getElementsByTagName=ut(function(e){return e.appendChild(n.createComment(\"\")),!e.getElementsByTagName(\"*\").length}),r.getElementsByClassName=ut(function(e){return e.innerHTML=\"<div class='a'></div><div class='a i'></div>\",e.firstChild.className=\"i\",2===e.getElementsByClassName(\"i\").length}),r.getById=ut(function(e){return d.appendChild(e).id=b,!n.getElementsByName||!n.getElementsByName(b).length}),r.getById?(o.find.ID=function(e,t){if(typeof t.getElementById!==j&&h){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){return e.getAttribute(\"id\")===t}}):(delete o.find.ID,o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){var n=typeof e.getAttributeNode!==j&&e.getAttributeNode(\"id\");return n&&n.value===t}}),o.find.TAG=r.getElementsByTagName?function(e,n){return typeof n.getElementsByTagName!==j?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if(\"*\"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},o.find.CLASS=r.getElementsByClassName&&function(e,n){return typeof n.getElementsByClassName!==j&&h?n.getElementsByClassName(e):t},m=[],g=[],(r.qsa=K.test(n.querySelectorAll))&&(ut(function(e){e.innerHTML=\"<select><option selected=''></option></select>\",e.querySelectorAll(\"[selected]\").length||g.push(\"\\\\[\"+P+\"*(?:value|\"+B+\")\"),e.querySelectorAll(\":checked\").length||g.push(\":checked\")}),ut(function(e){var t=n.createElement(\"input\");t.setAttribute(\"type\",\"hidden\"),e.appendChild(t).setAttribute(\"t\",\"\"),e.querySelectorAll(\"[t^='']\").length&&g.push(\"[*^$]=\"+P+\"*(?:''|\\\"\\\")\"),e.querySelectorAll(\":enabled\").length||g.push(\":enabled\",\":disabled\"),e.querySelectorAll(\"*,:x\"),g.push(\",.*:\")})),(r.matchesSelector=K.test(y=d.webkitMatchesSelector||d.mozMatchesSelector||d.oMatchesSelector||d.msMatchesSelector))&&ut(function(e){r.disconnectedMatch=y.call(e,\"div\"),y.call(e,\"[s!='']:x\"),m.push(\"!=\",I)}),g=g.length&&RegExp(g.join(\"|\")),m=m.length&&RegExp(m.join(\"|\")),v=K.test(d.contains)||d.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},A=d.compareDocumentPosition?function(e,t){if(e===t)return S=!0,0;var i=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t);return i?1&i||!r.sortDetached&&t.compareDocumentPosition(e)===i?e===n||v(w,e)?-1:t===n||v(w,t)?1:c?F.call(c,e)-F.call(c,t):0:4&i?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return S=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:c?F.call(c,e)-F.call(c,t):0;if(o===a)return pt(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?pt(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},n):f},at.matches=function(e,t){return at(e,null,null,t)},at.matchesSelector=function(e,t){if((e.ownerDocument||e)!==f&&p(e),t=t.replace(Y,\"='$1']\"),!(!r.matchesSelector||!h||m&&m.test(t)||g&&g.test(t)))try{var n=y.call(e,t);if(n||r.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(i){}return at(t,f,null,[e]).length>0},at.contains=function(e,t){return(e.ownerDocument||e)!==f&&p(e),v(e,t)},at.attr=function(e,n){(e.ownerDocument||e)!==f&&p(e);var i=o.attrHandle[n.toLowerCase()],a=i&&L.call(o.attrHandle,n.toLowerCase())?i(e,n,!h):t;return a===t?r.attributes||!h?e.getAttribute(n):(a=e.getAttributeNode(n))&&a.specified?a.value:null:a},at.error=function(e){throw Error(\"Syntax error, unrecognized expression: \"+e)},at.uniqueSort=function(e){var t,n=[],i=0,o=0;if(S=!r.detectDuplicates,c=!r.sortStable&&e.slice(0),e.sort(A),S){while(t=e[o++])t===e[o]&&(i=n.push(o));while(i--)e.splice(n[i],1)}return e},a=at.getText=function(e){var t,n=\"\",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if(\"string\"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=a(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=a(t);return n},o=at.selectors={cacheLength:50,createPseudo:lt,match:Q,attrHandle:{},find:{},relative:{\">\":{dir:\"parentNode\",first:!0},\" \":{dir:\"parentNode\"},\"+\":{dir:\"previousSibling\",first:!0},\"~\":{dir:\"previousSibling\"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(rt,it),e[3]=(e[4]||e[5]||\"\").replace(rt,it),\"~=\"===e[2]&&(e[3]=\" \"+e[3]+\" \"),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),\"nth\"===e[1].slice(0,3)?(e[3]||at.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*(\"even\"===e[3]||\"odd\"===e[3])),e[5]=+(e[7]+e[8]||\"odd\"===e[3])):e[3]&&at.error(e[0]),e},PSEUDO:function(e){var n,r=!e[5]&&e[2];return Q.CHILD.test(e[0])?null:(e[3]&&e[4]!==t?e[2]=e[4]:r&&J.test(r)&&(n=mt(r,!0))&&(n=r.indexOf(\")\",r.length-n)-r.length)&&(e[0]=e[0].slice(0,n),e[2]=r.slice(0,n)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(rt,it).toLowerCase();return\"*\"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=N[e+\" \"];return t||(t=RegExp(\"(^|\"+P+\")\"+e+\"(\"+P+\"|$)\"))&&N(e,function(e){return t.test(\"string\"==typeof e.className&&e.className||typeof e.getAttribute!==j&&e.getAttribute(\"class\")||\"\")})},ATTR:function(e,t,n){return function(r){var i=at.attr(r,e);return null==i?\"!=\"===t:t?(i+=\"\",\"=\"===t?i===n:\"!=\"===t?i!==n:\"^=\"===t?n&&0===i.indexOf(n):\"*=\"===t?n&&i.indexOf(n)>-1:\"$=\"===t?n&&i.slice(-n.length)===n:\"~=\"===t?(\" \"+i+\" \").indexOf(n)>-1:\"|=\"===t?i===n||i.slice(0,n.length+1)===n+\"-\":!1):!0}},CHILD:function(e,t,n,r,i){var o=\"nth\"!==e.slice(0,3),a=\"last\"!==e.slice(-4),s=\"of-type\"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,l){var u,c,p,f,d,h,g=o!==a?\"nextSibling\":\"previousSibling\",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!l&&!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g=\"only\"===e&&!h&&\"nextSibling\"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){c=m[b]||(m[b]={}),u=c[e]||[],d=u[0]===T&&u[1],f=u[0]===T&&u[2],p=d&&m.childNodes[d];while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[T,d,f];break}}else if(v&&(u=(t[b]||(t[b]={}))[e])&&u[0]===T)f=u[1];else while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(v&&((p[b]||(p[b]={}))[e]=[T,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=o.pseudos[e]||o.setFilters[e.toLowerCase()]||at.error(\"unsupported pseudo: \"+e);return r[b]?r(t):r.length>1?(n=[e,e,\"\",t],o.setFilters.hasOwnProperty(e.toLowerCase())?lt(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=F.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:lt(function(e){var t=[],n=[],r=l(e.replace(z,\"$1\"));return r[b]?lt(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:lt(function(e){return function(t){return at(e,t).length>0}}),contains:lt(function(e){return function(t){return(t.textContent||t.innerText||a(t)).indexOf(e)>-1}}),lang:lt(function(e){return G.test(e||\"\")||at.error(\"unsupported lang: \"+e),e=e.replace(rt,it).toLowerCase(),function(t){var n;do if(n=h?t.lang:t.getAttribute(\"xml:lang\")||t.getAttribute(\"lang\"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+\"-\");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===d},focus:function(e){return e===f.activeElement&&(!f.hasFocus||f.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return\"input\"===t&&!!e.checked||\"option\"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>\"@\"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!o.pseudos.empty(e)},header:function(e){return tt.test(e.nodeName)},input:function(e){return et.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return\"input\"===t&&\"button\"===e.type||\"button\"===t},text:function(e){var t;return\"input\"===e.nodeName.toLowerCase()&&\"text\"===e.type&&(null==(t=e.getAttribute(\"type\"))||t.toLowerCase()===e.type)},first:ht(function(){return[0]}),last:ht(function(e,t){return[t-1]}),eq:ht(function(e,t,n){return[0>n?n+t:n]}),even:ht(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:ht(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:ht(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:ht(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}},o.pseudos.nth=o.pseudos.eq;for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})o.pseudos[n]=ft(n);for(n in{submit:!0,reset:!0})o.pseudos[n]=dt(n);function gt(){}gt.prototype=o.filters=o.pseudos,o.setFilters=new gt;function mt(e,t){var n,r,i,a,s,l,u,c=k[e+\" \"];if(c)return t?0:c.slice(0);s=e,l=[],u=o.preFilter;while(s){(!n||(r=X.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),l.push(i=[])),n=!1,(r=U.exec(s))&&(n=r.shift(),i.push({value:n,type:r[0].replace(z,\" \")}),s=s.slice(n.length));for(a in o.filter)!(r=Q[a].exec(s))||u[a]&&!(r=u[a](r))||(n=r.shift(),i.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?at.error(e):k(e,l).slice(0)}function yt(e){var t=0,n=e.length,r=\"\";for(;n>t;t++)r+=e[t].value;return r}function vt(e,t,n){var r=t.dir,o=n&&\"parentNode\"===r,a=C++;return t.first?function(t,n,i){while(t=t[r])if(1===t.nodeType||o)return e(t,n,i)}:function(t,n,s){var l,u,c,p=T+\" \"+a;if(s){while(t=t[r])if((1===t.nodeType||o)&&e(t,n,s))return!0}else while(t=t[r])if(1===t.nodeType||o)if(c=t[b]||(t[b]={}),(u=c[r])&&u[0]===p){if((l=u[1])===!0||l===i)return l===!0}else if(u=c[r]=[p],u[1]=e(t,n,s)||i,u[1]===!0)return!0}}function bt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function xt(e,t,n,r,i){var o,a=[],s=0,l=e.length,u=null!=t;for(;l>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),u&&t.push(s));return a}function wt(e,t,n,r,i,o){return r&&!r[b]&&(r=wt(r)),i&&!i[b]&&(i=wt(i,o)),lt(function(o,a,s,l){var u,c,p,f=[],d=[],h=a.length,g=o||Nt(t||\"*\",s.nodeType?[s]:s,[]),m=!e||!o&&t?g:xt(g,f,e,s,l),y=n?i||(o?e:h||r)?[]:a:m;if(n&&n(m,y,s,l),r){u=xt(y,d),r(u,[],s,l),c=u.length;while(c--)(p=u[c])&&(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){u=[],c=y.length;while(c--)(p=y[c])&&u.push(m[c]=p);i(null,y=[],u,l)}c=y.length;while(c--)(p=y[c])&&(u=i?F.call(o,p):f[c])>-1&&(o[u]=!(a[u]=p))}}else y=xt(y===a?y.splice(h,y.length):y),i?i(null,a,y,l):M.apply(a,y)})}function Tt(e){var t,n,r,i=e.length,a=o.relative[e[0].type],s=a||o.relative[\" \"],l=a?1:0,c=vt(function(e){return e===t},s,!0),p=vt(function(e){return F.call(t,e)>-1},s,!0),f=[function(e,n,r){return!a&&(r||n!==u)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;i>l;l++)if(n=o.relative[e[l].type])f=[vt(bt(f),n)];else{if(n=o.filter[e[l].type].apply(null,e[l].matches),n[b]){for(r=++l;i>r;r++)if(o.relative[e[r].type])break;return wt(l>1&&bt(f),l>1&&yt(e.slice(0,l-1).concat({value:\" \"===e[l-2].type?\"*\":\"\"})).replace(z,\"$1\"),n,r>l&&Tt(e.slice(l,r)),i>r&&Tt(e=e.slice(r)),i>r&&yt(e))}f.push(n)}return bt(f)}function Ct(e,t){var n=0,r=t.length>0,a=e.length>0,s=function(s,l,c,p,d){var h,g,m,y=[],v=0,b=\"0\",x=s&&[],w=null!=d,C=u,N=s||a&&o.find.TAG(\"*\",d&&l.parentNode||l),k=T+=null==C?1:Math.random()||.1;for(w&&(u=l!==f&&l,i=n);null!=(h=N[b]);b++){if(a&&h){g=0;while(m=e[g++])if(m(h,l,c)){p.push(h);break}w&&(T=k,i=++n)}r&&((h=!m&&h)&&v--,s&&x.push(h))}if(v+=b,r&&b!==v){g=0;while(m=t[g++])m(x,y,l,c);if(s){if(v>0)while(b--)x[b]||y[b]||(y[b]=q.call(p));y=xt(y)}M.apply(p,y),w&&!s&&y.length>0&&v+t.length>1&&at.uniqueSort(p)}return w&&(T=k,u=C),x};return r?lt(s):s}l=at.compile=function(e,t){var n,r=[],i=[],o=E[e+\" \"];if(!o){t||(t=mt(e)),n=t.length;while(n--)o=Tt(t[n]),o[b]?r.push(o):i.push(o);o=E(e,Ct(i,r))}return o};function Nt(e,t,n){var r=0,i=t.length;for(;i>r;r++)at(e,t[r],n);return n}function kt(e,t,n,i){var a,s,u,c,p,f=mt(e);if(!i&&1===f.length){if(s=f[0]=f[0].slice(0),s.length>2&&\"ID\"===(u=s[0]).type&&r.getById&&9===t.nodeType&&h&&o.relative[s[1].type]){if(t=(o.find.ID(u.matches[0].replace(rt,it),t)||[])[0],!t)return n;e=e.slice(s.shift().value.length)}a=Q.needsContext.test(e)?0:s.length;while(a--){if(u=s[a],o.relative[c=u.type])break;if((p=o.find[c])&&(i=p(u.matches[0].replace(rt,it),V.test(s[0].type)&&t.parentNode||t))){if(s.splice(a,1),e=i.length&&yt(s),!e)return M.apply(n,i),n;break}}}return l(e,f)(i,t,!h,n,V.test(e)),n}r.sortStable=b.split(\"\").sort(A).join(\"\")===b,r.detectDuplicates=S,p(),r.sortDetached=ut(function(e){return 1&e.compareDocumentPosition(f.createElement(\"div\"))}),ut(function(e){return e.innerHTML=\"<a href='#'></a>\",\"#\"===e.firstChild.getAttribute(\"href\")})||ct(\"type|href|height|width\",function(e,n,r){return r?t:e.getAttribute(n,\"type\"===n.toLowerCase()?1:2)}),r.attributes&&ut(function(e){return e.innerHTML=\"<input/>\",e.firstChild.setAttribute(\"value\",\"\"),\"\"===e.firstChild.getAttribute(\"value\")})||ct(\"value\",function(e,n,r){return r||\"input\"!==e.nodeName.toLowerCase()?t:e.defaultValue}),ut(function(e){return null==e.getAttribute(\"disabled\")})||ct(B,function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&i.specified?i.value:e[n]===!0?n.toLowerCase():null}),x.find=at,x.expr=at.selectors,x.expr[\":\"]=x.expr.pseudos,x.unique=at.uniqueSort,x.text=at.getText,x.isXMLDoc=at.isXML,x.contains=at.contains}(e);var O={};function F(e){var t=O[e]={};return x.each(e.match(T)||[],function(e,n){t[n]=!0}),t}x.Callbacks=function(e){e=\"string\"==typeof e?O[e]||F(e):x.extend({},e);var n,r,i,o,a,s,l=[],u=!e.once&&[],c=function(t){for(r=e.memory&&t,i=!0,a=s||0,s=0,o=l.length,n=!0;l&&o>a;a++)if(l[a].apply(t[0],t[1])===!1&&e.stopOnFalse){r=!1;break}n=!1,l&&(u?u.length&&c(u.shift()):r?l=[]:p.disable())},p={add:function(){if(l){var t=l.length;(function i(t){x.each(t,function(t,n){var r=x.type(n);\"function\"===r?e.unique&&p.has(n)||l.push(n):n&&n.length&&\"string\"!==r&&i(n)})})(arguments),n?o=l.length:r&&(s=t,c(r))}return this},remove:function(){return l&&x.each(arguments,function(e,t){var r;while((r=x.inArray(t,l,r))>-1)l.splice(r,1),n&&(o>=r&&o--,a>=r&&a--)}),this},has:function(e){return e?x.inArray(e,l)>-1:!(!l||!l.length)},empty:function(){return l=[],o=0,this},disable:function(){return l=u=r=t,this},disabled:function(){return!l},lock:function(){return u=t,r||p.disable(),this},locked:function(){return!u},fireWith:function(e,t){return!l||i&&!u||(t=t||[],t=[e,t.slice?t.slice():t],n?u.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},x.extend({Deferred:function(e){var t=[[\"resolve\",\"done\",x.Callbacks(\"once memory\"),\"resolved\"],[\"reject\",\"fail\",x.Callbacks(\"once memory\"),\"rejected\"],[\"notify\",\"progress\",x.Callbacks(\"memory\")]],n=\"pending\",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return x.Deferred(function(n){x.each(t,function(t,o){var a=o[0],s=x.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&x.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+\"With\"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?x.extend(e,r):r}},i={};return r.pipe=r.then,x.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+\"With\"](this===i?r:this,arguments),this},i[o[0]+\"With\"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=g.call(arguments),r=n.length,i=1!==r||e&&x.isFunction(e.promise)?r:0,o=1===i?e:x.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?g.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,l,u;if(r>1)for(s=Array(r),l=Array(r),u=Array(r);r>t;t++)n[t]&&x.isFunction(n[t].promise)?n[t].promise().done(a(t,u,n)).fail(o.reject).progress(a(t,l,s)):--i;return i||o.resolveWith(u,n),o.promise()}}),x.support=function(t){var n,r,o,s,l,u,c,p,f,d=a.createElement(\"div\");if(d.setAttribute(\"className\",\"t\"),d.innerHTML=\"  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>\",n=d.getElementsByTagName(\"*\")||[],r=d.getElementsByTagName(\"a\")[0],!r||!r.style||!n.length)return t;s=a.createElement(\"select\"),u=s.appendChild(a.createElement(\"option\")),o=d.getElementsByTagName(\"input\")[0],r.style.cssText=\"top:1px;float:left;opacity:.5\",t.getSetAttribute=\"t\"!==d.className,t.leadingWhitespace=3===d.firstChild.nodeType,t.tbody=!d.getElementsByTagName(\"tbody\").length,t.htmlSerialize=!!d.getElementsByTagName(\"link\").length,t.style=/top/.test(r.getAttribute(\"style\")),t.hrefNormalized=\"/a\"===r.getAttribute(\"href\"),t.opacity=/^0.5/.test(r.style.opacity),t.cssFloat=!!r.style.cssFloat,t.checkOn=!!o.value,t.optSelected=u.selected,t.enctype=!!a.createElement(\"form\").enctype,t.html5Clone=\"<:nav></:nav>\"!==a.createElement(\"nav\").cloneNode(!0).outerHTML,t.inlineBlockNeedsLayout=!1,t.shrinkWrapBlocks=!1,t.pixelPosition=!1,t.deleteExpando=!0,t.noCloneEvent=!0,t.reliableMarginRight=!0,t.boxSizingReliable=!0,o.checked=!0,t.noCloneChecked=o.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!u.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}o=a.createElement(\"input\"),o.setAttribute(\"value\",\"\"),t.input=\"\"===o.getAttribute(\"value\"),o.value=\"t\",o.setAttribute(\"type\",\"radio\"),t.radioValue=\"t\"===o.value,o.setAttribute(\"checked\",\"t\"),o.setAttribute(\"name\",\"t\"),l=a.createDocumentFragment(),l.appendChild(o),t.appendChecked=o.checked,t.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&&(d.attachEvent(\"onclick\",function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c=\"on\"+f,\"t\"),t[f+\"Bubbles\"]=c in e||d.attributes[c].expando===!1;d.style.backgroundClip=\"content-box\",d.cloneNode(!0).style.backgroundClip=\"\",t.clearCloneStyle=\"content-box\"===d.style.backgroundClip;for(f in x(t))break;return t.ownLast=\"0\"!==f,x(function(){var n,r,o,s=\"padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;\",l=a.getElementsByTagName(\"body\")[0];l&&(n=a.createElement(\"div\"),n.style.cssText=\"border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px\",l.appendChild(n).appendChild(d),d.innerHTML=\"<table><tr><td></td><td>t</td></tr></table>\",o=d.getElementsByTagName(\"td\"),o[0].style.cssText=\"padding:0;margin:0;border:0;display:none\",p=0===o[0].offsetHeight,o[0].style.display=\"\",o[1].style.display=\"none\",t.reliableHiddenOffsets=p&&0===o[0].offsetHeight,d.innerHTML=\"\",d.style.cssText=\"box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;\",x.swap(l,null!=l.style.zoom?{zoom:1}:{},function(){t.boxSizing=4===d.offsetWidth}),e.getComputedStyle&&(t.pixelPosition=\"1%\"!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable=\"4px\"===(e.getComputedStyle(d,null)||{width:\"4px\"}).width,r=d.appendChild(a.createElement(\"div\")),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width=\"0\",d.style.width=\"1px\",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&&(d.innerHTML=\"\",d.style.cssText=s+\"width:1px;padding:1px;display:inline;zoom:1\",t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display=\"block\",d.innerHTML=\"<div></div>\",d.firstChild.style.width=\"5px\",t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&&(l.style.zoom=1)),l.removeChild(n),n=d=o=r=null)}),n=s=l=u=r=o=null,t\n}({});var B=/(?:\\{[\\s\\S]*\\}|\\[[\\s\\S]*\\])$/,P=/([A-Z])/g;function R(e,n,r,i){if(x.acceptData(e)){var o,a,s=x.expando,l=e.nodeType,u=l?x.cache:e,c=l?e[s]:e[s]&&s;if(c&&u[c]&&(i||u[c].data)||r!==t||\"string\"!=typeof n)return c||(c=l?e[s]=p.pop()||x.guid++:s),u[c]||(u[c]=l?{}:{toJSON:x.noop}),(\"object\"==typeof n||\"function\"==typeof n)&&(i?u[c]=x.extend(u[c],n):u[c].data=x.extend(u[c].data,n)),a=u[c],i||(a.data||(a.data={}),a=a.data),r!==t&&(a[x.camelCase(n)]=r),\"string\"==typeof n?(o=a[n],null==o&&(o=a[x.camelCase(n)])):o=a,o}}function W(e,t,n){if(x.acceptData(e)){var r,i,o=e.nodeType,a=o?x.cache:e,s=o?e[x.expando]:x.expando;if(a[s]){if(t&&(r=n?a[s]:a[s].data)){x.isArray(t)?t=t.concat(x.map(t,x.camelCase)):t in r?t=[t]:(t=x.camelCase(t),t=t in r?[t]:t.split(\" \")),i=t.length;while(i--)delete r[t[i]];if(n?!I(r):!x.isEmptyObject(r))return}(n||(delete a[s].data,I(a[s])))&&(o?x.cleanData([e],!0):x.support.deleteExpando||a!=a.window?delete a[s]:a[s]=null)}}}x.extend({cache:{},noData:{applet:!0,embed:!0,object:\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\"},hasData:function(e){return e=e.nodeType?x.cache[e[x.expando]]:e[x.expando],!!e&&!I(e)},data:function(e,t,n){return R(e,t,n)},removeData:function(e,t){return W(e,t)},_data:function(e,t,n){return R(e,t,n,!0)},_removeData:function(e,t){return W(e,t,!0)},acceptData:function(e){if(e.nodeType&&1!==e.nodeType&&9!==e.nodeType)return!1;var t=e.nodeName&&x.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute(\"classid\")===t}}),x.fn.extend({data:function(e,n){var r,i,o=null,a=0,s=this[0];if(e===t){if(this.length&&(o=x.data(s),1===s.nodeType&&!x._data(s,\"parsedAttrs\"))){for(r=s.attributes;r.length>a;a++)i=r[a].name,0===i.indexOf(\"data-\")&&(i=x.camelCase(i.slice(5)),$(s,i,o[i]));x._data(s,\"parsedAttrs\",!0)}return o}return\"object\"==typeof e?this.each(function(){x.data(this,e)}):arguments.length>1?this.each(function(){x.data(this,e,n)}):s?$(s,e,x.data(s,e)):null},removeData:function(e){return this.each(function(){x.removeData(this,e)})}});function $(e,n,r){if(r===t&&1===e.nodeType){var i=\"data-\"+n.replace(P,\"-$1\").toLowerCase();if(r=e.getAttribute(i),\"string\"==typeof r){try{r=\"true\"===r?!0:\"false\"===r?!1:\"null\"===r?null:+r+\"\"===r?+r:B.test(r)?x.parseJSON(r):r}catch(o){}x.data(e,n,r)}else r=t}return r}function I(e){var t;for(t in e)if((\"data\"!==t||!x.isEmptyObject(e[t]))&&\"toJSON\"!==t)return!1;return!0}x.extend({queue:function(e,n,r){var i;return e?(n=(n||\"fx\")+\"queue\",i=x._data(e,n),r&&(!i||x.isArray(r)?i=x._data(e,n,x.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||\"fx\";var n=x.queue(e,t),r=n.length,i=n.shift(),o=x._queueHooks(e,t),a=function(){x.dequeue(e,t)};\"inprogress\"===i&&(i=n.shift(),r--),i&&(\"fx\"===t&&n.unshift(\"inprogress\"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+\"queueHooks\";return x._data(e,n)||x._data(e,n,{empty:x.Callbacks(\"once memory\").add(function(){x._removeData(e,t+\"queue\"),x._removeData(e,n)})})}}),x.fn.extend({queue:function(e,n){var r=2;return\"string\"!=typeof e&&(n=e,e=\"fx\",r--),r>arguments.length?x.queue(this[0],e):n===t?this:this.each(function(){var t=x.queue(this,e,n);x._queueHooks(this,e),\"fx\"===e&&\"inprogress\"!==t[0]&&x.dequeue(this,e)})},dequeue:function(e){return this.each(function(){x.dequeue(this,e)})},delay:function(e,t){return e=x.fx?x.fx.speeds[e]||e:e,t=t||\"fx\",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||\"fx\",[])},promise:function(e,n){var r,i=1,o=x.Deferred(),a=this,s=this.length,l=function(){--i||o.resolveWith(a,[a])};\"string\"!=typeof e&&(n=e,e=t),e=e||\"fx\";while(s--)r=x._data(a[s],e+\"queueHooks\"),r&&r.empty&&(i++,r.empty.add(l));return l(),o.promise(n)}});var z,X,U=/[\\t\\r\\n\\f]/g,V=/\\r/g,Y=/^(?:input|select|textarea|button|object)$/i,J=/^(?:a|area)$/i,G=/^(?:checked|selected)$/i,Q=x.support.getSetAttribute,K=x.support.input;x.fn.extend({attr:function(e,t){return x.access(this,x.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){x.removeAttr(this,e)})},prop:function(e,t){return x.access(this,x.prop,e,t,arguments.length>1)},removeProp:function(e){return e=x.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,l=\"string\"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).addClass(e.call(this,t,this.className))});if(l)for(t=(e||\"\").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(\" \"+n.className+\" \").replace(U,\" \"):\" \")){o=0;while(i=t[o++])0>r.indexOf(\" \"+i+\" \")&&(r+=i+\" \");n.className=x.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,l=0===arguments.length||\"string\"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).removeClass(e.call(this,t,this.className))});if(l)for(t=(e||\"\").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(\" \"+n.className+\" \").replace(U,\" \"):\"\")){o=0;while(i=t[o++])while(r.indexOf(\" \"+i+\" \")>=0)r=r.replace(\" \"+i+\" \",\" \");n.className=e?x.trim(r):\"\"}return this},toggleClass:function(e,t){var n=typeof e;return\"boolean\"==typeof t&&\"string\"===n?t?this.addClass(e):this.removeClass(e):x.isFunction(e)?this.each(function(n){x(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if(\"string\"===n){var t,r=0,o=x(this),a=e.match(T)||[];while(t=a[r++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else(n===i||\"boolean\"===n)&&(this.className&&x._data(this,\"__className__\",this.className),this.className=this.className||e===!1?\"\":x._data(this,\"__className__\")||\"\")})},hasClass:function(e){var t=\" \"+e+\" \",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(\" \"+this[n].className+\" \").replace(U,\" \").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=x.isFunction(e),this.each(function(n){var o;1===this.nodeType&&(o=i?e.call(this,n,x(this).val()):e,null==o?o=\"\":\"number\"==typeof o?o+=\"\":x.isArray(o)&&(o=x.map(o,function(e){return null==e?\"\":e+\"\"})),r=x.valHooks[this.type]||x.valHooks[this.nodeName.toLowerCase()],r&&\"set\"in r&&r.set(this,o,\"value\")!==t||(this.value=o))});if(o)return r=x.valHooks[o.type]||x.valHooks[o.nodeName.toLowerCase()],r&&\"get\"in r&&(n=r.get(o,\"value\"))!==t?n:(n=o.value,\"string\"==typeof n?n.replace(V,\"\"):null==n?\"\":n)}}}),x.extend({valHooks:{option:{get:function(e){var t=x.find.attr(e,\"value\");return null!=t?t:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o=\"select-one\"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,l=0>i?s:o?i:0;for(;s>l;l++)if(n=r[l],!(!n.selected&&l!==i||(x.support.optDisabled?n.disabled:null!==n.getAttribute(\"disabled\"))||n.parentNode.disabled&&x.nodeName(n.parentNode,\"optgroup\"))){if(t=x(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n,r,i=e.options,o=x.makeArray(t),a=i.length;while(a--)r=i[a],(r.selected=x.inArray(x(r).val(),o)>=0)&&(n=!0);return n||(e.selectedIndex=-1),o}}},attr:function(e,n,r){var o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return typeof e.getAttribute===i?x.prop(e,n,r):(1===s&&x.isXMLDoc(e)||(n=n.toLowerCase(),o=x.attrHooks[n]||(x.expr.match.bool.test(n)?X:z)),r===t?o&&\"get\"in o&&null!==(a=o.get(e,n))?a:(a=x.find.attr(e,n),null==a?t:a):null!==r?o&&\"set\"in o&&(a=o.set(e,r,n))!==t?a:(e.setAttribute(n,r+\"\"),r):(x.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(T);if(o&&1===e.nodeType)while(n=o[i++])r=x.propFix[n]||n,x.expr.match.bool.test(n)?K&&Q||!G.test(n)?e[r]=!1:e[x.camelCase(\"default-\"+n)]=e[r]=!1:x.attr(e,n,\"\"),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!x.support.radioValue&&\"radio\"===t&&x.nodeName(e,\"input\")){var n=e.value;return e.setAttribute(\"type\",t),n&&(e.value=n),t}}}},propFix:{\"for\":\"htmlFor\",\"class\":\"className\"},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!x.isXMLDoc(e),a&&(n=x.propFix[n]||n,o=x.propHooks[n]),r!==t?o&&\"set\"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&\"get\"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var t=x.find.attr(e,\"tabindex\");return t?parseInt(t,10):Y.test(e.nodeName)||J.test(e.nodeName)&&e.href?0:-1}}}}),X={set:function(e,t,n){return t===!1?x.removeAttr(e,n):K&&Q||!G.test(n)?e.setAttribute(!Q&&x.propFix[n]||n,n):e[x.camelCase(\"default-\"+n)]=e[n]=!0,n}},x.each(x.expr.match.bool.source.match(/\\w+/g),function(e,n){var r=x.expr.attrHandle[n]||x.find.attr;x.expr.attrHandle[n]=K&&Q||!G.test(n)?function(e,n,i){var o=x.expr.attrHandle[n],a=i?t:(x.expr.attrHandle[n]=t)!=r(e,n,i)?n.toLowerCase():null;return x.expr.attrHandle[n]=o,a}:function(e,n,r){return r?t:e[x.camelCase(\"default-\"+n)]?n.toLowerCase():null}}),K&&Q||(x.attrHooks.value={set:function(e,n,r){return x.nodeName(e,\"input\")?(e.defaultValue=n,t):z&&z.set(e,n,r)}}),Q||(z={set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+=\"\",\"value\"===r||n===e.getAttribute(r)?n:t}},x.expr.attrHandle.id=x.expr.attrHandle.name=x.expr.attrHandle.coords=function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&\"\"!==i.value?i.value:null},x.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&r.specified?r.value:t},set:z.set},x.attrHooks.contenteditable={set:function(e,t,n){z.set(e,\"\"===t?!1:t,n)}},x.each([\"width\",\"height\"],function(e,n){x.attrHooks[n]={set:function(e,r){return\"\"===r?(e.setAttribute(n,\"auto\"),r):t}}})),x.support.hrefNormalized||x.each([\"href\",\"src\"],function(e,t){x.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}}),x.support.style||(x.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+\"\"}}),x.support.optSelected||(x.propHooks.selected={get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}}),x.each([\"tabIndex\",\"readOnly\",\"maxLength\",\"cellSpacing\",\"cellPadding\",\"rowSpan\",\"colSpan\",\"useMap\",\"frameBorder\",\"contentEditable\"],function(){x.propFix[this.toLowerCase()]=this}),x.support.enctype||(x.propFix.enctype=\"encoding\"),x.each([\"radio\",\"checkbox\"],function(){x.valHooks[this]={set:function(e,n){return x.isArray(n)?e.checked=x.inArray(x(e).val(),n)>=0:t}},x.support.checkOn||(x.valHooks[this].get=function(e){return null===e.getAttribute(\"value\")?\"on\":e.value})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\\.(.+)|)$/;function it(){return!0}function ot(){return!1}function at(){try{return a.activeElement}catch(e){}}x.event={global:{},add:function(e,n,r,o,a){var s,l,u,c,p,f,d,h,g,m,y,v=x._data(e);if(v){r.handler&&(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=x.guid++),(l=v.events)||(l=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof x===i||e&&x.event.triggered===e.type?t:x.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||\"\").match(T)||[\"\"],u=n.length;while(u--)s=rt.exec(n[u])||[],g=y=s[1],m=(s[2]||\"\").split(\".\").sort(),g&&(p=x.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=x.event.special[g]||{},d=x.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&&x.expr.match.needsContext.test(a),namespace:m.join(\".\")},c),(h=l[g])||(h=l[g]=[],h.delegateCount=0,p.setup&&p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&&e.attachEvent(\"on\"+g,f))),p.add&&(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),x.event.global[g]=!0);e=null}},remove:function(e,t,n,r,i){var o,a,s,l,u,c,p,f,d,h,g,m=x.hasData(e)&&x._data(e);if(m&&(c=m.events)){t=(t||\"\").match(T)||[\"\"],u=t.length;while(u--)if(s=rt.exec(t[u])||[],d=g=s[1],h=(s[2]||\"\").split(\".\").sort(),d){p=x.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&&RegExp(\"(^|\\\\.)\"+h.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"),l=o=f.length;while(o--)a=f[o],!i&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&(\"**\"!==r||!a.selector)||(f.splice(o,1),a.selector&&f.delegateCount--,p.remove&&p.remove.call(e,a));l&&!f.length&&(p.teardown&&p.teardown.call(e,h,m.handle)!==!1||x.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)x.event.remove(e,d+t[u],n,r,!0);x.isEmptyObject(c)&&(delete m.handle,x._removeData(e,\"events\"))}},trigger:function(n,r,i,o){var s,l,u,c,p,f,d,h=[i||a],g=v.call(n,\"type\")?n.type:n,m=v.call(n,\"namespace\")?n.namespace.split(\".\"):[];if(u=f=i=i||a,3!==i.nodeType&&8!==i.nodeType&&!nt.test(g+x.event.triggered)&&(g.indexOf(\".\")>=0&&(m=g.split(\".\"),g=m.shift(),m.sort()),l=0>g.indexOf(\":\")&&\"on\"+g,n=n[x.expando]?n:new x.Event(g,\"object\"==typeof n&&n),n.isTrigger=o?2:3,n.namespace=m.join(\".\"),n.namespace_re=n.namespace?RegExp(\"(^|\\\\.)\"+m.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:x.makeArray(r,[n]),p=x.event.special[g]||{},o||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!o&&!p.noBubble&&!x.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(u=u.parentNode);u;u=u.parentNode)h.push(u),f=u;f===(i.ownerDocument||a)&&h.push(f.defaultView||f.parentWindow||e)}d=0;while((u=h[d++])&&!n.isPropagationStopped())n.type=d>1?c:p.bindType||g,s=(x._data(u,\"events\")||{})[n.type]&&x._data(u,\"handle\"),s&&s.apply(u,r),s=l&&u[l],s&&x.acceptData(u)&&s.apply&&s.apply(u,r)===!1&&n.preventDefault();if(n.type=g,!o&&!n.isDefaultPrevented()&&(!p._default||p._default.apply(h.pop(),r)===!1)&&x.acceptData(i)&&l&&i[g]&&!x.isWindow(i)){f=i[l],f&&(i[l]=null),x.event.triggered=g;try{i[g]()}catch(y){}x.event.triggered=t,f&&(i[l]=f)}return n.result}},dispatch:function(e){e=x.event.fix(e);var n,r,i,o,a,s=[],l=g.call(arguments),u=(x._data(this,\"events\")||{})[e.type]||[],c=x.event.special[e.type]||{};if(l[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=x.event.handlers.call(this,e,u),n=0;while((o=s[n++])&&!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,r=((x.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,l),r!==t&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],l=n.delegateCount,u=e.target;if(l&&u.nodeType&&(!e.button||\"click\"!==e.type))for(;u!=this;u=u.parentNode||this)if(1===u.nodeType&&(u.disabled!==!0||\"click\"!==e.type)){for(o=[],a=0;l>a;a++)i=n[a],r=i.selector+\" \",o[r]===t&&(o[r]=i.needsContext?x(r,this).index(u)>=0:x.find(r,this,null,[u]).length),o[r]&&o.push(i);o.length&&s.push({elem:u,handlers:o})}return n.length>l&&s.push({elem:this,handlers:n.slice(l)}),s},fix:function(e){if(e[x.expando])return e;var t,n,r,i=e.type,o=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=tt.test(i)?this.mouseHooks:et.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new x.Event(o),t=r.length;while(t--)n=r[t],e[n]=o[n];return e.target||(e.target=o.srcElement||a),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,o):e},props:\"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which\".split(\" \"),fixHooks:{},keyHooks:{props:\"char charCode key keyCode\".split(\" \"),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:\"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement\".split(\" \"),filter:function(e,n){var r,i,o,s=n.button,l=n.fromElement;return null==e.pageX&&null!=n.clientX&&(i=e.target.ownerDocument||a,o=i.documentElement,r=i.body,e.pageX=n.clientX+(o&&o.scrollLeft||r&&r.scrollLeft||0)-(o&&o.clientLeft||r&&r.clientLeft||0),e.pageY=n.clientY+(o&&o.scrollTop||r&&r.scrollTop||0)-(o&&o.clientTop||r&&r.clientTop||0)),!e.relatedTarget&&l&&(e.relatedTarget=l===e.target?n.toElement:l),e.which||s===t||(e.which=1&s?1:2&s?3:4&s?2:0),e}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==at()&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:\"focusin\"},blur:{trigger:function(){return this===at()&&this.blur?(this.blur(),!1):t},delegateType:\"focusout\"},click:{trigger:function(){return x.nodeName(this,\"input\")&&\"checkbox\"===this.type&&this.click?(this.click(),!1):t},_default:function(e){return x.nodeName(e.target,\"a\")}},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=x.extend(new x.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?x.event.trigger(i,null,t):x.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},x.removeEvent=a.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r=\"on\"+t;e.detachEvent&&(typeof e[r]===i&&(e[r]=null),e.detachEvent(r,n))},x.Event=function(e,n){return this instanceof x.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?it:ot):this.type=e,n&&x.extend(this,n),this.timeStamp=e&&e.timeStamp||x.now(),this[x.expando]=!0,t):new x.Event(e,n)},x.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,this.stopPropagation()}},x.each({mouseenter:\"mouseover\",mouseleave:\"mouseout\"},function(e,t){x.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return(!i||i!==r&&!x.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),x.support.submitBubbles||(x.event.special.submit={setup:function(){return x.nodeName(this,\"form\")?!1:(x.event.add(this,\"click._submit keypress._submit\",function(e){var n=e.target,r=x.nodeName(n,\"input\")||x.nodeName(n,\"button\")?n.form:t;r&&!x._data(r,\"submitBubbles\")&&(x.event.add(r,\"submit._submit\",function(e){e._submit_bubble=!0}),x._data(r,\"submitBubbles\",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&x.event.simulate(\"submit\",this.parentNode,e,!0))},teardown:function(){return x.nodeName(this,\"form\")?!1:(x.event.remove(this,\"._submit\"),t)}}),x.support.changeBubbles||(x.event.special.change={setup:function(){return Z.test(this.nodeName)?((\"checkbox\"===this.type||\"radio\"===this.type)&&(x.event.add(this,\"propertychange._change\",function(e){\"checked\"===e.originalEvent.propertyName&&(this._just_changed=!0)}),x.event.add(this,\"click._change\",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),x.event.simulate(\"change\",this,e,!0)})),!1):(x.event.add(this,\"beforeactivate._change\",function(e){var t=e.target;Z.test(t.nodeName)&&!x._data(t,\"changeBubbles\")&&(x.event.add(t,\"change._change\",function(e){!this.parentNode||e.isSimulated||e.isTrigger||x.event.simulate(\"change\",this.parentNode,e,!0)}),x._data(t,\"changeBubbles\",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||\"radio\"!==n.type&&\"checkbox\"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return x.event.remove(this,\"._change\"),!Z.test(this.nodeName)}}),x.support.focusinBubbles||x.each({focus:\"focusin\",blur:\"focusout\"},function(e,t){var n=0,r=function(e){x.event.simulate(t,e.target,x.event.fix(e),!0)};x.event.special[t]={setup:function(){0===n++&&a.addEventListener(e,r,!0)},teardown:function(){0===--n&&a.removeEventListener(e,r,!0)}}}),x.fn.extend({on:function(e,n,r,i,o){var a,s;if(\"object\"==typeof e){\"string\"!=typeof n&&(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&(\"string\"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&&(s=i,i=function(e){return x().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=x.guid++)),this.each(function(){x.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,x(e.delegateTarget).off(i.namespace?i.origType+\".\"+i.namespace:i.origType,i.selector,i.handler),this;if(\"object\"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||\"function\"==typeof n)&&(r=n,n=t),r===!1&&(r=ot),this.each(function(){x.event.remove(this,e,r,n)})},trigger:function(e,t){return this.each(function(){x.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?x.event.trigger(e,n,r,!0):t}});var st=/^.[^:#\\[\\.,]*$/,lt=/^(?:parents|prev(?:Until|All))/,ut=x.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};x.fn.extend({find:function(e){var t,n=[],r=this,i=r.length;if(\"string\"!=typeof e)return this.pushStack(x(e).filter(function(){for(t=0;i>t;t++)if(x.contains(r[t],this))return!0}));for(t=0;i>t;t++)x.find(e,r[t],n);return n=this.pushStack(i>1?x.unique(n):n),n.selector=this.selector?this.selector+\" \"+e:e,n},has:function(e){var t,n=x(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(x.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e||[],!0))},filter:function(e){return this.pushStack(ft(this,e||[],!1))},is:function(e){return!!ft(this,\"string\"==typeof e&&ut.test(e)?x(e):e||[],!1).length},closest:function(e,t){var n,r=0,i=this.length,o=[],a=ut.test(e)||\"string\"!=typeof e?x(e,t||this.context):0;for(;i>r;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(11>n.nodeType&&(a?a.index(n)>-1:1===n.nodeType&&x.find.matchesSelector(n,e))){n=o.push(n);break}return this.pushStack(o.length>1?x.unique(o):o)},index:function(e){return e?\"string\"==typeof e?x.inArray(this[0],x(e)):x.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n=\"string\"==typeof e?x(e,t):x.makeArray(e&&e.nodeType?[e]:e),r=x.merge(this.get(),n);return this.pushStack(x.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}x.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return x.dir(e,\"parentNode\")},parentsUntil:function(e,t,n){return x.dir(e,\"parentNode\",n)},next:function(e){return pt(e,\"nextSibling\")},prev:function(e){return pt(e,\"previousSibling\")},nextAll:function(e){return x.dir(e,\"nextSibling\")},prevAll:function(e){return x.dir(e,\"previousSibling\")},nextUntil:function(e,t,n){return x.dir(e,\"nextSibling\",n)},prevUntil:function(e,t,n){return x.dir(e,\"previousSibling\",n)},siblings:function(e){return x.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return x.sibling(e.firstChild)},contents:function(e){return x.nodeName(e,\"iframe\")?e.contentDocument||e.contentWindow.document:x.merge([],e.childNodes)}},function(e,t){x.fn[e]=function(n,r){var i=x.map(this,t,n);return\"Until\"!==e.slice(-5)&&(r=n),r&&\"string\"==typeof r&&(i=x.filter(r,i)),this.length>1&&(ct[e]||(i=x.unique(i)),lt.test(e)&&(i=i.reverse())),this.pushStack(i)}}),x.extend({filter:function(e,t,n){var r=t[0];return n&&(e=\":not(\"+e+\")\"),1===t.length&&1===r.nodeType?x.find.matchesSelector(r,e)?[r]:[]:x.find.matches(e,x.grep(t,function(e){return 1===e.nodeType}))},dir:function(e,n,r){var i=[],o=e[n];while(o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!x(o).is(r)))1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function ft(e,t,n){if(x.isFunction(t))return x.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return x.grep(e,function(e){return e===t!==n});if(\"string\"==typeof t){if(st.test(t))return x.filter(t,e,n);t=x.filter(t,e)}return x.grep(e,function(e){return x.inArray(e,t)>=0!==n})}function dt(e){var t=ht.split(\"|\"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht=\"abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video\",gt=/ jQuery\\d+=\"(?:null|\\d+)\"/g,mt=RegExp(\"<(?:\"+ht+\")[\\\\s/>]\",\"i\"),yt=/^\\s+/,vt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/gi,bt=/<([\\w:]+)/,xt=/<tbody/i,wt=/<|&#?\\w+;/,Tt=/<(?:script|style|link)/i,Ct=/^(?:checkbox|radio)$/i,Nt=/checked\\s*(?:[^=]|=\\s*.checked.)/i,kt=/^$|\\/(?:java|ecma)script/i,Et=/^true\\/(.*)/,St=/^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g,At={option:[1,\"<select multiple='multiple'>\",\"</select>\"],legend:[1,\"<fieldset>\",\"</fieldset>\"],area:[1,\"<map>\",\"</map>\"],param:[1,\"<object>\",\"</object>\"],thead:[1,\"<table>\",\"</table>\"],tr:[2,\"<table><tbody>\",\"</tbody></table>\"],col:[2,\"<table><tbody></tbody><colgroup>\",\"</colgroup></table>\"],td:[3,\"<table><tbody><tr>\",\"</tr></tbody></table>\"],_default:x.support.htmlSerialize?[0,\"\",\"\"]:[1,\"X<div>\",\"</div>\"]},jt=dt(a),Dt=jt.appendChild(a.createElement(\"div\"));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,x.fn.extend({text:function(e){return x.access(this,function(e){return e===t?x.text(this):this.empty().append((this[0]&&this[0].ownerDocument||a).createTextNode(e))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.appendChild(e)}})},prepend:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=e?x.filter(e,this):this,i=0;for(;null!=(n=r[i]);i++)t||1!==n.nodeType||x.cleanData(Ft(n)),n.parentNode&&(t&&x.contains(n.ownerDocument,n)&&_t(Ft(n,\"script\")),n.parentNode.removeChild(n));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&&x.cleanData(Ft(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&x.nodeName(e,\"select\")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return x.clone(this,e,t)})},html:function(e){return x.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,\"\"):t;if(!(\"string\"!=typeof e||Tt.test(e)||!x.support.htmlSerialize&&mt.test(e)||!x.support.leadingWhitespace&&yt.test(e)||At[(bt.exec(e)||[\"\",\"\"])[1].toLowerCase()])){e=e.replace(vt,\"<$1></$2>\");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(x.cleanData(Ft(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=x.map(this,function(e){return[e.nextSibling,e.parentNode]}),t=0;return this.domManip(arguments,function(n){var r=e[t++],i=e[t++];i&&(r&&r.parentNode!==i&&(r=this.nextSibling),x(this).remove(),i.insertBefore(n,r))},!0),t?this:this.remove()},detach:function(e){return this.remove(e,!0)},domManip:function(e,t,n){e=d.apply([],e);var r,i,o,a,s,l,u=0,c=this.length,p=this,f=c-1,h=e[0],g=x.isFunction(h);if(g||!(1>=c||\"string\"!=typeof h||x.support.checkClone)&&Nt.test(h))return this.each(function(r){var i=p.eq(r);g&&(e[0]=h.call(this,r,i.html())),i.domManip(e,t,n)});if(c&&(l=x.buildFragment(e,this[0].ownerDocument,!1,!n&&this),r=l.firstChild,1===l.childNodes.length&&(l=r),r)){for(a=x.map(Ft(l,\"script\"),Ht),o=a.length;c>u;u++)i=l,u!==f&&(i=x.clone(i,!0,!0),o&&x.merge(a,Ft(i,\"script\"))),t.call(this[u],i,u);if(o)for(s=a[a.length-1].ownerDocument,x.map(a,qt),u=0;o>u;u++)i=a[u],kt.test(i.type||\"\")&&!x._data(i,\"globalEval\")&&x.contains(s,i)&&(i.src?x._evalUrl(i.src):x.globalEval((i.text||i.textContent||i.innerHTML||\"\").replace(St,\"\")));l=r=null}return this}});function Lt(e,t){return x.nodeName(e,\"table\")&&x.nodeName(1===t.nodeType?t:t.firstChild,\"tr\")?e.getElementsByTagName(\"tbody\")[0]||e.appendChild(e.ownerDocument.createElement(\"tbody\")):e}function Ht(e){return e.type=(null!==x.find.attr(e,\"type\"))+\"/\"+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute(\"type\"),e}function _t(e,t){var n,r=0;for(;null!=(n=e[r]);r++)x._data(n,\"globalEval\",!t||x._data(t[r],\"globalEval\"))}function Mt(e,t){if(1===t.nodeType&&x.hasData(e)){var n,r,i,o=x._data(e),a=x._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)x.event.add(t,n,s[n][r])}a.data&&(a.data=x.extend({},a.data))}}function Ot(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!x.support.noCloneEvent&&t[x.expando]){i=x._data(t);for(r in i.events)x.removeEvent(t,r,i.handle);t.removeAttribute(x.expando)}\"script\"===n&&t.text!==e.text?(Ht(t).text=e.text,qt(t)):\"object\"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),x.support.html5Clone&&e.innerHTML&&!x.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):\"input\"===n&&Ct.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):\"option\"===n?t.defaultSelected=t.selected=e.defaultSelected:(\"input\"===n||\"textarea\"===n)&&(t.defaultValue=e.defaultValue)}}x.each({appendTo:\"append\",prependTo:\"prepend\",insertBefore:\"before\",insertAfter:\"after\",replaceAll:\"replaceWith\"},function(e,t){x.fn[e]=function(e){var n,r=0,i=[],o=x(e),a=o.length-1;for(;a>=r;r++)n=r===a?this:this.clone(!0),x(o[r])[t](n),h.apply(i,n.get());return this.pushStack(i)}});function Ft(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||\"*\"):typeof e.querySelectorAll!==i?e.querySelectorAll(n||\"*\"):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||x.nodeName(o,n)?s.push(o):x.merge(s,Ft(o,n));return n===t||n&&x.nodeName(e,n)?x.merge([e],s):s}function Bt(e){Ct.test(e.type)&&(e.defaultChecked=e.checked)}x.extend({clone:function(e,t,n){var r,i,o,a,s,l=x.contains(e.ownerDocument,e);if(x.support.html5Clone||x.isXMLDoc(e)||!mt.test(\"<\"+e.nodeName+\">\")?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(x.support.noCloneEvent&&x.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||x.isXMLDoc(e)))for(r=Ft(o),s=Ft(e),a=0;null!=(i=s[a]);++a)r[a]&&Ot(i,r[a]);if(t)if(n)for(s=s||Ft(e),r=r||Ft(o),a=0;null!=(i=s[a]);a++)Mt(i,r[a]);else Mt(e,o);return r=Ft(o,\"script\"),r.length>0&&_t(r,!l&&Ft(e,\"script\")),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,l,u,c,p=e.length,f=dt(t),d=[],h=0;for(;p>h;h++)if(o=e[h],o||0===o)if(\"object\"===x.type(o))x.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement(\"div\")),l=(bt.exec(o)||[\"\",\"\"])[1].toLowerCase(),c=At[l]||At._default,s.innerHTML=c[1]+o.replace(vt,\"<$1></$2>\")+c[2],i=c[0];while(i--)s=s.lastChild;if(!x.support.leadingWhitespace&&yt.test(o)&&d.push(t.createTextNode(yt.exec(o)[0])),!x.support.tbody){o=\"table\"!==l||xt.test(o)?\"<table>\"!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&&o.childNodes.length;while(i--)x.nodeName(u=o.childNodes[i],\"tbody\")&&!u.childNodes.length&&o.removeChild(u)}x.merge(d,s.childNodes),s.textContent=\"\";while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&&f.removeChild(s),x.support.appendChecked||x.grep(Ft(d,\"input\"),Bt),h=0;while(o=d[h++])if((!r||-1===x.inArray(o,r))&&(a=x.contains(o.ownerDocument,o),s=Ft(f.appendChild(o),\"script\"),a&&_t(s),n)){i=0;while(o=s[i++])kt.test(o.type||\"\")&&n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,l=x.expando,u=x.cache,c=x.support.deleteExpando,f=x.event.special;for(;null!=(n=e[s]);s++)if((t||x.acceptData(n))&&(o=n[l],a=o&&u[o])){if(a.events)for(r in a.events)f[r]?x.event.remove(n,r):x.removeEvent(n,r,a.handle);\nu[o]&&(delete u[o],c?delete n[l]:typeof n.removeAttribute!==i?n.removeAttribute(l):n[l]=null,p.push(o))}},_evalUrl:function(e){return x.ajax({url:e,type:\"GET\",dataType:\"script\",async:!1,global:!1,\"throws\":!0})}}),x.fn.extend({wrapAll:function(e){if(x.isFunction(e))return this.each(function(t){x(this).wrapAll(e.call(this,t))});if(this[0]){var t=x(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return x.isFunction(e)?this.each(function(t){x(this).wrapInner(e.call(this,t))}):this.each(function(){var t=x(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=x.isFunction(e);return this.each(function(n){x(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){x.nodeName(this,\"body\")||x(this).replaceWith(this.childNodes)}).end()}});var Pt,Rt,Wt,$t=/alpha\\([^)]*\\)/i,It=/opacity\\s*=\\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp(\"^(\"+w+\")(.*)$\",\"i\"),Yt=RegExp(\"^(\"+w+\")(?!px)[a-z%]+$\",\"i\"),Jt=RegExp(\"^([+-])=(\"+w+\")\",\"i\"),Gt={BODY:\"block\"},Qt={position:\"absolute\",visibility:\"hidden\",display:\"block\"},Kt={letterSpacing:0,fontWeight:400},Zt=[\"Top\",\"Right\",\"Bottom\",\"Left\"],en=[\"Webkit\",\"O\",\"Moz\",\"ms\"];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,\"none\"===x.css(e,\"display\")||!x.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.style&&(o[a]=x._data(r,\"olddisplay\"),n=r.style.display,t?(o[a]||\"none\"!==n||(r.style.display=\"\"),\"\"===r.style.display&&nn(r)&&(o[a]=x._data(r,\"olddisplay\",ln(r.nodeName)))):o[a]||(i=nn(r),(n&&\"none\"!==n||!i)&&x._data(r,\"olddisplay\",i?n:x.css(r,\"display\"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&\"none\"!==r.style.display&&\"\"!==r.style.display||(r.style.display=t?o[a]||\"\":\"none\"));return e}x.fn.extend({css:function(e,n){return x.access(this,function(e,n,r){var i,o,a={},s=0;if(x.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=x.css(e,n[s],!1,o);return a}return r!==t?x.style(e,n,r):x.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){return\"boolean\"==typeof e?e?this.show():this.hide():this.each(function(){nn(this)?x(this).show():x(this).hide()})}}),x.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,\"opacity\");return\"\"===n?\"1\":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{\"float\":x.support.cssFloat?\"cssFloat\":\"styleFloat\"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,l=x.camelCase(n),u=e.style;if(n=x.cssProps[l]||(x.cssProps[l]=tn(u,l)),s=x.cssHooks[n]||x.cssHooks[l],r===t)return s&&\"get\"in s&&(o=s.get(e,!1,i))!==t?o:u[n];if(a=typeof r,\"string\"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(x.css(e,n)),a=\"number\"),!(null==r||\"number\"===a&&isNaN(r)||(\"number\"!==a||x.cssNumber[l]||(r+=\"px\"),x.support.clearCloneStyle||\"\"!==r||0!==n.indexOf(\"background\")||(u[n]=\"inherit\"),s&&\"set\"in s&&(r=s.set(e,r,i))===t)))try{u[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,l=x.camelCase(n);return n=x.cssProps[l]||(x.cssProps[l]=tn(e.style,l)),s=x.cssHooks[n]||x.cssHooks[l],s&&\"get\"in s&&(a=s.get(e,!0,r)),a===t&&(a=Wt(e,n,i)),\"normal\"===a&&n in Kt&&(a=Kt[n]),\"\"===r||r?(o=parseFloat(a),r===!0||x.isNumeric(o)?o||0:a):a}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s.getPropertyValue(n)||s[n]:t,u=e.style;return s&&(\"\"!==l||x.contains(e.ownerDocument,e)||(l=x.style(e,n)),Yt.test(l)&&Ut.test(n)&&(i=u.width,o=u.minWidth,a=u.maxWidth,u.minWidth=u.maxWidth=u.width=l,l=s.width,u.width=i,u.minWidth=o,u.maxWidth=a)),l}):a.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s[n]:t,u=e.style;return null==l&&u&&u[n]&&(l=u[n]),Yt.test(l)&&!zt.test(n)&&(i=u.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),u.left=\"fontSize\"===n?\"1em\":l,l=u.pixelLeft+\"px\",u.left=i,a&&(o.left=a)),\"\"===l?\"auto\":l});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||\"px\"):t}function an(e,t,n,r,i){var o=n===(r?\"border\":\"content\")?4:\"width\"===t?1:0,a=0;for(;4>o;o+=2)\"margin\"===n&&(a+=x.css(e,n+Zt[o],!0,i)),r?(\"content\"===n&&(a-=x.css(e,\"padding\"+Zt[o],!0,i)),\"margin\"!==n&&(a-=x.css(e,\"border\"+Zt[o]+\"Width\",!0,i))):(a+=x.css(e,\"padding\"+Zt[o],!0,i),\"padding\"!==n&&(a+=x.css(e,\"border\"+Zt[o]+\"Width\",!0,i)));return a}function sn(e,t,n){var r=!0,i=\"width\"===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=x.support.boxSizing&&\"border-box\"===x.css(e,\"boxSizing\",!1,o);if(0>=i||null==i){if(i=Wt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Yt.test(i))return i;r=a&&(x.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?\"border\":\"content\"),r,o)+\"px\"}function ln(e){var t=a,n=Gt[e];return n||(n=un(e,t),\"none\"!==n&&n||(Pt=(Pt||x(\"<iframe frameborder='0' width='0' height='0'/>\").css(\"cssText\",\"display:block !important\")).appendTo(t.documentElement),t=(Pt[0].contentWindow||Pt[0].contentDocument).document,t.write(\"<!doctype html><html><body>\"),t.close(),n=un(e,t),Pt.detach()),Gt[e]=n),n}function un(e,t){var n=x(t.createElement(e)).appendTo(t.body),r=x.css(n[0],\"display\");return n.remove(),r}x.each([\"height\",\"width\"],function(e,n){x.cssHooks[n]={get:function(e,r,i){return r?0===e.offsetWidth&&Xt.test(x.css(e,\"display\"))?x.swap(e,Qt,function(){return sn(e,n,i)}):sn(e,n,i):t},set:function(e,t,r){var i=r&&Rt(e);return on(e,t,r?an(e,n,r,x.support.boxSizing&&\"border-box\"===x.css(e,\"boxSizing\",!1,i),i):0)}}}),x.support.opacity||(x.cssHooks.opacity={get:function(e,t){return It.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||\"\")?.01*parseFloat(RegExp.$1)+\"\":t?\"1\":\"\"},set:function(e,t){var n=e.style,r=e.currentStyle,i=x.isNumeric(t)?\"alpha(opacity=\"+100*t+\")\":\"\",o=r&&r.filter||n.filter||\"\";n.zoom=1,(t>=1||\"\"===t)&&\"\"===x.trim(o.replace($t,\"\"))&&n.removeAttribute&&(n.removeAttribute(\"filter\"),\"\"===t||r&&!r.filter)||(n.filter=$t.test(o)?o.replace($t,i):o+\" \"+i)}}),x(function(){x.support.reliableMarginRight||(x.cssHooks.marginRight={get:function(e,n){return n?x.swap(e,{display:\"inline-block\"},Wt,[e,\"marginRight\"]):t}}),!x.support.pixelPosition&&x.fn.position&&x.each([\"top\",\"left\"],function(e,n){x.cssHooks[n]={get:function(e,r){return r?(r=Wt(e,n),Yt.test(r)?x(e).position()[n]+\"px\":r):t}}})}),x.expr&&x.expr.filters&&(x.expr.filters.hidden=function(e){return 0>=e.offsetWidth&&0>=e.offsetHeight||!x.support.reliableHiddenOffsets&&\"none\"===(e.style&&e.style.display||x.css(e,\"display\"))},x.expr.filters.visible=function(e){return!x.expr.filters.hidden(e)}),x.each({margin:\"\",padding:\"\",border:\"Width\"},function(e,t){x.cssHooks[e+t]={expand:function(n){var r=0,i={},o=\"string\"==typeof n?n.split(\" \"):[n];for(;4>r;r++)i[e+Zt[r]+t]=o[r]||o[r-2]||o[0];return i}},Ut.test(e)||(x.cssHooks[e+t].set=on)});var cn=/%20/g,pn=/\\[\\]$/,fn=/\\r?\\n/g,dn=/^(?:submit|button|image|reset|file)$/i,hn=/^(?:input|select|textarea|keygen)/i;x.fn.extend({serialize:function(){return x.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=x.prop(this,\"elements\");return e?x.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!x(this).is(\":disabled\")&&hn.test(this.nodeName)&&!dn.test(e)&&(this.checked||!Ct.test(e))}).map(function(e,t){var n=x(this).val();return null==n?null:x.isArray(n)?x.map(n,function(e){return{name:t.name,value:e.replace(fn,\"\\r\\n\")}}):{name:t.name,value:n.replace(fn,\"\\r\\n\")}}).get()}}),x.param=function(e,n){var r,i=[],o=function(e,t){t=x.isFunction(t)?t():null==t?\"\":t,i[i.length]=encodeURIComponent(e)+\"=\"+encodeURIComponent(t)};if(n===t&&(n=x.ajaxSettings&&x.ajaxSettings.traditional),x.isArray(e)||e.jquery&&!x.isPlainObject(e))x.each(e,function(){o(this.name,this.value)});else for(r in e)gn(r,e[r],n,o);return i.join(\"&\").replace(cn,\"+\")};function gn(e,t,n,r){var i;if(x.isArray(t))x.each(t,function(t,i){n||pn.test(e)?r(e,i):gn(e+\"[\"+(\"object\"==typeof i?t:\"\")+\"]\",i,n,r)});else if(n||\"object\"!==x.type(t))r(e,t);else for(i in t)gn(e+\"[\"+i+\"]\",t[i],n,r)}x.each(\"blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu\".split(\" \"),function(e,t){x.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),x.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,\"**\"):this.off(t,e||\"**\",n)}});var mn,yn,vn=x.now(),bn=/\\?/,xn=/#.*$/,wn=/([?&])_=[^&]*/,Tn=/^(.*?):[ \\t]*([^\\r\\n]*)\\r?$/gm,Cn=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Nn=/^(?:GET|HEAD)$/,kn=/^\\/\\//,En=/^([\\w.+-]+:)(?:\\/\\/([^\\/?#:]*)(?::(\\d+)|)|)/,Sn=x.fn.load,An={},jn={},Dn=\"*/\".concat(\"*\");try{yn=o.href}catch(Ln){yn=a.createElement(\"a\"),yn.href=\"\",yn=yn.href}mn=En.exec(yn.toLowerCase())||[];function Hn(e){return function(t,n){\"string\"!=typeof t&&(n=t,t=\"*\");var r,i=0,o=t.toLowerCase().match(T)||[];if(x.isFunction(n))while(r=o[i++])\"+\"===r[0]?(r=r.slice(1)||\"*\",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function qn(e,n,r,i){var o={},a=e===jn;function s(l){var u;return o[l]=!0,x.each(e[l]||[],function(e,l){var c=l(n,r,i);return\"string\"!=typeof c||a||o[c]?a?!(u=c):t:(n.dataTypes.unshift(c),s(c),!1)}),u}return s(n.dataTypes[0])||!o[\"*\"]&&s(\"*\")}function _n(e,n){var r,i,o=x.ajaxSettings.flatOptions||{};for(i in n)n[i]!==t&&((o[i]?e:r||(r={}))[i]=n[i]);return r&&x.extend(!0,e,r),e}x.fn.load=function(e,n,r){if(\"string\"!=typeof e&&Sn)return Sn.apply(this,arguments);var i,o,a,s=this,l=e.indexOf(\" \");return l>=0&&(i=e.slice(l,e.length),e=e.slice(0,l)),x.isFunction(n)?(r=n,n=t):n&&\"object\"==typeof n&&(a=\"POST\"),s.length>0&&x.ajax({url:e,type:a,dataType:\"html\",data:n}).done(function(e){o=arguments,s.html(i?x(\"<div>\").append(x.parseHTML(e)).find(i):e)}).complete(r&&function(e,t){s.each(r,o||[e.responseText,t,e])}),this},x.each([\"ajaxStart\",\"ajaxStop\",\"ajaxComplete\",\"ajaxError\",\"ajaxSuccess\",\"ajaxSend\"],function(e,t){x.fn[t]=function(e){return this.on(t,e)}}),x.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:yn,type:\"GET\",isLocal:Cn.test(mn[1]),global:!0,processData:!0,async:!0,contentType:\"application/x-www-form-urlencoded; charset=UTF-8\",accepts:{\"*\":Dn,text:\"text/plain\",html:\"text/html\",xml:\"application/xml, text/xml\",json:\"application/json, text/javascript\"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:\"responseXML\",text:\"responseText\",json:\"responseJSON\"},converters:{\"* text\":String,\"text html\":!0,\"text json\":x.parseJSON,\"text xml\":x.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?_n(_n(e,x.ajaxSettings),t):_n(x.ajaxSettings,e)},ajaxPrefilter:Hn(An),ajaxTransport:Hn(jn),ajax:function(e,n){\"object\"==typeof e&&(n=e,e=t),n=n||{};var r,i,o,a,s,l,u,c,p=x.ajaxSetup({},n),f=p.context||p,d=p.context&&(f.nodeType||f.jquery)?x(f):x.event,h=x.Deferred(),g=x.Callbacks(\"once memory\"),m=p.statusCode||{},y={},v={},b=0,w=\"canceled\",C={readyState:0,getResponseHeader:function(e){var t;if(2===b){if(!c){c={};while(t=Tn.exec(a))c[t[1].toLowerCase()]=t[2]}t=c[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===b?a:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return b||(e=v[n]=v[n]||e,y[e]=t),this},overrideMimeType:function(e){return b||(p.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>b)for(t in e)m[t]=[m[t],e[t]];else C.always(e[C.status]);return this},abort:function(e){var t=e||w;return u&&u.abort(t),k(0,t),this}};if(h.promise(C).complete=g.add,C.success=C.done,C.error=C.fail,p.url=((e||p.url||yn)+\"\").replace(xn,\"\").replace(kn,mn[1]+\"//\"),p.type=n.method||n.type||p.method||p.type,p.dataTypes=x.trim(p.dataType||\"*\").toLowerCase().match(T)||[\"\"],null==p.crossDomain&&(r=En.exec(p.url.toLowerCase()),p.crossDomain=!(!r||r[1]===mn[1]&&r[2]===mn[2]&&(r[3]||(\"http:\"===r[1]?\"80\":\"443\"))===(mn[3]||(\"http:\"===mn[1]?\"80\":\"443\")))),p.data&&p.processData&&\"string\"!=typeof p.data&&(p.data=x.param(p.data,p.traditional)),qn(An,p,n,C),2===b)return C;l=p.global,l&&0===x.active++&&x.event.trigger(\"ajaxStart\"),p.type=p.type.toUpperCase(),p.hasContent=!Nn.test(p.type),o=p.url,p.hasContent||(p.data&&(o=p.url+=(bn.test(o)?\"&\":\"?\")+p.data,delete p.data),p.cache===!1&&(p.url=wn.test(o)?o.replace(wn,\"$1_=\"+vn++):o+(bn.test(o)?\"&\":\"?\")+\"_=\"+vn++)),p.ifModified&&(x.lastModified[o]&&C.setRequestHeader(\"If-Modified-Since\",x.lastModified[o]),x.etag[o]&&C.setRequestHeader(\"If-None-Match\",x.etag[o])),(p.data&&p.hasContent&&p.contentType!==!1||n.contentType)&&C.setRequestHeader(\"Content-Type\",p.contentType),C.setRequestHeader(\"Accept\",p.dataTypes[0]&&p.accepts[p.dataTypes[0]]?p.accepts[p.dataTypes[0]]+(\"*\"!==p.dataTypes[0]?\", \"+Dn+\"; q=0.01\":\"\"):p.accepts[\"*\"]);for(i in p.headers)C.setRequestHeader(i,p.headers[i]);if(p.beforeSend&&(p.beforeSend.call(f,C,p)===!1||2===b))return C.abort();w=\"abort\";for(i in{success:1,error:1,complete:1})C[i](p[i]);if(u=qn(jn,p,n,C)){C.readyState=1,l&&d.trigger(\"ajaxSend\",[C,p]),p.async&&p.timeout>0&&(s=setTimeout(function(){C.abort(\"timeout\")},p.timeout));try{b=1,u.send(y,k)}catch(N){if(!(2>b))throw N;k(-1,N)}}else k(-1,\"No Transport\");function k(e,n,r,i){var c,y,v,w,T,N=n;2!==b&&(b=2,s&&clearTimeout(s),u=t,a=i||\"\",C.readyState=e>0?4:0,c=e>=200&&300>e||304===e,r&&(w=Mn(p,C,r)),w=On(p,w,C,c),c?(p.ifModified&&(T=C.getResponseHeader(\"Last-Modified\"),T&&(x.lastModified[o]=T),T=C.getResponseHeader(\"etag\"),T&&(x.etag[o]=T)),204===e||\"HEAD\"===p.type?N=\"nocontent\":304===e?N=\"notmodified\":(N=w.state,y=w.data,v=w.error,c=!v)):(v=N,(e||!N)&&(N=\"error\",0>e&&(e=0))),C.status=e,C.statusText=(n||N)+\"\",c?h.resolveWith(f,[y,N,C]):h.rejectWith(f,[C,N,v]),C.statusCode(m),m=t,l&&d.trigger(c?\"ajaxSuccess\":\"ajaxError\",[C,p,c?y:v]),g.fireWith(f,[C,N]),l&&(d.trigger(\"ajaxComplete\",[C,p]),--x.active||x.event.trigger(\"ajaxStop\")))}return C},getJSON:function(e,t,n){return x.get(e,t,n,\"json\")},getScript:function(e,n){return x.get(e,t,n,\"script\")}}),x.each([\"get\",\"post\"],function(e,n){x[n]=function(e,r,i,o){return x.isFunction(r)&&(o=o||i,i=r,r=t),x.ajax({url:e,type:n,dataType:o,data:r,success:i})}});function Mn(e,n,r){var i,o,a,s,l=e.contents,u=e.dataTypes;while(\"*\"===u[0])u.shift(),o===t&&(o=e.mimeType||n.getResponseHeader(\"Content-Type\"));if(o)for(s in l)if(l[s]&&l[s].test(o)){u.unshift(s);break}if(u[0]in r)a=u[0];else{for(s in r){if(!u[0]||e.converters[s+\" \"+u[0]]){a=s;break}i||(i=s)}a=a||i}return a?(a!==u[0]&&u.unshift(a),r[a]):t}function On(e,t,n,r){var i,o,a,s,l,u={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)u[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!l&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),l=o,o=c.shift())if(\"*\"===o)o=l;else if(\"*\"!==l&&l!==o){if(a=u[l+\" \"+o]||u[\"* \"+o],!a)for(i in u)if(s=i.split(\" \"),s[1]===o&&(a=u[l+\" \"+s[0]]||u[\"* \"+s[0]])){a===!0?a=u[i]:u[i]!==!0&&(o=s[0],c.unshift(s[1]));break}if(a!==!0)if(a&&e[\"throws\"])t=a(t);else try{t=a(t)}catch(p){return{state:\"parsererror\",error:a?p:\"No conversion from \"+l+\" to \"+o}}}return{state:\"success\",data:t}}x.ajaxSetup({accepts:{script:\"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"},contents:{script:/(?:java|ecma)script/},converters:{\"text script\":function(e){return x.globalEval(e),e}}}),x.ajaxPrefilter(\"script\",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type=\"GET\",e.global=!1)}),x.ajaxTransport(\"script\",function(e){if(e.crossDomain){var n,r=a.head||x(\"head\")[0]||a.documentElement;return{send:function(t,i){n=a.createElement(\"script\"),n.async=!0,e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,t){(t||!n.readyState||/loaded|complete/.test(n.readyState))&&(n.onload=n.onreadystatechange=null,n.parentNode&&n.parentNode.removeChild(n),n=null,t||i(200,\"success\"))},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(t,!0)}}}});var Fn=[],Bn=/(=)\\?(?=&|$)|\\?\\?/;x.ajaxSetup({jsonp:\"callback\",jsonpCallback:function(){var e=Fn.pop()||x.expando+\"_\"+vn++;return this[e]=!0,e}}),x.ajaxPrefilter(\"json jsonp\",function(n,r,i){var o,a,s,l=n.jsonp!==!1&&(Bn.test(n.url)?\"url\":\"string\"==typeof n.data&&!(n.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&Bn.test(n.data)&&\"data\");return l||\"jsonp\"===n.dataTypes[0]?(o=n.jsonpCallback=x.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,l?n[l]=n[l].replace(Bn,\"$1\"+o):n.jsonp!==!1&&(n.url+=(bn.test(n.url)?\"&\":\"?\")+n.jsonp+\"=\"+o),n.converters[\"script json\"]=function(){return s||x.error(o+\" was not called\"),s[0]},n.dataTypes[0]=\"json\",a=e[o],e[o]=function(){s=arguments},i.always(function(){e[o]=a,n[o]&&(n.jsonpCallback=r.jsonpCallback,Fn.push(o)),s&&x.isFunction(a)&&a(s[0]),s=a=t}),\"script\"):t});var Pn,Rn,Wn=0,$n=e.ActiveXObject&&function(){var e;for(e in Pn)Pn[e](t,!0)};function In(){try{return new e.XMLHttpRequest}catch(t){}}function zn(){try{return new e.ActiveXObject(\"Microsoft.XMLHTTP\")}catch(t){}}x.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&In()||zn()}:In,Rn=x.ajaxSettings.xhr(),x.support.cors=!!Rn&&\"withCredentials\"in Rn,Rn=x.support.ajax=!!Rn,Rn&&x.ajaxTransport(function(n){if(!n.crossDomain||x.support.cors){var r;return{send:function(i,o){var a,s,l=n.xhr();if(n.username?l.open(n.type,n.url,n.async,n.username,n.password):l.open(n.type,n.url,n.async),n.xhrFields)for(s in n.xhrFields)l[s]=n.xhrFields[s];n.mimeType&&l.overrideMimeType&&l.overrideMimeType(n.mimeType),n.crossDomain||i[\"X-Requested-With\"]||(i[\"X-Requested-With\"]=\"XMLHttpRequest\");try{for(s in i)l.setRequestHeader(s,i[s])}catch(u){}l.send(n.hasContent&&n.data||null),r=function(e,i){var s,u,c,p;try{if(r&&(i||4===l.readyState))if(r=t,a&&(l.onreadystatechange=x.noop,$n&&delete Pn[a]),i)4!==l.readyState&&l.abort();else{p={},s=l.status,u=l.getAllResponseHeaders(),\"string\"==typeof l.responseText&&(p.text=l.responseText);try{c=l.statusText}catch(f){c=\"\"}s||!n.isLocal||n.crossDomain?1223===s&&(s=204):s=p.text?200:404}}catch(d){i||o(-1,d)}p&&o(s,c,p,u)},n.async?4===l.readyState?setTimeout(r):(a=++Wn,$n&&(Pn||(Pn={},x(e).unload($n)),Pn[a]=r),l.onreadystatechange=r):r()},abort:function(){r&&r(t,!0)}}}});var Xn,Un,Vn=/^(?:toggle|show|hide)$/,Yn=RegExp(\"^(?:([+-])=|)(\"+w+\")([a-z%]*)$\",\"i\"),Jn=/queueHooks$/,Gn=[nr],Qn={\"*\":[function(e,t){var n=this.createTween(e,t),r=n.cur(),i=Yn.exec(t),o=i&&i[3]||(x.cssNumber[e]?\"\":\"px\"),a=(x.cssNumber[e]||\"px\"!==o&&+r)&&Yn.exec(x.css(n.elem,e)),s=1,l=20;if(a&&a[3]!==o){o=o||a[3],i=i||[],a=+r||1;do s=s||\".5\",a/=s,x.style(n.elem,e,a+o);while(s!==(s=n.cur()/r)&&1!==s&&--l)}return i&&(a=n.start=+a||+r||0,n.unit=o,n.end=i[1]?a+(i[1]+1)*i[2]:+i[2]),n}]};function Kn(){return setTimeout(function(){Xn=t}),Xn=x.now()}function Zn(e,t,n){var r,i=(Qn[t]||[]).concat(Qn[\"*\"]),o=0,a=i.length;for(;a>o;o++)if(r=i[o].call(n,t,e))return r}function er(e,t,n){var r,i,o=0,a=Gn.length,s=x.Deferred().always(function(){delete l.elem}),l=function(){if(i)return!1;var t=Xn||Kn(),n=Math.max(0,u.startTime+u.duration-t),r=n/u.duration||0,o=1-r,a=0,l=u.tweens.length;for(;l>a;a++)u.tweens[a].run(o);return s.notifyWith(e,[u,o,n]),1>o&&l?n:(s.resolveWith(e,[u]),!1)},u=s.promise({elem:e,props:x.extend({},t),opts:x.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:Xn||Kn(),duration:n.duration,tweens:[],createTween:function(t,n){var r=x.Tween(e,u.opts,t,n,u.opts.specialEasing[t]||u.opts.easing);return u.tweens.push(r),r},stop:function(t){var n=0,r=t?u.tweens.length:0;if(i)return this;for(i=!0;r>n;n++)u.tweens[n].run(1);return t?s.resolveWith(e,[u,t]):s.rejectWith(e,[u,t]),this}}),c=u.props;for(tr(c,u.opts.specialEasing);a>o;o++)if(r=Gn[o].call(u,e,c,u.opts))return r;return x.map(c,Zn,u),x.isFunction(u.opts.start)&&u.opts.start.call(e,u),x.fx.timer(x.extend(l,{elem:e,anim:u,queue:u.opts.queue})),u.progress(u.opts.progress).done(u.opts.done,u.opts.complete).fail(u.opts.fail).always(u.opts.always)}function tr(e,t){var n,r,i,o,a;for(n in e)if(r=x.camelCase(n),i=t[r],o=e[n],x.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),a=x.cssHooks[r],a&&\"expand\"in a){o=a.expand(o),delete e[r];for(n in o)n in e||(e[n]=o[n],t[n]=i)}else t[r]=i}x.Animation=x.extend(er,{tweener:function(e,t){x.isFunction(e)?(t=e,e=[\"*\"]):e=e.split(\" \");var n,r=0,i=e.length;for(;i>r;r++)n=e[r],Qn[n]=Qn[n]||[],Qn[n].unshift(t)},prefilter:function(e,t){t?Gn.unshift(e):Gn.push(e)}});function nr(e,t,n){var r,i,o,a,s,l,u=this,c={},p=e.style,f=e.nodeType&&nn(e),d=x._data(e,\"fxshow\");n.queue||(s=x._queueHooks(e,\"fx\"),null==s.unqueued&&(s.unqueued=0,l=s.empty.fire,s.empty.fire=function(){s.unqueued||l()}),s.unqueued++,u.always(function(){u.always(function(){s.unqueued--,x.queue(e,\"fx\").length||s.empty.fire()})})),1===e.nodeType&&(\"height\"in t||\"width\"in t)&&(n.overflow=[p.overflow,p.overflowX,p.overflowY],\"inline\"===x.css(e,\"display\")&&\"none\"===x.css(e,\"float\")&&(x.support.inlineBlockNeedsLayout&&\"inline\"!==ln(e.nodeName)?p.zoom=1:p.display=\"inline-block\")),n.overflow&&(p.overflow=\"hidden\",x.support.shrinkWrapBlocks||u.always(function(){p.overflow=n.overflow[0],p.overflowX=n.overflow[1],p.overflowY=n.overflow[2]}));for(r in t)if(i=t[r],Vn.exec(i)){if(delete t[r],o=o||\"toggle\"===i,i===(f?\"hide\":\"show\"))continue;c[r]=d&&d[r]||x.style(e,r)}if(!x.isEmptyObject(c)){d?\"hidden\"in d&&(f=d.hidden):d=x._data(e,\"fxshow\",{}),o&&(d.hidden=!f),f?x(e).show():u.done(function(){x(e).hide()}),u.done(function(){var t;x._removeData(e,\"fxshow\");for(t in c)x.style(e,t,c[t])});for(r in c)a=Zn(f?d[r]:0,r,u),r in d||(d[r]=a.start,f&&(a.end=a.start,a.start=\"width\"===r||\"height\"===r?1:0))}}function rr(e,t,n,r,i){return new rr.prototype.init(e,t,n,r,i)}x.Tween=rr,rr.prototype={constructor:rr,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||\"swing\",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(x.cssNumber[n]?\"\":\"px\")},cur:function(){var e=rr.propHooks[this.prop];return e&&e.get?e.get(this):rr.propHooks._default.get(this)},run:function(e){var t,n=rr.propHooks[this.prop];return this.pos=t=this.options.duration?x.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):rr.propHooks._default.set(this),this}},rr.prototype.init.prototype=rr.prototype,rr.propHooks={_default:{get:function(e){var t;return null==e.elem[e.prop]||e.elem.style&&null!=e.elem.style[e.prop]?(t=x.css(e.elem,e.prop,\"\"),t&&\"auto\"!==t?t:0):e.elem[e.prop]},set:function(e){x.fx.step[e.prop]?x.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[x.cssProps[e.prop]]||x.cssHooks[e.prop])?x.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},rr.propHooks.scrollTop=rr.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},x.each([\"toggle\",\"show\",\"hide\"],function(e,t){var n=x.fn[t];x.fn[t]=function(e,r,i){return null==e||\"boolean\"==typeof e?n.apply(this,arguments):this.animate(ir(t,!0),e,r,i)}}),x.fn.extend({fadeTo:function(e,t,n,r){return this.filter(nn).css(\"opacity\",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=x.isEmptyObject(e),o=x.speed(t,n,r),a=function(){var t=er(this,x.extend({},e),o);(i||x._data(this,\"finish\"))&&t.stop(!0)};return a.finish=a,i||o.queue===!1?this.each(a):this.queue(o.queue,a)},stop:function(e,n,r){var i=function(e){var t=e.stop;delete e.stop,t(r)};return\"string\"!=typeof e&&(r=n,n=e,e=t),n&&e!==!1&&this.queue(e||\"fx\",[]),this.each(function(){var t=!0,n=null!=e&&e+\"queueHooks\",o=x.timers,a=x._data(this);if(n)a[n]&&a[n].stop&&i(a[n]);else for(n in a)a[n]&&a[n].stop&&Jn.test(n)&&i(a[n]);for(n=o.length;n--;)o[n].elem!==this||null!=e&&o[n].queue!==e||(o[n].anim.stop(r),t=!1,o.splice(n,1));(t||!r)&&x.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||\"fx\"),this.each(function(){var t,n=x._data(this),r=n[e+\"queue\"],i=n[e+\"queueHooks\"],o=x.timers,a=r?r.length:0;for(n.finish=!0,x.queue(this,e,[]),i&&i.stop&&i.stop.call(this,!0),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;a>t;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}});function ir(e,t){var n,r={height:e},i=0;for(t=t?1:0;4>i;i+=2-t)n=Zt[i],r[\"margin\"+n]=r[\"padding\"+n]=e;return t&&(r.opacity=r.width=e),r}x.each({slideDown:ir(\"show\"),slideUp:ir(\"hide\"),slideToggle:ir(\"toggle\"),fadeIn:{opacity:\"show\"},fadeOut:{opacity:\"hide\"},fadeToggle:{opacity:\"toggle\"}},function(e,t){x.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),x.speed=function(e,t,n){var r=e&&\"object\"==typeof e?x.extend({},e):{complete:n||!n&&t||x.isFunction(e)&&e,duration:e,easing:n&&t||t&&!x.isFunction(t)&&t};return r.duration=x.fx.off?0:\"number\"==typeof r.duration?r.duration:r.duration in x.fx.speeds?x.fx.speeds[r.duration]:x.fx.speeds._default,(null==r.queue||r.queue===!0)&&(r.queue=\"fx\"),r.old=r.complete,r.complete=function(){x.isFunction(r.old)&&r.old.call(this),r.queue&&x.dequeue(this,r.queue)},r},x.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},x.timers=[],x.fx=rr.prototype.init,x.fx.tick=function(){var e,n=x.timers,r=0;for(Xn=x.now();n.length>r;r++)e=n[r],e()||n[r]!==e||n.splice(r--,1);n.length||x.fx.stop(),Xn=t},x.fx.timer=function(e){e()&&x.timers.push(e)&&x.fx.start()},x.fx.interval=13,x.fx.start=function(){Un||(Un=setInterval(x.fx.tick,x.fx.interval))},x.fx.stop=function(){clearInterval(Un),Un=null},x.fx.speeds={slow:600,fast:200,_default:400},x.fx.step={},x.expr&&x.expr.filters&&(x.expr.filters.animated=function(e){return x.grep(x.timers,function(t){return e===t.elem}).length}),x.fn.offset=function(e){if(arguments.length)return e===t?this:this.each(function(t){x.offset.setOffset(this,e,t)});var n,r,o={top:0,left:0},a=this[0],s=a&&a.ownerDocument;if(s)return n=s.documentElement,x.contains(n,a)?(typeof a.getBoundingClientRect!==i&&(o=a.getBoundingClientRect()),r=or(s),{top:o.top+(r.pageYOffset||n.scrollTop)-(n.clientTop||0),left:o.left+(r.pageXOffset||n.scrollLeft)-(n.clientLeft||0)}):o},x.offset={setOffset:function(e,t,n){var r=x.css(e,\"position\");\"static\"===r&&(e.style.position=\"relative\");var i=x(e),o=i.offset(),a=x.css(e,\"top\"),s=x.css(e,\"left\"),l=(\"absolute\"===r||\"fixed\"===r)&&x.inArray(\"auto\",[a,s])>-1,u={},c={},p,f;l?(c=i.position(),p=c.top,f=c.left):(p=parseFloat(a)||0,f=parseFloat(s)||0),x.isFunction(t)&&(t=t.call(e,n,o)),null!=t.top&&(u.top=t.top-o.top+p),null!=t.left&&(u.left=t.left-o.left+f),\"using\"in t?t.using.call(e,u):i.css(u)}},x.fn.extend({position:function(){if(this[0]){var e,t,n={top:0,left:0},r=this[0];return\"fixed\"===x.css(r,\"position\")?t=r.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),x.nodeName(e[0],\"html\")||(n=e.offset()),n.top+=x.css(e[0],\"borderTopWidth\",!0),n.left+=x.css(e[0],\"borderLeftWidth\",!0)),{top:t.top-n.top-x.css(r,\"marginTop\",!0),left:t.left-n.left-x.css(r,\"marginLeft\",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||s;while(e&&!x.nodeName(e,\"html\")&&\"static\"===x.css(e,\"position\"))e=e.offsetParent;return e||s})}}),x.each({scrollLeft:\"pageXOffset\",scrollTop:\"pageYOffset\"},function(e,n){var r=/Y/.test(n);x.fn[e]=function(i){return x.access(this,function(e,i,o){var a=or(e);return o===t?a?n in a?a[n]:a.document.documentElement[i]:e[i]:(a?a.scrollTo(r?x(a).scrollLeft():o,r?o:x(a).scrollTop()):e[i]=o,t)},e,i,arguments.length,null)}});function or(e){return x.isWindow(e)?e:9===e.nodeType?e.defaultView||e.parentWindow:!1}x.each({Height:\"height\",Width:\"width\"},function(e,n){x.each({padding:\"inner\"+e,content:n,\"\":\"outer\"+e},function(r,i){x.fn[i]=function(i,o){var a=arguments.length&&(r||\"boolean\"!=typeof i),s=r||(i===!0||o===!0?\"margin\":\"border\");return x.access(this,function(n,r,i){var o;return x.isWindow(n)?n.document.documentElement[\"client\"+e]:9===n.nodeType?(o=n.documentElement,Math.max(n.body[\"scroll\"+e],o[\"scroll\"+e],n.body[\"offset\"+e],o[\"offset\"+e],o[\"client\"+e])):i===t?x.css(n,r,s):x.style(n,r,i,s)},n,a?i:t,a,null)}})}),x.fn.size=function(){return this.length},x.fn.andSelf=x.fn.addBack,\"object\"==typeof module&&module&&\"object\"==typeof module.exports?module.exports=x:(e.jQuery=e.$=x,\"function\"==typeof define&&define.amd&&define(\"jquery\",[],function(){return x}))})(window);\n"
  },
  {
    "path": "js/libs/underscore-min.js",
    "content": "//     Underscore.js 1.5.2\n//     http://underscorejs.org\n//     (c) 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n//     Underscore may be freely distributed under the MIT license.\n(function(){var n=this,t=n._,r={},e=Array.prototype,u=Object.prototype,i=Function.prototype,a=e.push,o=e.slice,c=e.concat,l=u.toString,f=u.hasOwnProperty,s=e.forEach,p=e.map,h=e.reduce,v=e.reduceRight,g=e.filter,d=e.every,m=e.some,y=e.indexOf,b=e.lastIndexOf,x=Array.isArray,w=Object.keys,_=i.bind,j=function(n){return n instanceof j?n:this instanceof j?(this._wrapped=n,void 0):new j(n)};\"undefined\"!=typeof exports?(\"undefined\"!=typeof module&&module.exports&&(exports=module.exports=j),exports._=j):n._=j,j.VERSION=\"1.5.2\";var A=j.each=j.forEach=function(n,t,e){if(null!=n)if(s&&n.forEach===s)n.forEach(t,e);else if(n.length===+n.length){for(var u=0,i=n.length;i>u;u++)if(t.call(e,n[u],u,n)===r)return}else for(var a=j.keys(n),u=0,i=a.length;i>u;u++)if(t.call(e,n[a[u]],a[u],n)===r)return};j.map=j.collect=function(n,t,r){var e=[];return null==n?e:p&&n.map===p?n.map(t,r):(A(n,function(n,u,i){e.push(t.call(r,n,u,i))}),e)};var E=\"Reduce of empty array with no initial value\";j.reduce=j.foldl=j.inject=function(n,t,r,e){var u=arguments.length>2;if(null==n&&(n=[]),h&&n.reduce===h)return e&&(t=j.bind(t,e)),u?n.reduce(t,r):n.reduce(t);if(A(n,function(n,i,a){u?r=t.call(e,r,n,i,a):(r=n,u=!0)}),!u)throw new TypeError(E);return r},j.reduceRight=j.foldr=function(n,t,r,e){var u=arguments.length>2;if(null==n&&(n=[]),v&&n.reduceRight===v)return e&&(t=j.bind(t,e)),u?n.reduceRight(t,r):n.reduceRight(t);var i=n.length;if(i!==+i){var a=j.keys(n);i=a.length}if(A(n,function(o,c,l){c=a?a[--i]:--i,u?r=t.call(e,r,n[c],c,l):(r=n[c],u=!0)}),!u)throw new TypeError(E);return r},j.find=j.detect=function(n,t,r){var e;return O(n,function(n,u,i){return t.call(r,n,u,i)?(e=n,!0):void 0}),e},j.filter=j.select=function(n,t,r){var e=[];return null==n?e:g&&n.filter===g?n.filter(t,r):(A(n,function(n,u,i){t.call(r,n,u,i)&&e.push(n)}),e)},j.reject=function(n,t,r){return j.filter(n,function(n,e,u){return!t.call(r,n,e,u)},r)},j.every=j.all=function(n,t,e){t||(t=j.identity);var u=!0;return null==n?u:d&&n.every===d?n.every(t,e):(A(n,function(n,i,a){return(u=u&&t.call(e,n,i,a))?void 0:r}),!!u)};var O=j.some=j.any=function(n,t,e){t||(t=j.identity);var u=!1;return null==n?u:m&&n.some===m?n.some(t,e):(A(n,function(n,i,a){return u||(u=t.call(e,n,i,a))?r:void 0}),!!u)};j.contains=j.include=function(n,t){return null==n?!1:y&&n.indexOf===y?n.indexOf(t)!=-1:O(n,function(n){return n===t})},j.invoke=function(n,t){var r=o.call(arguments,2),e=j.isFunction(t);return j.map(n,function(n){return(e?t:n[t]).apply(n,r)})},j.pluck=function(n,t){return j.map(n,function(n){return n[t]})},j.where=function(n,t,r){return j.isEmpty(t)?r?void 0:[]:j[r?\"find\":\"filter\"](n,function(n){for(var r in t)if(t[r]!==n[r])return!1;return!0})},j.findWhere=function(n,t){return j.where(n,t,!0)},j.max=function(n,t,r){if(!t&&j.isArray(n)&&n[0]===+n[0]&&n.length<65535)return Math.max.apply(Math,n);if(!t&&j.isEmpty(n))return-1/0;var e={computed:-1/0,value:-1/0};return A(n,function(n,u,i){var a=t?t.call(r,n,u,i):n;a>e.computed&&(e={value:n,computed:a})}),e.value},j.min=function(n,t,r){if(!t&&j.isArray(n)&&n[0]===+n[0]&&n.length<65535)return Math.min.apply(Math,n);if(!t&&j.isEmpty(n))return 1/0;var e={computed:1/0,value:1/0};return A(n,function(n,u,i){var a=t?t.call(r,n,u,i):n;a<e.computed&&(e={value:n,computed:a})}),e.value},j.shuffle=function(n){var t,r=0,e=[];return A(n,function(n){t=j.random(r++),e[r-1]=e[t],e[t]=n}),e},j.sample=function(n,t,r){return arguments.length<2||r?n[j.random(n.length-1)]:j.shuffle(n).slice(0,Math.max(0,t))};var k=function(n){return j.isFunction(n)?n:function(t){return t[n]}};j.sortBy=function(n,t,r){var e=k(t);return j.pluck(j.map(n,function(n,t,u){return{value:n,index:t,criteria:e.call(r,n,t,u)}}).sort(function(n,t){var r=n.criteria,e=t.criteria;if(r!==e){if(r>e||r===void 0)return 1;if(e>r||e===void 0)return-1}return n.index-t.index}),\"value\")};var F=function(n){return function(t,r,e){var u={},i=null==r?j.identity:k(r);return A(t,function(r,a){var o=i.call(e,r,a,t);n(u,o,r)}),u}};j.groupBy=F(function(n,t,r){(j.has(n,t)?n[t]:n[t]=[]).push(r)}),j.indexBy=F(function(n,t,r){n[t]=r}),j.countBy=F(function(n,t){j.has(n,t)?n[t]++:n[t]=1}),j.sortedIndex=function(n,t,r,e){r=null==r?j.identity:k(r);for(var u=r.call(e,t),i=0,a=n.length;a>i;){var o=i+a>>>1;r.call(e,n[o])<u?i=o+1:a=o}return i},j.toArray=function(n){return n?j.isArray(n)?o.call(n):n.length===+n.length?j.map(n,j.identity):j.values(n):[]},j.size=function(n){return null==n?0:n.length===+n.length?n.length:j.keys(n).length},j.first=j.head=j.take=function(n,t,r){return null==n?void 0:null==t||r?n[0]:o.call(n,0,t)},j.initial=function(n,t,r){return o.call(n,0,n.length-(null==t||r?1:t))},j.last=function(n,t,r){return null==n?void 0:null==t||r?n[n.length-1]:o.call(n,Math.max(n.length-t,0))},j.rest=j.tail=j.drop=function(n,t,r){return o.call(n,null==t||r?1:t)},j.compact=function(n){return j.filter(n,j.identity)};var M=function(n,t,r){return t&&j.every(n,j.isArray)?c.apply(r,n):(A(n,function(n){j.isArray(n)||j.isArguments(n)?t?a.apply(r,n):M(n,t,r):r.push(n)}),r)};j.flatten=function(n,t){return M(n,t,[])},j.without=function(n){return j.difference(n,o.call(arguments,1))},j.uniq=j.unique=function(n,t,r,e){j.isFunction(t)&&(e=r,r=t,t=!1);var u=r?j.map(n,r,e):n,i=[],a=[];return A(u,function(r,e){(t?e&&a[a.length-1]===r:j.contains(a,r))||(a.push(r),i.push(n[e]))}),i},j.union=function(){return j.uniq(j.flatten(arguments,!0))},j.intersection=function(n){var t=o.call(arguments,1);return j.filter(j.uniq(n),function(n){return j.every(t,function(t){return j.indexOf(t,n)>=0})})},j.difference=function(n){var t=c.apply(e,o.call(arguments,1));return j.filter(n,function(n){return!j.contains(t,n)})},j.zip=function(){for(var n=j.max(j.pluck(arguments,\"length\").concat(0)),t=new Array(n),r=0;n>r;r++)t[r]=j.pluck(arguments,\"\"+r);return t},j.object=function(n,t){if(null==n)return{};for(var r={},e=0,u=n.length;u>e;e++)t?r[n[e]]=t[e]:r[n[e][0]]=n[e][1];return r},j.indexOf=function(n,t,r){if(null==n)return-1;var e=0,u=n.length;if(r){if(\"number\"!=typeof r)return e=j.sortedIndex(n,t),n[e]===t?e:-1;e=0>r?Math.max(0,u+r):r}if(y&&n.indexOf===y)return n.indexOf(t,r);for(;u>e;e++)if(n[e]===t)return e;return-1},j.lastIndexOf=function(n,t,r){if(null==n)return-1;var e=null!=r;if(b&&n.lastIndexOf===b)return e?n.lastIndexOf(t,r):n.lastIndexOf(t);for(var u=e?r:n.length;u--;)if(n[u]===t)return u;return-1},j.range=function(n,t,r){arguments.length<=1&&(t=n||0,n=0),r=arguments[2]||1;for(var e=Math.max(Math.ceil((t-n)/r),0),u=0,i=new Array(e);e>u;)i[u++]=n,n+=r;return i};var R=function(){};j.bind=function(n,t){var r,e;if(_&&n.bind===_)return _.apply(n,o.call(arguments,1));if(!j.isFunction(n))throw new TypeError;return r=o.call(arguments,2),e=function(){if(!(this instanceof e))return n.apply(t,r.concat(o.call(arguments)));R.prototype=n.prototype;var u=new R;R.prototype=null;var i=n.apply(u,r.concat(o.call(arguments)));return Object(i)===i?i:u}},j.partial=function(n){var t=o.call(arguments,1);return function(){return n.apply(this,t.concat(o.call(arguments)))}},j.bindAll=function(n){var t=o.call(arguments,1);if(0===t.length)throw new Error(\"bindAll must be passed function names\");return A(t,function(t){n[t]=j.bind(n[t],n)}),n},j.memoize=function(n,t){var r={};return t||(t=j.identity),function(){var e=t.apply(this,arguments);return j.has(r,e)?r[e]:r[e]=n.apply(this,arguments)}},j.delay=function(n,t){var r=o.call(arguments,2);return setTimeout(function(){return n.apply(null,r)},t)},j.defer=function(n){return j.delay.apply(j,[n,1].concat(o.call(arguments,1)))},j.throttle=function(n,t,r){var e,u,i,a=null,o=0;r||(r={});var c=function(){o=r.leading===!1?0:new Date,a=null,i=n.apply(e,u)};return function(){var l=new Date;o||r.leading!==!1||(o=l);var f=t-(l-o);return e=this,u=arguments,0>=f?(clearTimeout(a),a=null,o=l,i=n.apply(e,u)):a||r.trailing===!1||(a=setTimeout(c,f)),i}},j.debounce=function(n,t,r){var e,u,i,a,o;return function(){i=this,u=arguments,a=new Date;var c=function(){var l=new Date-a;t>l?e=setTimeout(c,t-l):(e=null,r||(o=n.apply(i,u)))},l=r&&!e;return e||(e=setTimeout(c,t)),l&&(o=n.apply(i,u)),o}},j.once=function(n){var t,r=!1;return function(){return r?t:(r=!0,t=n.apply(this,arguments),n=null,t)}},j.wrap=function(n,t){return function(){var r=[n];return a.apply(r,arguments),t.apply(this,r)}},j.compose=function(){var n=arguments;return function(){for(var t=arguments,r=n.length-1;r>=0;r--)t=[n[r].apply(this,t)];return t[0]}},j.after=function(n,t){return function(){return--n<1?t.apply(this,arguments):void 0}},j.keys=w||function(n){if(n!==Object(n))throw new TypeError(\"Invalid object\");var t=[];for(var r in n)j.has(n,r)&&t.push(r);return t},j.values=function(n){for(var t=j.keys(n),r=t.length,e=new Array(r),u=0;r>u;u++)e[u]=n[t[u]];return e},j.pairs=function(n){for(var t=j.keys(n),r=t.length,e=new Array(r),u=0;r>u;u++)e[u]=[t[u],n[t[u]]];return e},j.invert=function(n){for(var t={},r=j.keys(n),e=0,u=r.length;u>e;e++)t[n[r[e]]]=r[e];return t},j.functions=j.methods=function(n){var t=[];for(var r in n)j.isFunction(n[r])&&t.push(r);return t.sort()},j.extend=function(n){return A(o.call(arguments,1),function(t){if(t)for(var r in t)n[r]=t[r]}),n},j.pick=function(n){var t={},r=c.apply(e,o.call(arguments,1));return A(r,function(r){r in n&&(t[r]=n[r])}),t},j.omit=function(n){var t={},r=c.apply(e,o.call(arguments,1));for(var u in n)j.contains(r,u)||(t[u]=n[u]);return t},j.defaults=function(n){return A(o.call(arguments,1),function(t){if(t)for(var r in t)n[r]===void 0&&(n[r]=t[r])}),n},j.clone=function(n){return j.isObject(n)?j.isArray(n)?n.slice():j.extend({},n):n},j.tap=function(n,t){return t(n),n};var S=function(n,t,r,e){if(n===t)return 0!==n||1/n==1/t;if(null==n||null==t)return n===t;n instanceof j&&(n=n._wrapped),t instanceof j&&(t=t._wrapped);var u=l.call(n);if(u!=l.call(t))return!1;switch(u){case\"[object String]\":return n==String(t);case\"[object Number]\":return n!=+n?t!=+t:0==n?1/n==1/t:n==+t;case\"[object Date]\":case\"[object Boolean]\":return+n==+t;case\"[object RegExp]\":return n.source==t.source&&n.global==t.global&&n.multiline==t.multiline&&n.ignoreCase==t.ignoreCase}if(\"object\"!=typeof n||\"object\"!=typeof t)return!1;for(var i=r.length;i--;)if(r[i]==n)return e[i]==t;var a=n.constructor,o=t.constructor;if(a!==o&&!(j.isFunction(a)&&a instanceof a&&j.isFunction(o)&&o instanceof o))return!1;r.push(n),e.push(t);var c=0,f=!0;if(\"[object Array]\"==u){if(c=n.length,f=c==t.length)for(;c--&&(f=S(n[c],t[c],r,e)););}else{for(var s in n)if(j.has(n,s)&&(c++,!(f=j.has(t,s)&&S(n[s],t[s],r,e))))break;if(f){for(s in t)if(j.has(t,s)&&!c--)break;f=!c}}return r.pop(),e.pop(),f};j.isEqual=function(n,t){return S(n,t,[],[])},j.isEmpty=function(n){if(null==n)return!0;if(j.isArray(n)||j.isString(n))return 0===n.length;for(var t in n)if(j.has(n,t))return!1;return!0},j.isElement=function(n){return!(!n||1!==n.nodeType)},j.isArray=x||function(n){return\"[object Array]\"==l.call(n)},j.isObject=function(n){return n===Object(n)},A([\"Arguments\",\"Function\",\"String\",\"Number\",\"Date\",\"RegExp\"],function(n){j[\"is\"+n]=function(t){return l.call(t)==\"[object \"+n+\"]\"}}),j.isArguments(arguments)||(j.isArguments=function(n){return!(!n||!j.has(n,\"callee\"))}),\"function\"!=typeof/./&&(j.isFunction=function(n){return\"function\"==typeof n}),j.isFinite=function(n){return isFinite(n)&&!isNaN(parseFloat(n))},j.isNaN=function(n){return j.isNumber(n)&&n!=+n},j.isBoolean=function(n){return n===!0||n===!1||\"[object Boolean]\"==l.call(n)},j.isNull=function(n){return null===n},j.isUndefined=function(n){return n===void 0},j.has=function(n,t){return f.call(n,t)},j.noConflict=function(){return n._=t,this},j.identity=function(n){return n},j.times=function(n,t,r){for(var e=Array(Math.max(0,n)),u=0;n>u;u++)e[u]=t.call(r,u);return e},j.random=function(n,t){return null==t&&(t=n,n=0),n+Math.floor(Math.random()*(t-n+1))};var I={escape:{\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#x27;\"}};I.unescape=j.invert(I.escape);var T={escape:new RegExp(\"[\"+j.keys(I.escape).join(\"\")+\"]\",\"g\"),unescape:new RegExp(\"(\"+j.keys(I.unescape).join(\"|\")+\")\",\"g\")};j.each([\"escape\",\"unescape\"],function(n){j[n]=function(t){return null==t?\"\":(\"\"+t).replace(T[n],function(t){return I[n][t]})}}),j.result=function(n,t){if(null==n)return void 0;var r=n[t];return j.isFunction(r)?r.call(n):r},j.mixin=function(n){A(j.functions(n),function(t){var r=j[t]=n[t];j.prototype[t]=function(){var n=[this._wrapped];return a.apply(n,arguments),z.call(this,r.apply(j,n))}})};var N=0;j.uniqueId=function(n){var t=++N+\"\";return n?n+t:t},j.templateSettings={evaluate:/<%([\\s\\S]+?)%>/g,interpolate:/<%=([\\s\\S]+?)%>/g,escape:/<%-([\\s\\S]+?)%>/g};var q=/(.)^/,B={\"'\":\"'\",\"\\\\\":\"\\\\\",\"\\r\":\"r\",\"\\n\":\"n\",\"\t\":\"t\",\"\\u2028\":\"u2028\",\"\\u2029\":\"u2029\"},D=/\\\\|'|\\r|\\n|\\t|\\u2028|\\u2029/g;j.template=function(n,t,r){var e;r=j.defaults({},r,j.templateSettings);var u=new RegExp([(r.escape||q).source,(r.interpolate||q).source,(r.evaluate||q).source].join(\"|\")+\"|$\",\"g\"),i=0,a=\"__p+='\";n.replace(u,function(t,r,e,u,o){return a+=n.slice(i,o).replace(D,function(n){return\"\\\\\"+B[n]}),r&&(a+=\"'+\\n((__t=(\"+r+\"))==null?'':_.escape(__t))+\\n'\"),e&&(a+=\"'+\\n((__t=(\"+e+\"))==null?'':__t)+\\n'\"),u&&(a+=\"';\\n\"+u+\"\\n__p+='\"),i=o+t.length,t}),a+=\"';\\n\",r.variable||(a=\"with(obj||{}){\\n\"+a+\"}\\n\"),a=\"var __t,__p='',__j=Array.prototype.join,\"+\"print=function(){__p+=__j.call(arguments,'');};\\n\"+a+\"return __p;\\n\";try{e=new Function(r.variable||\"obj\",\"_\",a)}catch(o){throw o.source=a,o}if(t)return e(t,j);var c=function(n){return e.call(this,n,j)};return c.source=\"function(\"+(r.variable||\"obj\")+\"){\\n\"+a+\"}\",c},j.chain=function(n){return j(n).chain()};var z=function(n){return this._chain?j(n).chain():n};j.mixin(j),A([\"pop\",\"push\",\"reverse\",\"shift\",\"sort\",\"splice\",\"unshift\"],function(n){var t=e[n];j.prototype[n]=function(){var r=this._wrapped;return t.apply(r,arguments),\"shift\"!=n&&\"splice\"!=n||0!==r.length||delete r[0],z.call(this,r)}}),A([\"concat\",\"join\",\"slice\"],function(n){var t=e[n];j.prototype[n]=function(){return z.call(this,t.apply(this._wrapped,arguments))}}),j.extend(j.prototype,{chain:function(){return this._chain=!0,this},value:function(){return this._wrapped}})}).call(this);\n//# sourceMappingURL=underscore-min.map"
  },
  {
    "path": "locations.json",
    "content": "[\n  {\n    \"id\":1,\n    \"type\":\"Vehicles\",\n    \"title\":\"Obey Tailgator\",\n    \"notes\":\"You can find Michaels story car (Audi A6/A8) on the parking lot of the golf course.\",\n    \"order\":1,\n    \"lat\":69.908,\n    \"lng\":-138.230,\n    \"video\":{\n      \"yt_id\":\"IdYI9VdsqT0\",\n      \"yt_user\":\"urparanoid\",\n      \"start\":\"2:13\",\n      \"end\":\"2:51\"\n    }\n  },\n  {\n    \"id\":2,\n    \"type\":\"Vehicles\",\n    \"title\":\"Bulldozer\",\n    \"notes\":\"Located in the quarry in Tataviam Mountains.\",\n    \"order\":2,\n    \"lat\":77.225,\n    \"lng\":-95.713,\n    \"video\":{\n      \"yt_id\":\"k2_zxkmiGWE\",\n      \"yt_user\":\"Olli43\",\n      \"start\":\"1:39\",\n      \"end\":\"2:51\"\n    }\n  },\n  {\n    \"id\":3,\n    \"type\":\"Wall breaches\",\n    \"title\":\"East LSC bridge\",\n    \"notes\":\"Go to the location as seen below. Push the trash bin with your car straight against the wall. Stand on the bin and now just jump and you will be inside and under the bridge. You'll be able to shoot anywhere through it.\",\n    \"order\":1,\n    \"lat\":66.054,\n    \"lng\":-117.773,\n    \"video\":{\n      \"yt_id\":\"llvw8fiGplA\",\n      \"yt_user\":\"toffytastic\",\n      \"start\":\"0:24\",\n      \"end\":\"1:15\"\n    }\n  },\n  {\n    \"id\":4,\n    \"type\":\"Wall breaches\",\n    \"title\":\"Bridge in Del Perro\",\n    \"notes\":\"Go to the location as seen below. Swim under the bridge and hop up the rail on the left side. Turn left and straight run through the wall.\",\n    \"order\":2,\n    \"lat\":65.017,\n    \"lng\":-134.780,\n    \"video\":{\n      \"yt_id\":\"hhxeFRqApk4\",\n      \"yt_user\":\"GTAKIDS\",\n      \"start\":\"0:45\",\n      \"end\":\"1:00\"\n    }\n  },\n  {\n    \"id\":5,\n    \"type\":\"Wall breaches\",\n    \"title\":\"Kayton Skyscraper\",\n    \"notes\":\"Go to the location as seen below. Get into a helicopter and fly about 15 meters above the ground. Fly straigt ahead the tower to wall breach. If you are inside just fly down and land your helicopter.\",\n    \"order\":3,\n    \"lat\":67.580,\n    \"lng\":-132.188,\n    \"video\":{\n      \"yt_id\":\"YtjnGkGeWzM\",\n      \"yt_user\":\"KingCodShots\",\n      \"start\":\"0:33\",\n      \"end\":\"1:00\"\n    }\n  },\n  {\n    \"id\":6,\n    \"type\":\"Wall breaches\",\n    \"title\":\"Beach Store\",\n    \"notes\":\"Go to the location as seen below. Turn to the open garage and drive straight throgh the wall. Note: during day time you need an bicycle because there are boxes that prevent you from entering the garage!\",\n    \"order\":4,\n    \"lat\":63.966,\n    \"lng\":-136.527,\n    \"video\":{\n      \"yt_id\":\"ByP1eT-1dDw\",\n      \"yt_user\":\"Fed X Gaming\",\n      \"start\":\"0:22\",\n      \"end\":\"1:00\"\n    }\n  },\n  {\n    \"id\":7,\n    \"type\":\"Wall breaches\",\n    \"title\":\"Eclipse Tower\",\n    \"notes\":\"Go to the location as seen below with a decent siced vehicle. Open your phone and call Simeon. Once you see the \\\"Request a Job Invite\\\" HUD, do not press anything. Drive your truck to any corner of the garage door, get out, jump on top of the truck and jump inside the building.\",\n    \"order\":5,\n    \"lat\":70.609,\n    \"lng\":-132.341,\n    \"video\":{\n      \"yt_id\":\"NH1ZBUs76Rs\",\n      \"yt_user\":\"Fed X Gaming\",\n      \"start\":\"0:25\",\n      \"end\":\"1:06\"\n    }\n  },\n  {\n    \"id\":8,\n    \"type\":\"Wall breaches\",\n    \"title\":\"Parking lot in San Andreas\",\n    \"notes\":\"Go to the location as seen below. Turn to the building, hop over the shrub, move about ten more meters and turn to the left wall. Jump to get inside the parking lot.\",\n    \"order\":6,\n    \"lat\":70.096,\n    \"lng\":-126.552,\n    \"video\":{\n      \"yt_id\":\"NH1ZBUs76Rs\",\n      \"yt_user\":\"Fed X Gaming\",\n      \"start\":\"1:55\",\n      \"end\":\"2:40\"\n    }\n  },\n  {\n    \"id\":9,\n    \"type\":\"Wall breaches\",\n    \"title\":\"Insurance store in San Andreas\",\n    \"notes\":\"Go to the location as seen below. Walk to the entrance door and trun to the wall. Jump to get inside the building.\",\n    \"order\":7,\n    \"lat\":69.806,\n    \"lng\":-125.563,\n    \"video\":{\n      \"yt_id\":\"NH1ZBUs76Rs\",\n      \"yt_user\":\"Fed X Gaming\",\n      \"start\":\"3:08\",\n      \"end\":\"3:40\"\n    }\n  },\n  {\n    \"id\":10,\n    \"type\":\"Wall breaches\",\n    \"title\":\"Garage in San Andreas\",\n    \"notes\":\"Go to the location as seen below. Get into a decent sized vehicle and park it infront of the garage. Hop on it and jump to get inside the building.\",\n    \"order\":8,\n    \"lat\":68.564,\n    \"lng\":-124.541,\n    \"video\":{\n      \"yt_id\":\"o8BPUZe65_o\",\n      \"yt_user\":\"Fed X Gaming\",\n      \"start\":\"0:25\",\n      \"end\":\"1:20\"\n    }\n  },\n  {\n    \"id\":11,\n    \"type\":\"Wall breaches\",\n    \"title\":\"Residence near LSPD\",\n    \"notes\":\"Go to the location as seen below. Turn around to the red residence house. Hop over the gate, run to the backyard, go upstairs to the second floor. Turn left to the red pillar and jump.\",\n    \"order\":9,\n    \"lat\":66.355,\n    \"lng\":-135.088,\n    \"video\":{\n      \"yt_id\":\"o8BPUZe65_o\",\n      \"yt_user\":\"Fed X Gaming\",\n      \"start\":\"1:35\",\n      \"end\":\"2:35\"\n    }\n  },\n  {\n    \"id\":12,\n    \"type\":\"Wall breaches\",\n    \"title\":\"FIB tower\",\n    \"notes\":\"Go to the location as seen below. Walk to the entrance door and trun to the wall. Jump to get inside the building.\",\n    \"order\":10,\n    \"lat\":67.012,\n    \"lng\":-123.486,\n    \"video\":{\n      \"yt_id\":\"o8BPUZe65_o\",\n      \"yt_user\":\"Fed X Gaming\",\n      \"start\":\"3:30\",\n      \"end\":\"4:40\"\n    }\n  },\n  {\n    \"id\":13,\n    \"type\":\"Wall breaches\",\n    \"title\":\"Car park\",\n    \"notes\":\"Go to the location as seen below. Drive into the wall about one meter besides the electricity box.\",\n    \"order\":11,\n    \"lat\":66.710,\n    \"lng\":-128.112,\n    \"video\":{\n      \"yt_id\":\"3Jerg8fknik\",\n      \"yt_user\":\"Fed X Gaming\",\n      \"start\":\"0:25\",\n      \"end\":\"1:00\"\n    }\n  },\n  {\n    \"id\":14,\n    \"type\":\"Wall breaches\",\n    \"title\":\"Shrub near Eclipse tower\",\n    \"notes\":\"Go to the location as seen below. Walk to the pillar and jump to get into the shrub.\",\n    \"order\":12,\n    \"lat\":70.580,\n    \"lng\":-132.528,\n    \"video\":{\n      \"yt_id\":\"3Jerg8fknik\",\n      \"yt_user\":\"Fed X Gaming\",\n      \"start\":\"1:35\",\n      \"end\":\"2:25\"\n    }\n  },\n  {\n    \"id\":15,\n    \"type\":\"Wall breaches\",\n    \"title\":\"Bridge in Tataviam Mountains\",\n    \"notes\":\"Go to the location as seen below. Walk towards the bridge wall. Turn right and walk straight along the wall until you are inside the bridge. Turn around and walk in the other direction until you are fully breached inside the bridge.\",\n    \"order\":13,\n    \"lat\":71.103,\n    \"lng\":-99.163,\n    \"video\":{\n      \"yt_id\":\"3Jerg8fknik\",\n      \"yt_user\":\"Fed X Gaming\",\n      \"start\":\"3:00\",\n      \"end\":\"4:00\"\n    }\n  },\n  {\n    \"id\":16,\n    \"type\":\"Wall breaches\",\n    \"title\":\"Rockford Plaza\",\n    \"notes\":\"Go to the location as seen below. Park your car against the railing. Hop onto your roof, run and jump into the wall.\",\n    \"order\":14,\n    \"lat\":69.100,\n    \"lng\":-127.090,\n    \"video\":{\n      \"yt_id\":\"neG9BXSi49E\",\n      \"yt_user\":\"toffytastic\",\n      \"start\":\"0:20\",\n      \"end\":\"1:10\"\n    }\n  },\n  {\n    \"id\":17,\n    \"type\":\"Wall breaches\",\n    \"title\":\"Example of \\\"Breach anywhere\\\" method\",\n    \"notes\":\"Go to the location as seen below. Park your car against the railing. Hop onto your roof, run and jump into the wall.\",\n    \"order\":15,\n    \"lat\":68.609,\n    \"lng\":-122.454,\n    \"video\":{\n      \"yt_id\":\"egTdSYyLA94\",\n      \"yt_user\":\"GamerTutorials\",\n      \"start\":\"0:20\",\n      \"end\":\"1:30\"\n    },\n    \"credit\":[\n      {\n        \"what\":\"Glitch found\",\n        \"who\":\"NobleThread\",\n        \"where\":\"http://www.dieselgaming.com/forums/grand-theft-auto-v.39/\"\n      }\n    ]\n  },\n  {\n    \"id\":18,\n    \"type\":\"Wall breaches\",\n    \"title\":\"Industrial building\",\n    \"notes\":\"Go to the location as seen below. Climb up the ladder, run across the roof and jump onto the roof of the building next to it. Run at the end of the roof to the left corner. Once you're there you'll fall through the roof.\",\n    \"order\":16,\n    \"lat\":67.127,\n    \"lng\":-117.114,\n    \"video\":{\n      \"yt_id\":\"ROiu8EqnSYg\",\n      \"yt_user\":\"Danni\",\n      \"start\":\"0:10\",\n      \"end\":\"1:10\"\n    }\n  },\n  {\n    \"id\":19,\n    \"type\":\"Wall breaches\",\n    \"title\":\"Highway\",\n    \"notes\":\"Works the same like \\\"Bridge in Tataviam Mountains\\\". Go to the location as seen below. Walk towards the bridge wall. Turn left and walk straight along the wall until you are inside the bridge. Turn around and walk in the other direction until you are fully breached inside the bridge.\",\n    \"order\":17,\n    \"lat\":65.339,\n    \"lng\":-111.555,\n    \"video\":{\n      \"yt_id\":\"fDicikImeuY\",\n      \"yt_user\":\"oOGamingForCharityOo\",\n      \"start\":\"0:23\",\n      \"end\":\"1:10\"\n    }\n  },\n  {\n    \"id\":20,\n    \"type\":\"Wall breaches\",\n    \"title\":\"Sandy Shores Store\",\n    \"notes\":\"Go to the location as seen below. Walk towards the store right beside the entrance. Jump to get inside the building.\",\n    \"order\":18,\n    \"lat\":79.122,\n    \"lng\":-105.403,\n    \"video\":{\n      \"yt_id\":\"62OBpgnGssw\",\n      \"yt_user\":\"oOGamingForCharityOo\",\n      \"start\":\"0:23\",\n      \"end\":\"0:50\"\n    }\n  },\n  {\n    \"id\":21,\n    \"type\":\"Wall breaches\",\n    \"title\":\"FIB Tower\",\n    \"notes\":\"Go to the location as seen below. Get a helicopter and fly on top of the building. Get out and walk to the side of the building. Walk downstairs the ladder and turn right. At the end of that platform turn left and walk straight into the wall/border (not on the side with the big FIB logo). You should fall and end up on the next floor. After some seconds the textures should load and you should be inside the FIB building.\",\n    \"order\":19,\n    \"lat\":66.883,\n    \"lng\":-123.146,\n    \"video\":{\n      \"yt_id\":\"VApVSfpLtsE\",\n      \"yt_user\":\"Dat Saintsfan\",\n      \"start\":\"0:20\",\n      \"end\":\"1:25\"\n    }\n  },\n  {\n    \"id\":22,\n    \"type\":\"Wall breaches\",\n    \"title\":\"Beach house\",\n    \"notes\":\"Go to the location as seen below. Walk behind the house, turn right and sprint into the house.\",\n    \"order\":20,\n    \"lat\":71.410,\n    \"lng\":-153.929,\n    \"video\":{\n      \"yt_id\":\"LlShnWvtHKM\",\n      \"yt_user\":\"Im Blood Lust\",\n      \"start\":\"0:27\",\n      \"end\":\"1:05\"\n    }\n  },\n  {\n    \"id\":23,\n    \"type\":\"Wall breaches\",\n    \"title\":\"Below Airport\",\n    \"notes\":\"Go to the location as seen below. Walk to the stack of greenish pillars, make your way to the top of them. Walk straight ahead to the little space between them, get in there and run straight into the grey pillars until you glitch into them.\",\n    \"order\":21,\n    \"lat\":56.170,\n    \"lng\":-143.438,\n    \"video\":{\n      \"yt_id\":\"ym7_1hfYUEk\",\n      \"yt_user\":\"Im Blood Lust\",\n      \"start\":\"0:50\",\n      \"end\":\"2:10\"\n    }\n  },\n  {\n    \"id\":24,\n    \"type\":\"Wall breaches\",\n    \"title\":\"Meth lab\",\n    \"notes\":\"Go to the location as seen below. Back up your car to the wall where the generators are. Hop on your car and shoot out the window on the second floor. Climb up the fan and then climb up inside the window.\",\n    \"order\":22,\n    \"lat\":78.883,\n    \"lng\":-110.940,\n    \"video\":{\n      \"yt_id\":\"ajSwgxc4GVs\",\n      \"yt_user\":\"Dat Saintsfan\",\n      \"start\":\"0:24\",\n      \"end\":\"1:10\"\n    }\n  },\n  {\n    \"id\":25,\n    \"type\":\"Wall breaches\",\n    \"title\":\"Vespucci Canals building\",\n    \"notes\":\"Go to the location as seen below. Climb over the wall and walk straight into the building.\",\n    \"order\":23,\n    \"lat\":66.054,\n    \"lng\":-134.209,\n    \"video\":{\n      \"yt_id\":\"u2aaX7ON0os\",\n      \"yt_user\":\"Optimuh\",\n      \"start\":\"0:15\",\n      \"end\":\"1:10\"\n    }\n  },\n  {\n    \"id\":26,\n    \"type\":\"Wall breaches\",\n    \"title\":\"Vinewood Observatory\",\n    \"notes\":\"Go to the location as seen below. Climb up the ladder and turn left. Run to the gap between the two roof elements. Try to fall between them to breach into the building.\",\n    \"order\":24,\n    \"lat\":71.577,\n    \"lng\":-118.136,\n    \"video\":{\n      \"yt_id\":\"thOyjDVK9PE\",\n      \"yt_user\":\"Optimuh\",\n      \"start\":\"0:15\",\n      \"end\":\"0:50\"\n    }\n  },\n  {\n    \"id\":26,\n    \"type\":\"Wall breaches\",\n    \"title\":\"Dollar Pills\",\n    \"notes\":\"Go to the location as seen below. Climb on top of the yellow cloth bin and jump again to get inside the building.\",\n    \"order\":24,\n    \"lat\":77.116,\n    \"lng\":-118.806,\n    \"video\":{\n      \"yt_id\":\"tllv4nBwpJE\",\n      \"yt_user\":\"Wify142\",\n      \"start\":\"0:30\",\n      \"end\":\"1:10\"\n    }\n  },\n  {\n    \"id\":27,\n    \"type\":\"Wall breaches\",\n    \"title\":\"City Hall\",\n    \"notes\":\"Go to the location as seen below and go up the stairs to Mike's left in the picture. Follow the path until you reach an intersection. Your going to want to take a left. Like before, keep following the path until you you find the corner. It should be on the right hand side if you went the way I told you. All you have to do now, is walk into it. Do not continually walk into the wall, let go of the left stick once you are behind the little rail thingy. If you did it correctly, you should slide down the wall, into a little room. The invisible wall to Mike's left is bullet proof, but the one in front of him you can shoot through. The only way to get out of this little room is to jump into the void of death (behind mike out of frame).\",\n    \"order\":25,\n    \"lat\":69.244,\n    \"lng\":-130.759,\n    \"video\":{\n      \"yt_id\":\"NpwsV0qhGVw\",\n      \"yt_user\":\"darktroop6\",\n      \"start\":\"0:25\",\n      \"end\":\"3:20\"\n    },\n    \"credit\":[\n      {\n        \"what\":\"Glitch found\",\n        \"who\":\"/u/darktroop6\",\n        \"where\":\"http://www.reddit.com/r/gtaglitches/comments/20ih35/glitch_new_wallbreach_patch_111/\"\n      }\n    ]\n  },\n  {\n    \"id\":28,\n    \"type\":\"Wall breaches\",\n    \"title\":\"Humane Laboratory\",\n    \"notes\":\"Go to the location as seen below. Walk upstairs and turn left. Run straight at the end of this to the generator. Hop on the generator and walk to the three blue pipes. Pull out your phone and accept any pending job invite. Back out immedietly and you should spawn inside the laboratory.\",\n    \"order\":26,\n    \"lat\":79.157,\n    \"lng\":-90.110,\n    \"video\":{\n      \"yt_id\":\"GVxNv9Bjcoo\",\n      \"yt_user\":\"Carrythxd\",\n      \"start\":\"0:05\",\n      \"end\":\"1:10\"\n    }\n  },\n  {\n    \"id\":29,\n    \"type\":\"Wall breaches\",\n    \"title\":\"Flecca Bank\",\n    \"notes\":\"Go to the location as seen below. Get a decent sized vehicle and park it infront of the bank. Hop on it and climb up the roof of the bank. Pull out your phone and accept any pending job invite. Back out immedietly and you should spawn inside the bank.\",\n    \"order\":27,\n    \"lat\":77.032,\n    \"lng\":-113.269,\n    \"video\":{\n      \"yt_id\":\"XFRFENhFM7E\",\n      \"yt_user\":\"KingCodShots\",\n      \"start\":\"1:45\",\n      \"end\":\"2:50\"\n    }\n  },\n  {\n    \"id\":30,\n    \"type\":\"Wall breaches\",\n    \"title\":\"LSPD police station\",\n    \"notes\":\"Go to the location as seen below. Walk over the shrub and stand besides the building wall. Pull out your phone and accept any pending job invite. Back out immedietly and you should spawn inside the police station.\",\n    \"order\":28,\n    \"lat\":66.161,\n    \"lng\":-120.388,\n    \"video\":{\n      \"yt_id\":\"QOvOWj4bWDo\",\n      \"yt_user\":\"Carrythxd\",\n      \"start\":\"0:05\",\n      \"end\":\"1:00\"\n    }\n  },\n  {\n    \"id\":30,\n    \"type\":\"Wall breaches\",\n    \"title\":\"Floyd's house\",\n    \"notes\":\"Go to the location as seen below. Walk upstairs and climb up the root. Pull out your phone and accept any pending job invite. Back out immedietly and you should spawn inside Floyd's house.\",\n    \"order\":28,\n    \"lat\":63.904,\n    \"lng\":-135.879,\n    \"video\":{\n      \"yt_id\":\"jSZoLF4mXhQ\",\n      \"yt_user\":\"Carrythxd\",\n      \"start\":\"0:03\",\n      \"end\":\"0:40\"\n    }\n  },\n  {\n    \"id\":31,\n    \"type\":\"Wall breaches\",\n    \"title\":\"Lester's house\",\n    \"notes\":\"Go to the location as seen below. Go to the backside of the house and try to jump on top the AC fan. Position yourself in the middle of the root. Pull out your phone and accept any pending job invite. Back out immedietly and you should spawn inside Lester's house.\",\n    \"order\":29,\n    \"lat\":62.885,\n    \"lng\":-112.039,\n    \"video\":{\n      \"yt_id\":\"1H0BWTBBhAM\",\n      \"yt_user\":\"DomisLive\",\n      \"start\":\"0:16\",\n      \"end\":\"1:00\"\n    }\n  },\n  {\n    \"id\":32,\n    \"type\":\"Wall breaches\",\n    \"title\":\"Strip Club office\",\n    \"notes\":\"Go to the location as seen below. Climb up the ladder and face the metal box on top of it. Pull out your phone and accept any pending job invite. Back out immedietly and you should spawn inside the Strip Club.\",\n    \"order\":30,\n    \"lat\":64.914,\n    \"lng\":-123.376,\n    \"video\":{\n      \"yt_id\":\"Dt-aPNYuA9s\",\n      \"yt_user\":\"DomisLive\",\n      \"start\":\"0:30\",\n      \"end\":\"1:10\"\n    }\n  },\n  {\n    \"id\":32,\n    \"type\":\"Wall breaches\",\n    \"title\":\"Trevors torture room\",\n    \"notes\":\"Go to the location as seen below. Climb up the ladder and face wall on the left jump on top the second roof. Walk in the middle of the roof and pull out your phone and accept any pending job invite. Back out immedietly and you should spawn inside the room.\",\n    \"order\":30,\n    \"lat\":60.765,\n    \"lng\":-123.102,\n    \"video\":{\n      \"yt_id\":\"lpdmTNho1c8\",\n      \"yt_user\":\"Dat Saintsfan\",\n      \"start\":\"0:18\",\n      \"end\":\"1:00\"\n    }\n  },\n  {\n    \"id\":33,\n    \"type\":\"Wall breaches\",\n    \"title\":\"Franklins mansion\",\n    \"notes\":\"Go to the location as seen below. Drive your car under the porch on the right if you are facing the mansion. Hop on top of it and climb up the roof. Pull out your phone and accept any pending job invite. Back out immedietly and you should spawn inside Franklins mansion.\",\n    \"order\":31,\n    \"lat\":71.427,\n    \"lng\":-124.629,\n    \"video\":{\n      \"yt_id\":\"UGQsnApgSMs\",\n      \"yt_user\":\"Optimuh\",\n      \"start\":\"0:10\",\n      \"end\":\"0:55\"\n    }\n  },\n  {\n    \"id\":34,\n    \"type\":\"Wall breaches\",\n    \"title\":\"Michaels mansion\",\n    \"notes\":\"Go to the location as seen below. Use a helicopter to get ontop of the roof. Walk in the middle, pull out your phone and accept any pending job invite. Back out immedietly and you should spawn inside Micheals mansion.\",\n    \"order\":32,\n    \"lat\":70.237,\n    \"lng\":-132.517,\n    \"video\":{\n      \"yt_id\":\"lprii2ufV5w\",\n      \"yt_user\":\"Trouble\",\n      \"start\":\"0:10\",\n      \"end\":\"0:40\"\n    }\n  },\n  {\n    \"id\":35,\n    \"type\":\"Wall breaches\",\n    \"title\":\"Space Docker garage\",\n    \"notes\":\"Go to the location as seen below. Get a decent sized vehicle and drive it against the trailer. Get on top and climb on the roof. Pull out your phone and accept any pending job invite. Back out immedietly and you should spawn inside the Space Docker garage.\",\n    \"order\":33,\n    \"lat\":76.756,\n    \"lng\":-102.063,\n    \"video\":{\n      \"yt_id\":\"Lgdy3CJNg58\",\n      \"yt_user\":\"Optimuh\",\n      \"start\":\"0:10\",\n      \"end\":\"0:55\"\n    }\n  },\n  {\n    \"id\":36,\n    \"type\":\"Wall breaches\",\n    \"title\":\"Recycling Plant\",\n    \"notes\":\"Go to the location as seen below. Climb up the ladders and walk in the middle of the roof. Pull out your phone and accept any pending job invite. Back out immedietly and you should spawn inside the Space Docker garage.\",\n    \"order\":34,\n    \"lat\":63.332,\n    \"lng\":-130.386,\n    \"video\":{\n      \"yt_id\":\"A4CU6bDjy9Q\",\n      \"yt_user\":\"Optimuh\",\n      \"start\":\"0:32\",\n      \"end\":\"1:00\"\n    }\n  },\n  {\n    \"id\":37,\n    \"type\":\"Wall breaches\",\n    \"title\":\"Ambulance\",\n    \"notes\":\"Go to the location as seen below. Get in a vehicle than can hold you in the back like the van in the video. Get in the back and let your friend drive backwards against it. Once you are against the wall, hit eject to get out of the van and breach inside of the ambulance.\",\n    \"order\":35,\n    \"lat\":67.601,\n    \"lng\":-121.948,\n    \"video\":{\n      \"yt_id\":\"mYVnLJvlz6o\",\n      \"yt_user\":\"CodFlaws\",\n      \"start\":\"0:05\",\n      \"end\":\"1:00\"\n    }\n  },\n  {\n    \"id\":38,\n    \"type\":\"Wall breaches\",\n    \"title\":\"Central LSC\",\n    \"notes\":\"Go to the location as seen below. Get in a vehicle than can hold you in the back like the van in the video. Get in the back and let your friend drive backwards against it. Once you are against the wall, hit eject to get out of the van and breach inside of the LSC building.\",\n    \"order\":36,\n    \"lat\":69.221,\n    \"lng\":-127.749,\n    \"video\":{\n      \"yt_id\":\"G9vwDTkpXXc\",\n      \"yt_user\":\"Fed X Gaming\",\n      \"start\":\"1:20\",\n      \"end\":\"1:55\"\n    }\n  },\n  {\n    \"id\":39,\n    \"type\":\"Wall breaches\",\n    \"title\":\"Rockford Plaza\",\n    \"notes\":\"Go to the location as seen below. Get in a vehicle than can hold you in the back like the van in the video. Get in the back and let your friend drive backwards against it. Once you are against the wall, hit eject to get out of the van and breach inside the building.\",\n    \"order\":37,\n    \"lat\":69.434,\n    \"lng\":-126.958,\n    \"video\":{\n      \"yt_id\":\"N0GsFD02qPs\",\n      \"yt_user\":\"Fed X Gaming\",\n      \"start\":\"0:15\",\n      \"end\":\"1:50\"\n    }\n  },\n  {\n    \"id\":40,\n    \"type\":\"Wall breaches\",\n    \"title\":\"Martins mansion\",\n    \"notes\":\"Go to the location as seen below. Get the free van from the beach bum DLC and let your friend pick you up with a Cargobob. Once inside tell your friend to drop you on the balcony deck thingy. Get in the back and let your friend drive backwards against it. Once you are against the wall, hit eject to get out of the van and breach inside the building.\",\n    \"order\":38,\n    \"lat\":71.736,\n    \"lng\":-134.517,\n    \"video\":{\n      \"yt_id\":\"XSOfbP8jf5k\",\n      \"yt_user\":\"Dynasty\",\n      \"start\":\"0:20\",\n      \"end\":\"1:25\"\n    }\n  },\n  {\n    \"id\":41,\n    \"type\":\"Wall breaches\",\n    \"title\":\"Helicopter under map\",\n    \"notes\":\"Go to the location as seen below. Get into a helicopter and fly towards the green and white building. Fly low enought to get between the gab on the white side of the building. Once you are there, fly straight up to get into the second part of the building. Fly towards the middle and then down the ground below the map.\",\n    \"order\":39,\n    \"lat\":68.899,\n    \"lng\":-133.396,\n    \"video\":{\n      \"yt_id\":\"gAsNdxYISdg\",\n      \"yt_user\":\"TheLuckyNoob\",\n      \"start\":\"0:04\",\n      \"end\":\"0:55\"\n    }\n  },\n  {\n    \"id\":42,\n    \"type\":\"Wall breaches\",\n    \"title\":\"Casino\",\n    \"notes\":\"Go to the location as seen below. Get a Sanchez motor-bike and go the right corner of the building. Drive between the buildings and try to fall off to breach into the Casino.\",\n    \"order\":40,\n    \"lat\":69.676,\n    \"lng\":-115.587,\n    \"video\":{\n      \"yt_id\":\"a6Fb9wvjkew\",\n      \"yt_user\":\"Dynasty\",\n      \"start\":\"0:04\",\n      \"end\":\"0:40\"\n    }\n  },\n  {\n    \"id\":43,\n    \"type\":\"Wall breaches\",\n    \"title\":\"Military base tower\",\n    \"notes\":\"Withdraw all your money from your bank account. Go to Lester and demand a \\\"Blind Eye\\\". Go to the location as seen below, walk against the right side of the green door of the tower and go to Dynasty 8 website. Pretent you would buy a property, when the alert pops up, press A and immedietly jump inside the door.\",\n    \"order\":41,\n    \"lat\":78.220,\n    \"lng\":-147.404,\n    \"video\":{\n      \"yt_id\":\"DxzPTovofrY\",\n      \"yt_user\":\"TechnoDucky\",\n      \"start\":\"1:00\",\n      \"end\":\"1:40\"\n    },\n    \"credit\":[\n      {\n        \"what\":\"Glitch found\",\n        \"who\":\"/u/TechnoDucky\",\n        \"where\":\"http://www.reddit.com/r/gtaglitches/comments/29acli/how_to_wall_breach_into_military_watchtower/\"\n      }\n    ]\n  },\n  {\n    \"id\":44,\n    \"type\":\"Wall breaches\",\n    \"title\":\"Ship at Merryweather docks\",\n    \"notes\":\"Go to the location as seen on the interactive map, get aboard the ship and walk towards the back of the ship where there's an overhang. Wace the wall and just jump.\",\n    \"order\":42,\n    \"lat\":57.160,\n    \"lng\":-119.861,\n    \"credit\":[\n      {\n        \"what\":\"Glitch found\",\n        \"who\":\"/u/bowsereatspeaches\",\n        \"where\":\"http://www.reddit.com/r/gtaglitches/comments/29b4xy/just_breached_inside_a_ship_at_the_docks/\"\n      }\n    ],\n    \"images\":[\n      {\n        \"id\":\"1\",\n        \"headline\":\"Breached in the ship\",\n        \"url\":\"http://i.imgur.com/zPwyyNm.jpg\",\n        \"author\":\"/u/bowsereatspeaches\",\n        \"contact\":\"http://www.reddit.com/user/bowsereatspeaches\"\n      }\n    ]\n  },\n  {\n    \"id\":45,\n    \"type\":\"Wall breaches\",\n    \"title\":\"Michaels mansion (via garage)\",\n    \"notes\":\"Go to the location as seen below, drive your car next to the garage and hop onto it. Climb ontop the garage roof and walk to the little balcony of the main house. Run across the wall towards the balcony and jump to climb it up. Pull out your phone and accept any pending job invite. Back out immedietly and you should spawn inside Michaels mansion.\",\n    \"order\":43,\n    \"lat\":70.245,\n    \"lng\":-132.693,\n    \"video\":{\n      \"yt_id\":\"Zh4DZpsiltU\",\n      \"yt_user\":\"Solar Glitch\",\n      \"start\":\"0:03\",\n      \"end\":\"0:30\"\n    }\n  },\n  {\n    \"id\":46,\n    \"type\":\"Vehicles\",\n    \"title\":\"Ratloader\",\n    \"notes\":\"Go to the location as seen below. With a bit of luck it will spawn there.\",\n    \"order\":3,\n    \"lat\":79.233,\n    \"lng\":-107.534,\n    \"video\":{\n      \"yt_id\":\"3geCEZ1SMf4\",\n      \"yt_user\":\"Dat Saintsfan\",\n      \"start\":\"1:35\",\n      \"end\":\"1:55\"\n    }\n  },\n  {\n    \"id\":47,\n    \"type\":\"Vehicles\",\n    \"title\":\"Sultan\",\n    \"notes\":\"Go to the location as seen below. With a bit of luck it will spawn there.\",\n    \"order\":4,\n    \"lat\":76.893,\n    \"lng\":-106.589,\n    \"video\":{\n      \"yt_id\":\"3geCEZ1SMf4\",\n      \"yt_user\":\"Dat Saintsfan\",\n      \"start\":\"2:35\",\n      \"end\":\"3:25\"\n    }\n  },\n  {\n    \"id\":48,\n    \"type\":\"Vehicles\",\n    \"title\":\"BF Surfer\",\n    \"notes\":\"Go to the location as seen below. With a bit of luck it will spawn there.\",\n    \"order\":5,\n    \"lat\":61.856,\n    \"lng\":-136.121,\n    \"video\":{\n      \"yt_id\":\"3geCEZ1SMf4\",\n      \"yt_user\":\"Dat Saintsfan\",\n      \"start\":\"3:50\",\n      \"end\":\"4:05\"\n    }\n  },\n  {\n    \"id\":49,\n    \"type\":\"Vehicles\",\n    \"title\":\"BF Surfer (with surfboard)\",\n    \"notes\":\"Go to the location as seen below. With a bit of luck it will spawn there.\",\n    \"order\":6,\n    \"lat\":67.102,\n    \"lng\":-97.646,\n    \"video\":{\n      \"yt_id\":\"3geCEZ1SMf4\",\n      \"yt_user\":\"Dat Saintsfan\",\n      \"start\":\"4:10\",\n      \"end\":\"4:40\"\n    }\n  },\n  {\n    \"id\":50,\n    \"type\":\"Vehicles\",\n    \"title\":\"Vapid Bobcat XL\",\n    \"notes\":\"Go to the location as seen below. With a bit of luck it will spawn there.\",\n    \"order\":7,\n    \"lat\":55.003,\n    \"lng\":-114.741,\n    \"video\":{\n      \"yt_id\":\"3geCEZ1SMf4\",\n      \"yt_user\":\"Dat Saintsfan\",\n      \"start\":\"4:50\",\n      \"end\":\"5:20\"\n    }\n  },\n  {\n    \"id\":51,\n    \"type\":\"Vehicles\",\n    \"title\":\"Western Daemon\",\n    \"notes\":\"Go to the location as seen below. With a bit of luck it will spawn there.\",\n    \"order\":8,\n    \"lat\":69.760,\n    \"lng\":-138.164,\n    \"video\":{\n      \"yt_id\":\"3geCEZ1SMf4\",\n      \"yt_user\":\"Dat Saintsfan\",\n      \"start\":\"5:28\",\n      \"end\":\"5:55\"\n    }\n  },\n  {\n    \"id\":52,\n    \"type\":\"Vehicles\",\n    \"title\":\"Ocelot Jackal\",\n    \"notes\":\"Go to the location as seen below. With a bit of luck it will spawn there.\",\n    \"order\":9,\n    \"lat\":68.069,\n    \"lng\":-135.242,\n    \"video\":{\n      \"yt_id\":\"PdY1flTk1RM\",\n      \"yt_user\":\"Dat Saintsfan\",\n      \"start\":\"0:45\",\n      \"end\":\"1:05\"\n    }\n  },\n  {\n    \"id\":53,\n    \"type\":\"Vehicles\",\n    \"title\":\"Youga Van\",\n    \"notes\":\"Go to the location as seen below. With a bit of luck it will spawn there.\",\n    \"order\":10,\n    \"lat\":80.216,\n    \"lng\":-135.945,\n    \"video\":{\n      \"yt_id\":\"PdY1flTk1RM\",\n      \"yt_user\":\"Dat Saintsfan\",\n      \"start\":\"1:30\",\n      \"end\":\"1:55\"\n    }\n  },\n  {\n    \"id\":54,\n    \"type\":\"Vehicles\",\n    \"title\":\"Karin Intruder\",\n    \"notes\":\"Go to the location as seen below. With a bit of luck it will spawn there.\",\n    \"order\":11,\n    \"lat\":65.091,\n    \"lng\":-130.474,\n    \"video\":{\n      \"yt_id\":\"PdY1flTk1RM\",\n      \"yt_user\":\"Dat Saintsfan\",\n      \"start\":\"2:25\",\n      \"end\":\"2:40\"\n    }\n  },\n  {\n    \"id\":55,\n    \"type\":\"Vehicles\",\n    \"title\":\"Karin Intruder #2\",\n    \"notes\":\"Go to the location as seen below. With a bit of luck it will spawn there.\",\n    \"order\":12,\n    \"lat\":62.900,\n    \"lng\":-112.236,\n    \"video\":{\n      \"yt_id\":\"PdY1flTk1RM\",\n      \"yt_user\":\"Dat Saintsfan\",\n      \"start\":\"2:50\",\n      \"end\":\"3:25\"\n    }\n  },\n  {\n    \"id\":55,\n    \"type\":\"Vehicles\",\n    \"title\":\"Karin BeeJay XL\",\n    \"notes\":\"Go to the location as seen below. With a bit of luck it will spawn there.\",\n    \"order\":13,\n    \"lat\":76.750,\n    \"lng\":-106.611,\n    \"video\":{\n      \"yt_id\":\"PdY1flTk1RM\",\n      \"yt_user\":\"Dat Saintsfan\",\n      \"start\":\"3:30\",\n      \"end\":\"4:11\"\n    }\n  },\n  {\n    \"id\":56,\n    \"type\":\"Vehicles\",\n    \"title\":\"Ubermacht Sentinel XS\",\n    \"notes\":\"Go to the location as seen below. With a bit of luck it will spawn there.\",\n    \"order\":14,\n    \"lat\":63.396,\n    \"lng\":-137.164,\n    \"video\":{\n      \"yt_id\":\"PdY1flTk1RM\",\n      \"yt_user\":\"Dat Saintsfan\",\n      \"start\":\"4:30\",\n      \"end\":\"5:10\"\n    }\n  },\n  {\n    \"id\":57,\n    \"type\":\"Vehicles\",\n    \"title\":\"Mariachi\",\n    \"notes\":\"Go to the location as seen below _at 19:00_. Drive down the hill and with a bit of luck you can catch the car.\",\n    \"order\":15,\n    \"lat\":80.672,\n    \"lng\":-133.901,\n    \"video\":{\n      \"yt_id\":\"br0eaAMILh0\",\n      \"yt_user\":\"Dat Saintsfan\",\n      \"start\":\"1:10\",\n      \"end\":\"3:20\"\n    }\n  },\n  {\n    \"id\":58,\n    \"type\":\"Vehicles\",\n    \"title\":\"Ocelot F620\",\n    \"notes\":\"Go to the location as seen below. With a bit of luck it will spawn there.\",\n    \"order\":16,\n    \"lat\":66.399,\n    \"lng\":-140.955,\n    \"video\":{\n      \"yt_id\":\"br0eaAMILh0\",\n      \"yt_user\":\"Dat Saintsfan\",\n      \"start\":\"3:21\",\n      \"end\":\"4:00\"\n    }\n  },\n  {\n    \"id\":59,\n    \"type\":\"Vehicles\",\n    \"title\":\"Vapid Peyote\",\n    \"notes\":\"Go to the location as seen below. With a bit of luck it will spawn there.\",\n    \"order\":17,\n    \"lat\":63.253,\n    \"lng\":-126.343,\n    \"video\":{\n      \"yt_id\":\"br0eaAMILh0\",\n      \"yt_user\":\"Dat Saintsfan\",\n      \"start\":\"4:15\",\n      \"end\":\"5:00\"\n    }\n  },\n  {\n    \"id\":60,\n    \"type\":\"Vehicles\",\n    \"title\":\"Albani Primo\",\n    \"notes\":\"Go to the location as seen below. With a bit of luck it will spawn there.\",\n    \"order\":18,\n    \"lat\":55.091,\n    \"lng\":-138.845,\n    \"video\":{\n      \"yt_id\":\"br0eaAMILh0\",\n      \"yt_user\":\"Dat Saintsfan\",\n      \"start\":\"5:10\",\n      \"end\":\"5:40\"\n    }\n  },\n  {\n    \"id\":61,\n    \"type\":\"Vehicles\",\n    \"title\":\"Cheval Picador\",\n    \"notes\":\"Go to the location as seen below. With a bit of luck it will spawn there.\",\n    \"order\":19,\n    \"lat\":61.575,\n    \"lng\":-112.544,\n    \"video\":{\n      \"yt_id\":\"br0eaAMILh0\",\n      \"yt_user\":\"Dat Saintsfan\",\n      \"start\":\"6:00\",\n      \"end\":\"6:30\"\n    }\n  },\n  {\n    \"id\":62,\n    \"type\":\"Vehicles\",\n    \"title\":\"Hearse\",\n    \"notes\":\"Go to the location as seen below. With a bit of luck it will spawn there.\",\n    \"order\":20,\n    \"lat\":68.633,\n    \"lng\":-140.669,\n    \"video\":{\n      \"yt_id\":\"br0eaAMILh0\",\n      \"yt_user\":\"Dat Saintsfan\",\n      \"start\":\"6:40\",\n      \"end\":\"7:15\"\n    }\n  },\n  {\n    \"id\":63,\n    \"type\":\"Vehicles\",\n    \"title\":\"Benefactor Surano\",\n    \"notes\":\"Go to the location as seen below. With a bit of luck it will spawn there.\",\n    \"order\":21,\n    \"lat\":73.904,\n    \"lng\":-132.429,\n    \"video\":{\n      \"yt_id\":\"br0eaAMILh0\",\n      \"yt_user\":\"Dat Saintsfan\",\n      \"start\":\"7:25\",\n      \"end\":\"8:00\"\n    }\n  },\n  {\n    \"id\":64,\n    \"type\":\"Vehicles\",\n    \"title\":\"Albani Manana\",\n    \"notes\":\"Go to the location as seen below. With a bit of luck it will spawn there.\",\n    \"order\":22,\n    \"lat\":62.855,\n    \"lng\":-125.046,\n    \"video\":{\n      \"yt_id\":\"rz-3qCaHbiQ\",\n      \"yt_user\":\"Dat Saintsfan\",\n      \"start\":\"1:15\",\n      \"end\":\"2:10\"\n    }\n  },\n  {\n    \"id\":65,\n    \"type\":\"Vehicles\",\n    \"title\":\"Declasse Voodoo\",\n    \"notes\":\"Go to the location as seen below. With a bit of luck it will spawn there.\",\n    \"order\":23,\n    \"lat\":79.163,\n    \"lng\":-109.863,\n    \"video\":{\n      \"yt_id\":\"rz-3qCaHbiQ\",\n      \"yt_user\":\"Dat Saintsfan\",\n      \"start\":\"2:25\",\n      \"end\":\"2:38\"\n    }\n  },\n  {\n    \"id\":66,\n    \"type\":\"Vehicles\",\n    \"title\":\"Declasse Rancher XL\",\n    \"notes\":\"Go to the location as seen below. With a bit of luck it will spawn there.\",\n    \"order\":24,\n    \"lat\":56.487,\n    \"lng\":-143.152,\n    \"video\":{\n      \"yt_id\":\"rz-3qCaHbiQ\",\n      \"yt_user\":\"Dat Saintsfan\",\n      \"start\":\"3:00\",\n      \"end\":\"3:38\"\n    }\n  },\n  {\n    \"id\":67,\n    \"type\":\"Vehicles\",\n    \"title\":\"Western Bagger\",\n    \"notes\":\"Go to the location as seen below. With a bit of luck it will spawn there.\",\n    \"order\":25,\n    \"lat\":69.870,\n    \"lng\":-138.065,\n    \"video\":{\n      \"yt_id\":\"YCI8IYEimsg\",\n      \"yt_user\":\"Dat Saintsfan\",\n      \"start\":\"0:35\",\n      \"end\":\"1:05\"\n    }\n  },\n  {\n    \"id\":68,\n    \"type\":\"Vehicles\",\n    \"title\":\"Benefactor Schafter\",\n    \"notes\":\"Go to the location as seen below. With a bit of luck it will spawn there.\",\n    \"order\":26,\n    \"lat\":70.002,\n    \"lng\":-138.109,\n    \"video\":{\n      \"yt_id\":\"YCI8IYEimsg\",\n      \"yt_user\":\"Dat Saintsfan\",\n      \"start\":\"1:10\",\n      \"end\":\"1:30\"\n    }\n  },\n  {\n    \"id\":69,\n    \"type\":\"Vehicles\",\n    \"title\":\"Principe Nemesis\",\n    \"notes\":\"Go to the location as seen below. With a bit of luck it will spawn there.\",\n    \"order\":27,\n    \"lat\":66.522,\n    \"lng\":-131.331,\n    \"video\":{\n      \"yt_id\":\"YCI8IYEimsg\",\n      \"yt_user\":\"Dat Saintsfan\",\n      \"start\":\"2:10\",\n      \"end\":\"2:40\"\n    }\n  },\n  {\n    \"id\":70,\n    \"type\":\"Vehicles\",\n    \"title\":\"Duneloader\",\n    \"notes\":\"Go to the location as seen below. With a bit of luck it will spawn there.\",\n    \"order\":28,\n    \"lat\":77.518,\n    \"lng\":-123.223,\n    \"video\":{\n      \"yt_id\":\"YCI8IYEimsg\",\n      \"yt_user\":\"Dat Saintsfan\",\n      \"start\":\"2:53\",\n      \"end\":\"4:10\"\n    }\n  },\n  {\n    \"id\":71,\n    \"type\":\"Wall breaches\",\n    \"timestamp\":\"2014-06-30T19:53:43+00:00\",\n    \"title\":\"House in West Vinewood\",\n    \"notes\":\"Go to location indicated and enter the yard through the entrance shown in the images. Take a right and follow the building until it meets a white wall near a tree. Climb this wall and go West (left) to reach the back of the house. Run up to the starting position, where the grass meets the dirt such that you are facing South towards the small part of the house. Run down towards and then against the wall shown while spamming X/A. You will then slide into the house. Don't forget a parachute for more fun!\",\n    \"order\":46,\n    \"lat\":71.085,\n    \"lng\":-125.343,\n    \"images\":[\n      {\n        \"id\":\"1\",\n        \"headline\":\"Entrance to the front yard of the house.\",\n        \"url\":\"http://i.imgur.com/JCGyC9h.jpg\",\n        \"author\":\"/u/dewar420\",\n        \"contact\":\"http://www.reddit.com/user/dewar420/\"\n      },\n      {\n        \"id\":\"2\",\n        \"headline\":\"Eastern side of the house showing way to back of house.\",\n        \"url\":\"http://i.imgur.com/7AFpGjJ.jpg\",\n        \"author\":\"/u/dewar420\",\n        \"contact\":\"http://www.reddit.com/user/dewar420/\"\n      },\n      {\n        \"id\":\"3\",\n        \"headline\":\"Looking towards back of house/position to stand in.\",\n        \"url\":\"http://i.imgur.com/kUdyjCx.jpg\",\n        \"author\":\"/u/dewar420\",\n        \"contact\":\"http://www.reddit.com/user/dewar420/\"\n      },\n      {\n        \"id\":\"4\",\n        \"headline\":\"View from starting position to wall-breach.\",\n        \"url\":\"http://i.imgur.com/Xm4uCqe.jpg\",\n        \"author\":\"/u/dewar420\",\n        \"contact\":\"http://www.reddit.com/user/dewar420/\"\n      }\n    ]\n  },\n  {\n    \"id\":72,\n    \"type\":\"Wall breaches\",\n    \"timestamp\":\"2014-06-30T19:57:19+00:00\",\n    \"title\":\"Road Near Airport LSC\",\n    \"notes\":\"Go to location indicated and find the group of trees shown as a guide. Locate the second support beam, that is jutting from the road, to the left of the group of trees and stand to the right of this beam. Run or jump such that you character falls into the small space to the right of the support beam. If done correctly your character will breach the wall after erecting him/herself.\",\n    \"order\":47,\n    \"lat\":62.684,\n    \"lng\":-133.748,\n    \"credit\":[\n      {\n        \"what\":\"Glitch found\",\n        \"who\":\"/u/Tsilent_Tsunami\",\n        \"where\":\"http://www.reddit.com/user/Tsilent_Tsunami\"\n      }\n    ],\n    \"images\":[\n      {\n        \"id\":\"1\",\n        \"headline\":\"Driving Northeast away from the airport LSC, showing the group of trees to use as a guide.\",\n        \"url\":\"http://i.imgur.com/aoLXFSL.jpg\",\n        \"author\":\"/u/dewar420\",\n        \"contact\":\"http://www.reddit.com/user/dewar420/\"\n      },\n      {\n        \"id\":\"2\",\n        \"headline\":\"Looking towards the guide-trees, arrow indicating where to stand.\",\n        \"url\":\"http://i.imgur.com/PZTot5L.jpg\",\n        \"author\":\"/u/dewar420\",\n        \"contact\":\"http://www.reddit.com/user/dewar420/\"\n      },\n      {\n        \"id\":\"3\",\n        \"headline\":\"Standing on rocks, facing the breach.\",\n        \"url\":\"http://i.imgur.com/OsnrODu.jpg\",\n        \"author\":\"/u/dewar420\",\n        \"contact\":\"http://www.reddit.com/user/dewar420/\"\n      },\n      {\n        \"id\":\"4\",\n        \"headline\":\"Inside the breach.\",\n        \"url\":\"http://i.imgur.com/SjEGgBE.jpg\",\n        \"author\":\"/u/dewar420\",\n        \"contact\":\"http://www.reddit.com/user/dewar420/\"\n      }\n    ]\n  },\n  {\n    \"id\":73,\n    \"type\":\"Wall breaches\",\n    \"timestamp\":\"2014-06-30T19:59:32+00:00\",\n    \"title\":\"Parking Garage Under Tennis Courts in La Puerta\",\n    \"notes\":\"Go to location indicated and locate the bushes to the right of the fenced-off entrance of the parking garage. Stand between the two bushes shown and press Box to climb in.\",\n    \"order\":48,\n    \"lat\":64.919,\n    \"lng\":-133.473,\n    \"images\":[\n      {\n        \"id\":\"1\",\n        \"headline\":\"View of the back of the parking garage.\",\n        \"url\":\"http://i.imgur.com/oMDPhwx.jpg\",\n        \"author\":\"/u/dewar420\",\n        \"contact\":\"http://www.reddit.com/user/dewar420/\"\n      },\n      {\n        \"id\":\"2\",\n        \"headline\":\"Bushes with arrow showing location to stand in, and face the wall.\",\n        \"url\":\"http://i.imgur.com/nRDArIs.jpg\",\n        \"author\":\"/u/dewar420\",\n        \"contact\":\"http://www.reddit.com/user/dewar420/\"\n      },\n      {\n        \"id\":\"3\",\n        \"headline\":\"Inside the breach.\",\n        \"url\":\"http://i.imgur.com/za7iWhh.jpg\",\n        \"author\":\"/u/dewar420\",\n        \"contact\":\"http://www.reddit.com/user/dewar420/\"\n      }\n    ]\n  },\n  {\n    \"id\":74,\n    \"type\":\"Wall breaches\",\n    \"timestamp\":\"2014-06-30T20:02:02+00:00\",\n    \"title\":\"Parking Garage in Rockford Hills\",\n    \"notes\":\"Go to the location as seen on the interactive map--a parking garage across from the east-side Ammunation--enter the second level of the parking garage and walk to the red-brick structure as seen in the pictures. Walk to, and face, the western wall of this structure. Simply walk through the rightmost side of this wall to breach.\",\n    \"order\":49,\n    \"lat\":68.265,\n    \"lng\":-136.373,\n    \"images\":[\n      {\n        \"id\":\"1\",\n        \"headline\":\"Level 2 looking towards the red-brick structure.\",\n        \"url\":\"http://i.imgur.com/rPLiKhS.jpg\",\n        \"author\":\"/u/dewar420\",\n        \"contact\":\"http://www.reddit.com/user/dewar420/\"\n      },\n      {\n        \"id\":\"2\",\n        \"headline\":\"Facing the western wall of the structure.\",\n        \"url\":\"http://i.imgur.com/jLskpcA.jpg\",\n        \"author\":\"/u/dewar420\",\n        \"contact\":\"http://www.reddit.com/user/dewar420/\"\n      },\n      {\n        \"id\":\"3\",\n        \"headline\":\"Inside the breach.\",\n        \"url\":\"http://i.imgur.com/lETeRjt.jpg\",\n        \"author\":\"/u/dewar420\",\n        \"contact\":\"http://www.reddit.com/user/dewar420/\"\n      }\n    ]\n  },\n  {\n    \"id\":75,\n    \"type\":\"Wall breaches\",\n    \"timestamp\":\"2014-06-30T20:04:53+00:00\",\n    \"title\":\"Bridge in La Mesa\",\n    \"notes\":\"Go to location indicated and walk to the eastern-most strut on the northern side of the bridge. Walk where indicated and face west as shown. Walk up to the indicated wall and press Box to climb in.\",\n    \"order\":50,\n    \"lat\":66.005,\n    \"lng\":-118.356,\n    \"images\":[\n      {\n        \"id\":\"1\",\n        \"headline\":\"Facing the bridge support with the breach.\",\n        \"url\":\"http://i.imgur.com/D2GOrZM.jpg\",\n        \"author\":\"/u/dewar420\",\n        \"contact\":\"http://www.reddit.com/user/dewar420/\"\n      },\n      {\n        \"id\":\"2\",\n        \"headline\":\"Looking at the wall with the breach.\",\n        \"url\":\"http://i.imgur.com/7VYKRPi.jpg\",\n        \"author\":\"/u/dewar420\",\n        \"contact\":\"http://www.reddit.com/user/dewar420/\"\n      },\n      {\n        \"id\":\"3\",\n        \"headline\":\"Inside the breach.\",\n        \"url\":\"http://i.imgur.com/KF47Bks.jpg\",\n        \"author\":\"/u/dewar420\",\n        \"contact\":\"http://www.reddit.com/user/dewar420/\"\n      }\n    ]\n  },\n  {\n    \"id\":76,\n    \"type\":\"Wall breaches\",\n    \"timestamp\":\"2014-06-30T20:07:24+00:00\",\n    \"title\":\"Airport LSC Wall-breach\",\n    \"notes\":\"Go to the location as noted and stand behind the LSC. Park a car between the two shutter-doors that are directly right of the small crane. Climb onto the car you parked, face the wall and press Box to breach the wall.\",\n    \"order\":51,\n    \"lat\":61.507,\n    \"lng\":-135.813,\n    \"video\":{\n      \"yt_id\":\"LoJtZ66wFUc\",\n      \"yt_user\":\"TwistedVargas\",\n      \"start\":\"0:12\",\n      \"end\":\"1:23\"\n    }\n  },\n  {\n    \"id\":77,\n    \"type\":\"Glitches\",\n    \"timestamp\":\"2014-07-06T18:57:35+00:00\",\n    \"title\":\"Rollercoaster seat glitch\",\n    \"notes\":\"Go to Rollercoaster. Choose a seat on the Rollercoaster. Someone can choose the same seat as you and will sit \\\"inside\\\" of you. (More people can also sit in the same exact seat)\",\n    \"order\":1,\n    \"lat\":65.568,\n    \"lng\":-140.625,\n    \"video\":{\n      \"yt_id\":\"ttvvrF4_wIY\",\n      \"yt_user\":\"speedyw03\",\n      \"start\":\"2:30\",\n      \"end\":\"5:10\"\n    }\n  },\n  {\n    \"id\":78,\n    \"type\":\"Glitches\",\n    \"timestamp\":\"2014-07-06T19:17:08+00:00\",\n    \"title\":\"Walk on water/air\",\n    \"notes\":\"Head over to the helipad near Los Santos Customs. Walk over to the wall near the water and lean on it. Walk to your left until the gun is under the water. Aim the gun at the wall and it will switch to the knife (then you know the glitch worked). Head back to the ramp. Now turn around and walk back to the water. And now you'll be walking on water.\",\n    \"order\":2,\n    \"lat\":64.063,\n    \"lng\":-132.286,\n    \"video\":{\n      \"yt_id\":\"Ziwfl3L0WQo\",\n      \"yt_user\":\"Official Digital HDx Productions\",\n      \"start\":\"0:05\",\n      \"end\":\"1:20\"\n    },\n    \"credit\":[\n      {\n        \"what\":\"Glitch found\",\n        \"who\":\"/u/SolarGlitch\",\n        \"where\":\"http://www.reddit.com/r/gtaglitches/comments/29t5q9/walk_on_water_and_air_115/\"\n      }\n    ]\n  },\n  {\n    \"id\":79,\n    \"type\":\"Glitches\",\n    \"timestamp\":\"2014-07-06T19:26:35+00:00\",\n    \"title\":\"Gate/swing set glitch\",\n    \"notes\":\"Go to the location as noted. Let your friend lean against the wall like you saw in the video. Now drive slowly into the gate.\",\n    \"order\":3,\n    \"lat\":72.663,\n    \"lng\":-125.947,\n    \"video\":{\n      \"yt_id\":\"NXT2c5LNEis\",\n      \"yt_user\":\"Olli43\",\n      \"start\":\"0:30\",\n      \"end\":\"1:50\"\n    }\n  },\n  {\n    \"id\":80,\n    \"type\":\"Glitches\",\n    \"timestamp\":\"2014-07-06T19:26:35+00:00\",\n    \"title\":\"Gate/swing set glitch #2\",\n    \"notes\":\"Go to the location as noted. Let your friend lean against the wall like you saw in the video. Now drive slowly into the gate.\",\n    \"order\":4,\n    \"lat\":71.159,\n    \"lng\":-135.439,\n    \"video\":{\n      \"yt_id\":\"WcPUPI7dolE\",\n      \"yt_user\":\"Munchsz\",\n      \"start\":\"0:02\",\n      \"end\":\"0:10\"\n    }\n  },\n  {\n    \"id\":81,\n    \"type\":\"Wall breaches\",\n    \"timestamp\":\"2014-07-06T13:26:35+00:00\",\n    \"title\":\"Gentry Manor\",\n    \"notes\":\"Get a helicopter and fly up around the area of Eclipse Towers, When you see a Team Deathmatch that's where you need to be. If you're looking at the front on the right hand side on the roof, You'll see a smokestack and a corner by a terrace. Fly as high as you need to parachute, or land a bit and jump out if you're able. Run to the corner if you're not there already and walk into it or you'll fall through the building.\",\n    \"order\":52,\n    \"lat\":70.830,\n    \"lng\":-125.376,\n    \"video\":{\n      \"yt_id\":\"qou4Umj5nFU\",\n      \"yt_user\":\"Bob Smith\",\n      \"start\":\"0:12\",\n      \"end\":\"2:45\"\n    },\n    \"credit\":[\n      {\n        \"what\":\"Glitch found\",\n        \"who\":\"/u/ThebeastlyGod\",\n        \"where\":\"http://www.reddit.com/r/gtaglitches/comments/2a0lrq/gentry_manor_wallbreach/\"\n      }\n    ]\n  },\n  {\n    \"id\":82,\n    \"type\":\"Wall breaches\",\n    \"timestamp\":\"2014-07-17T17:40:15+00:00\",\n    \"title\":\"Military base tower (easy)\",\n    \"notes\":\"Call Lester for blind eye. Walk up to the right side of the wall by the green door. Keep jumping/ punching the air.\",\n    \"order\":53,\n    \"lat\":78.195,\n    \"lng\":-147.601,\n    \"video\":{\n      \"yt_id\":\"89fy4pOYHtk\",\n      \"yt_user\":\"TechnoDucky\",\n      \"start\":\"0:55\",\n      \"end\":\"1:30\"\n    },\n    \"credit\":[\n      {\n        \"what\":\"Glitch found\",\n        \"who\":\"/u/dewar420\",\n        \"where\":\"http://www.reddit.com/user/dewar420\"\n      },\n      {\n        \"what\":\"Tutorial written\",\n        \"who\":\"/u/TechnoDucky\",\n        \"where\":\"http://www.reddit.com/user/TechnoDucky\"\n      }\n    ]\n  },\n  {\n    \"id\":83,\n    \"type\":\"Wall breaches\",\n    \"timestamp\":\"2014-07-17T17:48:06+00:00\",\n    \"title\":\"Martins mansion (with bike)\",\n    \"notes\":\"Reach the patio of the house just NW of Martin's house on a motorbike (you can use the slanted rock to the right of Martin's driveway as a ramp). Once on the patio of Martin's neighbor, position yourself so you are facing Martin's house (give yourself room to pick up speed). Begin driving towards Martin's roof while tilting backwards on the bike. If done correctly, you will hit the short wall and hop into the air, giving yourself enough airtime to reach Martin's roof. Drive slowly off the back of Martin's roof so that you land on his patio overlooking the city. Facing away from Martin's house, turn right and go as far as you can around the patio. You will reach a corner with those gray utility meters. Drive slowly through the corner to the right of the utility meters. You should go straight through the wall.\",\n    \"order\":54,\n    \"lat\":71.819,\n    \"lng\":-134.681,\n    \"video\":{\n      \"yt_id\":\"Di46A7bgW-Q\",\n      \"yt_user\":\"DeviantAmaZed\",\n      \"start\":\"0:12\",\n      \"end\":\"1:10\"\n    },\n    \"credit\":[\n      {\n        \"what\":\"Glitch found\",\n        \"who\":\"Avxry\",\n        \"where\":\"http://www.se7ensins.com/members/avxry.493411/\"\n      },\n      {\n        \"what\":\"Tutorial written\",\n        \"who\":\"/u/RustyTank\",\n        \"where\":\"http://www.reddit.com/user/RustyTank\"\n      }\n    ]\n  },\n  {\n    \"id\":84,\n    \"type\":\"Glitches\",\n    \"timestamp\":\"2014-07-07T10:49:21+00:00\",\n    \"title\":\"Skateboard/Surfboard\",\n    \"notes\":\"Go to the location on the beach with lots of blue fences. Run anyone of them over. Stand in the center of the fence. Shoot at the top to go forward.\",\n    \"order\":5,\n    \"lat\":67.114,\n    \"lng\":-141.328,\n    \"video\":{\n      \"yt_id\":\"p7mf0A9RP0Y\",\n      \"yt_user\":\"CoreyM1469\",\n      \"start\":\"0:03\",\n      \"end\":\"0:40\"\n    },\n    \"credit\":[\n      {\n        \"what\":\"Glitch found\",\n        \"who\":\"CoreyM1469\",\n        \"where\":\"http://www.reddit.com/user/CoreyM1469\"\n      },\n      {\n        \"what\":\"Tutorial written\",\n        \"who\":\"/u/RustyTank\",\n        \"where\":\"http://www.reddit.com/r/gtaglitches/comments/2crrn8/gta_skateboardsurfboard_glitch/\"\n      }\n    ]\n  }\n]"
  },
  {
    "path": "style.css",
    "content": "* { margin: 0; padding: 0; border: none; }\nbody { font-family: Roboto, sans-serif; color: #333; }\nli { list-style: none; }\n\n.left { float: left; }\n.right { float: right; }\n\nheader {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tright: 0;\n\tz-index: 2;\n\tfont-size: 19px;\n\theight: 28px;\n\tpadding: 3px 6px;\n\tbackground: rgba(0,0,0,.7);\n\tcolor: white;\n}\n\nheader p {\n\t/*font-weight: bold;*/\n}\n\nheader li {\n\tdisplay: inline-block;\n\tmargin-right: 5px;\n\tmargin-top:4px;\n\theight: 20px;\n\toverflow: hidden;\n}\n\nheader li:last-child {\n\tmargin-right: 0;\n}\n\nheader a {\n\tcolor: white;\n\ttext-decoration: none;\n\tcolor: #ddd;\n}\n\nheader a.active {\n\tcolor: white;\n}\n\n#map {\n\tposition: absolute;\n\ttop: 0;\n\tbottom: 0;\n\tleft: 0;\n\tright: 0;\n}\n\n.tour #map {\n\tposition: static;\n\twidth: 670px;\n\theight: 360px;\n\tmargin: 10px 10px;\n\tfloat: left;\n}\n\n#tour-info {\n\tdisplay: none;\n}\n\n.tour #tour-info {\n\tdisplay: block;\n\twidth: 580px;\n\theight: 360px;\n\tmargin: 10px 0;\n\tfloat: left;\n}\n\n#tour-nav {\n\tdisplay: none;\n}\n\n.tour #tour-nav {\n\tdisplay: block;\n\tmargin-top: 30px;\n\tpadding: 0 10px;\n\toverflow: hidden;\n}\n\n#tour-nav h3 {\n\tdisplay: none;\n\ttext-align: center;\n}\n\n.tour #types {\n\tdisplay: none;\n}\n\n.types {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tz-index: 2;\n\tmargin: 42px 0 0 7px;\n\tpadding-bottom: 5px;\n\toverflow: scroll;\n\tmax-height: 702px;\n}\n\n.types::-webkit-scrollbar {\n\tdisplay: none;\n}\n\n.types .type {\n\tbackground: #fff;\n\tbox-shadow: 0 2px 6px rgba(0,0,0,0.3),0 4px 15px -5px rgba(0,0,0,0.0);\n\tmargin-top: 5px;\n\tborder-radius: 2px;\n\toverflow: hidden;\n}\n\n.types .type:first-child { margin-top: 0; }\n\n.types .type h3 {\n\tfont-size: 0.9em;\n\tpadding: 3px 10px;\n\tbackground: #eee;\n\tcursor: pointer;\n}\n\n.types .type ul {\n\tpadding: 3px 10px;\n\tfont-weight: 300;\n}\n\n.types .type.collapsed ul {\n\tdisplay: none;\n}\n\n.types .type li {\n\tmargin-bottom: 3px;\n\toverflow: hidden;\n\tmin-width: 160px;\n\tmax-width: 200px;\n\twhite-space: nowrap;\n\ttext-overflow: ellipsis;\n}\n\n.types .type label {\n\tcursor: pointer;\n}\n\n.types .type input {\n\tdisplay: none;\n}\n\n.types .type img {\n\twidth: 16px;\n\tposition: relative;\n\ttop: 4px;\n\t-webkit-filter: grayscale(1);\n\topacity: .2;\n}\n\n.types .type input:checked + img {\n\t-webkit-filter: grayscale(0);\n\topacity: 1;\n}\n\n.tt {\nwidth: 20px;\nheight: 20px;\nbackground-image: url(icons/signpost.png);\ndisplay: inline-block;\nbackground-position: 0 61px;\nfloat: right;\n}\n\n.types .details {\n\tcolor: #777;\n\ttext-decoration: none;\n\tfloat: right;\n\tmargin-top: 3px;\n}\n\n.types .details:hover {\n\tcolor: #222;\n}\n\n.types .back {\n\tfloat: left;\n\tmargin: 0 5px 0 0;\n}\n\n.gm-style-mtc {\n\tmargin-top: 40px !important;\n}\n\nhtml { height: 100% }\nbody { height: 100%; margin: 0; padding: 0 }\n#map { height: 100% }\n\n/* \n * Mobile devices\n */\n\n@media only screen and (max-device-width: 568px) { \n\t.right {\n\t\tdisplay: none;\n\t}\n\n\t.types {\n\t\topacity: 0.75;\n\t}\n\n\t.gm-style-mtc {\n\t\tmargin-top: 36px !important;\n\t}\n\n\t.gm-style-mtc div {\n\t\tpadding: 0px 2px 0px 2px !important;\n\t}\n}\n\n/* \n * Responsive videos\n */\n\n.youtubewrapper {\n\tposition: relative;\n\tpadding-bottom: 56.25%; /* 16:9 */\n\tpadding-top: 25px;\n\theight: 0;\n}\n.youtubewrapper iframe {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\twidth: 100%;\n\theight: 100%;\n}\n\n#info-body img {\n\twidth: 100%;\n}\n\n/**\n * info window\n */\n\n.scrollable {\n\theight: 400px;\n\toverflow: scroll;\n}\n\n@media only screen and (max-device-width: 568px) { \n\t.scrollable {\n\t\theight: 250px;\n\t}\n}"
  }
]