summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLi Haoyi <haoyi@dropbox.com>2015-02-04 05:32:09 -0800
committerLi Haoyi <haoyi@dropbox.com>2015-02-04 05:32:09 -0800
commit6997cca527e091540a12e573ecc19ac485382ac4 (patch)
tree64158d7d00673ad07b0d9e185b02ee98587406a7
downloadhands-on-scala-js-6997cca527e091540a12e573ecc19ac485382ac4.tar.gz
hands-on-scala-js-6997cca527e091540a12e573ecc19ac485382ac4.tar.bz2
hands-on-scala-js-6997cca527e091540a12e573ecc19ac485382ac4.zip
.
-rw-r--r--META-INF/resources/webjars/font-awesome/4.2.0/css/font-awesome.min.css4
-rw-r--r--META-INF/resources/webjars/font-awesome/4.2.0/fonts/FontAwesome.otfbin0 -> 85908 bytes
-rw-r--r--META-INF/resources/webjars/font-awesome/4.2.0/fonts/fontawesome-webfont.eotbin0 -> 56006 bytes
-rw-r--r--META-INF/resources/webjars/font-awesome/4.2.0/fonts/fontawesome-webfont.svg520
-rw-r--r--META-INF/resources/webjars/font-awesome/4.2.0/fonts/fontawesome-webfont.ttfbin0 -> 112160 bytes
-rw-r--r--META-INF/resources/webjars/font-awesome/4.2.0/fonts/fontawesome-webfont.woffbin0 -> 65452 bytes
-rw-r--r--images/Dropdown.pngbin0 -> 331377 bytes
-rw-r--r--images/Hello World Console.pngbin0 -> 345956 bytes
-rw-r--r--images/Hello World White.pngbin0 -> 245770 bytes
-rw-r--r--images/Hello World.pngbin0 -> 265509 bytes
-rw-r--r--images/IntelliJ Hello.pngbin0 -> 338093 bytes
-rw-r--r--images/Scalatags Downloads.pngbin0 -> 89779 bytes
-rw-r--r--images/javascript-the-good-parts-the-definitive-guide.jpgbin0 -> 53631 bytes
-rw-r--r--index.html4072
-rw-r--r--scripts.js770
-rw-r--r--styles.css369
16 files changed, 5735 insertions, 0 deletions
diff --git a/META-INF/resources/webjars/font-awesome/4.2.0/css/font-awesome.min.css b/META-INF/resources/webjars/font-awesome/4.2.0/css/font-awesome.min.css
new file mode 100644
index 0000000..ec53d4d
--- /dev/null
+++ b/META-INF/resources/webjars/font-awesome/4.2.0/css/font-awesome.min.css
@@ -0,0 +1,4 @@
+/*!
+ * Font Awesome 4.2.0 by @davegandy - http://fontawesome.io - @fontawesome
+ * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.2.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.2.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff?v=4.2.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.2.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.2.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"} \ No newline at end of file
diff --git a/META-INF/resources/webjars/font-awesome/4.2.0/fonts/FontAwesome.otf b/META-INF/resources/webjars/font-awesome/4.2.0/fonts/FontAwesome.otf
new file mode 100644
index 0000000..81c9ad9
--- /dev/null
+++ b/META-INF/resources/webjars/font-awesome/4.2.0/fonts/FontAwesome.otf
Binary files differ
diff --git a/META-INF/resources/webjars/font-awesome/4.2.0/fonts/fontawesome-webfont.eot b/META-INF/resources/webjars/font-awesome/4.2.0/fonts/fontawesome-webfont.eot
new file mode 100644
index 0000000..84677bc
--- /dev/null
+++ b/META-INF/resources/webjars/font-awesome/4.2.0/fonts/fontawesome-webfont.eot
Binary files differ
diff --git a/META-INF/resources/webjars/font-awesome/4.2.0/fonts/fontawesome-webfont.svg b/META-INF/resources/webjars/font-awesome/4.2.0/fonts/fontawesome-webfont.svg
new file mode 100644
index 0000000..d907b25
--- /dev/null
+++ b/META-INF/resources/webjars/font-awesome/4.2.0/fonts/fontawesome-webfont.svg
@@ -0,0 +1,520 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata></metadata>
+<defs>
+<font id="fontawesomeregular" horiz-adv-x="1536" >
+<font-face units-per-em="1792" ascent="1536" descent="-256" />
+<missing-glyph horiz-adv-x="448" />
+<glyph unicode=" " horiz-adv-x="448" />
+<glyph unicode="&#x09;" horiz-adv-x="448" />
+<glyph unicode="&#xa0;" horiz-adv-x="448" />
+<glyph unicode="&#xa8;" horiz-adv-x="1792" />
+<glyph unicode="&#xa9;" horiz-adv-x="1792" />
+<glyph unicode="&#xae;" horiz-adv-x="1792" />
+<glyph unicode="&#xb4;" horiz-adv-x="1792" />
+<glyph unicode="&#xc6;" horiz-adv-x="1792" />
+<glyph unicode="&#xd8;" horiz-adv-x="1792" />
+<glyph unicode="&#x2000;" horiz-adv-x="768" />
+<glyph unicode="&#x2001;" horiz-adv-x="1537" />
+<glyph unicode="&#x2002;" horiz-adv-x="768" />
+<glyph unicode="&#x2003;" horiz-adv-x="1537" />
+<glyph unicode="&#x2004;" horiz-adv-x="512" />
+<glyph unicode="&#x2005;" horiz-adv-x="384" />
+<glyph unicode="&#x2006;" horiz-adv-x="256" />
+<glyph unicode="&#x2007;" horiz-adv-x="256" />
+<glyph unicode="&#x2008;" horiz-adv-x="192" />
+<glyph unicode="&#x2009;" horiz-adv-x="307" />
+<glyph unicode="&#x200a;" horiz-adv-x="85" />
+<glyph unicode="&#x202f;" horiz-adv-x="307" />
+<glyph unicode="&#x205f;" horiz-adv-x="384" />
+<glyph unicode="&#x2122;" horiz-adv-x="1792" />
+<glyph unicode="&#x221e;" horiz-adv-x="1792" />
+<glyph unicode="&#x2260;" horiz-adv-x="1792" />
+<glyph unicode="&#x25fc;" horiz-adv-x="500" d="M0 0z" />
+<glyph unicode="&#xf000;" horiz-adv-x="1792" d="M1699 1350q0 -35 -43 -78l-632 -632v-768h320q26 0 45 -19t19 -45t-19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45t45 19h320v768l-632 632q-43 43 -43 78q0 23 18 36.5t38 17.5t43 4h1408q23 0 43 -4t38 -17.5t18 -36.5z" />
+<glyph unicode="&#xf001;" d="M1536 1312v-1120q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v537l-768 -237v-709q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89 t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v967q0 31 19 56.5t49 35.5l832 256q12 4 28 4q40 0 68 -28t28 -68z" />
+<glyph unicode="&#xf002;" horiz-adv-x="1664" d="M1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -52 -38 -90t-90 -38q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5 t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
+<glyph unicode="&#xf003;" horiz-adv-x="1792" d="M1664 32v768q-32 -36 -69 -66q-268 -206 -426 -338q-51 -43 -83 -67t-86.5 -48.5t-102.5 -24.5h-1h-1q-48 0 -102.5 24.5t-86.5 48.5t-83 67q-158 132 -426 338q-37 30 -69 66v-768q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1664 1083v11v13.5t-0.5 13 t-3 12.5t-5.5 9t-9 7.5t-14 2.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5q0 -168 147 -284q193 -152 401 -317q6 -5 35 -29.5t46 -37.5t44.5 -31.5t50.5 -27.5t43 -9h1h1q20 0 43 9t50.5 27.5t44.5 31.5t46 37.5t35 29.5q208 165 401 317q54 43 100.5 115.5t46.5 131.5z M1792 1120v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
+<glyph unicode="&#xf004;" horiz-adv-x="1792" d="M896 -128q-26 0 -44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124t127 -344q0 -221 -229 -450l-623 -600 q-18 -18 -44 -18z" />
+<glyph unicode="&#xf005;" horiz-adv-x="1664" d="M1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -21 -10.5 -35.5t-30.5 -14.5q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455 l502 -73q56 -9 56 -46z" />
+<glyph unicode="&#xf006;" horiz-adv-x="1664" d="M1137 532l306 297l-422 62l-189 382l-189 -382l-422 -62l306 -297l-73 -421l378 199l377 -199zM1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -50 -41 -50q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500 l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455l502 -73q56 -9 56 -46z" />
+<glyph unicode="&#xf007;" horiz-adv-x="1408" d="M1408 131q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5t43 97.5t62 81t85.5 53.5t111.5 20q9 0 42 -21.5t74.5 -48t108 -48t133.5 -21.5t133.5 21.5t108 48t74.5 48t42 21.5q61 0 111.5 -20t85.5 -53.5t62 -81 t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM1088 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5z" />
+<glyph unicode="&#xf008;" horiz-adv-x="1920" d="M384 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 320v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 704v128q0 26 -19 45t-45 19h-128 q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 -64v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM384 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45 t45 -19h128q26 0 45 19t19 45zM1792 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 704v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1792 320v128 q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 704v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19 t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1920 1248v-1344q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1344q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
+<glyph unicode="&#xf009;" horiz-adv-x="1664" d="M768 512v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM768 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 512v-384q0 -52 -38 -90t-90 -38 h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" />
+<glyph unicode="&#xf00a;" horiz-adv-x="1792" d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 288v-192q0 -40 -28 -68t-68 -28h-320 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28 h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192 q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68z" />
+<glyph unicode="&#xf00b;" horiz-adv-x="1792" d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-960 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28 h960q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68z" />
+<glyph unicode="&#xf00c;" horiz-adv-x="1792" d="M1671 970q0 -40 -28 -68l-724 -724l-136 -136q-28 -28 -68 -28t-68 28l-136 136l-362 362q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -295l656 657q28 28 68 28t68 -28l136 -136q28 -28 28 -68z" />
+<glyph unicode="&#xf00d;" horiz-adv-x="1408" d="M1298 214q0 -40 -28 -68l-136 -136q-28 -28 -68 -28t-68 28l-294 294l-294 -294q-28 -28 -68 -28t-68 28l-136 136q-28 28 -28 68t28 68l294 294l-294 294q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -294l294 294q28 28 68 28t68 -28l136 -136q28 -28 28 -68 t-28 -68l-294 -294l294 -294q28 -28 28 -68z" />
+<glyph unicode="&#xf00e;" horiz-adv-x="1664" d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-224q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v224h-224q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h224v224q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-224h224 q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5 t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
+<glyph unicode="&#xf010;" horiz-adv-x="1664" d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-576q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h576q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5z M1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z " />
+<glyph unicode="&#xf011;" d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61t-298 61t-245 164t-164 245t-61 298q0 182 80.5 343t226.5 270q43 32 95.5 25t83.5 -50q32 -42 24.5 -94.5t-49.5 -84.5q-98 -74 -151.5 -181t-53.5 -228q0 -104 40.5 -198.5t109.5 -163.5t163.5 -109.5 t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5q0 121 -53.5 228t-151.5 181q-42 32 -49.5 84.5t24.5 94.5q31 43 84 50t95 -25q146 -109 226.5 -270t80.5 -343zM896 1408v-640q0 -52 -38 -90t-90 -38t-90 38t-38 90v640q0 52 38 90t90 38t90 -38t38 -90z" />
+<glyph unicode="&#xf012;" horiz-adv-x="1792" d="M256 96v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 224v-320q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 480v-576q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23 v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1408 864v-960q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1376v-1472q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1472q0 14 9 23t23 9h192q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf013;" d="M1024 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1536 749v-222q0 -12 -8 -23t-20 -13l-185 -28q-19 -54 -39 -91q35 -50 107 -138q10 -12 10 -25t-9 -23q-27 -37 -99 -108t-94 -71q-12 0 -26 9l-138 108q-44 -23 -91 -38 q-16 -136 -29 -186q-7 -28 -36 -28h-222q-14 0 -24.5 8.5t-11.5 21.5l-28 184q-49 16 -90 37l-141 -107q-10 -9 -25 -9q-14 0 -25 11q-126 114 -165 168q-7 10 -7 23q0 12 8 23q15 21 51 66.5t54 70.5q-27 50 -41 99l-183 27q-13 2 -21 12.5t-8 23.5v222q0 12 8 23t19 13 l186 28q14 46 39 92q-40 57 -107 138q-10 12 -10 24q0 10 9 23q26 36 98.5 107.5t94.5 71.5q13 0 26 -10l138 -107q44 23 91 38q16 136 29 186q7 28 36 28h222q14 0 24.5 -8.5t11.5 -21.5l28 -184q49 -16 90 -37l142 107q9 9 24 9q13 0 25 -10q129 -119 165 -170q7 -8 7 -22 q0 -12 -8 -23q-15 -21 -51 -66.5t-54 -70.5q26 -50 41 -98l183 -28q13 -2 21 -12.5t8 -23.5z" />
+<glyph unicode="&#xf014;" horiz-adv-x="1408" d="M512 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM768 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1024 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576 q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1152 76v948h-896v-948q0 -22 7 -40.5t14.5 -27t10.5 -8.5h832q3 0 10.5 8.5t14.5 27t7 40.5zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832 q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf015;" horiz-adv-x="1664" d="M1408 544v-480q0 -26 -19 -45t-45 -19h-384v384h-256v-384h-384q-26 0 -45 19t-19 45v480q0 1 0.5 3t0.5 3l575 474l575 -474q1 -2 1 -6zM1631 613l-62 -74q-8 -9 -21 -11h-3q-13 0 -21 7l-692 577l-692 -577q-12 -8 -24 -7q-13 2 -21 11l-62 74q-8 10 -7 23.5t11 21.5 l719 599q32 26 76 26t76 -26l244 -204v195q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-408l219 -182q10 -8 11 -21.5t-7 -23.5z" />
+<glyph unicode="&#xf016;" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z " />
+<glyph unicode="&#xf017;" d="M896 992v-448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf018;" horiz-adv-x="1920" d="M1111 540v4l-24 320q-1 13 -11 22.5t-23 9.5h-186q-13 0 -23 -9.5t-11 -22.5l-24 -320v-4q-1 -12 8 -20t21 -8h244q12 0 21 8t8 20zM1870 73q0 -73 -46 -73h-704q13 0 22 9.5t8 22.5l-20 256q-1 13 -11 22.5t-23 9.5h-272q-13 0 -23 -9.5t-11 -22.5l-20 -256 q-1 -13 8 -22.5t22 -9.5h-704q-46 0 -46 73q0 54 26 116l417 1044q8 19 26 33t38 14h339q-13 0 -23 -9.5t-11 -22.5l-15 -192q-1 -14 8 -23t22 -9h166q13 0 22 9t8 23l-15 192q-1 13 -11 22.5t-23 9.5h339q20 0 38 -14t26 -33l417 -1044q26 -62 26 -116z" />
+<glyph unicode="&#xf019;" horiz-adv-x="1664" d="M1280 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 416v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h465l135 -136 q58 -56 136 -56t136 56l136 136h464q40 0 68 -28t28 -68zM1339 985q17 -41 -14 -70l-448 -448q-18 -19 -45 -19t-45 19l-448 448q-31 29 -14 70q17 39 59 39h256v448q0 26 19 45t45 19h256q26 0 45 -19t19 -45v-448h256q42 0 59 -39z" />
+<glyph unicode="&#xf01a;" d="M1120 608q0 -12 -10 -24l-319 -319q-11 -9 -23 -9t-23 9l-320 320q-15 16 -7 35q8 20 30 20h192v352q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-352h192q14 0 23 -9t9 -23zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273 t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf01b;" d="M1118 660q-8 -20 -30 -20h-192v-352q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v352h-192q-14 0 -23 9t-9 23q0 12 10 24l319 319q11 9 23 9t23 -9l320 -320q15 -16 7 -35zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198 t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf01c;" d="M1023 576h316q-1 3 -2.5 8t-2.5 8l-212 496h-708l-212 -496q-1 -2 -2.5 -8t-2.5 -8h316l95 -192h320zM1536 546v-482q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v482q0 62 25 123l238 552q10 25 36.5 42t52.5 17h832q26 0 52.5 -17t36.5 -42l238 -552 q25 -61 25 -123z" />
+<glyph unicode="&#xf01d;" d="M1184 640q0 -37 -32 -55l-544 -320q-15 -9 -32 -9q-16 0 -32 8q-32 19 -32 56v640q0 37 32 56q33 18 64 -1l544 -320q32 -18 32 -55zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf01e;" d="M1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l138 138q-148 137 -349 137q-104 0 -198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5q119 0 225 52t179 147q7 10 23 12q14 0 25 -9 l137 -138q9 -8 9.5 -20.5t-7.5 -22.5q-109 -132 -264 -204.5t-327 -72.5q-156 0 -298 61t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q147 0 284.5 -55.5t244.5 -156.5l130 129q29 31 70 14q39 -17 39 -59z" />
+<glyph unicode="&#xf021;" d="M1511 480q0 -5 -1 -7q-64 -268 -268 -434.5t-478 -166.5q-146 0 -282.5 55t-243.5 157l-129 -129q-19 -19 -45 -19t-45 19t-19 45v448q0 26 19 45t45 19h448q26 0 45 -19t19 -45t-19 -45l-137 -137q71 -66 161 -102t187 -36q134 0 250 65t186 179q11 17 53 117 q8 23 30 23h192q13 0 22.5 -9.5t9.5 -22.5zM1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-26 0 -45 19t-19 45t19 45l138 138q-148 137 -349 137q-134 0 -250 -65t-186 -179q-11 -17 -53 -117q-8 -23 -30 -23h-199q-13 0 -22.5 9.5t-9.5 22.5v7q65 268 270 434.5t480 166.5 q146 0 284 -55.5t245 -156.5l130 129q19 19 45 19t45 -19t19 -45z" />
+<glyph unicode="&#xf022;" horiz-adv-x="1792" d="M384 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M384 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1536 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5z M1536 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5zM1536 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5 t9.5 -22.5zM1664 160v832q0 13 -9.5 22.5t-22.5 9.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1792 1248v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47 t47 -113z" />
+<glyph unicode="&#xf023;" horiz-adv-x="1152" d="M320 768h512v192q0 106 -75 181t-181 75t-181 -75t-75 -181v-192zM1152 672v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v192q0 184 132 316t316 132t316 -132t132 -316v-192h32q40 0 68 -28t28 -68z" />
+<glyph unicode="&#xf024;" horiz-adv-x="1792" d="M320 1280q0 -72 -64 -110v-1266q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v1266q-64 38 -64 110q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -25 -12.5 -38.5t-39.5 -27.5q-215 -116 -369 -116q-61 0 -123.5 22t-108.5 48 t-115.5 48t-142.5 22q-192 0 -464 -146q-17 -9 -33 -9q-26 0 -45 19t-19 45v742q0 32 31 55q21 14 79 43q236 120 421 120q107 0 200 -29t219 -88q38 -19 88 -19q54 0 117.5 21t110 47t88 47t54.5 21q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf025;" horiz-adv-x="1664" d="M1664 650q0 -166 -60 -314l-20 -49l-185 -33q-22 -83 -90.5 -136.5t-156.5 -53.5v-32q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-32q71 0 130 -35.5t93 -95.5l68 12q29 95 29 193q0 148 -88 279t-236.5 209t-315.5 78 t-315.5 -78t-236.5 -209t-88 -279q0 -98 29 -193l68 -12q34 60 93 95.5t130 35.5v32q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v32q-88 0 -156.5 53.5t-90.5 136.5l-185 33l-20 49q-60 148 -60 314q0 151 67 291t179 242.5 t266 163.5t320 61t320 -61t266 -163.5t179 -242.5t67 -291z" />
+<glyph unicode="&#xf026;" horiz-adv-x="768" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45z" />
+<glyph unicode="&#xf027;" horiz-adv-x="1152" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 35.5 t12 57t-12 57t-29 35.5t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142z" />
+<glyph unicode="&#xf028;" horiz-adv-x="1664" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 35.5 t12 57t-12 57t-29 35.5t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142zM1408 640q0 -153 -85 -282.5t-225 -188.5q-13 -5 -25 -5q-27 0 -46 19t-19 45q0 39 39 59q56 29 76 44q74 54 115.5 135.5t41.5 173.5t-41.5 173.5 t-115.5 135.5q-20 15 -76 44q-39 20 -39 59q0 26 19 45t45 19q13 0 26 -5q140 -59 225 -188.5t85 -282.5zM1664 640q0 -230 -127 -422.5t-338 -283.5q-13 -5 -26 -5q-26 0 -45 19t-19 45q0 36 39 59q7 4 22.5 10.5t22.5 10.5q46 25 82 51q123 91 192 227t69 289t-69 289 t-192 227q-36 26 -82 51q-7 4 -22.5 10.5t-22.5 10.5q-39 23 -39 59q0 26 19 45t45 19q13 0 26 -5q211 -91 338 -283.5t127 -422.5z" />
+<glyph unicode="&#xf029;" horiz-adv-x="1408" d="M384 384v-128h-128v128h128zM384 1152v-128h-128v128h128zM1152 1152v-128h-128v128h128zM128 129h384v383h-384v-383zM128 896h384v384h-384v-384zM896 896h384v384h-384v-384zM640 640v-640h-640v640h640zM1152 128v-128h-128v128h128zM1408 128v-128h-128v128h128z M1408 640v-384h-384v128h-128v-384h-128v640h384v-128h128v128h128zM640 1408v-640h-640v640h640zM1408 1408v-640h-640v640h640z" />
+<glyph unicode="&#xf02a;" horiz-adv-x="1792" d="M63 0h-63v1408h63v-1408zM126 1h-32v1407h32v-1407zM220 1h-31v1407h31v-1407zM377 1h-31v1407h31v-1407zM534 1h-62v1407h62v-1407zM660 1h-31v1407h31v-1407zM723 1h-31v1407h31v-1407zM786 1h-31v1407h31v-1407zM943 1h-63v1407h63v-1407zM1100 1h-63v1407h63v-1407z M1226 1h-63v1407h63v-1407zM1352 1h-63v1407h63v-1407zM1446 1h-63v1407h63v-1407zM1635 1h-94v1407h94v-1407zM1698 1h-32v1407h32v-1407zM1792 0h-63v1408h63v-1408z" />
+<glyph unicode="&#xf02b;" d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5 l715 -714q37 -39 37 -91z" />
+<glyph unicode="&#xf02c;" horiz-adv-x="1920" d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5 l715 -714q37 -39 37 -91zM1899 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-36 0 -59 14t-53 45l470 470q37 37 37 90q0 52 -37 91l-715 714q-38 38 -102 64.5t-117 26.5h224q53 0 117 -26.5t102 -64.5l715 -714q37 -39 37 -91z" />
+<glyph unicode="&#xf02d;" horiz-adv-x="1664" d="M1639 1058q40 -57 18 -129l-275 -906q-19 -64 -76.5 -107.5t-122.5 -43.5h-923q-77 0 -148.5 53.5t-99.5 131.5q-24 67 -2 127q0 4 3 27t4 37q1 8 -3 21.5t-3 19.5q2 11 8 21t16.5 23.5t16.5 23.5q23 38 45 91.5t30 91.5q3 10 0.5 30t-0.5 28q3 11 17 28t17 23 q21 36 42 92t25 90q1 9 -2.5 32t0.5 28q4 13 22 30.5t22 22.5q19 26 42.5 84.5t27.5 96.5q1 8 -3 25.5t-2 26.5q2 8 9 18t18 23t17 21q8 12 16.5 30.5t15 35t16 36t19.5 32t26.5 23.5t36 11.5t47.5 -5.5l-1 -3q38 9 51 9h761q74 0 114 -56t18 -130l-274 -906 q-36 -119 -71.5 -153.5t-128.5 -34.5h-869q-27 0 -38 -15q-11 -16 -1 -43q24 -70 144 -70h923q29 0 56 15.5t35 41.5l300 987q7 22 5 57q38 -15 59 -43zM575 1056q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5 t-16.5 -22.5zM492 800q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5t-16.5 -22.5z" />
+<glyph unicode="&#xf02e;" horiz-adv-x="1280" d="M1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289q0 34 19.5 62t52.5 41q21 9 44 9h1048z" />
+<glyph unicode="&#xf02f;" horiz-adv-x="1664" d="M384 0h896v256h-896v-256zM384 640h896v384h-160q-40 0 -68 28t-28 68v160h-640v-640zM1536 576q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 576v-416q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-160q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68 v160h-224q-13 0 -22.5 9.5t-9.5 22.5v416q0 79 56.5 135.5t135.5 56.5h64v544q0 40 28 68t68 28h672q40 0 88 -20t76 -48l152 -152q28 -28 48 -76t20 -88v-256h64q79 0 135.5 -56.5t56.5 -135.5z" />
+<glyph unicode="&#xf030;" horiz-adv-x="1920" d="M960 864q119 0 203.5 -84.5t84.5 -203.5t-84.5 -203.5t-203.5 -84.5t-203.5 84.5t-84.5 203.5t84.5 203.5t203.5 84.5zM1664 1280q106 0 181 -75t75 -181v-896q0 -106 -75 -181t-181 -75h-1408q-106 0 -181 75t-75 181v896q0 106 75 181t181 75h224l51 136 q19 49 69.5 84.5t103.5 35.5h512q53 0 103.5 -35.5t69.5 -84.5l51 -136h224zM960 128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+<glyph unicode="&#xf031;" horiz-adv-x="1664" d="M725 977l-170 -450q33 0 136.5 -2t160.5 -2q19 0 57 2q-87 253 -184 452zM0 -128l2 79q23 7 56 12.5t57 10.5t49.5 14.5t44.5 29t31 50.5l237 616l280 724h75h53q8 -14 11 -21l205 -480q33 -78 106 -257.5t114 -274.5q15 -34 58 -144.5t72 -168.5q20 -45 35 -57 q19 -15 88 -29.5t84 -20.5q6 -38 6 -57q0 -4 -0.5 -13t-0.5 -13q-63 0 -190 8t-191 8q-76 0 -215 -7t-178 -8q0 43 4 78l131 28q1 0 12.5 2.5t15.5 3.5t14.5 4.5t15 6.5t11 8t9 11t2.5 14q0 16 -31 96.5t-72 177.5t-42 100l-450 2q-26 -58 -76.5 -195.5t-50.5 -162.5 q0 -22 14 -37.5t43.5 -24.5t48.5 -13.5t57 -8.5t41 -4q1 -19 1 -58q0 -9 -2 -27q-58 0 -174.5 10t-174.5 10q-8 0 -26.5 -4t-21.5 -4q-80 -14 -188 -14z" />
+<glyph unicode="&#xf032;" horiz-adv-x="1408" d="M555 15q74 -32 140 -32q376 0 376 335q0 114 -41 180q-27 44 -61.5 74t-67.5 46.5t-80.5 25t-84 10.5t-94.5 2q-73 0 -101 -10q0 -53 -0.5 -159t-0.5 -158q0 -8 -1 -67.5t-0.5 -96.5t4.5 -83.5t12 -66.5zM541 761q42 -7 109 -7q82 0 143 13t110 44.5t74.5 89.5t25.5 142 q0 70 -29 122.5t-79 82t-108 43.5t-124 14q-50 0 -130 -13q0 -50 4 -151t4 -152q0 -27 -0.5 -80t-0.5 -79q0 -46 1 -69zM0 -128l2 94q15 4 85 16t106 27q7 12 12.5 27t8.5 33.5t5.5 32.5t3 37.5t0.5 34v35.5v30q0 982 -22 1025q-4 8 -22 14.5t-44.5 11t-49.5 7t-48.5 4.5 t-30.5 3l-4 83q98 2 340 11.5t373 9.5q23 0 68.5 -0.5t67.5 -0.5q70 0 136.5 -13t128.5 -42t108 -71t74 -104.5t28 -137.5q0 -52 -16.5 -95.5t-39 -72t-64.5 -57.5t-73 -45t-84 -40q154 -35 256.5 -134t102.5 -248q0 -100 -35 -179.5t-93.5 -130.5t-138 -85.5t-163.5 -48.5 t-176 -14q-44 0 -132 3t-132 3q-106 0 -307 -11t-231 -12z" />
+<glyph unicode="&#xf033;" horiz-adv-x="1024" d="M0 -126l17 85q6 2 81.5 21.5t111.5 37.5q28 35 41 101q1 7 62 289t114 543.5t52 296.5v25q-24 13 -54.5 18.5t-69.5 8t-58 5.5l19 103q33 -2 120 -6.5t149.5 -7t120.5 -2.5q48 0 98.5 2.5t121 7t98.5 6.5q-5 -39 -19 -89q-30 -10 -101.5 -28.5t-108.5 -33.5 q-8 -19 -14 -42.5t-9 -40t-7.5 -45.5t-6.5 -42q-27 -148 -87.5 -419.5t-77.5 -355.5q-2 -9 -13 -58t-20 -90t-16 -83.5t-6 -57.5l1 -18q17 -4 185 -31q-3 -44 -16 -99q-11 0 -32.5 -1.5t-32.5 -1.5q-29 0 -87 10t-86 10q-138 2 -206 2q-51 0 -143 -9t-121 -11z" />
+<glyph unicode="&#xf034;" horiz-adv-x="1792" d="M1744 128q33 0 42 -18.5t-11 -44.5l-126 -162q-20 -26 -49 -26t-49 26l-126 162q-20 26 -11 44.5t42 18.5h80v1024h-80q-33 0 -42 18.5t11 44.5l126 162q20 26 49 26t49 -26l126 -162q20 -26 11 -44.5t-42 -18.5h-80v-1024h80zM81 1407l54 -27q12 -5 211 -5q44 0 132 2 t132 2q36 0 107.5 -0.5t107.5 -0.5h293q6 0 21 -0.5t20.5 0t16 3t17.5 9t15 17.5l42 1q4 0 14 -0.5t14 -0.5q2 -112 2 -336q0 -80 -5 -109q-39 -14 -68 -18q-25 44 -54 128q-3 9 -11 48t-14.5 73.5t-7.5 35.5q-6 8 -12 12.5t-15.5 6t-13 2.5t-18 0.5t-16.5 -0.5 q-17 0 -66.5 0.5t-74.5 0.5t-64 -2t-71 -6q-9 -81 -8 -136q0 -94 2 -388t2 -455q0 -16 -2.5 -71.5t0 -91.5t12.5 -69q40 -21 124 -42.5t120 -37.5q5 -40 5 -50q0 -14 -3 -29l-34 -1q-76 -2 -218 8t-207 10q-50 0 -151 -9t-152 -9q-3 51 -3 52v9q17 27 61.5 43t98.5 29t78 27 q19 42 19 383q0 101 -3 303t-3 303v117q0 2 0.5 15.5t0.5 25t-1 25.5t-3 24t-5 14q-11 12 -162 12q-33 0 -93 -12t-80 -26q-19 -13 -34 -72.5t-31.5 -111t-42.5 -53.5q-42 26 -56 44v383z" />
+<glyph unicode="&#xf035;" d="M81 1407l54 -27q12 -5 211 -5q44 0 132 2t132 2q70 0 246.5 1t304.5 0.5t247 -4.5q33 -1 56 31l42 1q4 0 14 -0.5t14 -0.5q2 -112 2 -336q0 -80 -5 -109q-39 -14 -68 -18q-25 44 -54 128q-3 9 -11 47.5t-15 73.5t-7 36q-10 13 -27 19q-5 2 -66 2q-30 0 -93 1t-103 1 t-94 -2t-96 -7q-9 -81 -8 -136l1 -152v52q0 -55 1 -154t1.5 -180t0.5 -153q0 -16 -2.5 -71.5t0 -91.5t12.5 -69q40 -21 124 -42.5t120 -37.5q5 -40 5 -50q0 -14 -3 -29l-34 -1q-76 -2 -218 8t-207 10q-50 0 -151 -9t-152 -9q-3 51 -3 52v9q17 27 61.5 43t98.5 29t78 27 q7 16 11.5 74t6 145.5t1.5 155t-0.5 153.5t-0.5 89q0 7 -2.5 21.5t-2.5 22.5q0 7 0.5 44t1 73t0 76.5t-3 67.5t-6.5 32q-11 12 -162 12q-41 0 -163 -13.5t-138 -24.5q-19 -12 -34 -71.5t-31.5 -111.5t-42.5 -54q-42 26 -56 44v383zM1310 125q12 0 42 -19.5t57.5 -41.5 t59.5 -49t36 -30q26 -21 26 -49t-26 -49q-4 -3 -36 -30t-59.5 -49t-57.5 -41.5t-42 -19.5q-13 0 -20.5 10.5t-10 28.5t-2.5 33.5t1.5 33t1.5 19.5h-1024q0 -2 1.5 -19.5t1.5 -33t-2.5 -33.5t-10 -28.5t-20.5 -10.5q-12 0 -42 19.5t-57.5 41.5t-59.5 49t-36 30q-26 21 -26 49 t26 49q4 3 36 30t59.5 49t57.5 41.5t42 19.5q13 0 20.5 -10.5t10 -28.5t2.5 -33.5t-1.5 -33t-1.5 -19.5h1024q0 2 -1.5 19.5t-1.5 33t2.5 33.5t10 28.5t20.5 10.5z" />
+<glyph unicode="&#xf036;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45 t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf037;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h896q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45t-45 -19 h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h640q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf038;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45 t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf039;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45 t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf03a;" horiz-adv-x="1792" d="M256 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM256 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5 t9.5 -22.5zM256 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344 q13 0 22.5 -9.5t9.5 -22.5zM256 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5 t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192 q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5z" />
+<glyph unicode="&#xf03b;" horiz-adv-x="1792" d="M384 992v-576q0 -13 -9.5 -22.5t-22.5 -9.5q-14 0 -23 9l-288 288q-9 9 -9 23t9 23l288 288q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5 t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088 q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" />
+<glyph unicode="&#xf03c;" horiz-adv-x="1792" d="M352 704q0 -14 -9 -23l-288 -288q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v576q0 13 9.5 22.5t22.5 9.5q14 0 23 -9l288 -288q9 -9 9 -23zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5 t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088 q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" />
+<glyph unicode="&#xf03d;" horiz-adv-x="1792" d="M1792 1184v-1088q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-403 403v-166q0 -119 -84.5 -203.5t-203.5 -84.5h-704q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h704q119 0 203.5 -84.5t84.5 -203.5v-165l403 402q18 19 45 19q12 0 25 -5 q39 -17 39 -59z" />
+<glyph unicode="&#xf03e;" horiz-adv-x="1920" d="M640 960q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 576v-448h-1408v192l320 320l160 -160l512 512zM1760 1280h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5v1216 q0 13 -9.5 22.5t-22.5 9.5zM1920 1248v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
+<glyph unicode="&#xf040;" d="M363 0l91 91l-235 235l-91 -91v-107h128v-128h107zM886 928q0 22 -22 22q-10 0 -17 -7l-542 -542q-7 -7 -7 -17q0 -22 22 -22q10 0 17 7l542 542q7 7 7 17zM832 1120l416 -416l-832 -832h-416v416zM1515 1024q0 -53 -37 -90l-166 -166l-416 416l166 165q36 38 90 38 q53 0 91 -38l235 -234q37 -39 37 -91z" />
+<glyph unicode="&#xf041;" horiz-adv-x="1024" d="M768 896q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1024 896q0 -109 -33 -179l-364 -774q-16 -33 -47.5 -52t-67.5 -19t-67.5 19t-46.5 52l-365 774q-33 70 -33 179q0 212 150 362t362 150t362 -150t150 -362z" />
+<glyph unicode="&#xf042;" d="M768 96v1088q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf043;" horiz-adv-x="1024" d="M512 384q0 36 -20 69q-1 1 -15.5 22.5t-25.5 38t-25 44t-21 50.5q-4 16 -21 16t-21 -16q-7 -23 -21 -50.5t-25 -44t-25.5 -38t-15.5 -22.5q-20 -33 -20 -69q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 512q0 -212 -150 -362t-362 -150t-362 150t-150 362 q0 145 81 275q6 9 62.5 90.5t101 151t99.5 178t83 201.5q9 30 34 47t51 17t51.5 -17t33.5 -47q28 -93 83 -201.5t99.5 -178t101 -151t62.5 -90.5q81 -127 81 -275z" />
+<glyph unicode="&#xf044;" horiz-adv-x="1792" d="M888 352l116 116l-152 152l-116 -116v-56h96v-96h56zM1328 1072q-16 16 -33 -1l-350 -350q-17 -17 -1 -33t33 1l350 350q17 17 1 33zM1408 478v-190q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832 q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-14 -14 -32 -8q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v126q0 13 9 22l64 64q15 15 35 7t20 -29zM1312 1216l288 -288l-672 -672h-288v288zM1756 1084l-92 -92 l-288 288l92 92q28 28 68 28t68 -28l152 -152q28 -28 28 -68t-28 -68z" />
+<glyph unicode="&#xf045;" horiz-adv-x="1664" d="M1408 547v-259q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h255v0q13 0 22.5 -9.5t9.5 -22.5q0 -27 -26 -32q-77 -26 -133 -60q-10 -4 -16 -4h-112q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832 q66 0 113 47t47 113v214q0 19 18 29q28 13 54 37q16 16 35 8q21 -9 21 -29zM1645 1043l-384 -384q-18 -19 -45 -19q-12 0 -25 5q-39 17 -39 59v192h-160q-323 0 -438 -131q-119 -137 -74 -473q3 -23 -20 -34q-8 -2 -12 -2q-16 0 -26 13q-10 14 -21 31t-39.5 68.5t-49.5 99.5 t-38.5 114t-17.5 122q0 49 3.5 91t14 90t28 88t47 81.5t68.5 74t94.5 61.5t124.5 48.5t159.5 30.5t196.5 11h160v192q0 42 39 59q13 5 25 5q26 0 45 -19l384 -384q19 -19 19 -45t-19 -45z" />
+<glyph unicode="&#xf046;" horiz-adv-x="1664" d="M1408 606v-318q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-10 -10 -23 -10q-3 0 -9 2q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832 q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v254q0 13 9 22l64 64q10 10 23 10q6 0 12 -3q20 -8 20 -29zM1639 1095l-814 -814q-24 -24 -57 -24t-57 24l-430 430q-24 24 -24 57t24 57l110 110q24 24 57 24t57 -24l263 -263l647 647q24 24 57 24t57 -24l110 -110 q24 -24 24 -57t-24 -57z" />
+<glyph unicode="&#xf047;" horiz-adv-x="1792" d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-384v-384h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v384h-384v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45 t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h384v384h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45t-19 -45t-45 -19h-128v-384h384v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" />
+<glyph unicode="&#xf048;" horiz-adv-x="1024" d="M979 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 11 13 19z" />
+<glyph unicode="&#xf049;" horiz-adv-x="1792" d="M1747 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 11 13 19l710 710 q19 19 32 13t13 -32v-710q4 11 13 19z" />
+<glyph unicode="&#xf04a;" horiz-adv-x="1664" d="M1619 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-8 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-19 19 -19 45t19 45l710 710q19 19 32 13t13 -32v-710q5 11 13 19z" />
+<glyph unicode="&#xf04b;" horiz-adv-x="1408" d="M1384 609l-1328 -738q-23 -13 -39.5 -3t-16.5 36v1472q0 26 16.5 36t39.5 -3l1328 -738q23 -13 23 -31t-23 -31z" />
+<glyph unicode="&#xf04c;" d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45zM640 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf04d;" d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf04e;" horiz-adv-x="1664" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v710q0 26 13 32t32 -13l710 -710q19 -19 19 -45t-19 -45l-710 -710q-19 -19 -32 -13t-13 32v710q-5 -10 -13 -19z" />
+<glyph unicode="&#xf050;" horiz-adv-x="1792" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v710q0 26 13 32t32 -13l710 -710q8 -8 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-5 -10 -13 -19l-710 -710 q-19 -19 -32 -13t-13 32v710q-5 -10 -13 -19z" />
+<glyph unicode="&#xf051;" horiz-adv-x="1024" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-5 -10 -13 -19z" />
+<glyph unicode="&#xf052;" horiz-adv-x="1538" d="M14 557l710 710q19 19 45 19t45 -19l710 -710q19 -19 13 -32t-32 -13h-1472q-26 0 -32 13t13 32zM1473 0h-1408q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1408q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19z" />
+<glyph unicode="&#xf053;" horiz-adv-x="1280" d="M1171 1235l-531 -531l531 -531q19 -19 19 -45t-19 -45l-166 -166q-19 -19 -45 -19t-45 19l-742 742q-19 19 -19 45t19 45l742 742q19 19 45 19t45 -19l166 -166q19 -19 19 -45t-19 -45z" />
+<glyph unicode="&#xf054;" horiz-adv-x="1280" d="M1107 659l-742 -742q-19 -19 -45 -19t-45 19l-166 166q-19 19 -19 45t19 45l531 531l-531 531q-19 19 -19 45t19 45l166 166q19 19 45 19t45 -19l742 -742q19 -19 19 -45t-19 -45z" />
+<glyph unicode="&#xf055;" d="M1216 576v128q0 26 -19 45t-45 19h-256v256q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-256h-256q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h256v-256q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v256h256q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5 t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf056;" d="M1216 576v128q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5 t103 -385.5z" />
+<glyph unicode="&#xf057;" d="M1149 414q0 26 -19 45l-181 181l181 181q19 19 19 45q0 27 -19 46l-90 90q-19 19 -46 19q-26 0 -45 -19l-181 -181l-181 181q-19 19 -45 19q-27 0 -46 -19l-90 -90q-19 -19 -19 -46q0 -26 19 -45l181 -181l-181 -181q-19 -19 -19 -45q0 -27 19 -46l90 -90q19 -19 46 -19 q26 0 45 19l181 181l181 -181q19 -19 45 -19q27 0 46 19l90 90q19 19 19 46zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf058;" d="M1284 802q0 28 -18 46l-91 90q-19 19 -45 19t-45 -19l-408 -407l-226 226q-19 19 -45 19t-45 -19l-91 -90q-18 -18 -18 -46q0 -27 18 -45l362 -362q19 -19 45 -19q27 0 46 19l543 543q18 18 18 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf059;" d="M896 160v192q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h192q14 0 23 9t9 23zM1152 832q0 88 -55.5 163t-138.5 116t-170 41q-243 0 -371 -213q-15 -24 8 -42l132 -100q7 -6 19 -6q16 0 25 12q53 68 86 92q34 24 86 24q48 0 85.5 -26t37.5 -59 q0 -38 -20 -61t-68 -45q-63 -28 -115.5 -86.5t-52.5 -125.5v-36q0 -14 9 -23t23 -9h192q14 0 23 9t9 23q0 19 21.5 49.5t54.5 49.5q32 18 49 28.5t46 35t44.5 48t28 60.5t12.5 81zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf05a;" d="M1024 160v160q0 14 -9 23t-23 9h-96v512q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h96v-320h-96q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h448q14 0 23 9t9 23zM896 1056v160q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23 t23 -9h192q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf05b;" d="M1197 512h-109q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h109q-32 108 -112.5 188.5t-188.5 112.5v-109q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v109q-108 -32 -188.5 -112.5t-112.5 -188.5h109q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-109 q32 -108 112.5 -188.5t188.5 -112.5v109q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-109q108 32 188.5 112.5t112.5 188.5zM1536 704v-128q0 -26 -19 -45t-45 -19h-143q-37 -161 -154.5 -278.5t-278.5 -154.5v-143q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v143 q-161 37 -278.5 154.5t-154.5 278.5h-143q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h143q37 161 154.5 278.5t278.5 154.5v143q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-143q161 -37 278.5 -154.5t154.5 -278.5h143q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf05c;" d="M1097 457l-146 -146q-10 -10 -23 -10t-23 10l-137 137l-137 -137q-10 -10 -23 -10t-23 10l-146 146q-10 10 -10 23t10 23l137 137l-137 137q-10 10 -10 23t10 23l146 146q10 10 23 10t23 -10l137 -137l137 137q10 10 23 10t23 -10l146 -146q10 -10 10 -23t-10 -23 l-137 -137l137 -137q10 -10 10 -23t-10 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5 t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf05d;" d="M1171 723l-422 -422q-19 -19 -45 -19t-45 19l-294 294q-19 19 -19 45t19 45l102 102q19 19 45 19t45 -19l147 -147l275 275q19 19 45 19t45 -19l102 -102q19 -19 19 -45t-19 -45zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198 t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf05e;" d="M1312 643q0 161 -87 295l-754 -753q137 -89 297 -89q111 0 211.5 43.5t173.5 116.5t116 174.5t43 212.5zM313 344l755 754q-135 91 -300 91q-148 0 -273 -73t-198 -199t-73 -274q0 -162 89 -299zM1536 643q0 -157 -61 -300t-163.5 -246t-245 -164t-298.5 -61t-298.5 61 t-245 164t-163.5 246t-61 300t61 299.5t163.5 245.5t245 164t298.5 61t298.5 -61t245 -164t163.5 -245.5t61 -299.5z" />
+<glyph unicode="&#xf060;" d="M1536 640v-128q0 -53 -32.5 -90.5t-84.5 -37.5h-704l293 -294q38 -36 38 -90t-38 -90l-75 -76q-37 -37 -90 -37q-52 0 -91 37l-651 652q-37 37 -37 90q0 52 37 91l651 650q38 38 91 38q52 0 90 -38l75 -74q38 -38 38 -91t-38 -91l-293 -293h704q52 0 84.5 -37.5 t32.5 -90.5z" />
+<glyph unicode="&#xf061;" d="M1472 576q0 -54 -37 -91l-651 -651q-39 -37 -91 -37q-51 0 -90 37l-75 75q-38 38 -38 91t38 91l293 293h-704q-52 0 -84.5 37.5t-32.5 90.5v128q0 53 32.5 90.5t84.5 37.5h704l-293 294q-38 36 -38 90t38 90l75 75q38 38 90 38q53 0 91 -38l651 -651q37 -35 37 -90z" />
+<glyph unicode="&#xf062;" horiz-adv-x="1664" d="M1611 565q0 -51 -37 -90l-75 -75q-38 -38 -91 -38q-54 0 -90 38l-294 293v-704q0 -52 -37.5 -84.5t-90.5 -32.5h-128q-53 0 -90.5 32.5t-37.5 84.5v704l-294 -293q-36 -38 -90 -38t-90 38l-75 75q-38 38 -38 90q0 53 38 91l651 651q35 37 90 37q54 0 91 -37l651 -651 q37 -39 37 -91z" />
+<glyph unicode="&#xf063;" horiz-adv-x="1664" d="M1611 704q0 -53 -37 -90l-651 -652q-39 -37 -91 -37q-53 0 -90 37l-651 652q-38 36 -38 90q0 53 38 91l74 75q39 37 91 37q53 0 90 -37l294 -294v704q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-704l294 294q37 37 90 37q52 0 91 -37l75 -75q37 -39 37 -91z" />
+<glyph unicode="&#xf064;" horiz-adv-x="1792" d="M1792 896q0 -26 -19 -45l-512 -512q-19 -19 -45 -19t-45 19t-19 45v256h-224q-98 0 -175.5 -6t-154 -21.5t-133 -42.5t-105.5 -69.5t-80 -101t-48.5 -138.5t-17.5 -181q0 -55 5 -123q0 -6 2.5 -23.5t2.5 -26.5q0 -15 -8.5 -25t-23.5 -10q-16 0 -28 17q-7 9 -13 22 t-13.5 30t-10.5 24q-127 285 -127 451q0 199 53 333q162 403 875 403h224v256q0 26 19 45t45 19t45 -19l512 -512q19 -19 19 -45z" />
+<glyph unicode="&#xf065;" d="M755 480q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23zM1536 1344v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332 q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf066;" d="M768 576v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45zM1523 1248q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45 t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23z" />
+<glyph unicode="&#xf067;" horiz-adv-x="1408" d="M1408 800v-192q0 -40 -28 -68t-68 -28h-416v-416q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v416h-416q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h416v416q0 40 28 68t68 28h192q40 0 68 -28t28 -68v-416h416q40 0 68 -28t28 -68z" />
+<glyph unicode="&#xf068;" horiz-adv-x="1408" d="M1408 800v-192q0 -40 -28 -68t-68 -28h-1216q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h1216q40 0 68 -28t28 -68z" />
+<glyph unicode="&#xf069;" horiz-adv-x="1664" d="M1482 486q46 -26 59.5 -77.5t-12.5 -97.5l-64 -110q-26 -46 -77.5 -59.5t-97.5 12.5l-266 153v-307q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v307l-266 -153q-46 -26 -97.5 -12.5t-77.5 59.5l-64 110q-26 46 -12.5 97.5t59.5 77.5l266 154l-266 154 q-46 26 -59.5 77.5t12.5 97.5l64 110q26 46 77.5 59.5t97.5 -12.5l266 -153v307q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-307l266 153q46 26 97.5 12.5t77.5 -59.5l64 -110q26 -46 12.5 -97.5t-59.5 -77.5l-266 -154z" />
+<glyph unicode="&#xf06a;" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM896 161v190q0 14 -9 23.5t-22 9.5h-192q-13 0 -23 -10t-10 -23v-190q0 -13 10 -23t23 -10h192 q13 0 22 9.5t9 23.5zM894 505l18 621q0 12 -10 18q-10 8 -24 8h-220q-14 0 -24 -8q-10 -6 -10 -18l17 -621q0 -10 10 -17.5t24 -7.5h185q14 0 23.5 7.5t10.5 17.5z" />
+<glyph unicode="&#xf06b;" d="M928 180v56v468v192h-320v-192v-468v-56q0 -25 18 -38.5t46 -13.5h192q28 0 46 13.5t18 38.5zM472 1024h195l-126 161q-26 31 -69 31q-40 0 -68 -28t-28 -68t28 -68t68 -28zM1160 1120q0 40 -28 68t-68 28q-43 0 -69 -31l-125 -161h194q40 0 68 28t28 68zM1536 864v-320 q0 -14 -9 -23t-23 -9h-96v-416q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v416h-96q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h440q-93 0 -158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5q107 0 168 -77l128 -165l128 165q61 77 168 77q93 0 158.5 -65.5t65.5 -158.5 t-65.5 -158.5t-158.5 -65.5h440q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf06c;" horiz-adv-x="1792" d="M1280 832q0 26 -19 45t-45 19q-172 0 -318 -49.5t-259.5 -134t-235.5 -219.5q-19 -21 -19 -45q0 -26 19 -45t45 -19q24 0 45 19q27 24 74 71t67 66q137 124 268.5 176t313.5 52q26 0 45 19t19 45zM1792 1030q0 -95 -20 -193q-46 -224 -184.5 -383t-357.5 -268 q-214 -108 -438 -108q-148 0 -286 47q-15 5 -88 42t-96 37q-16 0 -39.5 -32t-45 -70t-52.5 -70t-60 -32q-30 0 -51 11t-31 24t-27 42q-2 4 -6 11t-5.5 10t-3 9.5t-1.5 13.5q0 35 31 73.5t68 65.5t68 56t31 48q0 4 -14 38t-16 44q-9 51 -9 104q0 115 43.5 220t119 184.5 t170.5 139t204 95.5q55 18 145 25.5t179.5 9t178.5 6t163.5 24t113.5 56.5l29.5 29.5t29.5 28t27 20t36.5 16t43.5 4.5q39 0 70.5 -46t47.5 -112t24 -124t8 -96z" />
+<glyph unicode="&#xf06d;" horiz-adv-x="1408" d="M1408 -160v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1152 896q0 -78 -24.5 -144t-64 -112.5t-87.5 -88t-96 -77.5t-87.5 -72t-64 -81.5t-24.5 -96.5q0 -96 67 -224l-4 1l1 -1 q-90 41 -160 83t-138.5 100t-113.5 122.5t-72.5 150.5t-27.5 184q0 78 24.5 144t64 112.5t87.5 88t96 77.5t87.5 72t64 81.5t24.5 96.5q0 94 -66 224l3 -1l-1 1q90 -41 160 -83t138.5 -100t113.5 -122.5t72.5 -150.5t27.5 -184z" />
+<glyph unicode="&#xf06e;" horiz-adv-x="1792" d="M1664 576q-152 236 -381 353q61 -104 61 -225q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 121 61 225q-229 -117 -381 -353q133 -205 333.5 -326.5t434.5 -121.5t434.5 121.5t333.5 326.5zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5 t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1792 576q0 -34 -20 -69q-140 -230 -376.5 -368.5t-499.5 -138.5t-499.5 139t-376.5 368q-20 35 -20 69t20 69q140 229 376.5 368t499.5 139t499.5 -139t376.5 -368q20 -35 20 -69z" />
+<glyph unicode="&#xf070;" horiz-adv-x="1792" d="M555 201l78 141q-87 63 -136 159t-49 203q0 121 61 225q-229 -117 -381 -353q167 -258 427 -375zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1307 1151q0 -7 -1 -9 q-105 -188 -315 -566t-316 -567l-49 -89q-10 -16 -28 -16q-12 0 -134 70q-16 10 -16 28q0 12 44 87q-143 65 -263.5 173t-208.5 245q-20 31 -20 69t20 69q153 235 380 371t496 136q89 0 180 -17l54 97q10 16 28 16q5 0 18 -6t31 -15.5t33 -18.5t31.5 -18.5t19.5 -11.5 q16 -10 16 -27zM1344 704q0 -139 -79 -253.5t-209 -164.5l280 502q8 -45 8 -84zM1792 576q0 -35 -20 -69q-39 -64 -109 -145q-150 -172 -347.5 -267t-419.5 -95l74 132q212 18 392.5 137t301.5 307q-115 179 -282 294l63 112q95 -64 182.5 -153t144.5 -184q20 -34 20 -69z " />
+<glyph unicode="&#xf071;" horiz-adv-x="1792" d="M1024 161v190q0 14 -9.5 23.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -23.5v-190q0 -14 9.5 -23.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 23.5zM1022 535l18 459q0 12 -10 19q-13 11 -24 11h-220q-11 0 -24 -11q-10 -7 -10 -21l17 -457q0 -10 10 -16.5t24 -6.5h185 q14 0 23.5 6.5t10.5 16.5zM1008 1469l768 -1408q35 -63 -2 -126q-17 -29 -46.5 -46t-63.5 -17h-1536q-34 0 -63.5 17t-46.5 46q-37 63 -2 126l768 1408q17 31 47 49t65 18t65 -18t47 -49z" />
+<glyph unicode="&#xf072;" horiz-adv-x="1408" d="M1376 1376q44 -52 12 -148t-108 -172l-161 -161l160 -696q5 -19 -12 -33l-128 -96q-7 -6 -19 -6q-4 0 -7 1q-15 3 -21 16l-279 508l-259 -259l53 -194q5 -17 -8 -31l-96 -96q-9 -9 -23 -9h-2q-15 2 -24 13l-189 252l-252 189q-11 7 -13 23q-1 13 9 25l96 97q9 9 23 9 q6 0 8 -1l194 -53l259 259l-508 279q-14 8 -17 24q-2 16 9 27l128 128q14 13 30 8l665 -159l160 160q76 76 172 108t148 -12z" />
+<glyph unicode="&#xf073;" horiz-adv-x="1664" d="M128 -128h288v288h-288v-288zM480 -128h320v288h-320v-288zM128 224h288v320h-288v-320zM480 224h320v320h-320v-320zM128 608h288v288h-288v-288zM864 -128h320v288h-320v-288zM480 608h320v288h-320v-288zM1248 -128h288v288h-288v-288zM864 224h320v320h-320v-320z M512 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1248 224h288v320h-288v-320zM864 608h320v288h-320v-288zM1248 608h288v288h-288v-288zM1280 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64 q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47 h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
+<glyph unicode="&#xf074;" horiz-adv-x="1792" d="M666 1055q-60 -92 -137 -273q-22 45 -37 72.5t-40.5 63.5t-51 56.5t-63 35t-81.5 14.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q250 0 410 -225zM1792 256q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192q-32 0 -85 -0.5t-81 -1t-73 1 t-71 5t-64 10.5t-63 18.5t-58 28.5t-59 40t-55 53.5t-56 69.5q59 93 136 273q22 -45 37 -72.5t40.5 -63.5t51 -56.5t63 -35t81.5 -14.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1792 1152q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5 v192h-256q-48 0 -87 -15t-69 -45t-51 -61.5t-45 -77.5q-32 -62 -78 -171q-29 -66 -49.5 -111t-54 -105t-64 -100t-74 -83t-90 -68.5t-106.5 -42t-128 -16.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q48 0 87 15t69 45t51 61.5t45 77.5q32 62 78 171q29 66 49.5 111 t54 105t64 100t74 83t90 68.5t106.5 42t128 16.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" />
+<glyph unicode="&#xf075;" horiz-adv-x="1792" d="M1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22q-17 -2 -30.5 9t-17.5 29v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281 q0 130 71 248.5t191 204.5t286 136.5t348 50.5q244 0 450 -85.5t326 -233t120 -321.5z" />
+<glyph unicode="&#xf076;" d="M1536 704v-128q0 -201 -98.5 -362t-274 -251.5t-395.5 -90.5t-395.5 90.5t-274 251.5t-98.5 362v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-128q0 -52 23.5 -90t53.5 -57t71 -30t64 -13t44 -2t44 2t64 13t71 30t53.5 57t23.5 90v128q0 26 19 45t45 19h384 q26 0 45 -19t19 -45zM512 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45zM1536 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf077;" horiz-adv-x="1792" d="M1683 205l-166 -165q-19 -19 -45 -19t-45 19l-531 531l-531 -531q-19 -19 -45 -19t-45 19l-166 165q-19 19 -19 45.5t19 45.5l742 741q19 19 45 19t45 -19l742 -741q19 -19 19 -45.5t-19 -45.5z" />
+<glyph unicode="&#xf078;" horiz-adv-x="1792" d="M1683 728l-742 -741q-19 -19 -45 -19t-45 19l-742 741q-19 19 -19 45.5t19 45.5l166 165q19 19 45 19t45 -19l531 -531l531 531q19 19 45 19t45 -19l166 -165q19 -19 19 -45.5t-19 -45.5z" />
+<glyph unicode="&#xf079;" horiz-adv-x="1920" d="M1280 32q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-8 0 -13.5 2t-9 7t-5.5 8t-3 11.5t-1 11.5v13v11v160v416h-192q-26 0 -45 19t-19 45q0 24 15 41l320 384q19 22 49 22t49 -22l320 -384q15 -17 15 -41q0 -26 -19 -45t-45 -19h-192v-384h576q16 0 25 -11l160 -192q7 -11 7 -21 zM1920 448q0 -24 -15 -41l-320 -384q-20 -23 -49 -23t-49 23l-320 384q-15 17 -15 41q0 26 19 45t45 19h192v384h-576q-16 0 -25 12l-160 192q-7 9 -7 20q0 13 9.5 22.5t22.5 9.5h960q8 0 13.5 -2t9 -7t5.5 -8t3 -11.5t1 -11.5v-13v-11v-160v-416h192q26 0 45 -19t19 -45z " />
+<glyph unicode="&#xf07a;" horiz-adv-x="1664" d="M640 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1536 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1664 1088v-512q0 -24 -16 -42.5t-41 -21.5 l-1044 -122q1 -7 4.5 -21.5t6 -26.5t2.5 -22q0 -16 -24 -64h920q26 0 45 -19t19 -45t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 14 11 39.5t29.5 59.5t20.5 38l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t20 -15.5t13 -24.5t7.5 -26.5 t5.5 -29.5t4.5 -25.5h1201q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf07b;" horiz-adv-x="1664" d="M1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" />
+<glyph unicode="&#xf07c;" horiz-adv-x="1920" d="M1879 584q0 -31 -31 -66l-336 -396q-43 -51 -120.5 -86.5t-143.5 -35.5h-1088q-34 0 -60.5 13t-26.5 43q0 31 31 66l336 396q43 51 120.5 86.5t143.5 35.5h1088q34 0 60.5 -13t26.5 -43zM1536 928v-160h-832q-94 0 -197 -47.5t-164 -119.5l-337 -396l-5 -6q0 4 -0.5 12.5 t-0.5 12.5v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158z" />
+<glyph unicode="&#xf07d;" horiz-adv-x="768" d="M704 1216q0 -26 -19 -45t-45 -19h-128v-1024h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v1024h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45z" />
+<glyph unicode="&#xf07e;" horiz-adv-x="1792" d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-1024v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h1024v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" />
+<glyph unicode="&#xf080;" horiz-adv-x="2048" d="M640 640v-512h-256v512h256zM1024 1152v-1024h-256v1024h256zM2048 0v-128h-2048v1536h128v-1408h1920zM1408 896v-768h-256v768h256zM1792 1280v-1152h-256v1152h256z" />
+<glyph unicode="&#xf081;" d="M1280 926q-56 -25 -121 -34q68 40 93 117q-65 -38 -134 -51q-61 66 -153 66q-87 0 -148.5 -61.5t-61.5 -148.5q0 -29 5 -48q-129 7 -242 65t-192 155q-29 -50 -29 -106q0 -114 91 -175q-47 1 -100 26v-2q0 -75 50 -133.5t123 -72.5q-29 -8 -51 -8q-13 0 -39 4 q21 -63 74.5 -104t121.5 -42q-116 -90 -261 -90q-26 0 -50 3q148 -94 322 -94q112 0 210 35.5t168 95t120.5 137t75 162t24.5 168.5q0 18 -1 27q63 45 105 109zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5 t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf082;" d="M1536 160q0 -119 -84.5 -203.5t-203.5 -84.5h-192v608h203l30 224h-233v143q0 54 28 83t96 29l132 1v207q-96 9 -180 9q-136 0 -218 -80.5t-82 -225.5v-166h-224v-224h224v-608h-544q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960 q119 0 203.5 -84.5t84.5 -203.5v-960z" />
+<glyph unicode="&#xf083;" horiz-adv-x="1792" d="M928 704q0 14 -9 23t-23 9q-66 0 -113 -47t-47 -113q0 -14 9 -23t23 -9t23 9t9 23q0 40 28 68t68 28q14 0 23 9t9 23zM1152 574q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM128 0h1536v128h-1536v-128zM1280 574q0 159 -112.5 271.5 t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM256 1216h384v128h-384v-128zM128 1024h1536v118v138h-828l-64 -128h-644v-128zM1792 1280v-1280q0 -53 -37.5 -90.5t-90.5 -37.5h-1536q-53 0 -90.5 37.5t-37.5 90.5v1280 q0 53 37.5 90.5t90.5 37.5h1536q53 0 90.5 -37.5t37.5 -90.5z" />
+<glyph unicode="&#xf084;" horiz-adv-x="1792" d="M832 1024q0 80 -56 136t-136 56t-136 -56t-56 -136q0 -42 19 -83q-41 19 -83 19q-80 0 -136 -56t-56 -136t56 -136t136 -56t136 56t56 136q0 42 -19 83q41 -19 83 -19q80 0 136 56t56 136zM1683 320q0 -17 -49 -66t-66 -49q-9 0 -28.5 16t-36.5 33t-38.5 40t-24.5 26 l-96 -96l220 -220q28 -28 28 -68q0 -42 -39 -81t-81 -39q-40 0 -68 28l-671 671q-176 -131 -365 -131q-163 0 -265.5 102.5t-102.5 265.5q0 160 95 313t248 248t313 95q163 0 265.5 -102.5t102.5 -265.5q0 -189 -131 -365l355 -355l96 96q-3 3 -26 24.5t-40 38.5t-33 36.5 t-16 28.5q0 17 49 66t66 49q13 0 23 -10q6 -6 46 -44.5t82 -79.5t86.5 -86t73 -78t28.5 -41z" />
+<glyph unicode="&#xf085;" horiz-adv-x="1920" d="M896 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1664 128q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1152q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5 t90.5 37.5t37.5 90.5zM1280 731v-185q0 -10 -7 -19.5t-16 -10.5l-155 -24q-11 -35 -32 -76q34 -48 90 -115q7 -10 7 -20q0 -12 -7 -19q-23 -30 -82.5 -89.5t-78.5 -59.5q-11 0 -21 7l-115 90q-37 -19 -77 -31q-11 -108 -23 -155q-7 -24 -30 -24h-186q-11 0 -20 7.5t-10 17.5 l-23 153q-34 10 -75 31l-118 -89q-7 -7 -20 -7q-11 0 -21 8q-144 133 -144 160q0 9 7 19q10 14 41 53t47 61q-23 44 -35 82l-152 24q-10 1 -17 9.5t-7 19.5v185q0 10 7 19.5t16 10.5l155 24q11 35 32 76q-34 48 -90 115q-7 11 -7 20q0 12 7 20q22 30 82 89t79 59q11 0 21 -7 l115 -90q34 18 77 32q11 108 23 154q7 24 30 24h186q11 0 20 -7.5t10 -17.5l23 -153q34 -10 75 -31l118 89q8 7 20 7q11 0 21 -8q144 -133 144 -160q0 -9 -7 -19q-12 -16 -42 -54t-45 -60q23 -48 34 -82l152 -23q10 -2 17 -10.5t7 -19.5zM1920 198v-140q0 -16 -149 -31 q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20 t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31zM1920 1222v-140q0 -16 -149 -31q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68 q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70 q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31z" />
+<glyph unicode="&#xf086;" horiz-adv-x="1792" d="M1408 768q0 -139 -94 -257t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224 q0 139 94 257t256.5 186.5t353.5 68.5t353.5 -68.5t256.5 -186.5t94 -257zM1792 512q0 -120 -71 -224.5t-195 -176.5q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7 q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230z" />
+<glyph unicode="&#xf087;" d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 768q0 51 -39 89.5t-89 38.5h-352q0 58 48 159.5t48 160.5q0 98 -32 145t-128 47q-26 -26 -38 -85t-30.5 -125.5t-59.5 -109.5q-22 -23 -77 -91q-4 -5 -23 -30t-31.5 -41t-34.5 -42.5 t-40 -44t-38.5 -35.5t-40 -27t-35.5 -9h-32v-640h32q13 0 31.5 -3t33 -6.5t38 -11t35 -11.5t35.5 -12.5t29 -10.5q211 -73 342 -73h121q192 0 192 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5q32 1 53.5 47t21.5 81zM1536 769 q0 -89 -49 -163q9 -33 9 -69q0 -77 -38 -144q3 -21 3 -43q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5h-36h-93q-96 0 -189.5 22.5t-216.5 65.5q-116 40 -138 40h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h274q36 24 137 155q58 75 107 128 q24 25 35.5 85.5t30.5 126.5t62 108q39 37 90 37q84 0 151 -32.5t102 -101.5t35 -186q0 -93 -48 -192h176q104 0 180 -76t76 -179z" />
+<glyph unicode="&#xf088;" d="M256 1088q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 512q0 35 -21.5 81t-53.5 47q15 17 25 47.5t10 55.5q0 69 -53 119q18 32 18 69t-17.5 73.5t-47.5 52.5q5 30 5 56q0 85 -49 126t-136 41h-128q-131 0 -342 -73q-5 -2 -29 -10.5 t-35.5 -12.5t-35 -11.5t-38 -11t-33 -6.5t-31.5 -3h-32v-640h32q16 0 35.5 -9t40 -27t38.5 -35.5t40 -44t34.5 -42.5t31.5 -41t23 -30q55 -68 77 -91q41 -43 59.5 -109.5t30.5 -125.5t38 -85q96 0 128 47t32 145q0 59 -48 160.5t-48 159.5h352q50 0 89 38.5t39 89.5z M1536 511q0 -103 -76 -179t-180 -76h-176q48 -99 48 -192q0 -118 -35 -186q-35 -69 -102 -101.5t-151 -32.5q-51 0 -90 37q-34 33 -54 82t-25.5 90.5t-17.5 84.5t-31 64q-48 50 -107 127q-101 131 -137 155h-274q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5 h288q22 0 138 40q128 44 223 66t200 22h112q140 0 226.5 -79t85.5 -216v-5q60 -77 60 -178q0 -22 -3 -43q38 -67 38 -144q0 -36 -9 -69q49 -74 49 -163z" />
+<glyph unicode="&#xf089;" horiz-adv-x="896" d="M832 1504v-1339l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41z" />
+<glyph unicode="&#xf08a;" horiz-adv-x="1792" d="M1664 940q0 81 -21.5 143t-55 98.5t-81.5 59.5t-94 31t-98 8t-112 -25.5t-110.5 -64t-86.5 -72t-60 -61.5q-18 -22 -49 -22t-49 22q-24 28 -60 61.5t-86.5 72t-110.5 64t-112 25.5t-98 -8t-94 -31t-81.5 -59.5t-55 -98.5t-21.5 -143q0 -168 187 -355l581 -560l580 559 q188 188 188 356zM1792 940q0 -221 -229 -450l-623 -600q-18 -18 -44 -18t-44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5 q224 0 351 -124t127 -344z" />
+<glyph unicode="&#xf08b;" horiz-adv-x="1664" d="M640 96q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h320q13 0 22.5 -9.5t9.5 -22.5q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-66 0 -113 -47t-47 -113v-704 q0 -66 47 -113t113 -47h288h11h13t11.5 -1t11.5 -3t8 -5.5t7 -9t2 -13.5zM1568 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45z" />
+<glyph unicode="&#xf08c;" d="M237 122h231v694h-231v-694zM483 1030q-1 52 -36 86t-93 34t-94.5 -34t-36.5 -86q0 -51 35.5 -85.5t92.5 -34.5h1q59 0 95 34.5t36 85.5zM1068 122h231v398q0 154 -73 233t-193 79q-136 0 -209 -117h2v101h-231q3 -66 0 -694h231v388q0 38 7 56q15 35 45 59.5t74 24.5 q116 0 116 -157v-371zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf08d;" horiz-adv-x="1152" d="M480 672v448q0 14 -9 23t-23 9t-23 -9t-9 -23v-448q0 -14 9 -23t23 -9t23 9t9 23zM1152 320q0 -26 -19 -45t-45 -19h-429l-51 -483q-2 -12 -10.5 -20.5t-20.5 -8.5h-1q-27 0 -32 27l-76 485h-404q-26 0 -45 19t-19 45q0 123 78.5 221.5t177.5 98.5v512q-52 0 -90 38 t-38 90t38 90t90 38h640q52 0 90 -38t38 -90t-38 -90t-90 -38v-512q99 0 177.5 -98.5t78.5 -221.5z" />
+<glyph unicode="&#xf08e;" horiz-adv-x="1792" d="M1408 608v-320q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v320 q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1792 1472v-512q0 -26 -19 -45t-45 -19t-45 19l-176 176l-652 -652q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l652 652l-176 176q-19 19 -19 45t19 45t45 19h512q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf090;" d="M1184 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45zM1536 992v-704q0 -119 -84.5 -203.5t-203.5 -84.5h-320q-13 0 -22.5 9.5t-9.5 22.5 q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q66 0 113 47t47 113v704q0 66 -47 113t-113 47h-288h-11h-13t-11.5 1t-11.5 3t-8 5.5t-7 9t-2 13.5q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf091;" horiz-adv-x="1664" d="M458 653q-74 162 -74 371h-256v-96q0 -78 94.5 -162t235.5 -113zM1536 928v96h-256q0 -209 -74 -371q141 29 235.5 113t94.5 162zM1664 1056v-128q0 -71 -41.5 -143t-112 -130t-173 -97.5t-215.5 -44.5q-42 -54 -95 -95q-38 -34 -52.5 -72.5t-14.5 -89.5q0 -54 30.5 -91 t97.5 -37q75 0 133.5 -45.5t58.5 -114.5v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 69 58.5 114.5t133.5 45.5q67 0 97.5 37t30.5 91q0 51 -14.5 89.5t-52.5 72.5q-53 41 -95 95q-113 5 -215.5 44.5t-173 97.5t-112 130t-41.5 143v128q0 40 28 68t68 28h288v96 q0 66 47 113t113 47h576q66 0 113 -47t47 -113v-96h288q40 0 68 -28t28 -68z" />
+<glyph unicode="&#xf092;" d="M394 184q-8 -9 -20 3q-13 11 -4 19q8 9 20 -3q12 -11 4 -19zM352 245q9 -12 0 -19q-8 -6 -17 7t0 18q9 7 17 -6zM291 305q-5 -7 -13 -2q-10 5 -7 12q3 5 13 2q10 -5 7 -12zM322 271q-6 -7 -16 3q-9 11 -2 16q6 6 16 -3q9 -11 2 -16zM451 159q-4 -12 -19 -6q-17 4 -13 15 t19 7q16 -5 13 -16zM514 154q0 -11 -16 -11q-17 -2 -17 11q0 11 16 11q17 2 17 -11zM572 164q2 -10 -14 -14t-18 8t14 15q16 2 18 -9zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-224q-16 0 -24.5 1t-19.5 5t-16 14.5t-5 27.5v239q0 97 -52 142q57 6 102.5 18t94 39 t81 66.5t53 105t20.5 150.5q0 121 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-86 13.5q-44 -113 -7 -204q-79 -85 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-40 -36 -49 -103 q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -103t0.5 -68q0 -22 -11 -33.5t-22 -13t-33 -1.5 h-224q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf093;" horiz-adv-x="1664" d="M1280 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 288v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h427q21 -56 70.5 -92 t110.5 -36h256q61 0 110.5 36t70.5 92h427q40 0 68 -28t28 -68zM1339 936q-17 -40 -59 -40h-256v-448q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v448h-256q-42 0 -59 40q-17 39 14 69l448 448q18 19 45 19t45 -19l448 -448q31 -30 14 -69z" />
+<glyph unicode="&#xf094;" d="M1407 710q0 44 -7 113.5t-18 96.5q-12 30 -17 44t-9 36.5t-4 48.5q0 23 5 68.5t5 67.5q0 37 -10 55q-4 1 -13 1q-19 0 -58 -4.5t-59 -4.5q-60 0 -176 24t-175 24q-43 0 -94.5 -11.5t-85 -23.5t-89.5 -34q-137 -54 -202 -103q-96 -73 -159.5 -189.5t-88 -236t-24.5 -248.5 q0 -40 12.5 -120t12.5 -121q0 -23 -11 -66.5t-11 -65.5t12 -36.5t34 -14.5q24 0 72.5 11t73.5 11q57 0 169.5 -15.5t169.5 -15.5q181 0 284 36q129 45 235.5 152.5t166 245.5t59.5 275zM1535 712q0 -165 -70 -327.5t-196 -288t-281 -180.5q-124 -44 -326 -44 q-57 0 -170 14.5t-169 14.5q-24 0 -72.5 -14.5t-73.5 -14.5q-73 0 -123.5 55.5t-50.5 128.5q0 24 11 68t11 67q0 40 -12.5 120.5t-12.5 121.5q0 111 18 217.5t54.5 209.5t100.5 194t150 156q78 59 232 120q194 78 316 78q60 0 175.5 -24t173.5 -24q19 0 57 5t58 5 q81 0 118 -50.5t37 -134.5q0 -23 -5 -68t-5 -68q0 -10 1 -18.5t3 -17t4 -13.5t6.5 -16t6.5 -17q16 -40 25 -118.5t9 -136.5z" />
+<glyph unicode="&#xf095;" horiz-adv-x="1408" d="M1408 296q0 -27 -10 -70.5t-21 -68.5q-21 -50 -122 -106q-94 -51 -186 -51q-27 0 -52.5 3.5t-57.5 12.5t-47.5 14.5t-55.5 20.5t-49 18q-98 35 -175 83q-128 79 -264.5 215.5t-215.5 264.5q-48 77 -83 175q-3 9 -18 49t-20.5 55.5t-14.5 47.5t-12.5 57.5t-3.5 52.5 q0 92 51 186q56 101 106 122q25 11 68.5 21t70.5 10q14 0 21 -3q18 -6 53 -76q11 -19 30 -54t35 -63.5t31 -53.5q3 -4 17.5 -25t21.5 -35.5t7 -28.5q0 -20 -28.5 -50t-62 -55t-62 -53t-28.5 -46q0 -9 5 -22.5t8.5 -20.5t14 -24t11.5 -19q76 -137 174 -235t235 -174 q2 -1 19 -11.5t24 -14t20.5 -8.5t22.5 -5q18 0 46 28.5t53 62t55 62t50 28.5q14 0 28.5 -7t35.5 -21.5t25 -17.5q25 -15 53.5 -31t63.5 -35t54 -30q70 -35 76 -53q3 -7 3 -21z" />
+<glyph unicode="&#xf096;" horiz-adv-x="1408" d="M1120 1280h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v832q0 66 -47 113t-113 47zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832 q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf097;" horiz-adv-x="1280" d="M1152 1280h-1024v-1242l423 406l89 85l89 -85l423 -406v1242zM1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289 q0 34 19.5 62t52.5 41q21 9 44 9h1048z" />
+<glyph unicode="&#xf098;" d="M1280 343q0 11 -2 16q-3 8 -38.5 29.5t-88.5 49.5l-53 29q-5 3 -19 13t-25 15t-21 5q-18 0 -47 -32.5t-57 -65.5t-44 -33q-7 0 -16.5 3.5t-15.5 6.5t-17 9.5t-14 8.5q-99 55 -170.5 126.5t-126.5 170.5q-2 3 -8.5 14t-9.5 17t-6.5 15.5t-3.5 16.5q0 13 20.5 33.5t45 38.5 t45 39.5t20.5 36.5q0 10 -5 21t-15 25t-13 19q-3 6 -15 28.5t-25 45.5t-26.5 47.5t-25 40.5t-16.5 18t-16 2q-48 0 -101 -22q-46 -21 -80 -94.5t-34 -130.5q0 -16 2.5 -34t5 -30.5t9 -33t10 -29.5t12.5 -33t11 -30q60 -164 216.5 -320.5t320.5 -216.5q6 -2 30 -11t33 -12.5 t29.5 -10t33 -9t30.5 -5t34 -2.5q57 0 130.5 34t94.5 80q22 53 22 101zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf099;" horiz-adv-x="1664" d="M1620 1128q-67 -98 -162 -167q1 -14 1 -42q0 -130 -38 -259.5t-115.5 -248.5t-184.5 -210.5t-258 -146t-323 -54.5q-271 0 -496 145q35 -4 78 -4q225 0 401 138q-105 2 -188 64.5t-114 159.5q33 -5 61 -5q43 0 85 11q-112 23 -185.5 111.5t-73.5 205.5v4q68 -38 146 -41 q-66 44 -105 115t-39 154q0 88 44 163q121 -149 294.5 -238.5t371.5 -99.5q-8 38 -8 74q0 134 94.5 228.5t228.5 94.5q140 0 236 -102q109 21 205 78q-37 -115 -142 -178q93 10 186 50z" />
+<glyph unicode="&#xf09a;" horiz-adv-x="1024" d="M959 1524v-264h-157q-86 0 -116 -36t-30 -108v-189h293l-39 -296h-254v-759h-306v759h-255v296h255v218q0 186 104 288.5t277 102.5q147 0 228 -12z" />
+<glyph unicode="&#xf09b;" d="M1536 640q0 -251 -146.5 -451.5t-378.5 -277.5q-27 -5 -39.5 7t-12.5 30v211q0 97 -52 142q57 6 102.5 18t94 39t81 66.5t53 105t20.5 150.5q0 121 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-86 13.5 q-44 -113 -7 -204q-79 -85 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-40 -36 -49 -103q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23 q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -89t0.5 -54q0 -18 -13 -30t-40 -7q-232 77 -378.5 277.5t-146.5 451.5q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf09c;" horiz-adv-x="1664" d="M1664 960v-256q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45v256q0 106 -75 181t-181 75t-181 -75t-75 -181v-192h96q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h672v192q0 185 131.5 316.5t316.5 131.5 t316.5 -131.5t131.5 -316.5z" />
+<glyph unicode="&#xf09d;" horiz-adv-x="1920" d="M1760 1408q66 0 113 -47t47 -113v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600zM160 1280q-13 0 -22.5 -9.5t-9.5 -22.5v-224h1664v224q0 13 -9.5 22.5t-22.5 9.5h-1600zM1760 0q13 0 22.5 9.5t9.5 22.5v608h-1664v-608 q0 -13 9.5 -22.5t22.5 -9.5h1600zM256 128v128h256v-128h-256zM640 128v128h384v-128h-384z" />
+<glyph unicode="&#xf09e;" horiz-adv-x="1408" d="M384 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 69q2 -28 -17 -48q-18 -21 -47 -21h-135q-25 0 -43 16.5t-20 41.5q-22 229 -184.5 391.5t-391.5 184.5q-25 2 -41.5 20t-16.5 43v135q0 29 21 47q17 17 43 17h5q160 -13 306 -80.5 t259 -181.5q114 -113 181.5 -259t80.5 -306zM1408 67q2 -27 -18 -47q-18 -20 -46 -20h-143q-26 0 -44.5 17.5t-19.5 42.5q-12 215 -101 408.5t-231.5 336t-336 231.5t-408.5 102q-25 1 -42.5 19.5t-17.5 43.5v143q0 28 20 46q18 18 44 18h3q262 -13 501.5 -120t425.5 -294 q187 -186 294 -425.5t120 -501.5z" />
+<glyph unicode="&#xf0a0;" d="M1040 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1296 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1408 160v320q0 13 -9.5 22.5t-22.5 9.5 h-1216q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h1216q13 0 22.5 9.5t9.5 22.5zM178 640h1180l-157 482q-4 13 -16 21.5t-26 8.5h-782q-14 0 -26 -8.5t-16 -21.5zM1536 480v-320q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v320q0 25 16 75 l197 606q17 53 63 86t101 33h782q55 0 101 -33t63 -86l197 -606q16 -50 16 -75z" />
+<glyph unicode="&#xf0a1;" horiz-adv-x="1792" d="M1664 896q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5v-384q0 -52 -38 -90t-90 -38q-417 347 -812 380q-58 -19 -91 -66t-31 -100.5t40 -92.5q-20 -33 -23 -65.5t6 -58t33.5 -55t48 -50t61.5 -50.5q-29 -58 -111.5 -83t-168.5 -11.5t-132 55.5q-7 23 -29.5 87.5 t-32 94.5t-23 89t-15 101t3.5 98.5t22 110.5h-122q-66 0 -113 47t-47 113v192q0 66 47 113t113 47h480q435 0 896 384q52 0 90 -38t38 -90v-384zM1536 292v954q-394 -302 -768 -343v-270q377 -42 768 -341z" />
+<glyph unicode="&#xf0a2;" horiz-adv-x="1792" d="M912 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM246 128h1300q-266 300 -266 832q0 51 -24 105t-69 103t-121.5 80.5t-169.5 31.5t-169.5 -31.5t-121.5 -80.5t-69 -103t-24 -105q0 -532 -266 -832z M1728 128q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q190 -28 307 -158.5 t117 -282.5q0 -139 19.5 -260t50 -206t74.5 -158.5t85 -119.5t91 -88z" />
+<glyph unicode="&#xf0a3;" d="M1376 640l138 -135q30 -28 20 -70q-12 -41 -52 -51l-188 -48l53 -186q12 -41 -19 -70q-29 -31 -70 -19l-186 53l-48 -188q-10 -40 -51 -52q-12 -2 -19 -2q-31 0 -51 22l-135 138l-135 -138q-28 -30 -70 -20q-41 11 -51 52l-48 188l-186 -53q-41 -12 -70 19q-31 29 -19 70 l53 186l-188 48q-40 10 -52 51q-10 42 20 70l138 135l-138 135q-30 28 -20 70q12 41 52 51l188 48l-53 186q-12 41 19 70q29 31 70 19l186 -53l48 188q10 41 51 51q41 12 70 -19l135 -139l135 139q29 30 70 19q41 -10 51 -51l48 -188l186 53q41 12 70 -19q31 -29 19 -70 l-53 -186l188 -48q40 -10 52 -51q10 -42 -20 -70z" />
+<glyph unicode="&#xf0a4;" horiz-adv-x="1792" d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 768q0 51 -39 89.5t-89 38.5h-576q0 20 15 48.5t33 55t33 68t15 84.5q0 67 -44.5 97.5t-115.5 30.5q-24 0 -90 -139q-24 -44 -37 -65q-40 -64 -112 -145q-71 -81 -101 -106 q-69 -57 -140 -57h-32v-640h32q72 0 167 -32t193.5 -64t179.5 -32q189 0 189 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5h331q52 0 90 38t38 90zM1792 769q0 -105 -75.5 -181t-180.5 -76h-169q-4 -62 -37 -119q3 -21 3 -43 q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5q-133 0 -322 69q-164 59 -223 59h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h288q10 0 21.5 4.5t23.5 14t22.5 18t24 22.5t20.5 21.5t19 21.5t14 17q65 74 100 129q13 21 33 62t37 72t40.5 63t55 49.5 t69.5 17.5q125 0 206.5 -67t81.5 -189q0 -68 -22 -128h374q104 0 180 -76t76 -179z" />
+<glyph unicode="&#xf0a5;" horiz-adv-x="1792" d="M1376 128h32v640h-32q-35 0 -67.5 12t-62.5 37t-50 46t-49 54q-2 3 -3.5 4.5t-4 4.5t-4.5 5q-72 81 -112 145q-14 22 -38 68q-1 3 -10.5 22.5t-18.5 36t-20 35.5t-21.5 30.5t-18.5 11.5q-71 0 -115.5 -30.5t-44.5 -97.5q0 -43 15 -84.5t33 -68t33 -55t15 -48.5h-576 q-50 0 -89 -38.5t-39 -89.5q0 -52 38 -90t90 -38h331q-15 -17 -25 -47.5t-10 -55.5q0 -69 53 -119q-18 -32 -18 -69t17.5 -73.5t47.5 -52.5q-4 -24 -4 -56q0 -85 48.5 -126t135.5 -41q84 0 183 32t194 64t167 32zM1664 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45 t45 -19t45 19t19 45zM1792 768v-640q0 -53 -37.5 -90.5t-90.5 -37.5h-288q-59 0 -223 -59q-190 -69 -317 -69q-142 0 -230 77.5t-87 217.5l1 5q-61 76 -61 178q0 22 3 43q-33 57 -37 119h-169q-105 0 -180.5 76t-75.5 181q0 103 76 179t180 76h374q-22 60 -22 128 q0 122 81.5 189t206.5 67q38 0 69.5 -17.5t55 -49.5t40.5 -63t37 -72t33 -62q35 -55 100 -129q2 -3 14 -17t19 -21.5t20.5 -21.5t24 -22.5t22.5 -18t23.5 -14t21.5 -4.5h288q53 0 90.5 -37.5t37.5 -90.5z" />
+<glyph unicode="&#xf0a6;" d="M1280 -64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 700q0 189 -167 189q-26 0 -56 -5q-16 30 -52.5 47.5t-73.5 17.5t-69 -18q-50 53 -119 53q-25 0 -55.5 -10t-47.5 -25v331q0 52 -38 90t-90 38q-51 0 -89.5 -39t-38.5 -89v-576 q-20 0 -48.5 15t-55 33t-68 33t-84.5 15q-67 0 -97.5 -44.5t-30.5 -115.5q0 -24 139 -90q44 -24 65 -37q64 -40 145 -112q81 -71 106 -101q57 -69 57 -140v-32h640v32q0 72 32 167t64 193.5t32 179.5zM1536 705q0 -133 -69 -322q-59 -164 -59 -223v-288q0 -53 -37.5 -90.5 t-90.5 -37.5h-640q-53 0 -90.5 37.5t-37.5 90.5v288q0 10 -4.5 21.5t-14 23.5t-18 22.5t-22.5 24t-21.5 20.5t-21.5 19t-17 14q-74 65 -129 100q-21 13 -62 33t-72 37t-63 40.5t-49.5 55t-17.5 69.5q0 125 67 206.5t189 81.5q68 0 128 -22v374q0 104 76 180t179 76 q105 0 181 -75.5t76 -180.5v-169q62 -4 119 -37q21 3 43 3q101 0 178 -60q139 1 219.5 -85t80.5 -227z" />
+<glyph unicode="&#xf0a7;" d="M1408 576q0 84 -32 183t-64 194t-32 167v32h-640v-32q0 -35 -12 -67.5t-37 -62.5t-46 -50t-54 -49q-9 -8 -14 -12q-81 -72 -145 -112q-22 -14 -68 -38q-3 -1 -22.5 -10.5t-36 -18.5t-35.5 -20t-30.5 -21.5t-11.5 -18.5q0 -71 30.5 -115.5t97.5 -44.5q43 0 84.5 15t68 33 t55 33t48.5 15v-576q0 -50 38.5 -89t89.5 -39q52 0 90 38t38 90v331q46 -35 103 -35q69 0 119 53q32 -18 69 -18t73.5 17.5t52.5 47.5q24 -4 56 -4q85 0 126 48.5t41 135.5zM1280 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 580 q0 -142 -77.5 -230t-217.5 -87l-5 1q-76 -61 -178 -61q-22 0 -43 3q-54 -30 -119 -37v-169q0 -105 -76 -180.5t-181 -75.5q-103 0 -179 76t-76 180v374q-54 -22 -128 -22q-121 0 -188.5 81.5t-67.5 206.5q0 38 17.5 69.5t49.5 55t63 40.5t72 37t62 33q55 35 129 100 q3 2 17 14t21.5 19t21.5 20.5t22.5 24t18 22.5t14 23.5t4.5 21.5v288q0 53 37.5 90.5t90.5 37.5h640q53 0 90.5 -37.5t37.5 -90.5v-288q0 -59 59 -223q69 -190 69 -317z" />
+<glyph unicode="&#xf0a8;" d="M1280 576v128q0 26 -19 45t-45 19h-502l189 189q19 19 19 45t-19 45l-91 91q-18 18 -45 18t-45 -18l-362 -362l-91 -91q-18 -18 -18 -45t18 -45l91 -91l362 -362q18 -18 45 -18t45 18l91 91q18 18 18 45t-18 45l-189 189h502q26 0 45 19t19 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf0a9;" d="M1285 640q0 27 -18 45l-91 91l-362 362q-18 18 -45 18t-45 -18l-91 -91q-18 -18 -18 -45t18 -45l189 -189h-502q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h502l-189 -189q-19 -19 -19 -45t19 -45l91 -91q18 -18 45 -18t45 18l362 362l91 91q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf0aa;" d="M1284 641q0 27 -18 45l-362 362l-91 91q-18 18 -45 18t-45 -18l-91 -91l-362 -362q-18 -18 -18 -45t18 -45l91 -91q18 -18 45 -18t45 18l189 189v-502q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v502l189 -189q19 -19 45 -19t45 19l91 91q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf0ab;" d="M1284 639q0 27 -18 45l-91 91q-18 18 -45 18t-45 -18l-189 -189v502q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-502l-189 189q-19 19 -45 19t-45 -19l-91 -91q-18 -18 -18 -45t18 -45l362 -362l91 -91q18 -18 45 -18t45 18l91 91l362 362q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf0ac;" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1042 887q-2 -1 -9.5 -9.5t-13.5 -9.5q2 0 4.5 5t5 11t3.5 7q6 7 22 15q14 6 52 12q34 8 51 -11 q-2 2 9.5 13t14.5 12q3 2 15 4.5t15 7.5l2 22q-12 -1 -17.5 7t-6.5 21q0 -2 -6 -8q0 7 -4.5 8t-11.5 -1t-9 -1q-10 3 -15 7.5t-8 16.5t-4 15q-2 5 -9.5 10.5t-9.5 10.5q-1 2 -2.5 5.5t-3 6.5t-4 5.5t-5.5 2.5t-7 -5t-7.5 -10t-4.5 -5q-3 2 -6 1.5t-4.5 -1t-4.5 -3t-5 -3.5 q-3 -2 -8.5 -3t-8.5 -2q15 5 -1 11q-10 4 -16 3q9 4 7.5 12t-8.5 14h5q-1 4 -8.5 8.5t-17.5 8.5t-13 6q-8 5 -34 9.5t-33 0.5q-5 -6 -4.5 -10.5t4 -14t3.5 -12.5q1 -6 -5.5 -13t-6.5 -12q0 -7 14 -15.5t10 -21.5q-3 -8 -16 -16t-16 -12q-5 -8 -1.5 -18.5t10.5 -16.5 q2 -2 1.5 -4t-3.5 -4.5t-5.5 -4t-6.5 -3.5l-3 -2q-11 -5 -20.5 6t-13.5 26q-7 25 -16 30q-23 8 -29 -1q-5 13 -41 26q-25 9 -58 4q6 1 0 15q-7 15 -19 12q3 6 4 17.5t1 13.5q3 13 12 23q1 1 7 8.5t9.5 13.5t0.5 6q35 -4 50 11q5 5 11.5 17t10.5 17q9 6 14 5.5t14.5 -5.5 t14.5 -5q14 -1 15.5 11t-7.5 20q12 -1 3 17q-5 7 -8 9q-12 4 -27 -5q-8 -4 2 -8q-1 1 -9.5 -10.5t-16.5 -17.5t-16 5q-1 1 -5.5 13.5t-9.5 13.5q-8 0 -16 -15q3 8 -11 15t-24 8q19 12 -8 27q-7 4 -20.5 5t-19.5 -4q-5 -7 -5.5 -11.5t5 -8t10.5 -5.5t11.5 -4t8.5 -3 q14 -10 8 -14q-2 -1 -8.5 -3.5t-11.5 -4.5t-6 -4q-3 -4 0 -14t-2 -14q-5 5 -9 17.5t-7 16.5q7 -9 -25 -6l-10 1q-4 0 -16 -2t-20.5 -1t-13.5 8q-4 8 0 20q1 4 4 2q-4 3 -11 9.5t-10 8.5q-46 -15 -94 -41q6 -1 12 1q5 2 13 6.5t10 5.5q34 14 42 7l5 5q14 -16 20 -25 q-7 4 -30 1q-20 -6 -22 -12q7 -12 5 -18q-4 3 -11.5 10t-14.5 11t-15 5q-16 0 -22 -1q-146 -80 -235 -222q7 -7 12 -8q4 -1 5 -9t2.5 -11t11.5 3q9 -8 3 -19q1 1 44 -27q19 -17 21 -21q3 -11 -10 -18q-1 2 -9 9t-9 4q-3 -5 0.5 -18.5t10.5 -12.5q-7 0 -9.5 -16t-2.5 -35.5 t-1 -23.5l2 -1q-3 -12 5.5 -34.5t21.5 -19.5q-13 -3 20 -43q6 -8 8 -9q3 -2 12 -7.5t15 -10t10 -10.5q4 -5 10 -22.5t14 -23.5q-2 -6 9.5 -20t10.5 -23q-1 0 -2.5 -1t-2.5 -1q3 -7 15.5 -14t15.5 -13q1 -3 2 -10t3 -11t8 -2q2 20 -24 62q-15 25 -17 29q-3 5 -5.5 15.5 t-4.5 14.5q2 0 6 -1.5t8.5 -3.5t7.5 -4t2 -3q-3 -7 2 -17.5t12 -18.5t17 -19t12 -13q6 -6 14 -19.5t0 -13.5q9 0 20 -10t17 -20q5 -8 8 -26t5 -24q2 -7 8.5 -13.5t12.5 -9.5l16 -8t13 -7q5 -2 18.5 -10.5t21.5 -11.5q10 -4 16 -4t14.5 2.5t13.5 3.5q15 2 29 -15t21 -21 q36 -19 55 -11q-2 -1 0.5 -7.5t8 -15.5t9 -14.5t5.5 -8.5q5 -6 18 -15t18 -15q6 4 7 9q-3 -8 7 -20t18 -10q14 3 14 32q-31 -15 -49 18q0 1 -2.5 5.5t-4 8.5t-2.5 8.5t0 7.5t5 3q9 0 10 3.5t-2 12.5t-4 13q-1 8 -11 20t-12 15q-5 -9 -16 -8t-16 9q0 -1 -1.5 -5.5t-1.5 -6.5 q-13 0 -15 1q1 3 2.5 17.5t3.5 22.5q1 4 5.5 12t7.5 14.5t4 12.5t-4.5 9.5t-17.5 2.5q-19 -1 -26 -20q-1 -3 -3 -10.5t-5 -11.5t-9 -7q-7 -3 -24 -2t-24 5q-13 8 -22.5 29t-9.5 37q0 10 2.5 26.5t3 25t-5.5 24.5q3 2 9 9.5t10 10.5q2 1 4.5 1.5t4.5 0t4 1.5t3 6q-1 1 -4 3 q-3 3 -4 3q7 -3 28.5 1.5t27.5 -1.5q15 -11 22 2q0 1 -2.5 9.5t-0.5 13.5q5 -27 29 -9q3 -3 15.5 -5t17.5 -5q3 -2 7 -5.5t5.5 -4.5t5 0.5t8.5 6.5q10 -14 12 -24q11 -40 19 -44q7 -3 11 -2t4.5 9.5t0 14t-1.5 12.5l-1 8v18l-1 8q-15 3 -18.5 12t1.5 18.5t15 18.5q1 1 8 3.5 t15.5 6.5t12.5 8q21 19 15 35q7 0 11 9q-1 0 -5 3t-7.5 5t-4.5 2q9 5 2 16q5 3 7.5 11t7.5 10q9 -12 21 -2q7 8 1 16q5 7 20.5 10.5t18.5 9.5q7 -2 8 2t1 12t3 12q4 5 15 9t13 5l17 11q3 4 0 4q18 -2 31 11q10 11 -6 20q3 6 -3 9.5t-15 5.5q3 1 11.5 0.5t10.5 1.5 q15 10 -7 16q-17 5 -43 -12zM879 10q206 36 351 189q-3 3 -12.5 4.5t-12.5 3.5q-18 7 -24 8q1 7 -2.5 13t-8 9t-12.5 8t-11 7q-2 2 -7 6t-7 5.5t-7.5 4.5t-8.5 2t-10 -1l-3 -1q-3 -1 -5.5 -2.5t-5.5 -3t-4 -3t0 -2.5q-21 17 -36 22q-5 1 -11 5.5t-10.5 7t-10 1.5t-11.5 -7 q-5 -5 -6 -15t-2 -13q-7 5 0 17.5t2 18.5q-3 6 -10.5 4.5t-12 -4.5t-11.5 -8.5t-9 -6.5t-8.5 -5.5t-8.5 -7.5q-3 -4 -6 -12t-5 -11q-2 4 -11.5 6.5t-9.5 5.5q2 -10 4 -35t5 -38q7 -31 -12 -48q-27 -25 -29 -40q-4 -22 12 -26q0 -7 -8 -20.5t-7 -21.5q0 -6 2 -16z" />
+<glyph unicode="&#xf0ad;" horiz-adv-x="1664" d="M384 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1028 484l-682 -682q-37 -37 -90 -37q-52 0 -91 37l-106 108q-38 36 -38 90q0 53 38 91l681 681q39 -98 114.5 -173.5t173.5 -114.5zM1662 919q0 -39 -23 -106q-47 -134 -164.5 -217.5 t-258.5 -83.5q-185 0 -316.5 131.5t-131.5 316.5t131.5 316.5t316.5 131.5q58 0 121.5 -16.5t107.5 -46.5q16 -11 16 -28t-16 -28l-293 -169v-224l193 -107q5 3 79 48.5t135.5 81t70.5 35.5q15 0 23.5 -10t8.5 -25z" />
+<glyph unicode="&#xf0ae;" horiz-adv-x="1792" d="M1024 128h640v128h-640v-128zM640 640h1024v128h-1024v-128zM1280 1152h384v128h-384v-128zM1792 320v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 832v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19 t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0b0;" horiz-adv-x="1408" d="M1403 1241q17 -41 -14 -70l-493 -493v-742q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-256 256q-19 19 -19 45v486l-493 493q-31 29 -14 70q17 39 59 39h1280q42 0 59 -39z" />
+<glyph unicode="&#xf0b1;" horiz-adv-x="1792" d="M640 1280h512v128h-512v-128zM1792 640v-480q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v480h672v-160q0 -26 19 -45t45 -19h320q26 0 45 19t19 45v160h672zM1024 640v-128h-256v128h256zM1792 1120v-384h-1792v384q0 66 47 113t113 47h352v160q0 40 28 68 t68 28h576q40 0 68 -28t28 -68v-160h352q66 0 113 -47t47 -113z" />
+<glyph unicode="&#xf0b2;" d="M1283 995l-355 -355l355 -355l144 144q29 31 70 14q39 -17 39 -59v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l144 144l-355 355l-355 -355l144 -144q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l144 -144 l355 355l-355 355l-144 -144q-19 -19 -45 -19q-12 0 -24 5q-40 17 -40 59v448q0 26 19 45t45 19h448q42 0 59 -40q17 -39 -14 -69l-144 -144l355 -355l355 355l-144 144q-31 30 -14 69q17 40 59 40h448q26 0 45 -19t19 -45v-448q0 -42 -39 -59q-13 -5 -25 -5q-26 0 -45 19z " />
+<glyph unicode="&#xf0c0;" horiz-adv-x="1920" d="M593 640q-162 -5 -265 -128h-134q-82 0 -138 40.5t-56 118.5q0 353 124 353q6 0 43.5 -21t97.5 -42.5t119 -21.5q67 0 133 23q-5 -37 -5 -66q0 -139 81 -256zM1664 3q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5 t43 97.5t62 81t85.5 53.5t111.5 20q10 0 43 -21.5t73 -48t107 -48t135 -21.5t135 21.5t107 48t73 48t43 21.5q61 0 111.5 -20t85.5 -53.5t62 -81t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM640 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75 t75 -181zM1344 896q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5zM1920 671q0 -78 -56 -118.5t-138 -40.5h-134q-103 123 -265 128q81 117 81 256q0 29 -5 66q66 -23 133 -23q59 0 119 21.5t97.5 42.5 t43.5 21q124 0 124 -353zM1792 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181z" />
+<glyph unicode="&#xf0c1;" horiz-adv-x="1664" d="M1456 320q0 40 -28 68l-208 208q-28 28 -68 28q-42 0 -72 -32q3 -3 19 -18.5t21.5 -21.5t15 -19t13 -25.5t3.5 -27.5q0 -40 -28 -68t-68 -28q-15 0 -27.5 3.5t-25.5 13t-19 15t-21.5 21.5t-18.5 19q-33 -31 -33 -73q0 -40 28 -68l206 -207q27 -27 68 -27q40 0 68 26 l147 146q28 28 28 67zM753 1025q0 40 -28 68l-206 207q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l208 -208q27 -27 68 -27q42 0 72 31q-3 3 -19 18.5t-21.5 21.5t-15 19t-13 25.5t-3.5 27.5q0 40 28 68t68 28q15 0 27.5 -3.5t25.5 -13t19 -15 t21.5 -21.5t18.5 -19q33 31 33 73zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-206 207q-83 83 -83 203q0 123 88 209l-88 88q-86 -88 -208 -88q-120 0 -204 84l-208 208q-84 84 -84 204t85 203l147 146q83 83 203 83q121 0 204 -85l206 -207 q83 -83 83 -203q0 -123 -88 -209l88 -88q86 88 208 88q120 0 204 -84l208 -208q84 -84 84 -204z" />
+<glyph unicode="&#xf0c2;" horiz-adv-x="1920" d="M1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088q-185 0 -316.5 131.5t-131.5 316.5q0 132 71 241.5t187 163.5q-2 28 -2 43q0 212 150 362t362 150q158 0 286.5 -88t187.5 -230q70 62 166 62q106 0 181 -75t75 -181q0 -75 -41 -138q129 -30 213 -134.5t84 -239.5z " />
+<glyph unicode="&#xf0c3;" horiz-adv-x="1664" d="M1527 88q56 -89 21.5 -152.5t-140.5 -63.5h-1152q-106 0 -140.5 63.5t21.5 152.5l503 793v399h-64q-26 0 -45 19t-19 45t19 45t45 19h512q26 0 45 -19t19 -45t-19 -45t-45 -19h-64v-399zM748 813l-272 -429h712l-272 429l-20 31v37v399h-128v-399v-37z" />
+<glyph unicode="&#xf0c4;" horiz-adv-x="1792" d="M960 640q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1260 576l507 -398q28 -20 25 -56q-5 -35 -35 -51l-128 -64q-13 -7 -29 -7q-17 0 -31 8l-690 387l-110 -66q-8 -4 -12 -5q14 -49 10 -97q-7 -77 -56 -147.5t-132 -123.5q-132 -84 -277 -84 q-136 0 -222 78q-90 84 -79 207q7 76 56 147t131 124q132 84 278 84q83 0 151 -31q9 13 22 22l122 73l-122 73q-13 9 -22 22q-68 -31 -151 -31q-146 0 -278 84q-82 53 -131 124t-56 147q-5 59 15.5 113t63.5 93q85 79 222 79q145 0 277 -84q83 -52 132 -123t56 -148 q4 -48 -10 -97q4 -1 12 -5l110 -66l690 387q14 8 31 8q16 0 29 -7l128 -64q30 -16 35 -51q3 -36 -25 -56zM579 836q46 42 21 108t-106 117q-92 59 -192 59q-74 0 -113 -36q-46 -42 -21 -108t106 -117q92 -59 192 -59q74 0 113 36zM494 91q81 51 106 117t-21 108 q-39 36 -113 36q-100 0 -192 -59q-81 -51 -106 -117t21 -108q39 -36 113 -36q100 0 192 59zM672 704l96 -58v11q0 36 33 56l14 8l-79 47l-26 -26q-3 -3 -10 -11t-12 -12q-2 -2 -4 -3.5t-3 -2.5zM896 480l96 -32l736 576l-128 64l-768 -431v-113l-160 -96l9 -8q2 -2 7 -6 q4 -4 11 -12t11 -12l26 -26zM1600 64l128 64l-520 408l-177 -138q-2 -3 -13 -7z" />
+<glyph unicode="&#xf0c5;" horiz-adv-x="1792" d="M1696 1152q40 0 68 -28t28 -68v-1216q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v288h-544q-40 0 -68 28t-28 68v672q0 40 20 88t48 76l408 408q28 28 76 48t88 20h416q40 0 68 -28t28 -68v-328q68 40 128 40h416zM1152 939l-299 -299h299v299zM512 1323l-299 -299 h299v299zM708 676l316 316v416h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h512v256q0 40 20 88t48 76zM1664 -128v1152h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h896z" />
+<glyph unicode="&#xf0c6;" horiz-adv-x="1408" d="M1404 151q0 -117 -79 -196t-196 -79q-135 0 -235 100l-777 776q-113 115 -113 271q0 159 110 270t269 111q158 0 273 -113l605 -606q10 -10 10 -22q0 -16 -30.5 -46.5t-46.5 -30.5q-13 0 -23 10l-606 607q-79 77 -181 77q-106 0 -179 -75t-73 -181q0 -105 76 -181 l776 -777q63 -63 145 -63q64 0 106 42t42 106q0 82 -63 145l-581 581q-26 24 -60 24q-29 0 -48 -19t-19 -48q0 -32 25 -59l410 -410q10 -10 10 -22q0 -16 -31 -47t-47 -31q-12 0 -22 10l-410 410q-63 61 -63 149q0 82 57 139t139 57q88 0 149 -63l581 -581q100 -98 100 -235 z" />
+<glyph unicode="&#xf0c7;" d="M384 0h768v384h-768v-384zM1280 0h128v896q0 14 -10 38.5t-20 34.5l-281 281q-10 10 -34 20t-39 10v-416q0 -40 -28 -68t-68 -28h-576q-40 0 -68 28t-28 68v416h-128v-1280h128v416q0 40 28 68t68 28h832q40 0 68 -28t28 -68v-416zM896 928v320q0 13 -9.5 22.5t-22.5 9.5 h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5zM1536 896v-928q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h928q40 0 88 -20t76 -48l280 -280q28 -28 48 -76t20 -88z" />
+<glyph unicode="&#xf0c8;" d="M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf0c9;" d="M1536 192v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 704v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 1216v-128q0 -26 -19 -45 t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0ca;" horiz-adv-x="1792" d="M384 128q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 640q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5 t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1152q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z M1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" />
+<glyph unicode="&#xf0cb;" horiz-adv-x="1792" d="M381 -84q0 -80 -54.5 -126t-135.5 -46q-106 0 -172 66l57 88q49 -45 106 -45q29 0 50.5 14.5t21.5 42.5q0 64 -105 56l-26 56q8 10 32.5 43.5t42.5 54t37 38.5v1q-16 0 -48.5 -1t-48.5 -1v-53h-106v152h333v-88l-95 -115q51 -12 81 -49t30 -88zM383 543v-159h-362 q-6 36 -6 54q0 51 23.5 93t56.5 68t66 47.5t56.5 43.5t23.5 45q0 25 -14.5 38.5t-39.5 13.5q-46 0 -81 -58l-85 59q24 51 71.5 79.5t105.5 28.5q73 0 123 -41.5t50 -112.5q0 -50 -34 -91.5t-75 -64.5t-75.5 -50.5t-35.5 -52.5h127v60h105zM1792 224v-192q0 -13 -9.5 -22.5 t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1123v-99h-335v99h107q0 41 0.5 122t0.5 121v12h-2q-8 -17 -50 -54l-71 76l136 127h106v-404h108zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5 t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" />
+<glyph unicode="&#xf0cc;" horiz-adv-x="1792" d="M1760 640q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1728q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h1728zM483 704q-28 35 -51 80q-48 97 -48 188q0 181 134 309q133 127 393 127q50 0 167 -19q66 -12 177 -48q10 -38 21 -118q14 -123 14 -183q0 -18 -5 -45l-12 -3l-84 6 l-14 2q-50 149 -103 205q-88 91 -210 91q-114 0 -182 -59q-67 -58 -67 -146q0 -73 66 -140t279 -129q69 -20 173 -66q58 -28 95 -52h-743zM990 448h411q7 -39 7 -92q0 -111 -41 -212q-23 -55 -71 -104q-37 -35 -109 -81q-80 -48 -153 -66q-80 -21 -203 -21q-114 0 -195 23 l-140 40q-57 16 -72 28q-8 8 -8 22v13q0 108 -2 156q-1 30 0 68l2 37v44l102 2q15 -34 30 -71t22.5 -56t12.5 -27q35 -57 80 -94q43 -36 105 -57q59 -22 132 -22q64 0 139 27q77 26 122 86q47 61 47 129q0 84 -81 157q-34 29 -137 71z" />
+<glyph unicode="&#xf0cd;" d="M48 1313q-37 2 -45 4l-3 88q13 1 40 1q60 0 112 -4q132 -7 166 -7q86 0 168 3q116 4 146 5q56 0 86 2l-1 -14l2 -64v-9q-60 -9 -124 -9q-60 0 -79 -25q-13 -14 -13 -132q0 -13 0.5 -32.5t0.5 -25.5l1 -229l14 -280q6 -124 51 -202q35 -59 96 -92q88 -47 177 -47 q104 0 191 28q56 18 99 51q48 36 65 64q36 56 53 114q21 73 21 229q0 79 -3.5 128t-11 122.5t-13.5 159.5l-4 59q-5 67 -24 88q-34 35 -77 34l-100 -2l-14 3l2 86h84l205 -10q76 -3 196 10l18 -2q6 -38 6 -51q0 -7 -4 -31q-45 -12 -84 -13q-73 -11 -79 -17q-15 -15 -15 -41 q0 -7 1.5 -27t1.5 -31q8 -19 22 -396q6 -195 -15 -304q-15 -76 -41 -122q-38 -65 -112 -123q-75 -57 -182 -89q-109 -33 -255 -33q-167 0 -284 46q-119 47 -179 122q-61 76 -83 195q-16 80 -16 237v333q0 188 -17 213q-25 36 -147 39zM1536 -96v64q0 14 -9 23t-23 9h-1472 q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h1472q14 0 23 9t9 23z" />
+<glyph unicode="&#xf0ce;" horiz-adv-x="1664" d="M512 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23 v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 160v192 q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192 q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1664 1248v-1088q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1344q66 0 113 -47t47 -113 z" />
+<glyph unicode="&#xf0d0;" horiz-adv-x="1664" d="M1190 955l293 293l-107 107l-293 -293zM1637 1248q0 -27 -18 -45l-1286 -1286q-18 -18 -45 -18t-45 18l-198 198q-18 18 -18 45t18 45l1286 1286q18 18 45 18t45 -18l198 -198q18 -18 18 -45zM286 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM636 1276 l196 -60l-196 -60l-60 -196l-60 196l-196 60l196 60l60 196zM1566 798l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM926 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98z" />
+<glyph unicode="&#xf0d1;" horiz-adv-x="1792" d="M640 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM256 640h384v256h-158q-13 0 -22 -9l-195 -195q-9 -9 -9 -22v-30zM1536 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM1792 1216v-1024q0 -15 -4 -26.5t-13.5 -18.5 t-16.5 -11.5t-23.5 -6t-22.5 -2t-25.5 0t-22.5 0.5q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-64q-3 0 -22.5 -0.5t-25.5 0t-22.5 2t-23.5 6t-16.5 11.5t-13.5 18.5t-4 26.5q0 26 19 45t45 19v320q0 8 -0.5 35t0 38 t2.5 34.5t6.5 37t14 30.5t22.5 30l198 198q19 19 50.5 32t58.5 13h160v192q0 26 19 45t45 19h1024q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0d2;" d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103q-111 0 -218 32q59 93 78 164q9 34 54 211q20 -39 73 -67.5t114 -28.5q121 0 216 68.5t147 188.5t52 270q0 114 -59.5 214t-172.5 163t-255 63q-105 0 -196 -29t-154.5 -77t-109 -110.5t-67 -129.5t-21.5 -134 q0 -104 40 -183t117 -111q30 -12 38 20q2 7 8 31t8 30q6 23 -11 43q-51 61 -51 151q0 151 104.5 259.5t273.5 108.5q151 0 235.5 -82t84.5 -213q0 -170 -68.5 -289t-175.5 -119q-61 0 -98 43.5t-23 104.5q8 35 26.5 93.5t30 103t11.5 75.5q0 50 -27 83t-77 33 q-62 0 -105 -57t-43 -142q0 -73 25 -122l-99 -418q-17 -70 -13 -177q-206 91 -333 281t-127 423q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf0d3;" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-725q85 122 108 210q9 34 53 209q21 -39 73.5 -67t112.5 -28q181 0 295.5 147.5t114.5 373.5q0 84 -35 162.5t-96.5 139t-152.5 97t-197 36.5q-104 0 -194.5 -28.5t-153 -76.5 t-107.5 -109.5t-66.5 -128t-21.5 -132.5q0 -102 39.5 -180t116.5 -110q13 -5 23.5 0t14.5 19q10 44 15 61q6 23 -11 42q-50 62 -50 150q0 150 103.5 256.5t270.5 106.5q149 0 232.5 -81t83.5 -210q0 -168 -67.5 -286t-173.5 -118q-60 0 -97 43.5t-23 103.5q8 34 26.5 92.5 t29.5 102t11 74.5q0 49 -26.5 81.5t-75.5 32.5q-61 0 -103.5 -56.5t-42.5 -139.5q0 -72 24 -121l-98 -414q-24 -100 -7 -254h-183q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960z" />
+<glyph unicode="&#xf0d4;" d="M829 318q0 -76 -58.5 -112.5t-139.5 -36.5q-41 0 -80.5 9.5t-75.5 28.5t-58 53t-22 78q0 46 25 80t65.5 51.5t82 25t84.5 7.5q20 0 31 -2q2 -1 23 -16.5t26 -19t23 -18t24.5 -22t19 -22.5t17 -26t9 -26.5t4.5 -31.5zM755 863q0 -60 -33 -99.5t-92 -39.5q-53 0 -93 42.5 t-57.5 96.5t-17.5 106q0 61 32 104t92 43q53 0 93.5 -45t58 -101t17.5 -107zM861 1120l88 64h-265q-85 0 -161 -32t-127.5 -98t-51.5 -153q0 -93 64.5 -154.5t158.5 -61.5q22 0 43 3q-13 -29 -13 -54q0 -44 40 -94q-175 -12 -257 -63q-47 -29 -75.5 -73t-28.5 -95 q0 -43 18.5 -77.5t48.5 -56.5t69 -37t77.5 -21t76.5 -6q60 0 120.5 15.5t113.5 46t86 82.5t33 117q0 49 -20 89.5t-49 66.5t-58 47.5t-49 44t-20 44.5t15.5 42.5t37.5 39.5t44 42t37.5 59.5t15.5 82.5q0 60 -22.5 99.5t-72.5 90.5h83zM1152 672h128v64h-128v128h-64v-128 h-128v-64h128v-160h64v160zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf0d5;" horiz-adv-x="1664" d="M735 740q0 -36 32 -70.5t77.5 -68t90.5 -73.5t77 -104t32 -142q0 -90 -48 -173q-72 -122 -211 -179.5t-298 -57.5q-132 0 -246.5 41.5t-171.5 137.5q-37 60 -37 131q0 81 44.5 150t118.5 115q131 82 404 100q-32 42 -47.5 74t-15.5 73q0 36 21 85q-46 -4 -68 -4 q-148 0 -249.5 96.5t-101.5 244.5q0 82 36 159t99 131q77 66 182.5 98t217.5 32h418l-138 -88h-131q74 -63 112 -133t38 -160q0 -72 -24.5 -129.5t-59 -93t-69.5 -65t-59.5 -61.5t-24.5 -66zM589 836q38 0 78 16.5t66 43.5q53 57 53 159q0 58 -17 125t-48.5 129.5 t-84.5 103.5t-117 41q-42 0 -82.5 -19.5t-65.5 -52.5q-47 -59 -47 -160q0 -46 10 -97.5t31.5 -103t52 -92.5t75 -67t96.5 -26zM591 -37q58 0 111.5 13t99 39t73 73t27.5 109q0 25 -7 49t-14.5 42t-27 41.5t-29.5 35t-38.5 34.5t-36.5 29t-41.5 30t-36.5 26q-16 2 -48 2 q-53 0 -105 -7t-107.5 -25t-97 -46t-68.5 -74.5t-27 -105.5q0 -70 35 -123.5t91.5 -83t119 -44t127.5 -14.5zM1401 839h213v-108h-213v-219h-105v219h-212v108h212v217h105v-217z" />
+<glyph unicode="&#xf0d6;" horiz-adv-x="1920" d="M768 384h384v96h-128v448h-114l-148 -137l77 -80q42 37 55 57h2v-288h-128v-96zM1280 640q0 -70 -21 -142t-59.5 -134t-101.5 -101t-138 -39t-138 39t-101.5 101t-59.5 134t-21 142t21 142t59.5 134t101.5 101t138 39t138 -39t101.5 -101t59.5 -134t21 -142zM1792 384 v512q-106 0 -181 75t-75 181h-1152q0 -106 -75 -181t-181 -75v-512q106 0 181 -75t75 -181h1152q0 106 75 181t181 75zM1920 1216v-1152q0 -26 -19 -45t-45 -19h-1792q-26 0 -45 19t-19 45v1152q0 26 19 45t45 19h1792q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0d7;" horiz-adv-x="1024" d="M1024 832q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0d8;" horiz-adv-x="1024" d="M1024 320q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
+<glyph unicode="&#xf0d9;" horiz-adv-x="640" d="M640 1088v-896q0 -26 -19 -45t-45 -19t-45 19l-448 448q-19 19 -19 45t19 45l448 448q19 19 45 19t45 -19t19 -45z" />
+<glyph unicode="&#xf0da;" horiz-adv-x="640" d="M576 640q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19t-19 45v896q0 26 19 45t45 19t45 -19l448 -448q19 -19 19 -45z" />
+<glyph unicode="&#xf0db;" horiz-adv-x="1664" d="M160 0h608v1152h-640v-1120q0 -13 9.5 -22.5t22.5 -9.5zM1536 32v1120h-640v-1152h608q13 0 22.5 9.5t9.5 22.5zM1664 1248v-1216q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1344q66 0 113 -47t47 -113z" />
+<glyph unicode="&#xf0dc;" horiz-adv-x="1024" d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45zM1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
+<glyph unicode="&#xf0dd;" horiz-adv-x="1024" d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0de;" horiz-adv-x="1024" d="M1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
+<glyph unicode="&#xf0e0;" horiz-adv-x="1792" d="M1792 826v-794q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v794q44 -49 101 -87q362 -246 497 -345q57 -42 92.5 -65.5t94.5 -48t110 -24.5h1h1q51 0 110 24.5t94.5 48t92.5 65.5q170 123 498 345q57 39 100 87zM1792 1120q0 -79 -49 -151t-122 -123 q-376 -261 -468 -325q-10 -7 -42.5 -30.5t-54 -38t-52 -32.5t-57.5 -27t-50 -9h-1h-1q-23 0 -50 9t-57.5 27t-52 32.5t-54 38t-42.5 30.5q-91 64 -262 182.5t-205 142.5q-62 42 -117 115.5t-55 136.5q0 78 41.5 130t118.5 52h1472q65 0 112.5 -47t47.5 -113z" />
+<glyph unicode="&#xf0e1;" d="M349 911v-991h-330v991h330zM370 1217q1 -73 -50.5 -122t-135.5 -49h-2q-82 0 -132 49t-50 122q0 74 51.5 122.5t134.5 48.5t133 -48.5t51 -122.5zM1536 488v-568h-329v530q0 105 -40.5 164.5t-126.5 59.5q-63 0 -105.5 -34.5t-63.5 -85.5q-11 -30 -11 -81v-553h-329 q2 399 2 647t-1 296l-1 48h329v-144h-2q20 32 41 56t56.5 52t87 43.5t114.5 15.5q171 0 275 -113.5t104 -332.5z" />
+<glyph unicode="&#xf0e2;" d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61q-172 0 -327 72.5t-264 204.5q-7 10 -6.5 22.5t8.5 20.5l137 138q10 9 25 9q16 -2 23 -12q73 -95 179 -147t225 -52q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5 t-163.5 109.5t-198.5 40.5q-98 0 -188 -35.5t-160 -101.5l137 -138q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l130 -129q107 101 244.5 156.5t284.5 55.5q156 0 298 -61t245 -164t164 -245t61 -298z" />
+<glyph unicode="&#xf0e3;" horiz-adv-x="1792" d="M1771 0q0 -53 -37 -90l-107 -108q-39 -37 -91 -37q-53 0 -90 37l-363 364q-38 36 -38 90q0 53 43 96l-256 256l-126 -126q-14 -14 -34 -14t-34 14q2 -2 12.5 -12t12.5 -13t10 -11.5t10 -13.5t6 -13.5t5.5 -16.5t1.5 -18q0 -38 -28 -68q-3 -3 -16.5 -18t-19 -20.5 t-18.5 -16.5t-22 -15.5t-22 -9t-26 -4.5q-40 0 -68 28l-408 408q-28 28 -28 68q0 13 4.5 26t9 22t15.5 22t16.5 18.5t20.5 19t18 16.5q30 28 68 28q10 0 18 -1.5t16.5 -5.5t13.5 -6t13.5 -10t11.5 -10t13 -12.5t12 -12.5q-14 14 -14 34t14 34l348 348q14 14 34 14t34 -14 q-2 2 -12.5 12t-12.5 13t-10 11.5t-10 13.5t-6 13.5t-5.5 16.5t-1.5 18q0 38 28 68q3 3 16.5 18t19 20.5t18.5 16.5t22 15.5t22 9t26 4.5q40 0 68 -28l408 -408q28 -28 28 -68q0 -13 -4.5 -26t-9 -22t-15.5 -22t-16.5 -18.5t-20.5 -19t-18 -16.5q-30 -28 -68 -28 q-10 0 -18 1.5t-16.5 5.5t-13.5 6t-13.5 10t-11.5 10t-13 12.5t-12 12.5q14 -14 14 -34t-14 -34l-126 -126l256 -256q43 43 96 43q52 0 91 -37l363 -363q37 -39 37 -91z" />
+<glyph unicode="&#xf0e4;" horiz-adv-x="1792" d="M384 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM576 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1004 351l101 382q6 26 -7.5 48.5t-38.5 29.5 t-48 -6.5t-30 -39.5l-101 -382q-60 -5 -107 -43.5t-63 -98.5q-20 -77 20 -146t117 -89t146 20t89 117q16 60 -6 117t-72 91zM1664 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 1024q0 53 -37.5 90.5 t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1472 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1792 384q0 -261 -141 -483q-19 -29 -54 -29h-1402q-35 0 -54 29 q-141 221 -141 483q0 182 71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+<glyph unicode="&#xf0e5;" horiz-adv-x="1792" d="M896 1152q-204 0 -381.5 -69.5t-282 -187.5t-104.5 -255q0 -112 71.5 -213.5t201.5 -175.5l87 -50l-27 -96q-24 -91 -70 -172q152 63 275 171l43 38l57 -6q69 -8 130 -8q204 0 381.5 69.5t282 187.5t104.5 255t-104.5 255t-282 187.5t-381.5 69.5zM1792 640 q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22h-5q-15 0 -27 10.5t-16 27.5v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281q0 174 120 321.5 t326 233t450 85.5t450 -85.5t326 -233t120 -321.5z" />
+<glyph unicode="&#xf0e6;" horiz-adv-x="1792" d="M704 1152q-153 0 -286 -52t-211.5 -141t-78.5 -191q0 -82 53 -158t149 -132l97 -56l-35 -84q34 20 62 39l44 31l53 -10q78 -14 153 -14q153 0 286 52t211.5 141t78.5 191t-78.5 191t-211.5 141t-286 52zM704 1280q191 0 353.5 -68.5t256.5 -186.5t94 -257t-94 -257 t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224q0 139 94 257t256.5 186.5 t353.5 68.5zM1526 111q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129 q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230q0 -120 -71 -224.5t-195 -176.5z" />
+<glyph unicode="&#xf0e7;" horiz-adv-x="896" d="M885 970q18 -20 7 -44l-540 -1157q-13 -25 -42 -25q-4 0 -14 2q-17 5 -25.5 19t-4.5 30l197 808l-406 -101q-4 -1 -12 -1q-18 0 -31 11q-18 15 -13 39l201 825q4 14 16 23t28 9h328q19 0 32 -12.5t13 -29.5q0 -8 -5 -18l-171 -463l396 98q8 2 12 2q19 0 34 -15z" />
+<glyph unicode="&#xf0e8;" horiz-adv-x="1792" d="M1792 288v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320 q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192q0 52 38 90t90 38h512v192h-96q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h320q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-96v-192h512q52 0 90 -38t38 -90v-192h96q40 0 68 -28t28 -68 z" />
+<glyph unicode="&#xf0e9;" horiz-adv-x="1664" d="M896 708v-580q0 -104 -76 -180t-180 -76t-180 76t-76 180q0 26 19 45t45 19t45 -19t19 -45q0 -50 39 -89t89 -39t89 39t39 89v580q33 11 64 11t64 -11zM1664 681q0 -13 -9.5 -22.5t-22.5 -9.5q-11 0 -23 10q-49 46 -93 69t-102 23q-68 0 -128 -37t-103 -97 q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -28 -17q-18 0 -29 17q-4 6 -14.5 24t-17.5 28q-43 60 -102.5 97t-127.5 37t-127.5 -37t-102.5 -97q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -29 -17q-17 0 -28 17q-4 6 -14.5 24t-17.5 28q-43 60 -103 97t-128 37q-58 0 -102 -23t-93 -69 q-12 -10 -23 -10q-13 0 -22.5 9.5t-9.5 22.5q0 5 1 7q45 183 172.5 319.5t298 204.5t360.5 68q140 0 274.5 -40t246.5 -113.5t194.5 -187t115.5 -251.5q1 -2 1 -7zM896 1408v-98q-42 2 -64 2t-64 -2v98q0 26 19 45t45 19t45 -19t19 -45z" />
+<glyph unicode="&#xf0ea;" horiz-adv-x="1792" d="M768 -128h896v640h-416q-40 0 -68 28t-28 68v416h-384v-1152zM1024 1312v64q0 13 -9.5 22.5t-22.5 9.5h-704q-13 0 -22.5 -9.5t-9.5 -22.5v-64q0 -13 9.5 -22.5t22.5 -9.5h704q13 0 22.5 9.5t9.5 22.5zM1280 640h299l-299 299v-299zM1792 512v-672q0 -40 -28 -68t-68 -28 h-960q-40 0 -68 28t-28 68v160h-544q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1088q40 0 68 -28t28 -68v-328q21 -13 36 -28l408 -408q28 -28 48 -76t20 -88z" />
+<glyph unicode="&#xf0eb;" horiz-adv-x="1024" d="M736 960q0 -13 -9.5 -22.5t-22.5 -9.5t-22.5 9.5t-9.5 22.5q0 46 -54 71t-106 25q-13 0 -22.5 9.5t-9.5 22.5t9.5 22.5t22.5 9.5q50 0 99.5 -16t87 -54t37.5 -90zM896 960q0 72 -34.5 134t-90 101.5t-123 62t-136.5 22.5t-136.5 -22.5t-123 -62t-90 -101.5t-34.5 -134 q0 -101 68 -180q10 -11 30.5 -33t30.5 -33q128 -153 141 -298h228q13 145 141 298q10 11 30.5 33t30.5 33q68 79 68 180zM1024 960q0 -155 -103 -268q-45 -49 -74.5 -87t-59.5 -95.5t-34 -107.5q47 -28 47 -82q0 -37 -25 -64q25 -27 25 -64q0 -52 -45 -81q13 -23 13 -47 q0 -46 -31.5 -71t-77.5 -25q-20 -44 -60 -70t-87 -26t-87 26t-60 70q-46 0 -77.5 25t-31.5 71q0 24 13 47q-45 29 -45 81q0 37 25 64q-25 27 -25 64q0 54 47 82q-4 50 -34 107.5t-59.5 95.5t-74.5 87q-103 113 -103 268q0 99 44.5 184.5t117 142t164 89t186.5 32.5 t186.5 -32.5t164 -89t117 -142t44.5 -184.5z" />
+<glyph unicode="&#xf0ec;" horiz-adv-x="1792" d="M1792 352v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5q-12 0 -24 10l-319 320q-9 9 -9 22q0 14 9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h1376q13 0 22.5 -9.5t9.5 -22.5zM1792 896q0 -14 -9 -23l-320 -320q-9 -9 -23 -9 q-13 0 -22.5 9.5t-9.5 22.5v192h-1376q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1376v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" />
+<glyph unicode="&#xf0ed;" horiz-adv-x="1920" d="M1280 608q0 14 -9 23t-23 9h-224v352q0 13 -9.5 22.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-352h-224q-13 0 -22.5 -9.5t-9.5 -22.5q0 -14 9 -23l352 -352q9 -9 23 -9t23 9l351 351q10 12 10 24zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088 q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" />
+<glyph unicode="&#xf0ee;" horiz-adv-x="1920" d="M1280 672q0 14 -9 23l-352 352q-9 9 -23 9t-23 -9l-351 -351q-10 -12 -10 -24q0 -14 9 -23t23 -9h224v-352q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5v352h224q13 0 22.5 9.5t9.5 22.5zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088 q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" />
+<glyph unicode="&#xf0f0;" horiz-adv-x="1408" d="M384 192q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM1408 131q0 -121 -73 -190t-194 -69h-874q-121 0 -194 69t-73 190q0 68 5.5 131t24 138t47.5 132.5t81 103t120 60.5q-22 -52 -22 -120v-203q-58 -20 -93 -70t-35 -111q0 -80 56 -136t136 -56 t136 56t56 136q0 61 -35.5 111t-92.5 70v203q0 62 25 93q132 -104 295 -104t295 104q25 -31 25 -93v-64q-106 0 -181 -75t-75 -181v-89q-32 -29 -32 -71q0 -40 28 -68t68 -28t68 28t28 68q0 42 -32 71v89q0 52 38 90t90 38t90 -38t38 -90v-89q-32 -29 -32 -71q0 -40 28 -68 t68 -28t68 28t28 68q0 42 -32 71v89q0 68 -34.5 127.5t-93.5 93.5q0 10 0.5 42.5t0 48t-2.5 41.5t-7 47t-13 40q68 -15 120 -60.5t81 -103t47.5 -132.5t24 -138t5.5 -131zM1088 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5 t271.5 -112.5t112.5 -271.5z" />
+<glyph unicode="&#xf0f1;" horiz-adv-x="1408" d="M1280 832q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 832q0 -62 -35.5 -111t-92.5 -70v-395q0 -159 -131.5 -271.5t-316.5 -112.5t-316.5 112.5t-131.5 271.5v132q-164 20 -274 128t-110 252v512q0 26 19 45t45 19q6 0 16 -2q17 30 47 48 t65 18q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5q-33 0 -64 18v-402q0 -106 94 -181t226 -75t226 75t94 181v402q-31 -18 -64 -18q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5q35 0 65 -18t47 -48q10 2 16 2q26 0 45 -19t19 -45v-512q0 -144 -110 -252 t-274 -128v-132q0 -106 94 -181t226 -75t226 75t94 181v395q-57 21 -92.5 70t-35.5 111q0 80 56 136t136 56t136 -56t56 -136z" />
+<glyph unicode="&#xf0f2;" horiz-adv-x="1792" d="M640 1152h512v128h-512v-128zM288 1152v-1280h-64q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h64zM1408 1152v-1280h-1024v1280h128v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h128zM1792 928v-832q0 -92 -66 -158t-158 -66h-64v1280h64q92 0 158 -66 t66 -158z" />
+<glyph unicode="&#xf0f3;" horiz-adv-x="1792" d="M912 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM1728 128q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q50 42 91 88t85 119.5t74.5 158.5 t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q190 -28 307 -158.5t117 -282.5q0 -139 19.5 -260t50 -206t74.5 -158.5t85 -119.5t91 -88z" />
+<glyph unicode="&#xf0f4;" horiz-adv-x="1920" d="M1664 896q0 80 -56 136t-136 56h-64v-384h64q80 0 136 56t56 136zM0 128h1792q0 -106 -75 -181t-181 -75h-1280q-106 0 -181 75t-75 181zM1856 896q0 -159 -112.5 -271.5t-271.5 -112.5h-64v-32q0 -92 -66 -158t-158 -66h-704q-92 0 -158 66t-66 158v736q0 26 19 45 t45 19h1152q159 0 271.5 -112.5t112.5 -271.5z" />
+<glyph unicode="&#xf0f5;" horiz-adv-x="1408" d="M640 1472v-640q0 -61 -35.5 -111t-92.5 -70v-779q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v779q-57 20 -92.5 70t-35.5 111v640q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45 t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45zM1408 1472v-1600q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v512h-224q-13 0 -22.5 9.5t-9.5 22.5v800q0 132 94 226t226 94h256q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0f6;" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M384 736q0 14 9 23t23 9h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64zM1120 512q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704zM1120 256q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704 q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704z" />
+<glyph unicode="&#xf0f7;" horiz-adv-x="1408" d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 -128h384v1536h-1152v-1536h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM1408 1472v-1664q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h1280q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0f8;" horiz-adv-x="1408" d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 -128h384v1152h-256v-32q0 -40 -28 -68t-68 -28h-448q-40 0 -68 28t-28 68v32h-256v-1152h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM896 1056v320q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-96h-128v96q0 13 -9.5 22.5 t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5v96h128v-96q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1408 1088v-1280q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1280q0 26 19 45t45 19h320 v288q0 40 28 68t68 28h448q40 0 68 -28t28 -68v-288h320q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0f9;" horiz-adv-x="1920" d="M640 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM256 640h384v256h-158q-14 -2 -22 -9l-195 -195q-7 -12 -9 -22v-30zM1536 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5 t90.5 37.5t37.5 90.5zM1664 800v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM1920 1344v-1152 q0 -26 -19 -45t-45 -19h-192q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-128q-26 0 -45 19t-19 45t19 45t45 19v416q0 26 13 58t32 51l198 198q19 19 51 32t58 13h160v320q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0fa;" horiz-adv-x="1792" d="M1280 416v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM640 1152h512v128h-512v-128zM256 1152v-1280h-32 q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h32zM1440 1152v-1280h-1088v1280h160v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h160zM1792 928v-832q0 -92 -66 -158t-158 -66h-32v1280h32q92 0 158 -66t66 -158z" />
+<glyph unicode="&#xf0fb;" horiz-adv-x="1920" d="M1920 576q-1 -32 -288 -96l-352 -32l-224 -64h-64l-293 -352h69q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-96h-160h-64v32h64v416h-160l-192 -224h-96l-32 32v192h32v32h128v8l-192 24v128l192 24v8h-128v32h-32v192l32 32h96l192 -224h160v416h-64v32h64h160h96 q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-69l293 -352h64l224 -64l352 -32q261 -58 287 -93z" />
+<glyph unicode="&#xf0fc;" horiz-adv-x="1664" d="M640 640v384h-256v-256q0 -53 37.5 -90.5t90.5 -37.5h128zM1664 192v-192h-1152v192l128 192h-128q-159 0 -271.5 112.5t-112.5 271.5v320l-64 64l32 128h480l32 128h960l32 -192l-64 -32v-800z" />
+<glyph unicode="&#xf0fd;" d="M1280 192v896q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-512v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-896q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h512v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf0fe;" d="M1280 576v128q0 26 -19 45t-45 19h-320v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-320q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h320v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h320q26 0 45 19t19 45zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf100;" horiz-adv-x="1024" d="M627 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23zM1011 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23 t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23z" />
+<glyph unicode="&#xf101;" horiz-adv-x="1024" d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM979 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23 l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+<glyph unicode="&#xf102;" horiz-adv-x="1152" d="M1075 224q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM1075 608q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393 q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+<glyph unicode="&#xf103;" horiz-adv-x="1152" d="M1075 672q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23zM1075 1056q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23 t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
+<glyph unicode="&#xf104;" horiz-adv-x="640" d="M627 992q0 -13 -10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
+<glyph unicode="&#xf105;" horiz-adv-x="640" d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+<glyph unicode="&#xf106;" horiz-adv-x="1152" d="M1075 352q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+<glyph unicode="&#xf107;" horiz-adv-x="1152" d="M1075 800q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
+<glyph unicode="&#xf108;" horiz-adv-x="1920" d="M1792 544v832q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5zM1920 1376v-1088q0 -66 -47 -113t-113 -47h-544q0 -37 16 -77.5t32 -71t16 -43.5q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19 t-19 45q0 14 16 44t32 70t16 78h-544q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
+<glyph unicode="&#xf109;" horiz-adv-x="1920" d="M416 256q-66 0 -113 47t-47 113v704q0 66 47 113t113 47h1088q66 0 113 -47t47 -113v-704q0 -66 -47 -113t-113 -47h-1088zM384 1120v-704q0 -13 9.5 -22.5t22.5 -9.5h1088q13 0 22.5 9.5t9.5 22.5v704q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5z M1760 192h160v-96q0 -40 -47 -68t-113 -28h-1600q-66 0 -113 28t-47 68v96h160h1600zM1040 96q16 0 16 16t-16 16h-160q-16 0 -16 -16t16 -16h160z" />
+<glyph unicode="&#xf10a;" horiz-adv-x="1152" d="M640 128q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1024 288v960q0 13 -9.5 22.5t-22.5 9.5h-832q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h832q13 0 22.5 9.5t9.5 22.5zM1152 1248v-1088q0 -66 -47 -113t-113 -47h-832 q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h832q66 0 113 -47t47 -113z" />
+<glyph unicode="&#xf10b;" horiz-adv-x="768" d="M464 128q0 33 -23.5 56.5t-56.5 23.5t-56.5 -23.5t-23.5 -56.5t23.5 -56.5t56.5 -23.5t56.5 23.5t23.5 56.5zM672 288v704q0 13 -9.5 22.5t-22.5 9.5h-512q-13 0 -22.5 -9.5t-9.5 -22.5v-704q0 -13 9.5 -22.5t22.5 -9.5h512q13 0 22.5 9.5t9.5 22.5zM480 1136 q0 16 -16 16h-160q-16 0 -16 -16t16 -16h160q16 0 16 16zM768 1152v-1024q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v1024q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" />
+<glyph unicode="&#xf10c;" d="M768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103 t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf10d;" horiz-adv-x="1664" d="M768 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z M1664 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z" />
+<glyph unicode="&#xf10e;" horiz-adv-x="1664" d="M768 1216v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136zM1664 1216 v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136z" />
+<glyph unicode="&#xf110;" horiz-adv-x="1568" d="M496 192q0 -60 -42.5 -102t-101.5 -42q-60 0 -102 42t-42 102t42 102t102 42q59 0 101.5 -42t42.5 -102zM928 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM320 640q0 -66 -47 -113t-113 -47t-113 47t-47 113 t47 113t113 47t113 -47t47 -113zM1360 192q0 -46 -33 -79t-79 -33t-79 33t-33 79t33 79t79 33t79 -33t33 -79zM528 1088q0 -73 -51.5 -124.5t-124.5 -51.5t-124.5 51.5t-51.5 124.5t51.5 124.5t124.5 51.5t124.5 -51.5t51.5 -124.5zM992 1280q0 -80 -56 -136t-136 -56 t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1536 640q0 -40 -28 -68t-68 -28t-68 28t-28 68t28 68t68 28t68 -28t28 -68zM1328 1088q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5z" />
+<glyph unicode="&#xf111;" d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf112;" horiz-adv-x="1792" d="M1792 416q0 -166 -127 -451q-3 -7 -10.5 -24t-13.5 -30t-13 -22q-12 -17 -28 -17q-15 0 -23.5 10t-8.5 25q0 9 2.5 26.5t2.5 23.5q5 68 5 123q0 101 -17.5 181t-48.5 138.5t-80 101t-105.5 69.5t-133 42.5t-154 21.5t-175.5 6h-224v-256q0 -26 -19 -45t-45 -19t-45 19 l-512 512q-19 19 -19 45t19 45l512 512q19 19 45 19t45 -19t19 -45v-256h224q713 0 875 -403q53 -134 53 -333z" />
+<glyph unicode="&#xf113;" horiz-adv-x="1664" d="M640 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1280 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1440 320 q0 120 -69 204t-187 84q-41 0 -195 -21q-71 -11 -157 -11t-157 11q-152 21 -195 21q-118 0 -187 -84t-69 -204q0 -88 32 -153.5t81 -103t122 -60t140 -29.5t149 -7h168q82 0 149 7t140 29.5t122 60t81 103t32 153.5zM1664 496q0 -207 -61 -331q-38 -77 -105.5 -133t-141 -86 t-170 -47.5t-171.5 -22t-167 -4.5q-78 0 -142 3t-147.5 12.5t-152.5 30t-137 51.5t-121 81t-86 115q-62 123 -62 331q0 237 136 396q-27 82 -27 170q0 116 51 218q108 0 190 -39.5t189 -123.5q147 35 309 35q148 0 280 -32q105 82 187 121t189 39q51 -102 51 -218 q0 -87 -27 -168q136 -160 136 -398z" />
+<glyph unicode="&#xf114;" horiz-adv-x="1664" d="M1536 224v704q0 40 -28 68t-68 28h-704q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68v-960q0 -40 28 -68t68 -28h1216q40 0 68 28t28 68zM1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320 q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" />
+<glyph unicode="&#xf115;" horiz-adv-x="1920" d="M1781 605q0 35 -53 35h-1088q-40 0 -85.5 -21.5t-71.5 -52.5l-294 -363q-18 -24 -18 -40q0 -35 53 -35h1088q40 0 86 22t71 53l294 363q18 22 18 39zM640 768h768v160q0 40 -28 68t-68 28h-576q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68 v-853l256 315q44 53 116 87.5t140 34.5zM1909 605q0 -62 -46 -120l-295 -363q-43 -53 -116 -87.5t-140 -34.5h-1088q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158v-160h192q54 0 99 -24.5t67 -70.5q15 -32 15 -68z " />
+<glyph unicode="&#xf116;" horiz-adv-x="1792" />
+<glyph unicode="&#xf117;" horiz-adv-x="1792" />
+<glyph unicode="&#xf118;" d="M1134 461q-37 -121 -138 -195t-228 -74t-228 74t-138 195q-8 25 4 48.5t38 31.5q25 8 48.5 -4t31.5 -38q25 -80 92.5 -129.5t151.5 -49.5t151.5 49.5t92.5 129.5q8 26 32 38t49 4t37 -31.5t4 -48.5zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5 t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5 t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf119;" d="M1134 307q8 -25 -4 -48.5t-37 -31.5t-49 4t-32 38q-25 80 -92.5 129.5t-151.5 49.5t-151.5 -49.5t-92.5 -129.5q-8 -26 -31.5 -38t-48.5 -4q-26 8 -38 31.5t-4 48.5q37 121 138 195t228 74t228 -74t138 -195zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5 t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204 t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf11a;" d="M1152 448q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h640q26 0 45 -19t19 -45zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5 t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf11b;" horiz-adv-x="1920" d="M832 448v128q0 14 -9 23t-23 9h-192v192q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-192h-192q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h192v-192q0 -14 9 -23t23 -9h128q14 0 23 9t9 23v192h192q14 0 23 9t9 23zM1408 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5 t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 640q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1920 512q0 -212 -150 -362t-362 -150q-192 0 -338 128h-220q-146 -128 -338 -128q-212 0 -362 150 t-150 362t150 362t362 150h896q212 0 362 -150t150 -362z" />
+<glyph unicode="&#xf11c;" horiz-adv-x="1920" d="M384 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM512 624v-96q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h224q16 0 16 -16zM384 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 368v-96q0 -16 -16 -16 h-864q-16 0 -16 16v96q0 16 16 16h864q16 0 16 -16zM768 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM640 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1024 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16 h96q16 0 16 -16zM896 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1280 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1152 880v-96 q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 880v-352q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h112v240q0 16 16 16h96q16 0 16 -16zM1792 128v896h-1664v-896 h1664zM1920 1024v-896q0 -53 -37.5 -90.5t-90.5 -37.5h-1664q-53 0 -90.5 37.5t-37.5 90.5v896q0 53 37.5 90.5t90.5 37.5h1664q53 0 90.5 -37.5t37.5 -90.5z" />
+<glyph unicode="&#xf11d;" horiz-adv-x="1792" d="M1664 491v616q-169 -91 -306 -91q-82 0 -145 32q-100 49 -184 76.5t-178 27.5q-173 0 -403 -127v-599q245 113 433 113q55 0 103.5 -7.5t98 -26t77 -31t82.5 -39.5l28 -14q44 -22 101 -22q120 0 293 92zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9 h-64q-14 0 -23 9t-9 23v1266q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102 q-15 -9 -33 -9q-16 0 -32 8q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z" />
+<glyph unicode="&#xf11e;" horiz-adv-x="1792" d="M832 536v192q-181 -16 -384 -117v-185q205 96 384 110zM832 954v197q-172 -8 -384 -126v-189q215 111 384 118zM1664 491v184q-235 -116 -384 -71v224q-20 6 -39 15q-5 3 -33 17t-34.5 17t-31.5 15t-34.5 15.5t-32.5 13t-36 12.5t-35 8.5t-39.5 7.5t-39.5 4t-44 2 q-23 0 -49 -3v-222h19q102 0 192.5 -29t197.5 -82q19 -9 39 -15v-188q42 -17 91 -17q120 0 293 92zM1664 918v189q-169 -91 -306 -91q-45 0 -78 8v-196q148 -42 384 90zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v1266 q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102q-15 -9 -33 -9q-16 0 -32 8 q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z" />
+<glyph unicode="&#xf120;" horiz-adv-x="1664" d="M585 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23zM1664 96v-64q0 -14 -9 -23t-23 -9h-960q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h960q14 0 23 -9 t9 -23z" />
+<glyph unicode="&#xf121;" horiz-adv-x="1920" d="M617 137l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23zM1208 1204l-373 -1291q-4 -13 -15.5 -19.5t-23.5 -2.5l-62 17q-13 4 -19.5 15.5t-2.5 24.5 l373 1291q4 13 15.5 19.5t23.5 2.5l62 -17q13 -4 19.5 -15.5t2.5 -24.5zM1865 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23z" />
+<glyph unicode="&#xf122;" horiz-adv-x="1792" d="M640 454v-70q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-69l-397 -398q-19 -19 -19 -45t19 -45zM1792 416q0 -58 -17 -133.5t-38.5 -138t-48 -125t-40.5 -90.5l-20 -40q-8 -17 -28 -17q-6 0 -9 1 q-25 8 -23 34q43 400 -106 565q-64 71 -170.5 110.5t-267.5 52.5v-251q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-262q411 -28 599 -221q169 -173 169 -509z" />
+<glyph unicode="&#xf123;" horiz-adv-x="1664" d="M1186 579l257 250l-356 52l-66 10l-30 60l-159 322v-963l59 -31l318 -168l-60 355l-12 66zM1638 841l-363 -354l86 -500q5 -33 -6 -51.5t-34 -18.5q-17 0 -40 12l-449 236l-449 -236q-23 -12 -40 -12q-23 0 -34 18.5t-6 51.5l86 500l-364 354q-32 32 -23 59.5t54 34.5 l502 73l225 455q20 41 49 41q28 0 49 -41l225 -455l502 -73q45 -7 54 -34.5t-24 -59.5z" />
+<glyph unicode="&#xf124;" horiz-adv-x="1408" d="M1401 1187l-640 -1280q-17 -35 -57 -35q-5 0 -15 2q-22 5 -35.5 22.5t-13.5 39.5v576h-576q-22 0 -39.5 13.5t-22.5 35.5t4 42t29 30l1280 640q13 7 29 7q27 0 45 -19q15 -14 18.5 -34.5t-6.5 -39.5z" />
+<glyph unicode="&#xf125;" horiz-adv-x="1664" d="M557 256h595v595zM512 301l595 595h-595v-595zM1664 224v-192q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v224h-864q-14 0 -23 9t-9 23v864h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224v224q0 14 9 23t23 9h192q14 0 23 -9t9 -23 v-224h851l246 247q10 9 23 9t23 -9q9 -10 9 -23t-9 -23l-247 -246v-851h224q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf126;" horiz-adv-x="1024" d="M288 64q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM288 1216q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM928 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1024 1088q0 -52 -26 -96.5t-70 -69.5 q-2 -287 -226 -414q-68 -38 -203 -81q-128 -40 -169.5 -71t-41.5 -100v-26q44 -25 70 -69.5t26 -96.5q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 52 26 96.5t70 69.5v820q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136q0 -52 -26 -96.5t-70 -69.5v-497 q54 26 154 57q55 17 87.5 29.5t70.5 31t59 39.5t40.5 51t28 69.5t8.5 91.5q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136z" />
+<glyph unicode="&#xf127;" horiz-adv-x="1664" d="M439 265l-256 -256q-10 -9 -23 -9q-12 0 -23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23zM608 224v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM384 448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23t9 23t23 9h320 q14 0 23 -9t9 -23zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-334 335q-21 21 -42 56l239 18l273 -274q27 -27 68 -27.5t68 26.5l147 146q28 28 28 67q0 40 -28 68l-274 275l18 239q35 -21 56 -42l336 -336q84 -86 84 -204zM1031 1044l-239 -18 l-273 274q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l274 -274l-18 -240q-35 21 -56 42l-336 336q-84 86 -84 204q0 120 85 203l147 146q83 83 203 83q121 0 204 -85l334 -335q21 -21 42 -56zM1664 960q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9 t-9 23t9 23t23 9h320q14 0 23 -9t9 -23zM1120 1504v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM1527 1353l-256 -256q-11 -9 -23 -9t-23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23z" />
+<glyph unicode="&#xf128;" horiz-adv-x="1024" d="M704 280v-240q0 -16 -12 -28t-28 -12h-240q-16 0 -28 12t-12 28v240q0 16 12 28t28 12h240q16 0 28 -12t12 -28zM1020 880q0 -54 -15.5 -101t-35 -76.5t-55 -59.5t-57.5 -43.5t-61 -35.5q-41 -23 -68.5 -65t-27.5 -67q0 -17 -12 -32.5t-28 -15.5h-240q-15 0 -25.5 18.5 t-10.5 37.5v45q0 83 65 156.5t143 108.5q59 27 84 56t25 76q0 42 -46.5 74t-107.5 32q-65 0 -108 -29q-35 -25 -107 -115q-13 -16 -31 -16q-12 0 -25 8l-164 125q-13 10 -15.5 25t5.5 28q160 266 464 266q80 0 161 -31t146 -83t106 -127.5t41 -158.5z" />
+<glyph unicode="&#xf129;" horiz-adv-x="640" d="M640 192v-128q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64v384h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-576h64q26 0 45 -19t19 -45zM512 1344v-192q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v192 q0 26 19 45t45 19h256q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf12a;" horiz-adv-x="640" d="M512 288v-224q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v224q0 26 19 45t45 19h256q26 0 45 -19t19 -45zM542 1344l-28 -768q-1 -26 -20.5 -45t-45.5 -19h-256q-26 0 -45.5 19t-20.5 45l-28 768q-1 26 17.5 45t44.5 19h320q26 0 44.5 -19t17.5 -45z" />
+<glyph unicode="&#xf12b;" d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3l-9 -21q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109zM1534 846v-206h-514l-3 27 q-4 28 -4 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q83 65 188 65q110 0 178 -59.5t68 -158.5q0 -56 -24.5 -103t-62 -76.5t-81.5 -58.5t-82 -50.5t-65.5 -51.5t-30.5 -63h232v80 h126z" />
+<glyph unicode="&#xf12c;" d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3l-9 -21q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109zM1536 -50v-206h-514l-4 27 q-3 45 -3 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q80 65 188 65q110 0 178 -59.5t68 -158.5q0 -66 -34.5 -118.5t-84 -86t-99.5 -62.5t-87 -63t-41 -73h232v80h126z" />
+<glyph unicode="&#xf12d;" horiz-adv-x="1920" d="M896 128l336 384h-768l-336 -384h768zM1909 1205q15 -34 9.5 -71.5t-30.5 -65.5l-896 -1024q-38 -44 -96 -44h-768q-38 0 -69.5 20.5t-47.5 54.5q-15 34 -9.5 71.5t30.5 65.5l896 1024q38 44 96 44h768q38 0 69.5 -20.5t47.5 -54.5z" />
+<glyph unicode="&#xf12e;" horiz-adv-x="1664" d="M1664 438q0 -81 -44.5 -135t-123.5 -54q-41 0 -77.5 17.5t-59 38t-56.5 38t-71 17.5q-110 0 -110 -124q0 -39 16 -115t15 -115v-5q-22 0 -33 -1q-34 -3 -97.5 -11.5t-115.5 -13.5t-98 -5q-61 0 -103 26.5t-42 83.5q0 37 17.5 71t38 56.5t38 59t17.5 77.5q0 79 -54 123.5 t-135 44.5q-84 0 -143 -45.5t-59 -127.5q0 -43 15 -83t33.5 -64.5t33.5 -53t15 -50.5q0 -45 -46 -89q-37 -35 -117 -35q-95 0 -245 24q-9 2 -27.5 4t-27.5 4l-13 2q-1 0 -3 1q-2 0 -2 1v1024q2 -1 17.5 -3.5t34 -5t21.5 -3.5q150 -24 245 -24q80 0 117 35q46 44 46 89 q0 22 -15 50.5t-33.5 53t-33.5 64.5t-15 83q0 82 59 127.5t144 45.5q80 0 134 -44.5t54 -123.5q0 -41 -17.5 -77.5t-38 -59t-38 -56.5t-17.5 -71q0 -57 42 -83.5t103 -26.5q64 0 180 15t163 17v-2q-1 -2 -3.5 -17.5t-5 -34t-3.5 -21.5q-24 -150 -24 -245q0 -80 35 -117 q44 -46 89 -46q22 0 50.5 15t53 33.5t64.5 33.5t83 15q82 0 127.5 -59t45.5 -143z" />
+<glyph unicode="&#xf130;" horiz-adv-x="1152" d="M1152 832v-128q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-217 24 -364.5 187.5t-147.5 384.5v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -185 131.5 -316.5t316.5 -131.5 t316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45zM896 1216v-512q0 -132 -94 -226t-226 -94t-226 94t-94 226v512q0 132 94 226t226 94t226 -94t94 -226z" />
+<glyph unicode="&#xf131;" horiz-adv-x="1408" d="M271 591l-101 -101q-42 103 -42 214v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -53 15 -113zM1385 1193l-361 -361v-128q0 -132 -94 -226t-226 -94q-55 0 -109 19l-96 -96q97 -51 205 -51q185 0 316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45v-128 q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-125 13 -235 81l-254 -254q-10 -10 -23 -10t-23 10l-82 82q-10 10 -10 23t10 23l1234 1234q10 10 23 10t23 -10l82 -82q10 -10 10 -23 t-10 -23zM1005 1325l-621 -621v512q0 132 94 226t226 94q102 0 184.5 -59t116.5 -152z" />
+<glyph unicode="&#xf132;" horiz-adv-x="1280" d="M1088 576v640h-448v-1137q119 63 213 137q235 184 235 360zM1280 1344v-768q0 -86 -33.5 -170.5t-83 -150t-118 -127.5t-126.5 -103t-121 -77.5t-89.5 -49.5t-42.5 -20q-12 -6 -26 -6t-26 6q-16 7 -42.5 20t-89.5 49.5t-121 77.5t-126.5 103t-118 127.5t-83 150 t-33.5 170.5v768q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf133;" horiz-adv-x="1664" d="M128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280 q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
+<glyph unicode="&#xf134;" horiz-adv-x="1408" d="M512 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 1376v-320q0 -16 -12 -25q-8 -7 -20 -7q-4 0 -7 1l-448 96q-11 2 -18 11t-7 20h-256v-102q111 -23 183.5 -111t72.5 -203v-800q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v800 q0 106 62.5 190.5t161.5 114.5v111h-32q-59 0 -115 -23.5t-91.5 -53t-66 -66.5t-40.5 -53.5t-14 -24.5q-17 -35 -57 -35q-16 0 -29 7q-23 12 -31.5 37t3.5 49q5 10 14.5 26t37.5 53.5t60.5 70t85 67t108.5 52.5q-25 42 -25 86q0 66 47 113t113 47t113 -47t47 -113 q0 -33 -14 -64h302q0 11 7 20t18 11l448 96q3 1 7 1q12 0 20 -7q12 -9 12 -25z" />
+<glyph unicode="&#xf135;" horiz-adv-x="1664" d="M1440 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1664 1376q0 -249 -75.5 -430.5t-253.5 -360.5q-81 -80 -195 -176l-20 -379q-2 -16 -16 -26l-384 -224q-7 -4 -16 -4q-12 0 -23 9l-64 64q-13 14 -8 32l85 276l-281 281l-276 -85q-3 -1 -9 -1 q-14 0 -23 9l-64 64q-17 19 -5 39l224 384q10 14 26 16l379 20q96 114 176 195q188 187 358 258t431 71q14 0 24 -9.5t10 -22.5z" />
+<glyph unicode="&#xf136;" horiz-adv-x="1792" d="M1745 763l-164 -763h-334l178 832q13 56 -15 88q-27 33 -83 33h-169l-204 -953h-334l204 953h-286l-204 -953h-334l204 953l-153 327h1276q101 0 189.5 -40.5t147.5 -113.5q60 -73 81 -168.5t0 -194.5z" />
+<glyph unicode="&#xf137;" d="M909 141l102 102q19 19 19 45t-19 45l-307 307l307 307q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf138;" d="M717 141l454 454q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l307 -307l-307 -307q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf139;" d="M1165 397l102 102q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l307 307l307 -307q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf13a;" d="M813 237l454 454q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-307 -307l-307 307q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf13b;" horiz-adv-x="1408" d="M1130 939l16 175h-884l47 -534h612l-22 -228l-197 -53l-196 53l-13 140h-175l22 -278l362 -100h4v1l359 99l50 544h-644l-15 181h674zM0 1408h1408l-128 -1438l-578 -162l-574 162z" />
+<glyph unicode="&#xf13c;" horiz-adv-x="1792" d="M275 1408h1505l-266 -1333l-804 -267l-698 267l71 356h297l-29 -147l422 -161l486 161l68 339h-1208l58 297h1209l38 191h-1208z" />
+<glyph unicode="&#xf13d;" horiz-adv-x="1792" d="M960 1280q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1792 352v-352q0 -22 -20 -30q-8 -2 -12 -2q-13 0 -23 9l-93 93q-119 -143 -318.5 -226.5t-429.5 -83.5t-429.5 83.5t-318.5 226.5l-93 -93q-9 -9 -23 -9q-4 0 -12 2q-20 8 -20 30v352 q0 14 9 23t23 9h352q22 0 30 -20q8 -19 -7 -35l-100 -100q67 -91 189.5 -153.5t271.5 -82.5v647h-192q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h192v163q-58 34 -93 92.5t-35 128.5q0 106 75 181t181 75t181 -75t75 -181q0 -70 -35 -128.5t-93 -92.5v-163h192q26 0 45 -19 t19 -45v-128q0 -26 -19 -45t-45 -19h-192v-647q149 20 271.5 82.5t189.5 153.5l-100 100q-15 16 -7 35q8 20 30 20h352q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf13e;" horiz-adv-x="1152" d="M1056 768q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v320q0 185 131.5 316.5t316.5 131.5t316.5 -131.5t131.5 -316.5q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45q0 106 -75 181t-181 75t-181 -75t-75 -181 v-320h736z" />
+<glyph unicode="&#xf140;" d="M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM1152 640q0 159 -112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM1280 640q0 -212 -150 -362t-362 -150t-362 150 t-150 362t150 362t362 150t362 -150t150 -362zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf141;" horiz-adv-x="1408" d="M384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM896 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM1408 800v-192q0 -40 -28 -68t-68 -28h-192 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" />
+<glyph unicode="&#xf142;" horiz-adv-x="384" d="M384 288v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 1312v-192q0 -40 -28 -68t-68 -28h-192 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" />
+<glyph unicode="&#xf143;" d="M512 256q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM863 162q-13 232 -177 396t-396 177q-14 1 -24 -9t-10 -23v-128q0 -13 8.5 -22t21.5 -10q154 -11 264 -121t121 -264q1 -13 10 -21.5t22 -8.5h128q13 0 23 10 t9 24zM1247 161q-5 154 -56 297.5t-139.5 260t-205 205t-260 139.5t-297.5 56q-14 1 -23 -9q-10 -10 -10 -23v-128q0 -13 9 -22t22 -10q204 -7 378 -111.5t278.5 -278.5t111.5 -378q1 -13 10 -22t22 -9h128q13 0 23 10q11 9 9 23zM1536 1120v-960q0 -119 -84.5 -203.5 t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf144;" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1152 585q32 18 32 55t-32 55l-544 320q-31 19 -64 1q-32 -19 -32 -56v-640q0 -37 32 -56 q16 -8 32 -8q17 0 32 9z" />
+<glyph unicode="&#xf145;" horiz-adv-x="1792" d="M1024 1084l316 -316l-572 -572l-316 316zM813 105l618 618q19 19 19 45t-19 45l-362 362q-18 18 -45 18t-45 -18l-618 -618q-19 -19 -19 -45t19 -45l362 -362q18 -18 45 -18t45 18zM1702 742l-907 -908q-37 -37 -90.5 -37t-90.5 37l-126 126q56 56 56 136t-56 136 t-136 56t-136 -56l-125 126q-37 37 -37 90.5t37 90.5l907 906q37 37 90.5 37t90.5 -37l125 -125q-56 -56 -56 -136t56 -136t136 -56t136 56l126 -125q37 -37 37 -90.5t-37 -90.5z" />
+<glyph unicode="&#xf146;" d="M1280 576v128q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h896q26 0 45 19t19 45zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5 t84.5 -203.5z" />
+<glyph unicode="&#xf147;" horiz-adv-x="1408" d="M1152 736v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h832q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5 t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf148;" horiz-adv-x="1024" d="M1018 933q-18 -37 -58 -37h-192v-864q0 -14 -9 -23t-23 -9h-704q-21 0 -29 18q-8 20 4 35l160 192q9 11 25 11h320v640h-192q-40 0 -58 37q-17 37 9 68l320 384q18 22 49 22t49 -22l320 -384q27 -32 9 -68z" />
+<glyph unicode="&#xf149;" horiz-adv-x="1024" d="M32 1280h704q13 0 22.5 -9.5t9.5 -23.5v-863h192q40 0 58 -37t-9 -69l-320 -384q-18 -22 -49 -22t-49 22l-320 384q-26 31 -9 69q18 37 58 37h192v640h-320q-14 0 -25 11l-160 192q-13 14 -4 34q9 19 29 19z" />
+<glyph unicode="&#xf14a;" d="M685 237l614 614q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-467 -467l-211 211q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l358 -358q19 -19 45 -19t45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5 t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf14b;" d="M404 428l152 -152l-52 -52h-56v96h-96v56zM818 818q14 -13 -3 -30l-291 -291q-17 -17 -30 -3q-14 13 3 30l291 291q17 17 30 3zM544 128l544 544l-288 288l-544 -544v-288h288zM1152 736l92 92q28 28 28 68t-28 68l-152 152q-28 28 -68 28t-68 -28l-92 -92zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf14c;" d="M1280 608v480q0 26 -19 45t-45 19h-480q-42 0 -59 -39q-17 -41 14 -70l144 -144l-534 -534q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l534 534l144 -144q18 -19 45 -19q12 0 25 5q39 17 39 59zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960 q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf14d;" d="M1005 435l352 352q19 19 19 45t-19 45l-352 352q-30 31 -69 14q-40 -17 -40 -59v-160q-119 0 -216 -19.5t-162.5 -51t-114 -79t-76.5 -95.5t-44.5 -109t-21.5 -111.5t-5 -110.5q0 -181 167 -404q10 -12 25 -12q7 0 13 3q22 9 19 33q-44 354 62 473q46 52 130 75.5 t224 23.5v-160q0 -42 40 -59q12 -5 24 -5q26 0 45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf14e;" d="M640 448l256 128l-256 128v-256zM1024 1039v-542l-512 -256v542zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf150;" d="M1145 861q18 -35 -5 -66l-320 -448q-19 -27 -52 -27t-52 27l-320 448q-23 31 -5 66q17 35 57 35h640q40 0 57 -35zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf151;" d="M1145 419q-17 -35 -57 -35h-640q-40 0 -57 35q-18 35 5 66l320 448q19 27 52 27t52 -27l320 -448q23 -31 5 -66zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf152;" d="M1088 640q0 -33 -27 -52l-448 -320q-31 -23 -66 -5q-35 17 -35 57v640q0 40 35 57q35 18 66 -5l448 -320q27 -19 27 -52zM1280 160v960q0 14 -9 23t-23 9h-960q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h960q14 0 23 9t9 23zM1536 1120v-960q0 -119 -84.5 -203.5 t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf153;" horiz-adv-x="1024" d="M976 229l35 -159q3 -12 -3 -22.5t-17 -14.5l-5 -1q-4 -2 -10.5 -3.5t-16 -4.5t-21.5 -5.5t-25.5 -5t-30 -5t-33.5 -4.5t-36.5 -3t-38.5 -1q-234 0 -409 130.5t-238 351.5h-95q-13 0 -22.5 9.5t-9.5 22.5v113q0 13 9.5 22.5t22.5 9.5h66q-2 57 1 105h-67q-14 0 -23 9 t-9 23v114q0 14 9 23t23 9h98q67 210 243.5 338t400.5 128q102 0 194 -23q11 -3 20 -15q6 -11 3 -24l-43 -159q-3 -13 -14 -19.5t-24 -2.5l-4 1q-4 1 -11.5 2.5l-17.5 3.5t-22.5 3.5t-26 3t-29 2.5t-29.5 1q-126 0 -226 -64t-150 -176h468q16 0 25 -12q10 -12 7 -26 l-24 -114q-5 -26 -32 -26h-488q-3 -37 0 -105h459q15 0 25 -12q9 -12 6 -27l-24 -112q-2 -11 -11 -18.5t-20 -7.5h-387q48 -117 149.5 -185.5t228.5 -68.5q18 0 36 1.5t33.5 3.5t29.5 4.5t24.5 5t18.5 4.5l12 3l5 2q13 5 26 -2q12 -7 15 -21z" />
+<glyph unicode="&#xf154;" horiz-adv-x="1024" d="M1020 399v-367q0 -14 -9 -23t-23 -9h-956q-14 0 -23 9t-9 23v150q0 13 9.5 22.5t22.5 9.5h97v383h-95q-14 0 -23 9.5t-9 22.5v131q0 14 9 23t23 9h95v223q0 171 123.5 282t314.5 111q185 0 335 -125q9 -8 10 -20.5t-7 -22.5l-103 -127q-9 -11 -22 -12q-13 -2 -23 7 q-5 5 -26 19t-69 32t-93 18q-85 0 -137 -47t-52 -123v-215h305q13 0 22.5 -9t9.5 -23v-131q0 -13 -9.5 -22.5t-22.5 -9.5h-305v-379h414v181q0 13 9 22.5t23 9.5h162q14 0 23 -9.5t9 -22.5z" />
+<glyph unicode="&#xf155;" horiz-adv-x="1024" d="M978 351q0 -153 -99.5 -263.5t-258.5 -136.5v-175q0 -14 -9 -23t-23 -9h-135q-13 0 -22.5 9.5t-9.5 22.5v175q-66 9 -127.5 31t-101.5 44.5t-74 48t-46.5 37.5t-17.5 18q-17 21 -2 41l103 135q7 10 23 12q15 2 24 -9l2 -2q113 -99 243 -125q37 -8 74 -8q81 0 142.5 43 t61.5 122q0 28 -15 53t-33.5 42t-58.5 37.5t-66 32t-80 32.5q-39 16 -61.5 25t-61.5 26.5t-62.5 31t-56.5 35.5t-53.5 42.5t-43.5 49t-35.5 58t-21 66.5t-8.5 78q0 138 98 242t255 134v180q0 13 9.5 22.5t22.5 9.5h135q14 0 23 -9t9 -23v-176q57 -6 110.5 -23t87 -33.5 t63.5 -37.5t39 -29t15 -14q17 -18 5 -38l-81 -146q-8 -15 -23 -16q-14 -3 -27 7q-3 3 -14.5 12t-39 26.5t-58.5 32t-74.5 26t-85.5 11.5q-95 0 -155 -43t-60 -111q0 -26 8.5 -48t29.5 -41.5t39.5 -33t56 -31t60.5 -27t70 -27.5q53 -20 81 -31.5t76 -35t75.5 -42.5t62 -50 t53 -63.5t31.5 -76.5t13 -94z" />
+<glyph unicode="&#xf156;" horiz-adv-x="898" d="M898 1066v-102q0 -14 -9 -23t-23 -9h-168q-23 -144 -129 -234t-276 -110q167 -178 459 -536q14 -16 4 -34q-8 -18 -29 -18h-195q-16 0 -25 12q-306 367 -498 571q-9 9 -9 22v127q0 13 9.5 22.5t22.5 9.5h112q132 0 212.5 43t102.5 125h-427q-14 0 -23 9t-9 23v102 q0 14 9 23t23 9h413q-57 113 -268 113h-145q-13 0 -22.5 9.5t-9.5 22.5v133q0 14 9 23t23 9h832q14 0 23 -9t9 -23v-102q0 -14 -9 -23t-23 -9h-233q47 -61 64 -144h171q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf157;" horiz-adv-x="1027" d="M603 0h-172q-13 0 -22.5 9t-9.5 23v330h-288q-13 0 -22.5 9t-9.5 23v103q0 13 9.5 22.5t22.5 9.5h288v85h-288q-13 0 -22.5 9t-9.5 23v104q0 13 9.5 22.5t22.5 9.5h214l-321 578q-8 16 0 32q10 16 28 16h194q19 0 29 -18l215 -425q19 -38 56 -125q10 24 30.5 68t27.5 61 l191 420q8 19 29 19h191q17 0 27 -16q9 -14 1 -31l-313 -579h215q13 0 22.5 -9.5t9.5 -22.5v-104q0 -14 -9.5 -23t-22.5 -9h-290v-85h290q13 0 22.5 -9.5t9.5 -22.5v-103q0 -14 -9.5 -23t-22.5 -9h-290v-330q0 -13 -9.5 -22.5t-22.5 -9.5z" />
+<glyph unicode="&#xf158;" horiz-adv-x="1280" d="M1043 971q0 100 -65 162t-171 62h-320v-448h320q106 0 171 62t65 162zM1280 971q0 -193 -126.5 -315t-326.5 -122h-340v-118h505q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9h-505v-192q0 -14 -9.5 -23t-22.5 -9h-167q-14 0 -23 9t-9 23v192h-224q-14 0 -23 9t-9 23v128 q0 14 9 23t23 9h224v118h-224q-14 0 -23 9t-9 23v149q0 13 9 22.5t23 9.5h224v629q0 14 9 23t23 9h539q200 0 326.5 -122t126.5 -315z" />
+<glyph unicode="&#xf159;" horiz-adv-x="1792" d="M514 341l81 299h-159l75 -300q1 -1 1 -3t1 -3q0 1 0.5 3.5t0.5 3.5zM630 768l35 128h-292l32 -128h225zM822 768h139l-35 128h-70zM1271 340l78 300h-162l81 -299q0 -1 0.5 -3.5t1.5 -3.5q0 1 0.5 3t0.5 3zM1382 768l33 128h-297l34 -128h230zM1792 736v-64q0 -14 -9 -23 t-23 -9h-213l-164 -616q-7 -24 -31 -24h-159q-24 0 -31 24l-166 616h-209l-167 -616q-7 -24 -31 -24h-159q-11 0 -19.5 7t-10.5 17l-160 616h-208q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h175l-33 128h-142q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h109l-89 344q-5 15 5 28 q10 12 26 12h137q26 0 31 -24l90 -360h359l97 360q7 24 31 24h126q24 0 31 -24l98 -360h365l93 360q5 24 31 24h137q16 0 26 -12q10 -13 5 -28l-91 -344h111q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-145l-34 -128h179q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf15a;" horiz-adv-x="1280" d="M1167 896q18 -182 -131 -258q117 -28 175 -103t45 -214q-7 -71 -32.5 -125t-64.5 -89t-97 -58.5t-121.5 -34.5t-145.5 -15v-255h-154v251q-80 0 -122 1v-252h-154v255q-18 0 -54 0.5t-55 0.5h-200l31 183h111q50 0 58 51v402h16q-6 1 -16 1v287q-13 68 -89 68h-111v164 l212 -1q64 0 97 1v252h154v-247q82 2 122 2v245h154v-252q79 -7 140 -22.5t113 -45t82.5 -78t36.5 -114.5zM952 351q0 36 -15 64t-37 46t-57.5 30.5t-65.5 18.5t-74 9t-69 3t-64.5 -1t-47.5 -1v-338q8 0 37 -0.5t48 -0.5t53 1.5t58.5 4t57 8.5t55.5 14t47.5 21t39.5 30 t24.5 40t9.5 51zM881 827q0 33 -12.5 58.5t-30.5 42t-48 28t-55 16.5t-61.5 8t-58 2.5t-54 -1t-39.5 -0.5v-307q5 0 34.5 -0.5t46.5 0t50 2t55 5.5t51.5 11t48.5 18.5t37 27t27 38.5t9 51z" />
+<glyph unicode="&#xf15b;" d="M1024 1024v472q22 -14 36 -28l408 -408q14 -14 28 -36h-472zM896 992q0 -40 28 -68t68 -28h544v-1056q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h800v-544z" />
+<glyph unicode="&#xf15c;" d="M1468 1060q14 -14 28 -36h-472v472q22 -14 36 -28zM992 896h544v-1056q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h800v-544q0 -40 28 -68t68 -28zM1152 160v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704 q14 0 23 9t9 23zM1152 416v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM1152 672v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23z" />
+<glyph unicode="&#xf15d;" horiz-adv-x="1664" d="M1191 1128h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1572 -23 v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -11v-2l14 2q9 2 30 2h248v119h121zM1661 874v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162 l230 -662h70z" />
+<glyph unicode="&#xf15e;" horiz-adv-x="1664" d="M1191 104h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1661 -150 v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162l230 -662h70zM1572 1001v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -10v-3l14 3q9 1 30 1h248 v119h121z" />
+<glyph unicode="&#xf160;" horiz-adv-x="1792" d="M736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1792 -32v-192q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832 q14 0 23 -9t9 -23zM1600 480v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1408 992v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1216 1504v-192q0 -14 -9 -23t-23 -9h-256 q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf161;" horiz-adv-x="1792" d="M1216 -32v-192q0 -14 -9 -23t-23 -9h-256q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192 q14 0 23 -9t9 -23zM1408 480v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1600 992v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1792 1504v-192q0 -14 -9 -23t-23 -9h-832 q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf162;" d="M1346 223q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23 zM1486 165q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5 t82 -252.5zM1456 882v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165z" />
+<glyph unicode="&#xf163;" d="M1346 1247q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9 t9 -23zM1456 -142v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165zM1486 1189q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13 q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5t82 -252.5z" />
+<glyph unicode="&#xf164;" horiz-adv-x="1664" d="M256 192q0 26 -19 45t-45 19q-27 0 -45.5 -19t-18.5 -45q0 -27 18.5 -45.5t45.5 -18.5q26 0 45 18.5t19 45.5zM416 704v-640q0 -26 -19 -45t-45 -19h-288q-26 0 -45 19t-19 45v640q0 26 19 45t45 19h288q26 0 45 -19t19 -45zM1600 704q0 -86 -55 -149q15 -44 15 -76 q3 -76 -43 -137q17 -56 0 -117q-15 -57 -54 -94q9 -112 -49 -181q-64 -76 -197 -78h-36h-76h-17q-66 0 -144 15.5t-121.5 29t-120.5 39.5q-123 43 -158 44q-26 1 -45 19.5t-19 44.5v641q0 25 18 43.5t43 20.5q24 2 76 59t101 121q68 87 101 120q18 18 31 48t17.5 48.5 t13.5 60.5q7 39 12.5 61t19.5 52t34 50q19 19 45 19q46 0 82.5 -10.5t60 -26t40 -40.5t24 -45t12 -50t5 -45t0.5 -39q0 -38 -9.5 -76t-19 -60t-27.5 -56q-3 -6 -10 -18t-11 -22t-8 -24h277q78 0 135 -57t57 -135z" />
+<glyph unicode="&#xf165;" horiz-adv-x="1664" d="M256 960q0 -26 -19 -45t-45 -19q-27 0 -45.5 19t-18.5 45q0 27 18.5 45.5t45.5 18.5q26 0 45 -18.5t19 -45.5zM416 448v640q0 26 -19 45t-45 19h-288q-26 0 -45 -19t-19 -45v-640q0 -26 19 -45t45 -19h288q26 0 45 19t19 45zM1545 597q55 -61 55 -149q-1 -78 -57.5 -135 t-134.5 -57h-277q4 -14 8 -24t11 -22t10 -18q18 -37 27 -57t19 -58.5t10 -76.5q0 -24 -0.5 -39t-5 -45t-12 -50t-24 -45t-40 -40.5t-60 -26t-82.5 -10.5q-26 0 -45 19q-20 20 -34 50t-19.5 52t-12.5 61q-9 42 -13.5 60.5t-17.5 48.5t-31 48q-33 33 -101 120q-49 64 -101 121 t-76 59q-25 2 -43 20.5t-18 43.5v641q0 26 19 44.5t45 19.5q35 1 158 44q77 26 120.5 39.5t121.5 29t144 15.5h17h76h36q133 -2 197 -78q58 -69 49 -181q39 -37 54 -94q17 -61 0 -117q46 -61 43 -137q0 -32 -15 -76z" />
+<glyph unicode="&#xf166;" d="M919 233v157q0 50 -29 50q-17 0 -33 -16v-224q16 -16 33 -16q29 0 29 49zM1103 355h66v34q0 51 -33 51t-33 -51v-34zM532 621v-70h-80v-423h-74v423h-78v70h232zM733 495v-367h-67v40q-39 -45 -76 -45q-33 0 -42 28q-6 16 -6 54v290h66v-270q0 -24 1 -26q1 -15 15 -15 q20 0 42 31v280h67zM985 384v-146q0 -52 -7 -73q-12 -42 -53 -42q-35 0 -68 41v-36h-67v493h67v-161q32 40 68 40q41 0 53 -42q7 -21 7 -74zM1236 255v-9q0 -29 -2 -43q-3 -22 -15 -40q-27 -40 -80 -40q-52 0 -81 38q-21 27 -21 86v129q0 59 20 86q29 38 80 38t78 -38 q21 -28 21 -86v-76h-133v-65q0 -51 34 -51q24 0 30 26q0 1 0.5 7t0.5 16.5v21.5h68zM785 1079v-156q0 -51 -32 -51t-32 51v156q0 52 32 52t32 -52zM1318 366q0 177 -19 260q-10 44 -43 73.5t-76 34.5q-136 15 -412 15q-275 0 -411 -15q-44 -5 -76.5 -34.5t-42.5 -73.5 q-20 -87 -20 -260q0 -176 20 -260q10 -43 42.5 -73t75.5 -35q137 -15 412 -15t412 15q43 5 75.5 35t42.5 73q20 84 20 260zM563 1017l90 296h-75l-51 -195l-53 195h-78l24 -69t23 -69q35 -103 46 -158v-201h74v201zM852 936v130q0 58 -21 87q-29 38 -78 38q-51 0 -78 -38 q-21 -29 -21 -87v-130q0 -58 21 -87q27 -38 78 -38q49 0 78 38q21 27 21 87zM1033 816h67v370h-67v-283q-22 -31 -42 -31q-15 0 -16 16q-1 2 -1 26v272h-67v-293q0 -37 6 -55q11 -27 43 -27q36 0 77 45v-40zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960 q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf167;" d="M971 292v-211q0 -67 -39 -67q-23 0 -45 22v301q22 22 45 22q39 0 39 -67zM1309 291v-46h-90v46q0 68 45 68t45 -68zM343 509h107v94h-312v-94h105v-569h100v569zM631 -60h89v494h-89v-378q-30 -42 -57 -42q-18 0 -21 21q-1 3 -1 35v364h-89v-391q0 -49 8 -73 q12 -37 58 -37q48 0 102 61v-54zM1060 88v197q0 73 -9 99q-17 56 -71 56q-50 0 -93 -54v217h-89v-663h89v48q45 -55 93 -55q54 0 71 55q9 27 9 100zM1398 98v13h-91q0 -51 -2 -61q-7 -36 -40 -36q-46 0 -46 69v87h179v103q0 79 -27 116q-39 51 -106 51q-68 0 -107 -51 q-28 -37 -28 -116v-173q0 -79 29 -116q39 -51 108 -51q72 0 108 53q18 27 21 54q2 9 2 58zM790 1011v210q0 69 -43 69t-43 -69v-210q0 -70 43 -70t43 70zM1509 260q0 -234 -26 -350q-14 -59 -58 -99t-102 -46q-184 -21 -555 -21t-555 21q-58 6 -102.5 46t-57.5 99 q-26 112 -26 350q0 234 26 350q14 59 58 99t103 47q183 20 554 20t555 -20q58 -7 102.5 -47t57.5 -99q26 -112 26 -350zM511 1536h102l-121 -399v-271h-100v271q-14 74 -61 212q-37 103 -65 187h106l71 -263zM881 1203v-175q0 -81 -28 -118q-37 -51 -106 -51q-67 0 -105 51 q-28 38 -28 118v175q0 80 28 117q38 51 105 51q69 0 106 -51q28 -37 28 -117zM1216 1365v-499h-91v55q-53 -62 -103 -62q-46 0 -59 37q-8 24 -8 75v394h91v-367q0 -33 1 -35q3 -22 21 -22q27 0 57 43v381h91z" />
+<glyph unicode="&#xf168;" horiz-adv-x="1408" d="M597 869q-10 -18 -257 -456q-27 -46 -65 -46h-239q-21 0 -31 17t0 36l253 448q1 0 0 1l-161 279q-12 22 -1 37q9 15 32 15h239q40 0 66 -45zM1403 1511q11 -16 0 -37l-528 -934v-1l336 -615q11 -20 1 -37q-10 -15 -32 -15h-239q-42 0 -66 45l-339 622q18 32 531 942 q25 45 64 45h241q22 0 31 -15z" />
+<glyph unicode="&#xf169;" d="M685 771q0 1 -126 222q-21 34 -52 34h-184q-18 0 -26 -11q-7 -12 1 -29l125 -216v-1l-196 -346q-9 -14 0 -28q8 -13 24 -13h185q31 0 50 36zM1309 1268q-7 12 -24 12h-187q-30 0 -49 -35l-411 -729q1 -2 262 -481q20 -35 52 -35h184q18 0 25 12q8 13 -1 28l-260 476v1 l409 723q8 16 0 28zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf16a;" horiz-adv-x="1792" d="M1280 640q0 37 -30 54l-512 320q-31 20 -65 2q-33 -18 -33 -56v-640q0 -38 33 -56q16 -8 31 -8q20 0 34 10l512 320q30 17 30 54zM1792 640q0 -96 -1 -150t-8.5 -136.5t-22.5 -147.5q-16 -73 -69 -123t-124 -58q-222 -25 -671 -25t-671 25q-71 8 -124.5 58t-69.5 123 q-14 65 -21.5 147.5t-8.5 136.5t-1 150t1 150t8.5 136.5t22.5 147.5q16 73 69 123t124 58q222 25 671 25t671 -25q71 -8 124.5 -58t69.5 -123q14 -65 21.5 -147.5t8.5 -136.5t1 -150z" />
+<glyph unicode="&#xf16b;" horiz-adv-x="1792" d="M402 829l494 -305l-342 -285l-490 319zM1388 274v-108l-490 -293v-1l-1 1l-1 -1v1l-489 293v108l147 -96l342 284v2l1 -1l1 1v-2l343 -284zM554 1418l342 -285l-494 -304l-338 270zM1390 829l338 -271l-489 -319l-343 285zM1239 1418l489 -319l-338 -270l-494 304z" />
+<glyph unicode="&#xf16c;" horiz-adv-x="1408" d="M928 135v-151l-707 -1v151zM1169 481v-701l-1 -35v-1h-1132l-35 1h-1v736h121v-618h928v618h120zM241 393l704 -65l-13 -150l-705 65zM309 709l683 -183l-39 -146l-683 183zM472 1058l609 -360l-77 -130l-609 360zM832 1389l398 -585l-124 -85l-399 584zM1285 1536 l121 -697l-149 -26l-121 697z" />
+<glyph unicode="&#xf16d;" d="M1362 110v648h-135q20 -63 20 -131q0 -126 -64 -232.5t-174 -168.5t-240 -62q-197 0 -337 135.5t-140 327.5q0 68 20 131h-141v-648q0 -26 17.5 -43.5t43.5 -17.5h1069q25 0 43 17.5t18 43.5zM1078 643q0 124 -90.5 211.5t-218.5 87.5q-127 0 -217.5 -87.5t-90.5 -211.5 t90.5 -211.5t217.5 -87.5q128 0 218.5 87.5t90.5 211.5zM1362 1003v165q0 28 -20 48.5t-49 20.5h-174q-29 0 -49 -20.5t-20 -48.5v-165q0 -29 20 -49t49 -20h174q29 0 49 20t20 49zM1536 1211v-1142q0 -81 -58 -139t-139 -58h-1142q-81 0 -139 58t-58 139v1142q0 81 58 139 t139 58h1142q81 0 139 -58t58 -139z" />
+<glyph unicode="&#xf16e;" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM698 640q0 88 -62 150t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150zM1262 640q0 88 -62 150 t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150z" />
+<glyph unicode="&#xf170;" d="M768 914l201 -306h-402zM1133 384h94l-459 691l-459 -691h94l104 160h522zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf171;" horiz-adv-x="1408" d="M815 677q8 -63 -50.5 -101t-111.5 -6q-39 17 -53.5 58t-0.5 82t52 58q36 18 72.5 12t64 -35.5t27.5 -67.5zM926 698q-14 107 -113 164t-197 13q-63 -28 -100.5 -88.5t-34.5 -129.5q4 -91 77.5 -155t165.5 -56q91 8 152 84t50 168zM1165 1240q-20 27 -56 44.5t-58 22 t-71 12.5q-291 47 -566 -2q-43 -7 -66 -12t-55 -22t-50 -43q30 -28 76 -45.5t73.5 -22t87.5 -11.5q228 -29 448 -1q63 8 89.5 12t72.5 21.5t75 46.5zM1222 205q-8 -26 -15.5 -76.5t-14 -84t-28.5 -70t-58 -56.5q-86 -48 -189.5 -71.5t-202 -22t-201.5 18.5q-46 8 -81.5 18 t-76.5 27t-73 43.5t-52 61.5q-25 96 -57 292l6 16l18 9q223 -148 506.5 -148t507.5 148q21 -6 24 -23t-5 -45t-8 -37zM1403 1166q-26 -167 -111 -655q-5 -30 -27 -56t-43.5 -40t-54.5 -31q-252 -126 -610 -88q-248 27 -394 139q-15 12 -25.5 26.5t-17 35t-9 34t-6 39.5 t-5.5 35q-9 50 -26.5 150t-28 161.5t-23.5 147.5t-22 158q3 26 17.5 48.5t31.5 37.5t45 30t46 22.5t48 18.5q125 46 313 64q379 37 676 -50q155 -46 215 -122q16 -20 16.5 -51t-5.5 -54z" />
+<glyph unicode="&#xf172;" d="M848 666q0 43 -41 66t-77 1q-43 -20 -42.5 -72.5t43.5 -70.5q39 -23 81 4t36 72zM928 682q8 -66 -36 -121t-110 -61t-119 40t-56 113q-2 49 25.5 93t72.5 64q70 31 141.5 -10t81.5 -118zM1100 1073q-20 -21 -53.5 -34t-53 -16t-63.5 -8q-155 -20 -324 0q-44 6 -63 9.5 t-52.5 16t-54.5 32.5q13 19 36 31t40 15.5t47 8.5q198 35 408 1q33 -5 51 -8.5t43 -16t39 -31.5zM1142 327q0 7 5.5 26.5t3 32t-17.5 16.5q-161 -106 -365 -106t-366 106l-12 -6l-5 -12q26 -154 41 -210q47 -81 204 -108q249 -46 428 53q34 19 49 51.5t22.5 85.5t12.5 71z M1272 1020q9 53 -8 75q-43 55 -155 88q-216 63 -487 36q-132 -12 -226 -46q-38 -15 -59.5 -25t-47 -34t-29.5 -54q8 -68 19 -138t29 -171t24 -137q1 -5 5 -31t7 -36t12 -27t22 -28q105 -80 284 -100q259 -28 440 63q24 13 39.5 23t31 29t19.5 40q48 267 80 473zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf173;" horiz-adv-x="1024" d="M944 207l80 -237q-23 -35 -111 -66t-177 -32q-104 -2 -190.5 26t-142.5 74t-95 106t-55.5 120t-16.5 118v544h-168v215q72 26 129 69.5t91 90t58 102t34 99t15 88.5q1 5 4.5 8.5t7.5 3.5h244v-424h333v-252h-334v-518q0 -30 6.5 -56t22.5 -52.5t49.5 -41.5t81.5 -14 q78 2 134 29z" />
+<glyph unicode="&#xf174;" d="M1136 75l-62 183q-44 -22 -103 -22q-36 -1 -62 10.5t-38.5 31.5t-17.5 40.5t-5 43.5v398h257v194h-256v326h-188q-8 0 -9 -10q-5 -44 -17.5 -87t-39 -95t-77 -95t-118.5 -68v-165h130v-418q0 -57 21.5 -115t65 -111t121 -85.5t176.5 -30.5q69 1 136.5 25t85.5 50z M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf175;" horiz-adv-x="768" d="M765 237q8 -19 -5 -35l-350 -384q-10 -10 -23 -10q-14 0 -24 10l-355 384q-13 16 -5 35q9 19 29 19h224v1248q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1248h224q21 0 29 -19z" />
+<glyph unicode="&#xf176;" horiz-adv-x="768" d="M765 1043q-9 -19 -29 -19h-224v-1248q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1248h-224q-21 0 -29 19t5 35l350 384q10 10 23 10q14 0 24 -10l355 -384q13 -16 5 -35z" />
+<glyph unicode="&#xf177;" horiz-adv-x="1792" d="M1792 736v-192q0 -14 -9 -23t-23 -9h-1248v-224q0 -21 -19 -29t-35 5l-384 350q-10 10 -10 23q0 14 10 24l384 354q16 14 35 6q19 -9 19 -29v-224h1248q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf178;" horiz-adv-x="1792" d="M1728 643q0 -14 -10 -24l-384 -354q-16 -14 -35 -6q-19 9 -19 29v224h-1248q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h1248v224q0 21 19 29t35 -5l384 -350q10 -10 10 -23z" />
+<glyph unicode="&#xf179;" horiz-adv-x="1408" d="M1393 321q-39 -125 -123 -250q-129 -196 -257 -196q-49 0 -140 32q-86 32 -151 32q-61 0 -142 -33q-81 -34 -132 -34q-152 0 -301 259q-147 261 -147 503q0 228 113 374q112 144 284 144q72 0 177 -30q104 -30 138 -30q45 0 143 34q102 34 173 34q119 0 213 -65 q52 -36 104 -100q-79 -67 -114 -118q-65 -94 -65 -207q0 -124 69 -223t158 -126zM1017 1494q0 -61 -29 -136q-30 -75 -93 -138q-54 -54 -108 -72q-37 -11 -104 -17q3 149 78 257q74 107 250 148q1 -3 2.5 -11t2.5 -11q0 -4 0.5 -10t0.5 -10z" />
+<glyph unicode="&#xf17a;" horiz-adv-x="1664" d="M682 530v-651l-682 94v557h682zM682 1273v-659h-682v565zM1664 530v-786l-907 125v661h907zM1664 1408v-794h-907v669z" />
+<glyph unicode="&#xf17b;" horiz-adv-x="1408" d="M493 1053q16 0 27.5 11.5t11.5 27.5t-11.5 27.5t-27.5 11.5t-27 -11.5t-11 -27.5t11 -27.5t27 -11.5zM915 1053q16 0 27 11.5t11 27.5t-11 27.5t-27 11.5t-27.5 -11.5t-11.5 -27.5t11.5 -27.5t27.5 -11.5zM103 869q42 0 72 -30t30 -72v-430q0 -43 -29.5 -73t-72.5 -30 t-73 30t-30 73v430q0 42 30 72t73 30zM1163 850v-666q0 -46 -32 -78t-77 -32h-75v-227q0 -43 -30 -73t-73 -30t-73 30t-30 73v227h-138v-227q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73l-1 227h-74q-46 0 -78 32t-32 78v666h918zM931 1255q107 -55 171 -153.5t64 -215.5 h-925q0 117 64 215.5t172 153.5l-71 131q-7 13 5 20q13 6 20 -6l72 -132q95 42 201 42t201 -42l72 132q7 12 20 6q12 -7 5 -20zM1408 767v-430q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73v430q0 43 30 72.5t72 29.5q43 0 73 -29.5t30 -72.5z" />
+<glyph unicode="&#xf17c;" d="M663 1125q-11 -1 -15.5 -10.5t-8.5 -9.5q-5 -1 -5 5q0 12 19 15h10zM750 1111q-4 -1 -11.5 6.5t-17.5 4.5q24 11 32 -2q3 -6 -3 -9zM399 684q-4 1 -6 -3t-4.5 -12.5t-5.5 -13.5t-10 -13q-7 -10 -1 -12q4 -1 12.5 7t12.5 18q1 3 2 7t2 6t1.5 4.5t0.5 4v3t-1 2.5t-3 2z M1254 325q0 18 -55 42q4 15 7.5 27.5t5 26t3 21.5t0.5 22.5t-1 19.5t-3.5 22t-4 20.5t-5 25t-5.5 26.5q-10 48 -47 103t-72 75q24 -20 57 -83q87 -162 54 -278q-11 -40 -50 -42q-31 -4 -38.5 18.5t-8 83.5t-11.5 107q-9 39 -19.5 69t-19.5 45.5t-15.5 24.5t-13 15t-7.5 7 q-14 62 -31 103t-29.5 56t-23.5 33t-15 40q-4 21 6 53.5t4.5 49.5t-44.5 25q-15 3 -44.5 18t-35.5 16q-8 1 -11 26t8 51t36 27q37 3 51 -30t4 -58q-11 -19 -2 -26.5t30 -0.5q13 4 13 36v37q-5 30 -13.5 50t-21 30.5t-23.5 15t-27 7.5q-107 -8 -89 -134q0 -15 -1 -15 q-9 9 -29.5 10.5t-33 -0.5t-15.5 5q1 57 -16 90t-45 34q-27 1 -41.5 -27.5t-16.5 -59.5q-1 -15 3.5 -37t13 -37.5t15.5 -13.5q10 3 16 14q4 9 -7 8q-7 0 -15.5 14.5t-9.5 33.5q-1 22 9 37t34 14q17 0 27 -21t9.5 -39t-1.5 -22q-22 -15 -31 -29q-8 -12 -27.5 -23.5 t-20.5 -12.5q-13 -14 -15.5 -27t7.5 -18q14 -8 25 -19.5t16 -19t18.5 -13t35.5 -6.5q47 -2 102 15q2 1 23 7t34.5 10.5t29.5 13t21 17.5q9 14 20 8q5 -3 6.5 -8.5t-3 -12t-16.5 -9.5q-20 -6 -56.5 -21.5t-45.5 -19.5q-44 -19 -70 -23q-25 -5 -79 2q-10 2 -9 -2t17 -19 q25 -23 67 -22q17 1 36 7t36 14t33.5 17.5t30 17t24.5 12t17.5 2.5t8.5 -11q0 -2 -1 -4.5t-4 -5t-6 -4.5t-8.5 -5t-9 -4.5t-10 -5t-9.5 -4.5q-28 -14 -67.5 -44t-66.5 -43t-49 -1q-21 11 -63 73q-22 31 -25 22q-1 -3 -1 -10q0 -25 -15 -56.5t-29.5 -55.5t-21 -58t11.5 -63 q-23 -6 -62.5 -90t-47.5 -141q-2 -18 -1.5 -69t-5.5 -59q-8 -24 -29 -3q-32 31 -36 94q-2 28 4 56q4 19 -1 18l-4 -5q-36 -65 10 -166q5 -12 25 -28t24 -20q20 -23 104 -90.5t93 -76.5q16 -15 17.5 -38t-14 -43t-45.5 -23q8 -15 29 -44.5t28 -54t7 -70.5q46 24 7 92 q-4 8 -10.5 16t-9.5 12t-2 6q3 5 13 9.5t20 -2.5q46 -52 166 -36q133 15 177 87q23 38 34 30q12 -6 10 -52q-1 -25 -23 -92q-9 -23 -6 -37.5t24 -15.5q3 19 14.5 77t13.5 90q2 21 -6.5 73.5t-7.5 97t23 70.5q15 18 51 18q1 37 34.5 53t72.5 10.5t60 -22.5zM626 1152 q3 17 -2.5 30t-11.5 15q-9 2 -9 -7q2 -5 5 -6q10 0 7 -15q-3 -20 8 -20q3 0 3 3zM1045 955q-2 8 -6.5 11.5t-13 5t-14.5 5.5q-5 3 -9.5 8t-7 8t-5.5 6.5t-4 4t-4 -1.5q-14 -16 7 -43.5t39 -31.5q9 -1 14.5 8t3.5 20zM867 1168q0 11 -5 19.5t-11 12.5t-9 3q-14 -1 -7 -7l4 -2 q14 -4 18 -31q0 -3 8 2zM921 1401q0 2 -2.5 5t-9 7t-9.5 6q-15 15 -24 15q-9 -1 -11.5 -7.5t-1 -13t-0.5 -12.5q-1 -4 -6 -10.5t-6 -9t3 -8.5q4 -3 8 0t11 9t15 9q1 1 9 1t15 2t9 7zM1486 60q20 -12 31 -24.5t12 -24t-2.5 -22.5t-15.5 -22t-23.5 -19.5t-30 -18.5 t-31.5 -16.5t-32 -15.5t-27 -13q-38 -19 -85.5 -56t-75.5 -64q-17 -16 -68 -19.5t-89 14.5q-18 9 -29.5 23.5t-16.5 25.5t-22 19.5t-47 9.5q-44 1 -130 1q-19 0 -57 -1.5t-58 -2.5q-44 -1 -79.5 -15t-53.5 -30t-43.5 -28.5t-53.5 -11.5q-29 1 -111 31t-146 43q-19 4 -51 9.5 t-50 9t-39.5 9.5t-33.5 14.5t-17 19.5q-10 23 7 66.5t18 54.5q1 16 -4 40t-10 42.5t-4.5 36.5t10.5 27q14 12 57 14t60 12q30 18 42 35t12 51q21 -73 -32 -106q-32 -20 -83 -15q-34 3 -43 -10q-13 -15 5 -57q2 -6 8 -18t8.5 -18t4.5 -17t1 -22q0 -15 -17 -49t-14 -48 q3 -17 37 -26q20 -6 84.5 -18.5t99.5 -20.5q24 -6 74 -22t82.5 -23t55.5 -4q43 6 64.5 28t23 48t-7.5 58.5t-19 52t-20 36.5q-121 190 -169 242q-68 74 -113 40q-11 -9 -15 15q-3 16 -2 38q1 29 10 52t24 47t22 42q8 21 26.5 72t29.5 78t30 61t39 54q110 143 124 195 q-12 112 -16 310q-2 90 24 151.5t106 104.5q39 21 104 21q53 1 106 -13.5t89 -41.5q57 -42 91.5 -121.5t29.5 -147.5q-5 -95 30 -214q34 -113 133 -218q55 -59 99.5 -163t59.5 -191q8 -49 5 -84.5t-12 -55.5t-20 -22q-10 -2 -23.5 -19t-27 -35.5t-40.5 -33.5t-61 -14 q-18 1 -31.5 5t-22.5 13.5t-13.5 15.5t-11.5 20.5t-9 19.5q-22 37 -41 30t-28 -49t7 -97q20 -70 1 -195q-10 -65 18 -100.5t73 -33t85 35.5q59 49 89.5 66.5t103.5 42.5q53 18 77 36.5t18.5 34.5t-25 28.5t-51.5 23.5q-33 11 -49.5 48t-15 72.5t15.5 47.5q1 -31 8 -56.5 t14.5 -40.5t20.5 -28.5t21 -19t21.5 -13t16.5 -9.5z" />
+<glyph unicode="&#xf17d;" d="M1024 36q-42 241 -140 498h-2l-2 -1q-16 -6 -43 -16.5t-101 -49t-137 -82t-131 -114.5t-103 -148l-15 11q184 -150 418 -150q132 0 256 52zM839 643q-21 49 -53 111q-311 -93 -673 -93q-1 -7 -1 -21q0 -124 44 -236.5t124 -201.5q50 89 123.5 166.5t142.5 124.5t130.5 81 t99.5 48l37 13q4 1 13 3.5t13 4.5zM732 855q-120 213 -244 378q-138 -65 -234 -186t-128 -272q302 0 606 80zM1416 536q-210 60 -409 29q87 -239 128 -469q111 75 185 189.5t96 250.5zM611 1277q-1 0 -2 -1q1 1 2 1zM1201 1132q-185 164 -433 164q-76 0 -155 -19 q131 -170 246 -382q69 26 130 60.5t96.5 61.5t65.5 57t37.5 40.5zM1424 647q-3 232 -149 410l-1 -1q-9 -12 -19 -24.5t-43.5 -44.5t-71 -60.5t-100 -65t-131.5 -64.5q25 -53 44 -95q2 -6 6.5 -17.5t7.5 -16.5q36 5 74.5 7t73.5 2t69 -1.5t64 -4t56.5 -5.5t48 -6.5t36.5 -6 t25 -4.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf17e;" d="M1173 473q0 50 -19.5 91.5t-48.5 68.5t-73 49t-82.5 34t-87.5 23l-104 24q-30 7 -44 10.5t-35 11.5t-30 16t-16.5 21t-7.5 30q0 77 144 77q43 0 77 -12t54 -28.5t38 -33.5t40 -29t48 -12q47 0 75.5 32t28.5 77q0 55 -56 99.5t-142 67.5t-182 23q-68 0 -132 -15.5 t-119.5 -47t-89 -87t-33.5 -128.5q0 -61 19 -106.5t56 -75.5t80 -48.5t103 -32.5l146 -36q90 -22 112 -36q32 -20 32 -60q0 -39 -40 -64.5t-105 -25.5q-51 0 -91.5 16t-65 38.5t-45.5 45t-46 38.5t-54 16q-50 0 -75.5 -30t-25.5 -75q0 -92 122 -157.5t291 -65.5 q73 0 140 18.5t122.5 53.5t88.5 93.5t33 131.5zM1536 256q0 -159 -112.5 -271.5t-271.5 -112.5q-130 0 -234 80q-77 -16 -150 -16q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5q0 73 16 150q-80 104 -80 234q0 159 112.5 271.5t271.5 112.5q130 0 234 -80 q77 16 150 16q143 0 273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -73 -16 -150q80 -104 80 -234z" />
+<glyph unicode="&#xf180;" horiz-adv-x="1280" d="M1000 1102l37 194q5 23 -9 40t-35 17h-712q-23 0 -38.5 -17t-15.5 -37v-1101q0 -7 6 -1l291 352q23 26 38 33.5t48 7.5h239q22 0 37 14.5t18 29.5q24 130 37 191q4 21 -11.5 40t-36.5 19h-294q-29 0 -48 19t-19 48v42q0 29 19 47.5t48 18.5h346q18 0 35 13.5t20 29.5z M1227 1324q-15 -73 -53.5 -266.5t-69.5 -350t-35 -173.5q-6 -22 -9 -32.5t-14 -32.5t-24.5 -33t-38.5 -21t-58 -10h-271q-13 0 -22 -10q-8 -9 -426 -494q-22 -25 -58.5 -28.5t-48.5 5.5q-55 22 -55 98v1410q0 55 38 102.5t120 47.5h888q95 0 127 -53t10 -159zM1227 1324 l-158 -790q4 17 35 173.5t69.5 350t53.5 266.5z" />
+<glyph unicode="&#xf181;" d="M704 192v1024q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-1024q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1376 576v640q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-640q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408 q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf182;" horiz-adv-x="1280" d="M1280 480q0 -40 -28 -68t-68 -28q-51 0 -80 43l-227 341h-45v-132l247 -411q9 -15 9 -33q0 -26 -19 -45t-45 -19h-192v-272q0 -46 -33 -79t-79 -33h-160q-46 0 -79 33t-33 79v272h-192q-26 0 -45 19t-19 45q0 18 9 33l247 411v132h-45l-227 -341q-29 -43 -80 -43 q-40 0 -68 28t-28 68q0 29 16 53l256 384q73 107 176 107h384q103 0 176 -107l256 -384q16 -24 16 -53zM864 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
+<glyph unicode="&#xf183;" horiz-adv-x="1024" d="M1024 832v-416q0 -40 -28 -68t-68 -28t-68 28t-28 68v352h-64v-912q0 -46 -33 -79t-79 -33t-79 33t-33 79v464h-64v-464q0 -46 -33 -79t-79 -33t-79 33t-33 79v912h-64v-352q0 -40 -28 -68t-68 -28t-68 28t-28 68v416q0 80 56 136t136 56h640q80 0 136 -56t56 -136z M736 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
+<glyph unicode="&#xf184;" d="M773 234l350 473q16 22 24.5 59t-6 85t-61.5 79q-40 26 -83 25.5t-73.5 -17.5t-54.5 -45q-36 -40 -96 -40q-59 0 -95 40q-24 28 -54.5 45t-73.5 17.5t-84 -25.5q-46 -31 -60.5 -79t-6 -85t24.5 -59zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf185;" horiz-adv-x="1792" d="M1472 640q0 117 -45.5 223.5t-123 184t-184 123t-223.5 45.5t-223.5 -45.5t-184 -123t-123 -184t-45.5 -223.5t45.5 -223.5t123 -184t184 -123t223.5 -45.5t223.5 45.5t184 123t123 184t45.5 223.5zM1748 363q-4 -15 -20 -20l-292 -96v-306q0 -16 -13 -26q-15 -10 -29 -4 l-292 94l-180 -248q-10 -13 -26 -13t-26 13l-180 248l-292 -94q-14 -6 -29 4q-13 10 -13 26v306l-292 96q-16 5 -20 20q-5 17 4 29l180 248l-180 248q-9 13 -4 29q4 15 20 20l292 96v306q0 16 13 26q15 10 29 4l292 -94l180 248q9 12 26 12t26 -12l180 -248l292 94 q14 6 29 -4q13 -10 13 -26v-306l292 -96q16 -5 20 -20q5 -16 -4 -29l-180 -248l180 -248q9 -12 4 -29z" />
+<glyph unicode="&#xf186;" d="M1262 233q-54 -9 -110 -9q-182 0 -337 90t-245 245t-90 337q0 192 104 357q-201 -60 -328.5 -229t-127.5 -384q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51q144 0 273.5 61.5t220.5 171.5zM1465 318q-94 -203 -283.5 -324.5t-413.5 -121.5q-156 0 -298 61 t-245 164t-164 245t-61 298q0 153 57.5 292.5t156 241.5t235.5 164.5t290 68.5q44 2 61 -39q18 -41 -15 -72q-86 -78 -131.5 -181.5t-45.5 -218.5q0 -148 73 -273t198 -198t273 -73q118 0 228 51q41 18 72 -13q14 -14 17.5 -34t-4.5 -38z" />
+<glyph unicode="&#xf187;" horiz-adv-x="1792" d="M1088 704q0 26 -19 45t-45 19h-256q-26 0 -45 -19t-19 -45t19 -45t45 -19h256q26 0 45 19t19 45zM1664 896v-960q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v960q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1728 1344v-256q0 -26 -19 -45t-45 -19h-1536 q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1536q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf188;" horiz-adv-x="1664" d="M1632 576q0 -26 -19 -45t-45 -19h-224q0 -171 -67 -290l208 -209q19 -19 19 -45t-19 -45q-18 -19 -45 -19t-45 19l-198 197q-5 -5 -15 -13t-42 -28.5t-65 -36.5t-82 -29t-97 -13v896h-128v-896q-51 0 -101.5 13.5t-87 33t-66 39t-43.5 32.5l-15 14l-183 -207 q-20 -21 -48 -21q-24 0 -43 16q-19 18 -20.5 44.5t15.5 46.5l202 227q-58 114 -58 274h-224q-26 0 -45 19t-19 45t19 45t45 19h224v294l-173 173q-19 19 -19 45t19 45t45 19t45 -19l173 -173h844l173 173q19 19 45 19t45 -19t19 -45t-19 -45l-173 -173v-294h224q26 0 45 -19 t19 -45zM1152 1152h-640q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5z" />
+<glyph unicode="&#xf189;" horiz-adv-x="1920" d="M1917 1016q23 -64 -150 -294q-24 -32 -65 -85q-78 -100 -90 -131q-17 -41 14 -81q17 -21 81 -82h1l1 -1l1 -1l2 -2q141 -131 191 -221q3 -5 6.5 -12.5t7 -26.5t-0.5 -34t-25 -27.5t-59 -12.5l-256 -4q-24 -5 -56 5t-52 22l-20 12q-30 21 -70 64t-68.5 77.5t-61 58 t-56.5 15.5q-3 -1 -8 -3.5t-17 -14.5t-21.5 -29.5t-17 -52t-6.5 -77.5q0 -15 -3.5 -27.5t-7.5 -18.5l-4 -5q-18 -19 -53 -22h-115q-71 -4 -146 16.5t-131.5 53t-103 66t-70.5 57.5l-25 24q-10 10 -27.5 30t-71.5 91t-106 151t-122.5 211t-130.5 272q-6 16 -6 27t3 16l4 6 q15 19 57 19l274 2q12 -2 23 -6.5t16 -8.5l5 -3q16 -11 24 -32q20 -50 46 -103.5t41 -81.5l16 -29q29 -60 56 -104t48.5 -68.5t41.5 -38.5t34 -14t27 5q2 1 5 5t12 22t13.5 47t9.5 81t0 125q-2 40 -9 73t-14 46l-6 12q-25 34 -85 43q-13 2 5 24q17 19 38 30q53 26 239 24 q82 -1 135 -13q20 -5 33.5 -13.5t20.5 -24t10.5 -32t3.5 -45.5t-1 -55t-2.5 -70.5t-1.5 -82.5q0 -11 -1 -42t-0.5 -48t3.5 -40.5t11.5 -39t22.5 -24.5q8 -2 17 -4t26 11t38 34.5t52 67t68 107.5q60 104 107 225q4 10 10 17.5t11 10.5l4 3l5 2.5t13 3t20 0.5l288 2 q39 5 64 -2.5t31 -16.5z" />
+<glyph unicode="&#xf18a;" horiz-adv-x="1792" d="M675 252q21 34 11 69t-45 50q-34 14 -73 1t-60 -46q-22 -34 -13 -68.5t43 -50.5t74.5 -2.5t62.5 47.5zM769 373q8 13 3.5 26.5t-17.5 18.5q-14 5 -28.5 -0.5t-21.5 -18.5q-17 -31 13 -45q14 -5 29 0.5t22 18.5zM943 266q-45 -102 -158 -150t-224 -12 q-107 34 -147.5 126.5t6.5 187.5q47 93 151.5 139t210.5 19q111 -29 158.5 -119.5t2.5 -190.5zM1255 426q-9 96 -89 170t-208.5 109t-274.5 21q-223 -23 -369.5 -141.5t-132.5 -264.5q9 -96 89 -170t208.5 -109t274.5 -21q223 23 369.5 141.5t132.5 264.5zM1563 422 q0 -68 -37 -139.5t-109 -137t-168.5 -117.5t-226 -83t-270.5 -31t-275 33.5t-240.5 93t-171.5 151t-65 199.5q0 115 69.5 245t197.5 258q169 169 341.5 236t246.5 -7q65 -64 20 -209q-4 -14 -1 -20t10 -7t14.5 0.5t13.5 3.5l6 2q139 59 246 59t153 -61q45 -63 0 -178 q-2 -13 -4.5 -20t4.5 -12.5t12 -7.5t17 -6q57 -18 103 -47t80 -81.5t34 -116.5zM1489 1046q42 -47 54.5 -108.5t-6.5 -117.5q-8 -23 -29.5 -34t-44.5 -4q-23 8 -34 29.5t-4 44.5q20 63 -24 111t-107 35q-24 -5 -45 8t-25 37q-5 24 8 44.5t37 25.5q60 13 119 -5.5t101 -65.5z M1670 1209q87 -96 112.5 -222.5t-13.5 -241.5q-9 -27 -34 -40t-52 -4t-40 34t-5 52q28 82 10 172t-80 158q-62 69 -148 95.5t-173 8.5q-28 -6 -52 9.5t-30 43.5t9.5 51.5t43.5 29.5q123 26 244 -11.5t208 -134.5z" />
+<glyph unicode="&#xf18b;" d="M1133 -34q-171 -94 -368 -94q-196 0 -367 94q138 87 235.5 211t131.5 268q35 -144 132.5 -268t235.5 -211zM638 1394v-485q0 -252 -126.5 -459.5t-330.5 -306.5q-181 215 -181 495q0 187 83.5 349.5t229.5 269.5t325 137zM1536 638q0 -280 -181 -495 q-204 99 -330.5 306.5t-126.5 459.5v485q179 -30 325 -137t229.5 -269.5t83.5 -349.5z" />
+<glyph unicode="&#xf18c;" horiz-adv-x="1408" d="M1402 433q-32 -80 -76 -138t-91 -88.5t-99 -46.5t-101.5 -14.5t-96.5 8.5t-86.5 22t-69.5 27.5t-46 22.5l-17 10q-113 -228 -289.5 -359.5t-384.5 -132.5q-19 0 -32 13t-13 32t13 31.5t32 12.5q173 1 322.5 107.5t251.5 294.5q-36 -14 -72 -23t-83 -13t-91 2.5t-93 28.5 t-92 59t-84.5 100t-74.5 146q114 47 214 57t167.5 -7.5t124.5 -56.5t88.5 -77t56.5 -82q53 131 79 291q-7 -1 -18 -2.5t-46.5 -2.5t-69.5 0.5t-81.5 10t-88.5 23t-84 42.5t-75 65t-54.5 94.5t-28.5 127.5q70 28 133.5 36.5t112.5 -1t92 -30t73.5 -50t56 -61t42 -63t27.5 -56 t16 -39.5l4 -16q12 122 12 195q-8 6 -21.5 16t-49 44.5t-63.5 71.5t-54 93t-33 112.5t12 127t70 138.5q73 -25 127.5 -61.5t84.5 -76.5t48 -85t20.5 -89t-0.5 -85.5t-13 -76.5t-19 -62t-17 -42l-7 -15q1 -5 1 -50.5t-1 -71.5q3 7 10 18.5t30.5 43t50.5 58t71 55.5t91.5 44.5 t112 14.5t132.5 -24q-2 -78 -21.5 -141.5t-50 -104.5t-69.5 -71.5t-81.5 -45.5t-84.5 -24t-80 -9.5t-67.5 1t-46.5 4.5l-17 3q-23 -147 -73 -283q6 7 18 18.5t49.5 41t77.5 52.5t99.5 42t117.5 20t129 -23.5t137 -77.5z" />
+<glyph unicode="&#xf18d;" horiz-adv-x="1280" d="M1259 283v-66q0 -85 -57.5 -144.5t-138.5 -59.5h-57l-260 -269v269h-529q-81 0 -138.5 59.5t-57.5 144.5v66h1238zM1259 609v-255h-1238v255h1238zM1259 937v-255h-1238v255h1238zM1259 1077v-67h-1238v67q0 84 57.5 143.5t138.5 59.5h846q81 0 138.5 -59.5t57.5 -143.5z " />
+<glyph unicode="&#xf18e;" d="M1152 640q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192h-352q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h352v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198 t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf190;" d="M1152 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-352v-192q0 -14 -9 -23t-23 -9q-12 0 -24 10l-319 319q-9 9 -9 23t9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h352q13 0 22.5 -9.5t9.5 -22.5zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198 t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf191;" d="M1024 960v-640q0 -26 -19 -45t-45 -19q-20 0 -37 12l-448 320q-27 19 -27 52t27 52l448 320q17 12 37 12q26 0 45 -19t19 -45zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5z M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf192;" d="M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5 t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf193;" horiz-adv-x="1664" d="M1023 349l102 -204q-58 -179 -210 -290t-339 -111q-156 0 -288.5 77.5t-210 210t-77.5 288.5q0 181 104.5 330t274.5 211l17 -131q-122 -54 -195 -165.5t-73 -244.5q0 -185 131.5 -316.5t316.5 -131.5q126 0 232.5 65t165 175.5t49.5 236.5zM1571 249l58 -114l-256 -128 q-13 -7 -29 -7q-40 0 -57 35l-239 477h-472q-24 0 -42.5 16.5t-21.5 40.5l-96 779q-2 16 6 42q14 51 57 82.5t97 31.5q66 0 113 -47t47 -113q0 -69 -52 -117.5t-120 -41.5l37 -289h423v-128h-407l16 -128h455q40 0 57 -35l228 -455z" />
+<glyph unicode="&#xf194;" d="M1254 899q16 85 -21 132q-52 65 -187 45q-17 -3 -41 -12.5t-57.5 -30.5t-64.5 -48.5t-59.5 -70t-44.5 -91.5q80 7 113.5 -16t26.5 -99q-5 -52 -52 -143q-43 -78 -71 -99q-44 -32 -87 14q-23 24 -37.5 64.5t-19 73t-10 84t-8.5 71.5q-23 129 -34 164q-12 37 -35.5 69 t-50.5 40q-57 16 -127 -25q-54 -32 -136.5 -106t-122.5 -102v-7q16 -8 25.5 -26t21.5 -20q21 -3 54.5 8.5t58 10.5t41.5 -30q11 -18 18.5 -38.5t15 -48t12.5 -40.5q17 -46 53 -187q36 -146 57 -197q42 -99 103 -125q43 -12 85 -1.5t76 31.5q131 77 250 237 q104 139 172.5 292.5t82.5 226.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf195;" horiz-adv-x="1152" d="M1152 704q0 -191 -94.5 -353t-256.5 -256.5t-353 -94.5h-160q-14 0 -23 9t-9 23v611l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v93l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v250q0 14 9 23t23 9h160 q14 0 23 -9t9 -23v-181l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-93l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-487q188 13 318 151t130 328q0 14 9 23t23 9h160q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf196;" horiz-adv-x="1408" d="M1152 736v-64q0 -14 -9 -23t-23 -9h-352v-352q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v352h-352q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h352v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-352h352q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832 q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf197;" horiz-adv-x="2176" d="M620 416q-110 -64 -268 -64h-128v64h-64q-13 0 -22.5 23.5t-9.5 56.5q0 24 7 49q-58 2 -96.5 10.5t-38.5 20.5t38.5 20.5t96.5 10.5q-7 25 -7 49q0 33 9.5 56.5t22.5 23.5h64v64h128q158 0 268 -64h1113q42 -7 106.5 -18t80.5 -14q89 -15 150 -40.5t83.5 -47.5t22.5 -40 t-22.5 -40t-83.5 -47.5t-150 -40.5q-16 -3 -80.5 -14t-106.5 -18h-1113zM1739 668q53 -36 53 -92t-53 -92l81 -30q68 48 68 122t-68 122zM625 400h1015q-217 -38 -456 -80q-57 0 -113 -24t-83 -48l-28 -24l-288 -288q-26 -26 -70.5 -45t-89.5 -19h-96l-93 464h29 q157 0 273 64zM352 816h-29l93 464h96q46 0 90 -19t70 -45l288 -288q4 -4 11 -10.5t30.5 -23t48.5 -29t61.5 -23t72.5 -10.5l456 -80h-1015q-116 64 -273 64z" />
+<glyph unicode="&#xf198;" horiz-adv-x="1664" d="M1519 760q62 0 103.5 -40.5t41.5 -101.5q0 -97 -93 -130l-172 -59l56 -167q7 -21 7 -47q0 -59 -42 -102t-101 -43q-47 0 -85.5 27t-53.5 72l-55 165l-310 -106l55 -164q8 -24 8 -47q0 -59 -42 -102t-102 -43q-47 0 -85 27t-53 72l-55 163l-153 -53q-29 -9 -50 -9 q-61 0 -101.5 40t-40.5 101q0 47 27.5 85t71.5 53l156 53l-105 313l-156 -54q-26 -8 -48 -8q-60 0 -101 40.5t-41 100.5q0 47 27.5 85t71.5 53l157 53l-53 159q-8 24 -8 47q0 60 42 102.5t102 42.5q47 0 85 -27t53 -72l54 -160l310 105l-54 160q-8 24 -8 47q0 59 42.5 102 t101.5 43q47 0 85.5 -27.5t53.5 -71.5l53 -161l162 55q21 6 43 6q60 0 102.5 -39.5t42.5 -98.5q0 -45 -30 -81.5t-74 -51.5l-157 -54l105 -316l164 56q24 8 46 8zM725 498l310 105l-105 315l-310 -107z" />
+<glyph unicode="&#xf199;" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM1280 352v436q-31 -35 -64 -55q-34 -22 -132.5 -85t-151.5 -99q-98 -69 -164 -69v0v0q-66 0 -164 69 q-46 32 -141.5 92.5t-142.5 92.5q-12 8 -33 27t-31 27v-436q0 -40 28 -68t68 -28h832q40 0 68 28t28 68zM1280 925q0 41 -27.5 70t-68.5 29h-832q-40 0 -68 -28t-28 -68q0 -37 30.5 -76.5t67.5 -64.5q47 -32 137.5 -89t129.5 -83q3 -2 17 -11.5t21 -14t21 -13t23.5 -13 t21.5 -9.5t22.5 -7.5t20.5 -2.5t20.5 2.5t22.5 7.5t21.5 9.5t23.5 13t21 13t21 14t17 11.5l267 174q35 23 66.5 62.5t31.5 73.5z" />
+<glyph unicode="&#xf19a;" horiz-adv-x="1792" d="M127 640q0 163 67 313l367 -1005q-196 95 -315 281t-119 411zM1415 679q0 -19 -2.5 -38.5t-10 -49.5t-11.5 -44t-17.5 -59t-17.5 -58l-76 -256l-278 826q46 3 88 8q19 2 26 18.5t-2.5 31t-28.5 13.5l-205 -10q-75 1 -202 10q-12 1 -20.5 -5t-11.5 -15t-1.5 -18.5t9 -16.5 t19.5 -8l80 -8l120 -328l-168 -504l-280 832q46 3 88 8q19 2 26 18.5t-2.5 31t-28.5 13.5l-205 -10q-7 0 -23 0.5t-26 0.5q105 160 274.5 253.5t367.5 93.5q147 0 280.5 -53t238.5 -149h-10q-55 0 -92 -40.5t-37 -95.5q0 -12 2 -24t4 -21.5t8 -23t9 -21t12 -22.5t12.5 -21 t14.5 -24t14 -23q63 -107 63 -212zM909 573l237 -647q1 -6 5 -11q-126 -44 -255 -44q-112 0 -217 32zM1570 1009q95 -174 95 -369q0 -209 -104 -385.5t-279 -278.5l235 678q59 169 59 276q0 42 -6 79zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286 t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM896 -215q173 0 331.5 68t273 182.5t182.5 273t68 331.5t-68 331.5t-182.5 273t-273 182.5t-331.5 68t-331.5 -68t-273 -182.5t-182.5 -273t-68 -331.5t68 -331.5t182.5 -273 t273 -182.5t331.5 -68z" />
+<glyph unicode="&#xf19b;" horiz-adv-x="1792" d="M1086 1536v-1536l-272 -128q-228 20 -414 102t-293 208.5t-107 272.5q0 140 100.5 263.5t275 205.5t391.5 108v-172q-217 -38 -356.5 -150t-139.5 -255q0 -152 154.5 -267t388.5 -145v1360zM1755 954l37 -390l-525 114l147 83q-119 70 -280 99v172q277 -33 481 -157z" />
+<glyph unicode="&#xf19c;" horiz-adv-x="2048" d="M960 1536l960 -384v-128h-128q0 -26 -20.5 -45t-48.5 -19h-1526q-28 0 -48.5 19t-20.5 45h-128v128zM256 896h256v-768h128v768h256v-768h128v768h256v-768h128v768h256v-768h59q28 0 48.5 -19t20.5 -45v-64h-1664v64q0 26 20.5 45t48.5 19h59v768zM1851 -64 q28 0 48.5 -19t20.5 -45v-128h-1920v128q0 26 20.5 45t48.5 19h1782z" />
+<glyph unicode="&#xf19d;" horiz-adv-x="2304" d="M1774 700l18 -316q4 -69 -82 -128t-235 -93.5t-323 -34.5t-323 34.5t-235 93.5t-82 128l18 316l574 -181q22 -7 48 -7t48 7zM2304 1024q0 -23 -22 -31l-1120 -352q-4 -1 -10 -1t-10 1l-652 206q-43 -34 -71 -111.5t-34 -178.5q63 -36 63 -109q0 -69 -58 -107l58 -433 q2 -14 -8 -25q-9 -11 -24 -11h-192q-15 0 -24 11q-10 11 -8 25l58 433q-58 38 -58 107q0 73 65 111q11 207 98 330l-333 104q-22 8 -22 31t22 31l1120 352q4 1 10 1t10 -1l1120 -352q22 -8 22 -31z" />
+<glyph unicode="&#xf19e;" d="M859 579l13 -707q-62 11 -105 11q-41 0 -105 -11l13 707q-40 69 -168.5 295.5t-216.5 374.5t-181 287q58 -15 108 -15q43 0 111 15q63 -111 133.5 -229.5t167 -276.5t138.5 -227q37 61 109.5 177.5t117.5 190t105 176t107 189.5q54 -14 107 -14q56 0 114 14v0 q-28 -39 -60 -88.5t-49.5 -78.5t-56.5 -96t-49 -84q-146 -248 -353 -610z" />
+<glyph unicode="&#xf1a0;" horiz-adv-x="1280" d="M981 197q0 25 -7 49t-14.5 42t-27 41.5t-29.5 35t-38.5 34.5t-36.5 29t-41.5 30t-36.5 26q-16 2 -49 2q-53 0 -104.5 -7t-107 -25t-97 -46t-68.5 -74.5t-27 -105.5q0 -56 23.5 -102t61 -75.5t87 -50t100 -29t101.5 -8.5q58 0 111.5 13t99 39t73 73t27.5 109zM864 1055 q0 59 -17 125.5t-48 129t-84 103.5t-117 41q-42 0 -82.5 -19.5t-66.5 -52.5q-46 -59 -46 -160q0 -46 10 -97.5t31.5 -103t52 -92.5t75 -67t96.5 -26q37 0 77.5 16.5t65.5 43.5q53 56 53 159zM752 1536h417l-137 -88h-132q75 -63 113 -133t38 -160q0 -72 -24.5 -129.5 t-59.5 -93t-69.5 -65t-59 -61.5t-24.5 -66q0 -36 32 -70.5t77 -68t90.5 -73.5t77.5 -104t32 -142q0 -91 -49 -173q-71 -122 -209.5 -179.5t-298.5 -57.5q-132 0 -246.5 41.5t-172.5 137.5q-36 59 -36 131q0 81 44.5 150t118.5 115q131 82 404 100q-32 41 -47.5 73.5 t-15.5 73.5q0 40 21 85q-46 -4 -68 -4q-148 0 -249.5 96.5t-101.5 244.5q0 82 36 159t99 131q76 66 182 98t218 32z" />
+<glyph unicode="&#xf1a1;" horiz-adv-x="1984" d="M831 572q0 -56 -40.5 -96t-96.5 -40q-57 0 -98 40t-41 96q0 57 41.5 98t97.5 41t96.5 -41t40.5 -98zM1292 711q56 0 96.5 -41t40.5 -98q0 -56 -40.5 -96t-96.5 -40q-57 0 -98 40t-41 96q0 57 41.5 98t97.5 41zM1984 722q0 -62 -31 -114t-83 -82q5 -33 5 -61 q0 -121 -68.5 -230.5t-197.5 -193.5q-125 -82 -285.5 -125.5t-335.5 -43.5q-176 0 -336.5 43.5t-284.5 125.5q-129 84 -197.5 193t-68.5 231q0 29 5 66q-48 31 -77 81.5t-29 109.5q0 94 66 160t160 66q83 0 148 -55q248 158 592 164l134 423q4 14 17.5 21.5t28.5 4.5 l347 -82q22 50 68.5 81t102.5 31q77 0 131.5 -54.5t54.5 -131.5t-54.5 -132t-131.5 -55q-76 0 -130.5 54t-55.5 131l-315 74l-116 -366q327 -14 560 -166q64 58 151 58q94 0 160 -66t66 -160zM1664 1459q-45 0 -77 -32t-32 -77t32 -77t77 -32t77 32t32 77t-32 77t-77 32z M77 722q0 -67 51 -111q49 131 180 235q-36 25 -82 25q-62 0 -105.5 -43.5t-43.5 -105.5zM1567 105q112 73 171.5 166t59.5 194t-59.5 193.5t-171.5 165.5q-116 75 -265.5 115.5t-313.5 40.5t-313.5 -40.5t-265.5 -115.5q-112 -73 -171.5 -165.5t-59.5 -193.5t59.5 -194 t171.5 -166q116 -75 265.5 -115.5t313.5 -40.5t313.5 40.5t265.5 115.5zM1850 605q57 46 57 117q0 62 -43.5 105.5t-105.5 43.5q-49 0 -86 -28q131 -105 178 -238zM1258 237q11 11 27 11t27 -11t11 -27.5t-11 -27.5q-99 -99 -319 -99h-2q-220 0 -319 99q-11 11 -11 27.5 t11 27.5t27 11t27 -11q77 -77 265 -77h2q188 0 265 77z" />
+<glyph unicode="&#xf1a2;" d="M950 393q7 7 17.5 7t17.5 -7t7 -18t-7 -18q-65 -64 -208 -64h-1h-1q-143 0 -207 64q-8 7 -8 18t8 18q7 7 17.5 7t17.5 -7q49 -51 172 -51h1h1q122 0 173 51zM671 613q0 -37 -26 -64t-63 -27t-63 27t-26 64t26 63t63 26t63 -26t26 -63zM1214 1049q-29 0 -50 21t-21 50 q0 30 21 51t50 21q30 0 51 -21t21 -51q0 -29 -21 -50t-51 -21zM1216 1408q132 0 226 -94t94 -227v-894q0 -133 -94 -227t-226 -94h-896q-132 0 -226 94t-94 227v894q0 133 94 227t226 94h896zM1321 596q35 14 57 45.5t22 70.5q0 51 -36 87.5t-87 36.5q-60 0 -98 -48 q-151 107 -375 115l83 265l206 -49q1 -50 36.5 -85t84.5 -35q50 0 86 35.5t36 85.5t-36 86t-86 36q-36 0 -66 -20.5t-45 -53.5l-227 54q-9 2 -17.5 -2.5t-11.5 -14.5l-95 -302q-224 -4 -381 -113q-36 43 -93 43q-51 0 -87 -36.5t-36 -87.5q0 -37 19.5 -67.5t52.5 -45.5 q-7 -25 -7 -54q0 -98 74 -181.5t201.5 -132t278.5 -48.5q150 0 277.5 48.5t201.5 132t74 181.5q0 27 -6 54zM971 702q37 0 63 -26t26 -63t-26 -64t-63 -27t-63 27t-26 64t26 63t63 26z" />
+<glyph unicode="&#xf1a3;" d="M866 697l90 27v62q0 79 -58 135t-138 56t-138 -55.5t-58 -134.5v-283q0 -20 -14 -33.5t-33 -13.5t-32.5 13.5t-13.5 33.5v120h-151v-122q0 -82 57.5 -139t139.5 -57q81 0 138.5 56.5t57.5 136.5v280q0 19 13.5 33t33.5 14q19 0 32.5 -14t13.5 -33v-54zM1199 502v122h-150 v-126q0 -20 -13.5 -33.5t-33.5 -13.5q-19 0 -32.5 14t-13.5 33v123l-90 -26l-60 28v-123q0 -80 58 -137t139 -57t138.5 57t57.5 139zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103 t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf1a4;" horiz-adv-x="1920" d="M1062 824v118q0 42 -30 72t-72 30t-72 -30t-30 -72v-612q0 -175 -126 -299t-303 -124q-178 0 -303.5 125.5t-125.5 303.5v266h328v-262q0 -43 30 -72.5t72 -29.5t72 29.5t30 72.5v620q0 171 126.5 292t301.5 121q176 0 302 -122t126 -294v-136l-195 -58zM1592 602h328 v-266q0 -178 -125.5 -303.5t-303.5 -125.5q-177 0 -303 124.5t-126 300.5v268l131 -61l195 58v-270q0 -42 30 -71.5t72 -29.5t72 29.5t30 71.5v275z" />
+<glyph unicode="&#xf1a5;" d="M1472 160v480h-704v704h-480q-93 0 -158.5 -65.5t-65.5 -158.5v-480h704v-704h480q93 0 158.5 65.5t65.5 158.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5 t84.5 -203.5z" />
+<glyph unicode="&#xf1a6;" horiz-adv-x="2048" d="M328 1254h204v-983h-532v697h328v286zM328 435v369h-123v-369h123zM614 968v-697h205v697h-205zM614 1254v-204h205v204h-205zM901 968h533v-942h-533v163h328v82h-328v697zM1229 435v369h-123v-369h123zM1516 968h532v-942h-532v163h327v82h-327v697zM1843 435v369h-123 v-369h123z" />
+<glyph unicode="&#xf1a7;" d="M1046 516q0 -64 -38 -109t-91 -45q-43 0 -70 15v277q28 17 70 17q53 0 91 -45.5t38 -109.5zM703 944q0 -64 -38 -109.5t-91 -45.5q-43 0 -70 15v277q28 17 70 17q53 0 91 -45t38 -109zM1265 513q0 134 -88 229t-213 95q-20 0 -39 -3q-23 -78 -78 -136q-87 -95 -211 -101 v-636l211 41v206q51 -19 117 -19q125 0 213 95t88 229zM922 940q0 134 -88.5 229t-213.5 95q-74 0 -141 -36h-186v-840l211 41v206q55 -19 116 -19q125 0 213.5 95t88.5 229zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960 q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf1a8;" horiz-adv-x="2038" d="M1222 607q75 3 143.5 -20.5t118 -58.5t101 -94.5t84 -108t75.5 -120.5q33 -56 78.5 -109t75.5 -80.5t99 -88.5q-48 -30 -108.5 -57.5t-138.5 -59t-114 -47.5q-44 37 -74 115t-43.5 164.5t-33 180.5t-42.5 168.5t-72.5 123t-122.5 48.5l-10 -2l-6 -4q4 -5 13 -14 q6 -5 28 -23.5t25.5 -22t19 -18t18 -20.5t11.5 -21t10.5 -27.5t4.5 -31t4 -40.5l1 -33q1 -26 -2.5 -57.5t-7.5 -52t-12.5 -58.5t-11.5 -53q-35 1 -101 -9.5t-98 -10.5q-39 0 -72 10q-2 16 -2 47q0 74 3 96q2 13 31.5 41.5t57 59t26.5 51.5q-24 2 -43 -24 q-36 -53 -111.5 -99.5t-136.5 -46.5q-25 0 -75.5 63t-106.5 139.5t-84 96.5q-6 4 -27 30q-482 -112 -513 -112q-16 0 -28 11t-12 27q0 15 8.5 26.5t22.5 14.5l486 106q-8 14 -8 25t5.5 17.5t16 11.5t20 7t23 4.5t18.5 4.5q4 1 15.5 7.5t17.5 6.5q15 0 28 -16t20 -33 q163 37 172 37q17 0 29.5 -11t12.5 -28q0 -15 -8.5 -26t-23.5 -14l-182 -40l-1 -16q-1 -26 81.5 -117.5t104.5 -91.5q47 0 119 80t72 129q0 36 -23.5 53t-51 18.5t-51 11.5t-23.5 34q0 16 10 34l-68 19q43 44 43 117q0 26 -5 58q82 16 144 16q44 0 71.5 -1.5t48.5 -8.5 t31 -13.5t20.5 -24.5t15.5 -33.5t17 -47.5t24 -60l50 25q-3 -40 -23 -60t-42.5 -21t-40 -6.5t-16.5 -20.5zM1282 842q-5 5 -13.5 15.5t-12 14.5t-10.5 11.5t-10 10.5l-8 8t-8.5 7.5t-8 5t-8.5 4.5q-7 3 -14.5 5t-20.5 2.5t-22 0.5h-32.5h-37.5q-126 0 -217 -43 q16 30 36 46.5t54 29.5t65.5 36t46 36.5t50 55t43.5 50.5q12 -9 28 -31.5t32 -36.5t38 -13l12 1v-76l22 -1q247 95 371 190q28 21 50 39t42.5 37.5t33 31t29.5 34t24 31t24.5 37t23 38t27 47.5t29.5 53l7 9q-2 -53 -43 -139q-79 -165 -205 -264t-306 -142q-14 -3 -42 -7.5 t-50 -9.5t-39 -14q3 -19 24.5 -46t21.5 -34q0 -11 -26 -30zM1061 -79q39 26 131.5 47.5t146.5 21.5q9 0 22.5 -15.5t28 -42.5t26 -50t24 -51t14.5 -33q-121 -45 -244 -45q-61 0 -125 11zM822 568l48 12l109 -177l-73 -48zM1323 51q3 -15 3 -16q0 -7 -17.5 -14.5t-46 -13 t-54 -9.5t-53.5 -7.5t-32 -4.5l-7 43q21 2 60.5 8.5t72 10t60.5 3.5h14zM866 679l-96 -20l-6 17q10 1 32.5 7t34.5 6q19 0 35 -10zM1061 45h31l10 -83l-41 -12v95zM1950 1535v1v-1zM1950 1535l-1 -5l-2 -2l1 3zM1950 1535l1 1z" />
+<glyph unicode="&#xf1a9;" d="M1167 -50q-5 19 -24 5q-30 -22 -87 -39t-131 -17q-129 0 -193 49q-5 4 -13 4q-11 0 -26 -12q-7 -6 -7.5 -16t7.5 -20q34 -32 87.5 -46t102.5 -12.5t99 4.5q41 4 84.5 20.5t65 30t28.5 20.5q12 12 7 29zM1128 65q-19 47 -39 61q-23 15 -76 15q-47 0 -71 -10 q-29 -12 -78 -56q-26 -24 -12 -44q9 -8 17.5 -4.5t31.5 23.5q3 2 10.5 8.5t10.5 8.5t10 7t11.5 7t12.5 5t15 4.5t16.5 2.5t20.5 1q27 0 44.5 -7.5t23 -14.5t13.5 -22q10 -17 12.5 -20t12.5 1q23 12 14 34zM1483 346q0 22 -5 44.5t-16.5 45t-34 36.5t-52.5 14 q-33 0 -97 -41.5t-129 -83.5t-101 -42q-27 -1 -63.5 19t-76 49t-83.5 58t-100 49t-111 19q-115 -1 -197 -78.5t-84 -178.5q-2 -112 74 -164q29 -20 62.5 -28.5t103.5 -8.5q57 0 132 32.5t134 71t120 70.5t93 31q26 -1 65 -31.5t71.5 -67t68 -67.5t55.5 -32q35 -3 58.5 14 t55.5 63q28 41 42.5 101t14.5 106zM1536 506q0 -164 -62 -304.5t-166 -236t-242.5 -149.5t-290.5 -54t-293 57.5t-247.5 157t-170.5 241.5t-64 302q0 89 19.5 172.5t49 145.5t70.5 118.5t78.5 94t78.5 69.5t64.5 46.5t42.5 24.5q14 8 51 26.5t54.5 28.5t48 30t60.5 44 q36 28 58 72.5t30 125.5q129 -155 186 -193q44 -29 130 -68t129 -66q21 -13 39 -25t60.5 -46.5t76 -70.5t75 -95t69 -122t47 -148.5t19.5 -177.5z" />
+<glyph unicode="&#xf1aa;" d="M1070 463l-160 -160l-151 -152l-30 -30q-65 -64 -151.5 -87t-171.5 -2q-16 -70 -72 -115t-129 -45q-85 0 -145 60.5t-60 145.5q0 72 44.5 128t113.5 72q-22 86 1 173t88 152l12 12l151 -152l-11 -11q-37 -37 -37 -89t37 -90q37 -37 89 -37t89 37l30 30l151 152l161 160z M729 1145l12 -12l-152 -152l-12 12q-37 37 -89 37t-89 -37t-37 -89.5t37 -89.5l29 -29l152 -152l160 -160l-151 -152l-161 160l-151 152l-30 30q-68 67 -90 159.5t5 179.5q-70 15 -115 71t-45 129q0 85 60 145.5t145 60.5q76 0 133.5 -49t69.5 -123q84 20 169.5 -3.5 t149.5 -87.5zM1536 78q0 -85 -60 -145.5t-145 -60.5q-74 0 -131 47t-71 118q-86 -28 -179.5 -6t-161.5 90l-11 12l151 152l12 -12q37 -37 89 -37t89 37t37 89t-37 89l-30 30l-152 152l-160 160l152 152l160 -160l152 -152l29 -30q64 -64 87.5 -150.5t2.5 -171.5 q76 -11 126.5 -68.5t50.5 -134.5zM1534 1202q0 -77 -51 -135t-127 -69q26 -85 3 -176.5t-90 -158.5l-12 -12l-151 152l12 12q37 37 37 89t-37 89t-89 37t-89 -37l-30 -30l-152 -152l-160 -160l-152 152l161 160l152 152l29 30q67 67 159 89.5t178 -3.5q11 75 68.5 126 t135.5 51q85 0 145 -60.5t60 -145.5z" />
+<glyph unicode="&#xf1ab;" d="M654 458q-1 -3 -12.5 0.5t-31.5 11.5l-20 9q-44 20 -87 49q-7 5 -41 31.5t-38 28.5q-67 -103 -134 -181q-81 -95 -105 -110q-4 -2 -19.5 -4t-18.5 0q6 4 82 92q21 24 85.5 115t78.5 118q17 30 51 98.5t36 77.5q-8 1 -110 -33q-8 -2 -27.5 -7.5t-34.5 -9.5t-17 -5 q-2 -2 -2 -10.5t-1 -9.5q-5 -10 -31 -15q-23 -7 -47 0q-18 4 -28 21q-4 6 -5 23q6 2 24.5 5t29.5 6q58 16 105 32q100 35 102 35q10 2 43 19.5t44 21.5q9 3 21.5 8t14.5 5.5t6 -0.5q2 -12 -1 -33q0 -2 -12.5 -27t-26.5 -53.5t-17 -33.5q-25 -50 -77 -131l64 -28 q12 -6 74.5 -32t67.5 -28q4 -1 10.5 -25.5t4.5 -30.5zM449 944q3 -15 -4 -28q-12 -23 -50 -38q-30 -12 -60 -12q-26 3 -49 26q-14 15 -18 41l1 3q3 -3 19.5 -5t26.5 0t58 16q36 12 55 14q17 0 21 -17zM1147 815l63 -227l-139 42zM39 15l694 232v1032l-694 -233v-1031z M1280 332l102 -31l-181 657l-100 31l-216 -536l102 -31l45 110l211 -65zM777 1294l573 -184v380zM1088 -29l158 -13l-54 -160l-40 66q-130 -83 -276 -108q-58 -12 -91 -12h-84q-79 0 -199.5 39t-183.5 85q-8 7 -8 16q0 8 5 13.5t13 5.5q4 0 18 -7.5t30.5 -16.5t20.5 -11 q73 -37 159.5 -61.5t157.5 -24.5q95 0 167 14.5t157 50.5q15 7 30.5 15.5t34 19t28.5 16.5zM1536 1050v-1079l-774 246q-14 -6 -375 -127.5t-368 -121.5q-13 0 -18 13q0 1 -1 3v1078q3 9 4 10q5 6 20 11q106 35 149 50v384l558 -198q2 0 160.5 55t316 108.5t161.5 53.5 q20 0 20 -21v-418z" />
+<glyph unicode="&#xf1ac;" horiz-adv-x="1792" d="M288 1152q66 0 113 -47t47 -113v-1088q0 -66 -47 -113t-113 -47h-128q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h128zM1664 989q58 -34 93 -93t35 -128v-768q0 -106 -75 -181t-181 -75h-864q-66 0 -113 47t-47 113v1536q0 40 28 68t68 28h672q40 0 88 -20t76 -48 l152 -152q28 -28 48 -76t20 -88v-163zM928 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM928 256v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM928 512v128q0 14 -9 23 t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1184 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1184 256v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128 q14 0 23 9t9 23zM1184 512v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 256v128q0 14 -9 23t-23 9h-128 q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 512v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1536 896v256h-160q-40 0 -68 28t-28 68v160h-640v-512h896z" />
+<glyph unicode="&#xf1ad;" d="M1344 1536q26 0 45 -19t19 -45v-1664q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h1280zM512 1248v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 992v-64q0 -14 9 -23t23 -9h64q14 0 23 9 t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 736v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 480v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM384 160v64 q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64 q14 0 23 9t9 23zM384 928v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 -96v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9 t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM896 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 928v64 q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 160v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64 q14 0 23 9t9 23zM1152 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 928v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9 t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23z" />
+<glyph unicode="&#xf1ae;" horiz-adv-x="1280" d="M1188 988l-292 -292v-824q0 -46 -33 -79t-79 -33t-79 33t-33 79v384h-64v-384q0 -46 -33 -79t-79 -33t-79 33t-33 79v824l-292 292q-28 28 -28 68t28 68t68 28t68 -28l228 -228h368l228 228q28 28 68 28t68 -28t28 -68t-28 -68zM864 1152q0 -93 -65.5 -158.5 t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
+<glyph unicode="&#xf1b0;" horiz-adv-x="1664" d="M780 1064q0 -60 -19 -113.5t-63 -92.5t-105 -39q-76 0 -138 57.5t-92 135.5t-30 151q0 60 19 113.5t63 92.5t105 39q77 0 138.5 -57.5t91.5 -135t30 -151.5zM438 581q0 -80 -42 -139t-119 -59q-76 0 -141.5 55.5t-100.5 133.5t-35 152q0 80 42 139.5t119 59.5 q76 0 141.5 -55.5t100.5 -134t35 -152.5zM832 608q118 0 255 -97.5t229 -237t92 -254.5q0 -46 -17 -76.5t-48.5 -45t-64.5 -20t-76 -5.5q-68 0 -187.5 45t-182.5 45q-66 0 -192.5 -44.5t-200.5 -44.5q-183 0 -183 146q0 86 56 191.5t139.5 192.5t187.5 146t193 59zM1071 819 q-61 0 -105 39t-63 92.5t-19 113.5q0 74 30 151.5t91.5 135t138.5 57.5q61 0 105 -39t63 -92.5t19 -113.5q0 -73 -30 -151t-92 -135.5t-138 -57.5zM1503 923q77 0 119 -59.5t42 -139.5q0 -74 -35 -152t-100.5 -133.5t-141.5 -55.5q-77 0 -119 59t-42 139q0 74 35 152.5 t100.5 134t141.5 55.5z" />
+<glyph unicode="&#xf1b1;" horiz-adv-x="768" d="M704 1008q0 -145 -57 -243.5t-152 -135.5l45 -821q2 -26 -16 -45t-44 -19h-192q-26 0 -44 19t-16 45l45 821q-95 37 -152 135.5t-57 243.5q0 128 42.5 249.5t117.5 200t160 78.5t160 -78.5t117.5 -200t42.5 -249.5z" />
+<glyph unicode="&#xf1b2;" horiz-adv-x="1792" d="M896 -93l640 349v636l-640 -233v-752zM832 772l698 254l-698 254l-698 -254zM1664 1024v-768q0 -35 -18 -65t-49 -47l-704 -384q-28 -16 -61 -16t-61 16l-704 384q-31 17 -49 47t-18 65v768q0 40 23 73t61 47l704 256q22 8 44 8t44 -8l704 -256q38 -14 61 -47t23 -73z " />
+<glyph unicode="&#xf1b3;" horiz-adv-x="2304" d="M640 -96l384 192v314l-384 -164v-342zM576 358l404 173l-404 173l-404 -173zM1664 -96l384 192v314l-384 -164v-342zM1600 358l404 173l-404 173l-404 -173zM1152 651l384 165v266l-384 -164v-267zM1088 1030l441 189l-441 189l-441 -189zM2176 512v-416q0 -36 -19 -67 t-52 -47l-448 -224q-25 -14 -57 -14t-57 14l-448 224q-5 2 -7 4q-2 -2 -7 -4l-448 -224q-25 -14 -57 -14t-57 14l-448 224q-33 16 -52 47t-19 67v416q0 38 21.5 70t56.5 48l434 186v400q0 38 21.5 70t56.5 48l448 192q23 10 50 10t50 -10l448 -192q35 -16 56.5 -48t21.5 -70 v-400l434 -186q36 -16 57 -48t21 -70z" />
+<glyph unicode="&#xf1b4;" horiz-adv-x="2048" d="M1848 1197h-511v-124h511v124zM1596 771q-90 0 -146 -52.5t-62 -142.5h408q-18 195 -200 195zM1612 186q63 0 122 32t76 87h221q-100 -307 -427 -307q-214 0 -340.5 132t-126.5 347q0 208 130.5 345.5t336.5 137.5q138 0 240.5 -68t153 -179t50.5 -248q0 -17 -2 -47h-658 q0 -111 57.5 -171.5t166.5 -60.5zM277 236h296q205 0 205 167q0 180 -199 180h-302v-347zM277 773h281q78 0 123.5 36.5t45.5 113.5q0 144 -190 144h-260v-294zM0 1282h594q87 0 155 -14t126.5 -47.5t90 -96.5t31.5 -154q0 -181 -172 -263q114 -32 172 -115t58 -204 q0 -75 -24.5 -136.5t-66 -103.5t-98.5 -71t-121 -42t-134 -13h-611v1260z" />
+<glyph unicode="&#xf1b5;" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM499 1041h-371v-787h382q117 0 197 57.5t80 170.5q0 158 -143 200q107 52 107 164q0 57 -19.5 96.5 t-56.5 60.5t-79 29.5t-97 8.5zM477 723h-176v184h163q119 0 119 -90q0 -94 -106 -94zM486 388h-185v217h189q124 0 124 -113q0 -104 -128 -104zM1136 356q-68 0 -104 38t-36 107h411q1 10 1 30q0 132 -74.5 220.5t-203.5 88.5q-128 0 -210 -86t-82 -216q0 -135 79 -217 t213 -82q205 0 267 191h-138q-11 -34 -47.5 -54t-75.5 -20zM1126 722q113 0 124 -122h-254q4 56 39 89t91 33zM964 988h319v-77h-319v77z" />
+<glyph unicode="&#xf1b6;" horiz-adv-x="1792" d="M1582 954q0 -101 -71.5 -172.5t-172.5 -71.5t-172.5 71.5t-71.5 172.5t71.5 172.5t172.5 71.5t172.5 -71.5t71.5 -172.5zM812 212q0 104 -73 177t-177 73q-27 0 -54 -6l104 -42q77 -31 109.5 -106.5t1.5 -151.5q-31 -77 -107 -109t-152 -1q-21 8 -62 24.5t-61 24.5 q32 -60 91 -96.5t130 -36.5q104 0 177 73t73 177zM1642 953q0 126 -89.5 215.5t-215.5 89.5q-127 0 -216.5 -89.5t-89.5 -215.5q0 -127 89.5 -216t216.5 -89q126 0 215.5 89t89.5 216zM1792 953q0 -189 -133.5 -322t-321.5 -133l-437 -319q-12 -129 -109 -218t-229 -89 q-121 0 -214 76t-118 192l-230 92v429l389 -157q79 48 173 48q13 0 35 -2l284 407q2 187 135.5 319t320.5 132q188 0 321.5 -133.5t133.5 -321.5z" />
+<glyph unicode="&#xf1b7;" d="M1242 889q0 80 -57 136.5t-137 56.5t-136.5 -57t-56.5 -136q0 -80 56.5 -136.5t136.5 -56.5t137 56.5t57 136.5zM632 301q0 -83 -58 -140.5t-140 -57.5q-56 0 -103 29t-72 77q52 -20 98 -40q60 -24 120 1.5t85 86.5q24 60 -1.5 120t-86.5 84l-82 33q22 5 42 5 q82 0 140 -57.5t58 -140.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v153l172 -69q20 -92 93.5 -152t168.5 -60q104 0 181 70t87 173l345 252q150 0 255.5 105.5t105.5 254.5q0 150 -105.5 255.5t-255.5 105.5 q-148 0 -253 -104.5t-107 -252.5l-225 -322q-9 1 -28 1q-75 0 -137 -37l-297 119v468q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5zM1289 887q0 -100 -71 -170.5t-171 -70.5t-170.5 70.5t-70.5 170.5t70.5 171t170.5 71q101 0 171.5 -70.5t70.5 -171.5z " />
+<glyph unicode="&#xf1b8;" horiz-adv-x="1792" d="M836 367l-15 -368l-2 -22l-420 29q-36 3 -67 31.5t-47 65.5q-11 27 -14.5 55t4 65t12 55t21.5 64t19 53q78 -12 509 -28zM449 953l180 -379l-147 92q-63 -72 -111.5 -144.5t-72.5 -125t-39.5 -94.5t-18.5 -63l-4 -21l-190 357q-17 26 -18 56t6 47l8 18q35 63 114 188 l-140 86zM1680 436l-188 -359q-12 -29 -36.5 -46.5t-43.5 -20.5l-18 -4q-71 -7 -219 -12l8 -164l-230 367l211 362l7 -173q170 -16 283 -5t170 33zM895 1360q-47 -63 -265 -435l-317 187l-19 12l225 356q20 31 60 45t80 10q24 -2 48.5 -12t42 -21t41.5 -33t36 -34.5 t36 -39.5t32 -35zM1550 1053l212 -363q18 -37 12.5 -76t-27.5 -74q-13 -20 -33 -37t-38 -28t-48.5 -22t-47 -16t-51.5 -14t-46 -12q-34 72 -265 436l313 195zM1407 1279l142 83l-220 -373l-419 20l151 86q-34 89 -75 166t-75.5 123.5t-64.5 80t-47 46.5l-17 13l405 -1 q31 3 58 -10.5t39 -28.5l11 -15q39 -61 112 -190z" />
+<glyph unicode="&#xf1b9;" horiz-adv-x="2048" d="M480 448q0 66 -47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47t113 47t47 113zM516 768h1016l-89 357q-2 8 -14 17.5t-21 9.5h-768q-9 0 -21 -9.5t-14 -17.5zM1888 448q0 66 -47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47t113 47t47 113zM2048 544v-384 q0 -14 -9 -23t-23 -9h-96v-128q0 -80 -56 -136t-136 -56t-136 56t-56 136v128h-1024v-128q0 -80 -56 -136t-136 -56t-136 56t-56 136v128h-96q-14 0 -23 9t-9 23v384q0 93 65.5 158.5t158.5 65.5h28l105 419q23 94 104 157.5t179 63.5h768q98 0 179 -63.5t104 -157.5 l105 -419h28q93 0 158.5 -65.5t65.5 -158.5z" />
+<glyph unicode="&#xf1ba;" horiz-adv-x="2048" d="M1824 640q93 0 158.5 -65.5t65.5 -158.5v-384q0 -14 -9 -23t-23 -9h-96v-64q0 -80 -56 -136t-136 -56t-136 56t-56 136v64h-1024v-64q0 -80 -56 -136t-136 -56t-136 56t-56 136v64h-96q-14 0 -23 9t-9 23v384q0 93 65.5 158.5t158.5 65.5h28l105 419q23 94 104 157.5 t179 63.5h128v224q0 14 9 23t23 9h448q14 0 23 -9t9 -23v-224h128q98 0 179 -63.5t104 -157.5l105 -419h28zM320 160q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47zM516 640h1016l-89 357q-2 8 -14 17.5t-21 9.5h-768q-9 0 -21 -9.5t-14 -17.5z M1728 160q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47z" />
+<glyph unicode="&#xf1bb;" d="M1504 64q0 -26 -19 -45t-45 -19h-462q1 -17 6 -87.5t5 -108.5q0 -25 -18 -42.5t-43 -17.5h-320q-25 0 -43 17.5t-18 42.5q0 38 5 108.5t6 87.5h-462q-26 0 -45 19t-19 45t19 45l402 403h-229q-26 0 -45 19t-19 45t19 45l402 403h-197q-26 0 -45 19t-19 45t19 45l384 384 q19 19 45 19t45 -19l384 -384q19 -19 19 -45t-19 -45t-45 -19h-197l402 -403q19 -19 19 -45t-19 -45t-45 -19h-229l402 -403q19 -19 19 -45z" />
+<glyph unicode="&#xf1bc;" d="M1127 326q0 32 -30 51q-193 115 -447 115q-133 0 -287 -34q-42 -9 -42 -52q0 -20 13.5 -34.5t35.5 -14.5q5 0 37 8q132 27 243 27q226 0 397 -103q19 -11 33 -11q19 0 33 13.5t14 34.5zM1223 541q0 40 -35 61q-237 141 -548 141q-153 0 -303 -42q-48 -13 -48 -64 q0 -25 17.5 -42.5t42.5 -17.5q7 0 37 8q122 33 251 33q279 0 488 -124q24 -13 38 -13q25 0 42.5 17.5t17.5 42.5zM1331 789q0 47 -40 70q-126 73 -293 110.5t-343 37.5q-204 0 -364 -47q-23 -7 -38.5 -25.5t-15.5 -48.5q0 -31 20.5 -52t51.5 -21q11 0 40 8q133 37 307 37 q159 0 309.5 -34t253.5 -95q21 -12 40 -12q29 0 50.5 20.5t21.5 51.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf1bd;" d="M1397 1408q58 0 98.5 -40.5t40.5 -98.5v-1258q0 -58 -40.5 -98.5t-98.5 -40.5h-1258q-58 0 -98.5 40.5t-40.5 98.5v1258q0 58 40.5 98.5t98.5 40.5h1258zM1465 11v1258q0 28 -20 48t-48 20h-1258q-28 0 -48 -20t-20 -48v-1258q0 -28 20 -48t48 -20h1258q28 0 48 20t20 48 zM694 749l188 -387l533 145v-496q0 -7 -5.5 -12.5t-12.5 -5.5h-1258q-7 0 -12.5 5.5t-5.5 12.5v141l711 195l-212 439q4 1 12 2.5t12 1.5q170 32 303.5 21.5t221 -46t143.5 -94.5q27 -28 -25 -42q-64 -16 -256 -62l-97 198q-111 7 -240 -16zM1397 1287q7 0 12.5 -5.5 t5.5 -12.5v-428q-85 30 -188 52q-294 64 -645 12l-18 -3l-65 134h-233l85 -190q-132 -51 -230 -137v560q0 7 5.5 12.5t12.5 5.5h1258zM286 387q-14 -3 -26 4.5t-14 21.5q-24 203 166 305l129 -270z" />
+<glyph unicode="&#xf1be;" horiz-adv-x="2304" d="M784 164l16 241l-16 523q-1 10 -7.5 17t-16.5 7q-9 0 -16 -7t-7 -17l-14 -523l14 -241q1 -10 7.5 -16.5t15.5 -6.5q22 0 24 23zM1080 193l11 211l-12 586q0 16 -13 24q-8 5 -16 5t-16 -5q-13 -8 -13 -24l-1 -6l-10 -579q0 -1 11 -236v-1q0 -10 6 -17q9 -11 23 -11 q11 0 20 9q9 7 9 20zM35 533l20 -128l-20 -126q-2 -9 -9 -9t-9 9l-17 126l17 128q2 9 9 9t9 -9zM121 612l26 -207l-26 -203q-2 -9 -10 -9q-9 0 -9 10l-23 202l23 207q0 9 9 9q8 0 10 -9zM401 159zM213 650l25 -245l-25 -237q0 -11 -11 -11q-10 0 -12 11l-21 237l21 245 q2 12 12 12q11 0 11 -12zM307 657l23 -252l-23 -244q-2 -13 -14 -13q-13 0 -13 13l-21 244l21 252q0 13 13 13q12 0 14 -13zM401 639l21 -234l-21 -246q-2 -16 -16 -16q-6 0 -10.5 4.5t-4.5 11.5l-20 246l20 234q0 6 4.5 10.5t10.5 4.5q14 0 16 -15zM784 164zM495 785 l21 -380l-21 -246q0 -7 -5 -12.5t-12 -5.5q-16 0 -18 18l-18 246l18 380q2 18 18 18q7 0 12 -5.5t5 -12.5zM589 871l19 -468l-19 -244q0 -8 -5.5 -13.5t-13.5 -5.5q-18 0 -20 19l-16 244l16 468q2 19 20 19q8 0 13.5 -5.5t5.5 -13.5zM687 911l18 -506l-18 -242 q-2 -21 -22 -21q-19 0 -21 21l-16 242l16 506q0 9 6.5 15.5t14.5 6.5q9 0 15 -6.5t7 -15.5zM1079 169v0v0zM881 915l15 -510l-15 -239q0 -10 -7.5 -17.5t-17.5 -7.5t-17 7t-8 18l-14 239l14 510q0 11 7.5 18t17.5 7t17.5 -7t7.5 -18zM980 896l14 -492l-14 -236q0 -11 -8 -19 t-19 -8t-19 8t-9 19l-12 236l12 492q1 12 9 20t19 8t18.5 -8t8.5 -20zM1192 404l-14 -231v0q0 -13 -9 -22t-22 -9t-22 9t-10 22l-6 114l-6 117l12 636v3q2 15 12 24q9 7 20 7q8 0 15 -5q14 -8 16 -26zM2304 423q0 -117 -83 -199.5t-200 -82.5h-786q-13 2 -22 11t-9 22v899 q0 23 28 33q85 34 181 34q195 0 338 -131.5t160 -323.5q53 22 110 22q117 0 200 -83t83 -201z" />
+<glyph unicode="&#xf1c0;" d="M768 768q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127t443 -43zM768 0q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127 t443 -43zM768 384q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127t443 -43zM768 1536q208 0 385 -34.5t280 -93.5t103 -128v-128q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5 t-103 128v128q0 69 103 128t280 93.5t385 34.5z" />
+<glyph unicode="&#xf1c1;" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M894 465q33 -26 84 -56q59 7 117 7q147 0 177 -49q16 -22 2 -52q0 -1 -1 -2l-2 -2v-1q-6 -38 -71 -38q-48 0 -115 20t-130 53q-221 -24 -392 -83q-153 -262 -242 -262q-15 0 -28 7l-24 12q-1 1 -6 5q-10 10 -6 36q9 40 56 91.5t132 96.5q14 9 23 -6q2 -2 2 -4q52 85 107 197 q68 136 104 262q-24 82 -30.5 159.5t6.5 127.5q11 40 42 40h21h1q23 0 35 -15q18 -21 9 -68q-2 -6 -4 -8q1 -3 1 -8v-30q-2 -123 -14 -192q55 -164 146 -238zM318 54q52 24 137 158q-51 -40 -87.5 -84t-49.5 -74zM716 974q-15 -42 -2 -132q1 7 7 44q0 3 7 43q1 4 4 8 q-1 1 -1 2t-0.5 1.5t-0.5 1.5q-1 22 -13 36q0 -1 -1 -2v-2zM592 313q135 54 284 81q-2 1 -13 9.5t-16 13.5q-76 67 -127 176q-27 -86 -83 -197q-30 -56 -45 -83zM1238 329q-24 24 -140 24q76 -28 124 -28q14 0 18 1q0 1 -2 3z" />
+<glyph unicode="&#xf1c2;" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M233 768v-107h70l164 -661h159l128 485q7 20 10 46q2 16 2 24h4l3 -24q1 -3 3.5 -20t5.5 -26l128 -485h159l164 661h70v107h-300v-107h90l-99 -438q-5 -20 -7 -46l-2 -21h-4l-3 21q-1 5 -4 21t-5 25l-144 545h-114l-144 -545q-2 -9 -4.5 -24.5t-3.5 -21.5l-4 -21h-4l-2 21 q-2 26 -7 46l-99 438h90v107h-300z" />
+<glyph unicode="&#xf1c3;" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M429 106v-106h281v106h-75l103 161q5 7 10 16.5t7.5 13.5t3.5 4h2q1 -4 5 -10q2 -4 4.5 -7.5t6 -8t6.5 -8.5l107 -161h-76v-106h291v106h-68l-192 273l195 282h67v107h-279v-107h74l-103 -159q-4 -7 -10 -16.5t-9 -13.5l-2 -3h-2q-1 4 -5 10q-6 11 -17 23l-106 159h76v107 h-290v-107h68l189 -272l-194 -283h-68z" />
+<glyph unicode="&#xf1c4;" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M416 106v-106h327v106h-93v167h137q76 0 118 15q67 23 106.5 87t39.5 146q0 81 -37 141t-100 87q-48 19 -130 19h-368v-107h92v-555h-92zM769 386h-119v268h120q52 0 83 -18q56 -33 56 -115q0 -89 -62 -120q-31 -15 -78 -15z" />
+<glyph unicode="&#xf1c5;" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M1280 320v-320h-1024v192l192 192l128 -128l384 384zM448 512q-80 0 -136 56t-56 136t56 136t136 56t136 -56t56 -136t-56 -136t-136 -56z" />
+<glyph unicode="&#xf1c6;" d="M640 1152v128h-128v-128h128zM768 1024v128h-128v-128h128zM640 896v128h-128v-128h128zM768 768v128h-128v-128h128zM1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400 v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-128v-128h-128v128h-512v-1536h1280zM781 593l107 -349q8 -27 8 -52q0 -83 -72.5 -137.5t-183.5 -54.5t-183.5 54.5t-72.5 137.5q0 25 8 52q21 63 120 396v128h128v-128h79 q22 0 39 -13t23 -34zM640 128q53 0 90.5 19t37.5 45t-37.5 45t-90.5 19t-90.5 -19t-37.5 -45t37.5 -45t90.5 -19z" />
+<glyph unicode="&#xf1c7;" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M620 686q20 -8 20 -30v-544q0 -22 -20 -30q-8 -2 -12 -2q-12 0 -23 9l-166 167h-131q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h131l166 167q16 15 35 7zM1037 -3q31 0 50 24q129 159 129 363t-129 363q-16 21 -43 24t-47 -14q-21 -17 -23.5 -43.5t14.5 -47.5 q100 -123 100 -282t-100 -282q-17 -21 -14.5 -47.5t23.5 -42.5q18 -15 40 -15zM826 145q27 0 47 20q87 93 87 219t-87 219q-18 19 -45 20t-46 -17t-20 -44.5t18 -46.5q52 -57 52 -131t-52 -131q-19 -20 -18 -46.5t20 -44.5q20 -17 44 -17z" />
+<glyph unicode="&#xf1c8;" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M768 768q52 0 90 -38t38 -90v-384q0 -52 -38 -90t-90 -38h-384q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h384zM1260 766q20 -8 20 -30v-576q0 -22 -20 -30q-8 -2 -12 -2q-14 0 -23 9l-265 266v90l265 266q9 9 23 9q4 0 12 -2z" />
+<glyph unicode="&#xf1c9;" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M480 768q8 11 21 12.5t24 -6.5l51 -38q11 -8 12.5 -21t-6.5 -24l-182 -243l182 -243q8 -11 6.5 -24t-12.5 -21l-51 -38q-11 -8 -24 -6.5t-21 12.5l-226 301q-14 19 0 38zM1282 467q14 -19 0 -38l-226 -301q-8 -11 -21 -12.5t-24 6.5l-51 38q-11 8 -12.5 21t6.5 24l182 243 l-182 243q-8 11 -6.5 24t12.5 21l51 38q11 8 24 6.5t21 -12.5zM662 6q-13 2 -20.5 13t-5.5 24l138 831q2 13 13 20.5t24 5.5l63 -10q13 -2 20.5 -13t5.5 -24l-138 -831q-2 -13 -13 -20.5t-24 -5.5z" />
+<glyph unicode="&#xf1ca;" d="M1497 709v-198q-101 -23 -198 -23q-65 -136 -165.5 -271t-181.5 -215.5t-128 -106.5q-80 -45 -162 3q-28 17 -60.5 43.5t-85 83.5t-102.5 128.5t-107.5 184t-105.5 244t-91.5 314.5t-70.5 390h283q26 -218 70 -398.5t104.5 -317t121.5 -235.5t140 -195q169 169 287 406 q-142 72 -223 220t-81 333q0 192 104 314.5t284 122.5q178 0 273 -105.5t95 -297.5q0 -159 -58 -286q-7 -1 -19.5 -3t-46 -2t-63 6t-62 25.5t-50.5 51.5q31 103 31 184q0 87 -29 132t-79 45q-53 0 -85 -49.5t-32 -140.5q0 -186 105 -293.5t267 -107.5q62 0 121 14z" />
+<glyph unicode="&#xf1cb;" horiz-adv-x="1792" d="M216 367l603 -402v359l-334 223zM154 511l193 129l-193 129v-258zM973 -35l603 402l-269 180l-334 -223v-359zM896 458l272 182l-272 182l-272 -182zM485 733l334 223v359l-603 -402zM1445 640l193 -129v258zM1307 733l269 180l-603 402v-359zM1792 913v-546 q0 -41 -34 -64l-819 -546q-21 -13 -43 -13t-43 13l-819 546q-34 23 -34 64v546q0 41 34 64l819 546q21 13 43 13t43 -13l819 -546q34 -23 34 -64z" />
+<glyph unicode="&#xf1cc;" horiz-adv-x="2048" d="M1800 764q111 -46 179.5 -145.5t68.5 -221.5q0 -164 -118 -280.5t-285 -116.5q-4 0 -11.5 0.5t-10.5 0.5h-1209h-1h-2h-5q-170 10 -288 125.5t-118 280.5q0 110 55 203t147 147q-12 39 -12 82q0 115 82 196t199 81q95 0 172 -58q75 154 222.5 248t326.5 94 q166 0 306 -80.5t221.5 -218.5t81.5 -301q0 -6 -0.5 -18t-0.5 -18zM468 498q0 -122 84 -193t208 -71q137 0 240 99q-16 20 -47.5 56.5t-43.5 50.5q-67 -65 -144 -65q-55 0 -93.5 33.5t-38.5 87.5q0 53 38.5 87t91.5 34q44 0 84.5 -21t73 -55t65 -75t69 -82t77 -75t97 -55 t121.5 -21q121 0 204.5 71.5t83.5 190.5q0 121 -84 192t-207 71q-143 0 -241 -97q14 -16 29.5 -34t34.5 -40t29 -34q66 64 142 64q52 0 92 -33t40 -84q0 -57 -37 -91.5t-94 -34.5q-43 0 -82.5 21t-72 55t-65.5 75t-69.5 82t-77.5 75t-96.5 55t-118.5 21q-122 0 -207 -70.5 t-85 -189.5z" />
+<glyph unicode="&#xf1cd;" horiz-adv-x="1792" d="M896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM896 1408q-190 0 -361 -90l194 -194q82 28 167 28t167 -28l194 194q-171 90 -361 90zM218 279l194 194 q-28 82 -28 167t28 167l-194 194q-90 -171 -90 -361t90 -361zM896 -128q190 0 361 90l-194 194q-82 -28 -167 -28t-167 28l-194 -194q171 -90 361 -90zM896 256q159 0 271.5 112.5t112.5 271.5t-112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5 t271.5 -112.5zM1380 473l194 -194q90 171 90 361t-90 361l-194 -194q28 -82 28 -167t-28 -167z" />
+<glyph unicode="&#xf1ce;" horiz-adv-x="1792" d="M1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348q0 222 101 414.5t276.5 317t390.5 155.5v-260q-221 -45 -366.5 -221t-145.5 -406q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5 q0 230 -145.5 406t-366.5 221v260q215 -31 390.5 -155.5t276.5 -317t101 -414.5z" />
+<glyph unicode="&#xf1d0;" horiz-adv-x="1792" d="M19 662q8 217 116 406t305 318h5q0 -1 -1 -3q-8 -8 -28 -33.5t-52 -76.5t-60 -110.5t-44.5 -135.5t-14 -150.5t39 -157.5t108.5 -154q50 -50 102 -69.5t90.5 -11.5t69.5 23.5t47 32.5l16 16q39 51 53 116.5t6.5 122.5t-21 107t-26.5 80l-14 29q-10 25 -30.5 49.5t-43 41 t-43.5 29.5t-35 19l-13 6l104 115q39 -17 78 -52t59 -61l19 -27q1 48 -18.5 103.5t-40.5 87.5l-20 31l161 183l160 -181q-33 -46 -52.5 -102.5t-22.5 -90.5l-4 -33q22 37 61.5 72.5t67.5 52.5l28 17l103 -115q-44 -14 -85 -50t-60 -65l-19 -29q-31 -56 -48 -133.5t-7 -170 t57 -156.5q33 -45 77.5 -60.5t85 -5.5t76 26.5t57.5 33.5l21 16q60 53 96.5 115t48.5 121.5t10 121.5t-18 118t-37 107.5t-45.5 93t-45 72t-34.5 47.5l-13 17q-14 13 -7 13l10 -3q40 -29 62.5 -46t62 -50t64 -58t58.5 -65t55.5 -77t45.5 -88t38 -103t23.5 -117t10.5 -136 q3 -259 -108 -465t-312 -321t-456 -115q-185 0 -351 74t-283.5 198t-184 293t-60.5 353z" />
+<glyph unicode="&#xf1d1;" horiz-adv-x="1792" d="M874 -102v-66q-208 6 -385 109.5t-283 275.5l58 34q29 -49 73 -99l65 57q148 -168 368 -212l-17 -86q65 -12 121 -13zM276 428l-83 -28q22 -60 49 -112l-57 -33q-98 180 -98 385t98 385l57 -33q-30 -56 -49 -112l82 -28q-35 -100 -35 -212q0 -109 36 -212zM1528 251 l58 -34q-106 -172 -283 -275.5t-385 -109.5v66q56 1 121 13l-17 86q220 44 368 212l65 -57q44 50 73 99zM1377 805l-233 -80q14 -42 14 -85t-14 -85l232 -80q-31 -92 -98 -169l-185 162q-57 -67 -147 -85l48 -241q-52 -10 -98 -10t-98 10l48 241q-90 18 -147 85l-185 -162 q-67 77 -98 169l232 80q-14 42 -14 85t14 85l-233 80q33 93 99 169l185 -162q59 68 147 86l-48 240q44 10 98 10t98 -10l-48 -240q88 -18 147 -86l185 162q66 -76 99 -169zM874 1448v-66q-65 -2 -121 -13l17 -86q-220 -42 -368 -211l-65 56q-38 -42 -73 -98l-57 33 q106 172 282 275.5t385 109.5zM1705 640q0 -205 -98 -385l-57 33q27 52 49 112l-83 28q36 103 36 212q0 112 -35 212l82 28q-19 56 -49 112l57 33q98 -180 98 -385zM1585 1063l-57 -33q-35 56 -73 98l-65 -56q-148 169 -368 211l17 86q-56 11 -121 13v66q209 -6 385 -109.5 t282 -275.5zM1748 640q0 173 -67.5 331t-181.5 272t-272 181.5t-331 67.5t-331 -67.5t-272 -181.5t-181.5 -272t-67.5 -331t67.5 -331t181.5 -272t272 -181.5t331 -67.5t331 67.5t272 181.5t181.5 272t67.5 331zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71 t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+<glyph unicode="&#xf1d2;" d="M582 228q0 -66 -93 -66q-107 0 -107 63q0 64 98 64q102 0 102 -61zM546 694q0 -85 -74 -85q-77 0 -77 84q0 90 77 90q36 0 55 -25.5t19 -63.5zM712 769v125q-78 -29 -135 -29q-50 29 -110 29q-86 0 -145 -57t-59 -143q0 -50 29.5 -102t73.5 -67v-3q-38 -17 -38 -85 q0 -53 41 -77v-3q-113 -37 -113 -139q0 -45 20 -78.5t54 -51t72 -25.5t81 -8q224 0 224 188q0 67 -48 99t-126 46q-27 5 -51.5 20.5t-24.5 39.5q0 44 49 52q77 15 122 70t45 134q0 24 -10 52q37 9 49 13zM771 350h137q-2 27 -2 82v387q0 46 2 69h-137q3 -23 3 -71v-392 q0 -50 -3 -75zM1280 366v121q-30 -21 -68 -21q-53 0 -53 82v225h52q9 0 26.5 -1t26.5 -1v117h-105q0 82 3 102h-140q4 -24 4 -55v-47h-60v-117q36 3 37 3q3 0 11 -0.5t12 -0.5v-2h-2v-217q0 -37 2.5 -64t11.5 -56.5t24.5 -48.5t43.5 -31t66 -12q64 0 108 24zM924 1072 q0 36 -24 63.5t-60 27.5t-60.5 -27t-24.5 -64q0 -36 25 -62.5t60 -26.5t59.5 27t24.5 62zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf1d3;" horiz-adv-x="1792" d="M595 22q0 100 -165 100q-158 0 -158 -104q0 -101 172 -101q151 0 151 105zM536 777q0 61 -30 102t-89 41q-124 0 -124 -145q0 -135 124 -135q119 0 119 137zM805 1101v-202q-36 -12 -79 -22q16 -43 16 -84q0 -127 -73 -216.5t-197 -112.5q-40 -8 -59.5 -27t-19.5 -58 q0 -31 22.5 -51.5t58 -32t78.5 -22t86 -25.5t78.5 -37.5t58 -64t22.5 -98.5q0 -304 -363 -304q-69 0 -130 12.5t-116 41t-87.5 82t-32.5 127.5q0 165 182 225v4q-67 41 -67 126q0 109 63 137v4q-72 24 -119.5 108.5t-47.5 165.5q0 139 95 231.5t235 92.5q96 0 178 -47 q98 0 218 47zM1123 220h-222q4 45 4 134v609q0 94 -4 128h222q-4 -33 -4 -124v-613q0 -89 4 -134zM1724 442v-196q-71 -39 -174 -39q-62 0 -107 20t-70 50t-39.5 78t-18.5 92t-4 103v351h2v4q-7 0 -19 1t-18 1q-21 0 -59 -6v190h96v76q0 54 -6 89h227q-6 -41 -6 -165h171 v-190q-15 0 -43.5 2t-42.5 2h-85v-365q0 -131 87 -131q61 0 109 33zM1148 1389q0 -58 -39 -101.5t-96 -43.5q-58 0 -98 43.5t-40 101.5q0 59 39.5 103t98.5 44q58 0 96.5 -44.5t38.5 -102.5z" />
+<glyph unicode="&#xf1d4;" d="M825 547l343 588h-150q-21 -39 -63.5 -118.5t-68 -128.5t-59.5 -118.5t-60 -128.5h-3q-21 48 -44.5 97t-52 105.5t-46.5 92t-54 104.5t-49 95h-150l323 -589v-435h134v436zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960 q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf1d5;" horiz-adv-x="1280" d="M842 964q0 -80 -57 -136.5t-136 -56.5q-60 0 -111 35q-62 -67 -115 -146q-247 -371 -202 -859q1 -22 -12.5 -38.5t-34.5 -18.5h-5q-20 0 -35 13.5t-17 33.5q-14 126 -3.5 247.5t29.5 217t54 186t69 155.5t74 125q61 90 132 165q-16 35 -16 77q0 80 56.5 136.5t136.5 56.5 t136.5 -56.5t56.5 -136.5zM1223 953q0 -158 -78 -292t-212.5 -212t-292.5 -78q-64 0 -131 14q-21 5 -32.5 23.5t-6.5 39.5q5 20 23 31.5t39 7.5q51 -13 108 -13q97 0 186 38t153 102t102 153t38 186t-38 186t-102 153t-153 102t-186 38t-186 -38t-153 -102t-102 -153 t-38 -186q0 -114 52 -218q10 -20 3.5 -40t-25.5 -30t-39.5 -3t-30.5 26q-64 123 -64 265q0 119 46.5 227t124.5 186t186 124t226 46q158 0 292.5 -78t212.5 -212.5t78 -292.5z" />
+<glyph unicode="&#xf1d6;" horiz-adv-x="1792" d="M270 730q-8 19 -8 52q0 20 11 49t24 45q-1 22 7.5 53t22.5 43q0 139 92.5 288.5t217.5 209.5q139 66 324 66q133 0 266 -55q49 -21 90 -48t71 -56t55 -68t42 -74t32.5 -84.5t25.5 -89.5t22 -98l1 -5q55 -83 55 -150q0 -14 -9 -40t-9 -38q0 -1 1.5 -3.5t3.5 -5t2 -3.5 q77 -114 120.5 -214.5t43.5 -208.5q0 -43 -19.5 -100t-55.5 -57q-9 0 -19.5 7.5t-19 17.5t-19 26t-16 26.5t-13.5 26t-9 17.5q-1 1 -3 1l-5 -4q-59 -154 -132 -223q20 -20 61.5 -38.5t69 -41.5t35.5 -65q-2 -4 -4 -16t-7 -18q-64 -97 -302 -97q-53 0 -110.5 9t-98 20 t-104.5 30q-15 5 -23 7q-14 4 -46 4.5t-40 1.5q-41 -45 -127.5 -65t-168.5 -20q-35 0 -69 1.5t-93 9t-101 20.5t-74.5 40t-32.5 64q0 40 10 59.5t41 48.5q11 2 40.5 13t49.5 12q4 0 14 2q2 2 2 4l-2 3q-48 11 -108 105.5t-73 156.5l-5 3q-4 0 -12 -20q-18 -41 -54.5 -74.5 t-77.5 -37.5h-1q-4 0 -6 4.5t-5 5.5q-23 54 -23 100q0 275 252 466z" />
+<glyph unicode="&#xf1d7;" horiz-adv-x="2048" d="M580 1075q0 41 -25 66t-66 25q-43 0 -76 -25.5t-33 -65.5q0 -39 33 -64.5t76 -25.5q41 0 66 24.5t25 65.5zM1323 568q0 28 -25.5 50t-65.5 22q-27 0 -49.5 -22.5t-22.5 -49.5q0 -28 22.5 -50.5t49.5 -22.5q40 0 65.5 22t25.5 51zM1087 1075q0 41 -24.5 66t-65.5 25 q-43 0 -76 -25.5t-33 -65.5q0 -39 33 -64.5t76 -25.5q41 0 65.5 24.5t24.5 65.5zM1722 568q0 28 -26 50t-65 22q-27 0 -49.5 -22.5t-22.5 -49.5q0 -28 22.5 -50.5t49.5 -22.5q39 0 65 22t26 51zM1456 965q-31 4 -70 4q-169 0 -311 -77t-223.5 -208.5t-81.5 -287.5 q0 -78 23 -152q-35 -3 -68 -3q-26 0 -50 1.5t-55 6.5t-44.5 7t-54.5 10.5t-50 10.5l-253 -127l72 218q-290 203 -290 490q0 169 97.5 311t264 223.5t363.5 81.5q176 0 332.5 -66t262 -182.5t136.5 -260.5zM2048 404q0 -117 -68.5 -223.5t-185.5 -193.5l55 -181l-199 109 q-150 -37 -218 -37q-169 0 -311 70.5t-223.5 191.5t-81.5 264t81.5 264t223.5 191.5t311 70.5q161 0 303 -70.5t227.5 -192t85.5 -263.5z" />
+<glyph unicode="&#xf1d8;" horiz-adv-x="1792" d="M1764 1525q33 -24 27 -64l-256 -1536q-5 -29 -32 -45q-14 -8 -31 -8q-11 0 -24 5l-453 185l-242 -295q-18 -23 -49 -23q-13 0 -22 4q-19 7 -30.5 23.5t-11.5 36.5v349l864 1059l-1069 -925l-395 162q-37 14 -40 55q-2 40 32 59l1664 960q15 9 32 9q20 0 36 -11z" />
+<glyph unicode="&#xf1d9;" horiz-adv-x="1792" d="M1764 1525q33 -24 27 -64l-256 -1536q-5 -29 -32 -45q-14 -8 -31 -8q-11 0 -24 5l-527 215l-298 -327q-18 -21 -47 -21q-14 0 -23 4q-19 7 -30 23.5t-11 36.5v452l-472 193q-37 14 -40 55q-3 39 32 59l1664 960q35 21 68 -2zM1422 26l221 1323l-1434 -827l336 -137 l863 639l-478 -797z" />
+<glyph unicode="&#xf1da;" d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61q-172 0 -327 72.5t-264 204.5q-7 10 -6.5 22.5t8.5 20.5l137 138q10 9 25 9q16 -2 23 -12q73 -95 179 -147t225 -52q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5 t-163.5 109.5t-198.5 40.5q-98 0 -188 -35.5t-160 -101.5l137 -138q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l130 -129q107 101 244.5 156.5t284.5 55.5q156 0 298 -61t245 -164t164 -245t61 -298zM896 928v-448q0 -14 -9 -23 t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf1db;" d="M768 1280q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5t-51 248.5t-136.5 204t-204 136.5t-248.5 51zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf1dc;" horiz-adv-x="1792" d="M1682 -128q-44 0 -132.5 3.5t-133.5 3.5q-44 0 -132 -3.5t-132 -3.5q-24 0 -37 20.5t-13 45.5q0 31 17 46t39 17t51 7t45 15q33 21 33 140l-1 391q0 21 -1 31q-13 4 -50 4h-675q-38 0 -51 -4q-1 -10 -1 -31l-1 -371q0 -142 37 -164q16 -10 48 -13t57 -3.5t45 -15 t20 -45.5q0 -26 -12.5 -48t-36.5 -22q-47 0 -139.5 3.5t-138.5 3.5q-43 0 -128 -3.5t-127 -3.5q-23 0 -35.5 21t-12.5 45q0 30 15.5 45t36 17.5t47.5 7.5t42 15q33 23 33 143l-1 57v813q0 3 0.5 26t0 36.5t-1.5 38.5t-3.5 42t-6.5 36.5t-11 31.5t-16 18q-15 10 -45 12t-53 2 t-41 14t-18 45q0 26 12 48t36 22q46 0 138.5 -3.5t138.5 -3.5q42 0 126.5 3.5t126.5 3.5q25 0 37.5 -22t12.5 -48q0 -30 -17 -43.5t-38.5 -14.5t-49.5 -4t-43 -13q-35 -21 -35 -160l1 -320q0 -21 1 -32q13 -3 39 -3h699q25 0 38 3q1 11 1 32l1 320q0 139 -35 160 q-18 11 -58.5 12.5t-66 13t-25.5 49.5q0 26 12.5 48t37.5 22q44 0 132 -3.5t132 -3.5q43 0 129 3.5t129 3.5q25 0 37.5 -22t12.5 -48q0 -30 -17.5 -44t-40 -14.5t-51.5 -3t-44 -12.5q-35 -23 -35 -161l1 -943q0 -119 34 -140q16 -10 46 -13.5t53.5 -4.5t41.5 -15.5t18 -44.5 q0 -26 -12 -48t-36 -22z" />
+<glyph unicode="&#xf1dd;" horiz-adv-x="1280" d="M1278 1347v-73q0 -29 -18.5 -61t-42.5 -32q-50 0 -54 -1q-26 -6 -32 -31q-3 -11 -3 -64v-1152q0 -25 -18 -43t-43 -18h-108q-25 0 -43 18t-18 43v1218h-143v-1218q0 -25 -17.5 -43t-43.5 -18h-108q-26 0 -43.5 18t-17.5 43v496q-147 12 -245 59q-126 58 -192 179 q-64 117 -64 259q0 166 88 286q88 118 209 159q111 37 417 37h479q25 0 43 -18t18 -43z" />
+<glyph unicode="&#xf1de;" d="M352 128v-128h-352v128h352zM704 256q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM864 640v-128h-864v128h864zM224 1152v-128h-224v128h224zM1536 128v-128h-736v128h736zM576 1280q26 0 45 -19t19 -45v-256 q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM1216 768q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM1536 640v-128h-224v128h224zM1536 1152v-128h-864v128h864z" />
+<glyph unicode="&#xf1e0;" d="M1216 512q133 0 226.5 -93.5t93.5 -226.5t-93.5 -226.5t-226.5 -93.5t-226.5 93.5t-93.5 226.5q0 12 2 34l-360 180q-92 -86 -218 -86q-133 0 -226.5 93.5t-93.5 226.5t93.5 226.5t226.5 93.5q126 0 218 -86l360 180q-2 22 -2 34q0 133 93.5 226.5t226.5 93.5 t226.5 -93.5t93.5 -226.5t-93.5 -226.5t-226.5 -93.5q-126 0 -218 86l-360 -180q2 -22 2 -34t-2 -34l360 -180q92 86 218 86z" />
+<glyph unicode="&#xf1e1;" d="M1280 341q0 88 -62.5 151t-150.5 63q-84 0 -145 -58l-241 120q2 16 2 23t-2 23l241 120q61 -58 145 -58q88 0 150.5 63t62.5 151t-62.5 150.5t-150.5 62.5t-151 -62.5t-63 -150.5q0 -7 2 -23l-241 -120q-62 57 -145 57q-88 0 -150.5 -62.5t-62.5 -150.5t62.5 -150.5 t150.5 -62.5q83 0 145 57l241 -120q-2 -16 -2 -23q0 -88 63 -150.5t151 -62.5t150.5 62.5t62.5 150.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf1e2;" horiz-adv-x="1792" d="M571 947q-10 25 -34 35t-49 0q-108 -44 -191 -127t-127 -191q-10 -25 0 -49t35 -34q13 -5 24 -5q42 0 60 40q34 84 98.5 148.5t148.5 98.5q25 11 35 35t0 49zM1513 1303l46 -46l-244 -243l68 -68q19 -19 19 -45.5t-19 -45.5l-64 -64q89 -161 89 -343q0 -143 -55.5 -273.5 t-150 -225t-225 -150t-273.5 -55.5t-273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5q182 0 343 -89l64 64q19 19 45.5 19t45.5 -19l68 -68zM1521 1359q-10 -10 -22 -10q-13 0 -23 10l-91 90q-9 10 -9 23t9 23q10 9 23 9t23 -9l90 -91 q10 -9 10 -22.5t-10 -22.5zM1751 1129q-11 -9 -23 -9t-23 9l-90 91q-10 9 -10 22.5t10 22.5q9 10 22.5 10t22.5 -10l91 -90q9 -10 9 -23t-9 -23zM1792 1312q0 -14 -9 -23t-23 -9h-96q-14 0 -23 9t-9 23t9 23t23 9h96q14 0 23 -9t9 -23zM1600 1504v-96q0 -14 -9 -23t-23 -9 t-23 9t-9 23v96q0 14 9 23t23 9t23 -9t9 -23zM1751 1449l-91 -90q-10 -10 -22 -10q-13 0 -23 10q-10 9 -10 22.5t10 22.5l90 91q10 9 23 9t23 -9q9 -10 9 -23t-9 -23z" />
+<glyph unicode="&#xf1e3;" horiz-adv-x="1792" d="M609 720l287 208l287 -208l-109 -336h-355zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM1515 186q149 203 149 454v3l-102 -89l-240 224l63 323 l134 -12q-150 206 -389 282l53 -124l-287 -159l-287 159l53 124q-239 -76 -389 -282l135 12l62 -323l-240 -224l-102 89v-3q0 -251 149 -454l30 132l326 -40l139 -298l-116 -69q117 -39 240 -39t240 39l-116 69l139 298l326 40z" />
+<glyph unicode="&#xf1e4;" horiz-adv-x="1792" d="M448 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM256 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM832 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23 v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM66 768q-28 0 -47 19t-19 46v129h514v-129q0 -27 -19 -46t-46 -19h-383zM1216 224v-192q0 -14 -9 -23t-23 -9h-192 q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1600 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23 zM1408 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1016v-13h-514v10q0 104 -382 102q-382 -1 -382 -102v-10h-514v13q0 17 8.5 43t34 64t65.5 75.5t110.5 76t160 67.5t224 47.5t293.5 18.5t293 -18.5t224 -47.5 t160.5 -67.5t110.5 -76t65.5 -75.5t34 -64t8.5 -43zM1792 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 962v-129q0 -27 -19 -46t-46 -19h-384q-27 0 -46 19t-19 46v129h514z" />
+<glyph unicode="&#xf1e5;" horiz-adv-x="1792" d="M704 1216v-768q0 -26 -19 -45t-45 -19v-576q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v512l249 873q7 23 31 23h424zM1024 1216v-704h-256v704h256zM1792 320v-512q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v576q-26 0 -45 19t-19 45v768h424q24 0 31 -23z M736 1504v-224h-352v224q0 14 9 23t23 9h288q14 0 23 -9t9 -23zM1408 1504v-224h-352v224q0 14 9 23t23 9h288q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf1e6;" horiz-adv-x="1792" d="M1755 1083q37 -37 37 -90t-37 -91l-401 -400l150 -150l-160 -160q-163 -163 -389.5 -186.5t-411.5 100.5l-362 -362h-181v181l362 362q-124 185 -100.5 411.5t186.5 389.5l160 160l150 -150l400 401q38 37 91 37t90 -37t37 -90.5t-37 -90.5l-400 -401l234 -234l401 400 q38 37 91 37t90 -37z" />
+<glyph unicode="&#xf1e7;" horiz-adv-x="1792" d="M873 796q0 -83 -63.5 -142.5t-152.5 -59.5t-152.5 59.5t-63.5 142.5q0 84 63.5 143t152.5 59t152.5 -59t63.5 -143zM1375 796q0 -83 -63 -142.5t-153 -59.5q-89 0 -152.5 59.5t-63.5 142.5q0 84 63.5 143t152.5 59q90 0 153 -59t63 -143zM1600 616v667q0 87 -32 123.5 t-111 36.5h-1112q-83 0 -112.5 -34t-29.5 -126v-673q43 -23 88.5 -40t81 -28t81 -18.5t71 -11t70 -4t58.5 -0.5t56.5 2t44.5 2q68 1 95 -27q6 -6 10 -9q26 -25 61 -51q7 91 118 87q5 0 36.5 -1.5t43 -2t45.5 -1t53 1t54.5 4.5t61 8.5t62 13.5t67 19.5t67.5 27t72 34.5z M1763 621q-121 -149 -372 -252q84 -285 -23 -465q-66 -113 -183 -148q-104 -32 -182 15q-86 51 -82 164l-1 326v1q-8 2 -24.5 6t-23.5 5l-1 -338q4 -114 -83 -164q-79 -47 -183 -15q-117 36 -182 150q-105 180 -22 463q-251 103 -372 252q-25 37 -4 63t60 -1q3 -2 11 -7 t11 -8v694q0 72 47 123t114 51h1257q67 0 114 -51t47 -123v-694l21 15q39 27 60 1t-4 -63z" />
+<glyph unicode="&#xf1e8;" horiz-adv-x="1792" d="M896 1102v-434h-145v434h145zM1294 1102v-434h-145v434h145zM1294 342l253 254v795h-1194v-1049h326v-217l217 217h398zM1692 1536v-1013l-434 -434h-326l-217 -217h-217v217h-398v1158l109 289h1483z" />
+<glyph unicode="&#xf1e9;" d="M773 217v-127q-1 -292 -6 -305q-12 -32 -51 -40q-54 -9 -181.5 38t-162.5 89q-13 15 -17 36q-1 12 4 26q4 10 34 47t181 216q1 0 60 70q15 19 39.5 24.5t49.5 -3.5q24 -10 37.5 -29t12.5 -42zM624 468q-3 -55 -52 -70l-120 -39q-275 -88 -292 -88q-35 2 -54 36 q-12 25 -17 75q-8 76 1 166.5t30 124.5t56 32q13 0 202 -77q70 -29 115 -47l84 -34q23 -9 35.5 -30.5t11.5 -48.5zM1450 171q-7 -54 -91.5 -161t-135.5 -127q-37 -14 -63 7q-14 10 -184 287l-47 77q-14 21 -11.5 46t19.5 46q35 43 83 26q1 -1 119 -40q203 -66 242 -79.5 t47 -20.5q28 -22 22 -61zM778 803q5 -102 -54 -122q-58 -17 -114 71l-378 598q-8 35 19 62q41 43 207.5 89.5t224.5 31.5q40 -10 49 -45q3 -18 22 -305.5t24 -379.5zM1440 695q3 -39 -26 -59q-15 -10 -329 -86q-67 -15 -91 -23l1 2q-23 -6 -46 4t-37 32q-30 47 0 87 q1 1 75 102q125 171 150 204t34 39q28 19 65 2q48 -23 123 -133.5t81 -167.5v-3z" />
+<glyph unicode="&#xf1ea;" horiz-adv-x="2048" d="M1024 1024h-384v-384h384v384zM1152 384v-128h-640v128h640zM1152 1152v-640h-640v640h640zM1792 384v-128h-512v128h512zM1792 640v-128h-512v128h512zM1792 896v-128h-512v128h512zM1792 1152v-128h-512v128h512zM256 192v960h-128v-960q0 -26 19 -45t45 -19t45 19 t19 45zM1920 192v1088h-1536v-1088q0 -33 -11 -64h1483q26 0 45 19t19 45zM2048 1408v-1216q0 -80 -56 -136t-136 -56h-1664q-80 0 -136 56t-56 136v1088h256v128h1792z" />
+<glyph unicode="&#xf1eb;" horiz-adv-x="2048" d="M1024 13q-20 0 -93 73.5t-73 93.5q0 32 62.5 54t103.5 22t103.5 -22t62.5 -54q0 -20 -73 -93.5t-93 -73.5zM1294 284q-2 0 -40 25t-101.5 50t-128.5 25t-128.5 -25t-101 -50t-40.5 -25q-18 0 -93.5 75t-75.5 93q0 13 10 23q78 77 196 121t233 44t233 -44t196 -121 q10 -10 10 -23q0 -18 -75.5 -93t-93.5 -75zM1567 556q-11 0 -23 8q-136 105 -252 154.5t-268 49.5q-85 0 -170.5 -22t-149 -53t-113.5 -62t-79 -53t-31 -22q-17 0 -92 75t-75 93q0 12 10 22q132 132 320 205t380 73t380 -73t320 -205q10 -10 10 -22q0 -18 -75 -93t-92 -75z M1838 827q-11 0 -22 9q-179 157 -371.5 236.5t-420.5 79.5t-420.5 -79.5t-371.5 -236.5q-11 -9 -22 -9q-17 0 -92.5 75t-75.5 93q0 13 10 23q187 186 445 288t527 102t527 -102t445 -288q10 -10 10 -23q0 -18 -75.5 -93t-92.5 -75z" />
+<glyph unicode="&#xf1ec;" horiz-adv-x="1792" d="M384 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM384 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5 t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1152 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5 t37.5 90.5zM384 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1152 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 768q0 53 -37.5 90.5t-90.5 37.5 t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1536 0v384q0 52 -38 90t-90 38t-90 -38t-38 -90v-384q0 -52 38 -90t90 -38t90 38t38 90zM1152 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5z M1536 1088v256q0 26 -19 45t-45 19h-1280q-26 0 -45 -19t-19 -45v-256q0 -26 19 -45t45 -19h1280q26 0 45 19t19 45zM1536 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1408v-1536q0 -52 -38 -90t-90 -38 h-1408q-52 0 -90 38t-38 90v1536q0 52 38 90t90 38h1408q52 0 90 -38t38 -90z" />
+<glyph unicode="&#xf1ed;" horiz-adv-x="1792" d="M1112 1090q0 159 -237 159h-70q-32 0 -59.5 -21.5t-34.5 -52.5l-63 -276q-2 -5 -2 -16q0 -24 17 -39.5t41 -15.5h53q69 0 128.5 13t112.5 41t83.5 81.5t30.5 126.5zM1716 938q0 -265 -220 -428q-219 -161 -612 -161h-61q-32 0 -59 -21.5t-34 -52.5l-73 -316 q-8 -36 -40.5 -61.5t-69.5 -25.5h-213q-31 0 -53 20t-22 51q0 10 13 65h151q34 0 64 23.5t38 56.5l73 316q8 33 37.5 57t63.5 24h61q390 0 607 160t217 421q0 129 -51 207q183 -92 183 -335zM1533 1123q0 -264 -221 -428q-218 -161 -612 -161h-60q-32 0 -59.5 -22t-34.5 -53 l-73 -315q-8 -36 -40 -61.5t-69 -25.5h-214q-31 0 -52.5 19.5t-21.5 51.5q0 8 2 20l300 1301q8 36 40.5 61.5t69.5 25.5h444q68 0 125 -4t120.5 -15t113.5 -30t96.5 -50.5t77.5 -74t49.5 -103.5t18.5 -136z" />
+<glyph unicode="&#xf1ee;" horiz-adv-x="1792" d="M602 949q19 -61 31 -123.5t17 -141.5t-14 -159t-62 -145q-21 81 -67 157t-95.5 127t-99 90.5t-78.5 57.5t-33 19q-62 34 -81.5 100t14.5 128t101 81.5t129 -14.5q138 -83 238 -177zM927 1236q11 -25 20.5 -46t36.5 -100.5t42.5 -150.5t25.5 -179.5t0 -205.5t-47.5 -209.5 t-105.5 -208.5q-51 -72 -138 -72q-54 0 -98 31q-57 40 -69 109t28 127q60 85 81 195t13 199.5t-32 180.5t-39 128t-22 52q-31 63 -8.5 129.5t85.5 97.5q34 17 75 17q47 0 88.5 -25t63.5 -69zM1248 567q-17 -160 -72 -311q-17 131 -63 246q25 174 -5 361q-27 178 -94 342 q114 -90 212 -211q9 -37 15 -80q26 -179 7 -347zM1520 1440q9 -17 23.5 -49.5t43.5 -117.5t50.5 -178t34 -227.5t5 -269t-47 -300t-112.5 -323.5q-22 -48 -66 -75.5t-95 -27.5q-39 0 -74 16q-67 31 -92.5 100t4.5 136q58 126 90 257.5t37.5 239.5t-3.5 213.5t-26.5 180.5 t-38.5 138.5t-32.5 90t-15.5 32.5q-34 65 -11.5 135.5t87.5 104.5q37 20 81 20q49 0 91.5 -25.5t66.5 -70.5z" />
+<glyph unicode="&#xf1f0;" horiz-adv-x="2304" d="M1975 546h-138q14 37 66 179l3 9q4 10 10 26t9 26l12 -55zM531 611l-58 295q-11 54 -75 54h-268l-2 -13q311 -79 403 -336zM710 960l-162 -438l-17 89q-26 70 -85 129.5t-131 88.5l135 -510h175l261 641h-176zM849 318h166l104 642h-166zM1617 944q-69 27 -149 27 q-123 0 -201 -59t-79 -153q-1 -102 145 -174q48 -23 67 -41t19 -39q0 -30 -30 -46t-69 -16q-86 0 -156 33l-22 11l-23 -144q74 -34 185 -34q130 -1 208.5 59t80.5 160q0 106 -140 174q-49 25 -71 42t-22 38q0 22 24.5 38.5t70.5 16.5q70 1 124 -24l15 -8zM2042 960h-128 q-65 0 -87 -54l-246 -588h174l35 96h212q5 -22 20 -96h154zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
+<glyph unicode="&#xf1f1;" horiz-adv-x="2304" d="M671 603h-13q-47 0 -47 -32q0 -22 20 -22q17 0 28 15t12 39zM1066 639h62v3q1 4 0.5 6.5t-1 7t-2 8t-4.5 6.5t-7.5 5t-11.5 2q-28 0 -36 -38zM1606 603h-12q-48 0 -48 -32q0 -22 20 -22q17 0 28 15t12 39zM1925 629q0 41 -30 41q-19 0 -31 -20t-12 -51q0 -42 28 -42 q20 0 32.5 20t12.5 52zM480 770h87l-44 -262h-56l32 201l-71 -201h-39l-4 200l-34 -200h-53l44 262h81l2 -163zM733 663q0 -6 -4 -42q-16 -101 -17 -113h-47l1 22q-20 -26 -58 -26q-23 0 -37.5 16t-14.5 42q0 39 26 60.5t73 21.5q14 0 23 -1q0 3 0.5 5.5t1 4.5t0.5 3 q0 20 -36 20q-29 0 -59 -10q0 4 7 48q38 11 67 11q74 0 74 -62zM889 721l-8 -49q-22 3 -41 3q-27 0 -27 -17q0 -8 4.5 -12t21.5 -11q40 -19 40 -60q0 -72 -87 -71q-34 0 -58 6q0 2 7 49q29 -8 51 -8q32 0 32 19q0 7 -4.5 11.5t-21.5 12.5q-43 20 -43 59q0 72 84 72 q30 0 50 -4zM977 721h28l-7 -52h-29q-2 -17 -6.5 -40.5t-7 -38.5t-2.5 -18q0 -16 19 -16q8 0 16 2l-8 -47q-21 -7 -40 -7q-43 0 -45 47q0 12 8 56q3 20 25 146h55zM1180 648q0 -23 -7 -52h-111q-3 -22 10 -33t38 -11q30 0 58 14l-9 -54q-30 -8 -57 -8q-95 0 -95 95 q0 55 27.5 90.5t69.5 35.5q35 0 55.5 -21t20.5 -56zM1319 722q-13 -23 -22 -62q-22 2 -31 -24t-25 -128h-56l3 14q22 130 29 199h51l-3 -33q14 21 25.5 29.5t28.5 4.5zM1506 763l-9 -57q-28 14 -50 14q-31 0 -51 -27.5t-20 -70.5q0 -30 13.5 -47t38.5 -17q21 0 48 13 l-10 -59q-28 -8 -50 -8q-45 0 -71.5 30.5t-26.5 82.5q0 70 35.5 114.5t91.5 44.5q26 0 61 -13zM1668 663q0 -18 -4 -42q-13 -79 -17 -113h-46l1 22q-20 -26 -59 -26q-23 0 -37 16t-14 42q0 39 25.5 60.5t72.5 21.5q15 0 23 -1q2 7 2 13q0 20 -36 20q-29 0 -59 -10q0 4 8 48 q38 11 67 11q73 0 73 -62zM1809 722q-14 -24 -21 -62q-23 2 -31.5 -23t-25.5 -129h-56l3 14q19 104 29 199h52q0 -11 -4 -33q15 21 26.5 29.5t27.5 4.5zM1950 770h56l-43 -262h-53l3 19q-23 -23 -52 -23q-31 0 -49.5 24t-18.5 64q0 53 27.5 92t64.5 39q31 0 53 -29z M2061 640q0 148 -72.5 273t-198 198t-273.5 73q-181 0 -328 -110q127 -116 171 -284h-50q-44 150 -158 253q-114 -103 -158 -253h-50q44 168 171 284q-147 110 -328 110q-148 0 -273.5 -73t-198 -198t-72.5 -273t72.5 -273t198 -198t273.5 -73q181 0 328 110 q-120 111 -165 264h50q46 -138 152 -233q106 95 152 233h50q-45 -153 -165 -264q147 -110 328 -110q148 0 273.5 73t198 198t72.5 273zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
+<glyph unicode="&#xf1f2;" horiz-adv-x="2304" d="M313 759q0 -51 -36 -84q-29 -26 -89 -26h-17v220h17q61 0 89 -27q36 -31 36 -83zM2089 824q0 -52 -64 -52h-19v101h20q63 0 63 -49zM380 759q0 74 -50 120.5t-129 46.5h-95v-333h95q74 0 119 38q60 51 60 128zM410 593h65v333h-65v-333zM730 694q0 40 -20.5 62t-75.5 42 q-29 10 -39.5 19t-10.5 23q0 16 13.5 26.5t34.5 10.5q29 0 53 -27l34 44q-41 37 -98 37q-44 0 -74 -27.5t-30 -67.5q0 -35 18 -55.5t64 -36.5q37 -13 45 -19q19 -12 19 -34q0 -20 -14 -33.5t-36 -13.5q-48 0 -71 44l-42 -40q44 -64 115 -64q51 0 83 30.5t32 79.5zM1008 604 v77q-37 -37 -78 -37q-49 0 -80.5 32.5t-31.5 82.5q0 48 31.5 81.5t77.5 33.5q43 0 81 -38v77q-40 20 -80 20q-74 0 -125.5 -50.5t-51.5 -123.5t51 -123.5t125 -50.5q42 0 81 19zM2240 0v527q-65 -40 -144.5 -84t-237.5 -117t-329.5 -137.5t-417.5 -134.5t-504 -118h1569 q26 0 45 19t19 45zM1389 757q0 75 -53 128t-128 53t-128 -53t-53 -128t53 -128t128 -53t128 53t53 128zM1541 584l144 342h-71l-90 -224l-89 224h-71l142 -342h35zM1714 593h184v56h-119v90h115v56h-115v74h119v57h-184v-333zM2105 593h80l-105 140q76 16 76 94q0 47 -31 73 t-87 26h-97v-333h65v133h9zM2304 1274v-1268q0 -56 -38.5 -95t-93.5 -39h-2040q-55 0 -93.5 39t-38.5 95v1268q0 56 38.5 95t93.5 39h2040q55 0 93.5 -39t38.5 -95z" />
+<glyph unicode="&#xf1f3;" horiz-adv-x="2304" d="M119 854h89l-45 108zM740 328l74 79l-70 79h-163v-49h142v-55h-142v-54h159zM898 406l99 -110v217zM1186 453q0 33 -40 33h-84v-69h83q41 0 41 36zM1475 457q0 29 -42 29h-82v-61h81q43 0 43 32zM1197 923q0 29 -42 29h-82v-60h81q43 0 43 31zM1656 854h89l-44 108z M699 1009v-271h-66v212l-94 -212h-57l-94 212v-212h-132l-25 60h-135l-25 -60h-70l116 271h96l110 -257v257h106l85 -184l77 184h108zM1255 453q0 -20 -5.5 -35t-14 -25t-22.5 -16.5t-26 -10t-31.5 -4.5t-31.5 -1t-32.5 0.5t-29.5 0.5v-91h-126l-80 90l-83 -90h-256v271h260 l80 -89l82 89h207q109 0 109 -89zM964 794v-56h-217v271h217v-57h-152v-49h148v-55h-148v-54h152zM2304 235v-229q0 -55 -38.5 -94.5t-93.5 -39.5h-2040q-55 0 -93.5 39.5t-38.5 94.5v678h111l25 61h55l25 -61h218v46l19 -46h113l20 47v-47h541v99l10 1q10 0 10 -14v-86h279 v23q23 -12 55 -18t52.5 -6.5t63 0.5t51.5 1l25 61h56l25 -61h227v58l34 -58h182v378h-180v-44l-25 44h-185v-44l-23 44h-249q-69 0 -109 -22v22h-172v-22q-24 22 -73 22h-628l-43 -97l-43 97h-198v-44l-22 44h-169l-78 -179v391q0 55 38.5 94.5t93.5 39.5h2040 q55 0 93.5 -39.5t38.5 -94.5v-678h-120q-51 0 -81 -22v22h-177q-55 0 -78 -22v22h-316v-22q-31 22 -87 22h-209v-22q-23 22 -91 22h-234l-54 -58l-50 58h-349v-378h343l55 59l52 -59h211v89h21q59 0 90 13v-102h174v99h8q8 0 10 -2t2 -10v-87h529q57 0 88 24v-24h168 q60 0 95 17zM1546 469q0 -23 -12 -43t-34 -29q25 -9 34 -26t9 -46v-54h-65v45q0 33 -12 43.5t-46 10.5h-69v-99h-65v271h154q48 0 77 -15t29 -58zM1269 936q0 -24 -12.5 -44t-33.5 -29q26 -9 34.5 -25.5t8.5 -46.5v-53h-65q0 9 0.5 26.5t0 25t-3 18.5t-8.5 16t-17.5 8.5 t-29.5 3.5h-70v-98h-64v271l153 -1q49 0 78 -14.5t29 -57.5zM1798 327v-56h-216v271h216v-56h-151v-49h148v-55h-148v-54zM1372 1009v-271h-66v271h66zM2065 357q0 -86 -102 -86h-126v58h126q34 0 34 25q0 16 -17 21t-41.5 5t-49.5 3.5t-42 22.5t-17 55q0 39 26 60t66 21 h130v-57h-119q-36 0 -36 -25q0 -16 17.5 -20.5t42 -4t49 -2.5t42 -21.5t17.5 -54.5zM2304 407v-101q-24 -35 -88 -35h-125v58h125q33 0 33 25q0 13 -12.5 19t-31 5.5t-40 2t-40 8t-31 24t-12.5 48.5q0 39 26.5 60t66.5 21h129v-57h-118q-36 0 -36 -25q0 -20 29 -22t68.5 -5 t56.5 -26zM2139 1008v-270h-92l-122 203v-203h-132l-26 60h-134l-25 -60h-75q-129 0 -129 133q0 138 133 138h63v-59q-7 0 -28 1t-28.5 0.5t-23 -2t-21.5 -6.5t-14.5 -13.5t-11.5 -23t-3 -33.5q0 -38 13.5 -58t49.5 -20h29l92 213h97l109 -256v256h99l114 -188v188h66z" />
+<glyph unicode="&#xf1f4;" horiz-adv-x="2304" d="M322 689h-15q-19 0 -19 18q0 28 19 85q5 15 15 19.5t28 4.5q77 0 77 -49q0 -41 -30.5 -59.5t-74.5 -18.5zM664 528q-47 0 -47 29q0 62 123 62l3 -3q-5 -88 -79 -88zM1438 687h-15q-19 0 -19 19q0 28 19 85q5 15 14.5 19t28.5 4q77 0 77 -49q0 -41 -30.5 -59.5 t-74.5 -18.5zM1780 527q-47 0 -47 30q0 62 123 62l3 -3q-5 -89 -79 -89zM373 894h-128q-8 0 -14.5 -4t-8.5 -7.5t-7 -12.5q-3 -7 -45 -190t-42 -192q0 -7 5.5 -12.5t13.5 -5.5h62q25 0 32.5 34.5l15 69t32.5 34.5q47 0 87.5 7.5t80.5 24.5t63.5 52.5t23.5 84.5 q0 36 -14.5 61t-41 36.5t-53.5 15.5t-62 4zM719 798q-38 0 -74 -6q-2 0 -8.5 -1t-9 -1.5l-7.5 -1.5t-7.5 -2t-6.5 -3t-6.5 -4t-5 -5t-4.5 -7t-4 -9q-9 -29 -9 -39t9 -10q5 0 21.5 5t19.5 6q30 8 58 8q74 0 74 -36q0 -11 -10 -14q-8 -2 -18 -3t-21.5 -1.5t-17.5 -1.5 q-38 -4 -64.5 -10t-56.5 -19.5t-45.5 -39t-15.5 -62.5q0 -38 26 -59.5t64 -21.5q24 0 45.5 6.5t33 13t38.5 23.5q-3 -7 -3 -15t5.5 -13.5t12.5 -5.5h56q1 1 7 3.5t7.5 3.5t5 3.5t5 5.5t2.5 8l45 194q4 13 4 30q0 81 -145 81zM1247 793h-74q-22 0 -39 -23q-5 -7 -29.5 -51 t-46.5 -81.5t-26 -38.5l-5 4q0 77 -27 166q-1 5 -3.5 8.5t-6 6.5t-6.5 5t-8.5 3t-8.5 1.5t-9.5 1t-9 0.5h-10h-8.5q-38 0 -38 -21l1 -5q5 -53 25 -151t25 -143q2 -16 2 -24q0 -19 -30.5 -61.5t-30.5 -58.5q0 -13 40 -13q61 0 76 25l245 415q10 20 10 26q0 9 -8 9zM1489 892 h-129q-18 0 -29 -23q-6 -13 -46.5 -191.5t-40.5 -190.5q0 -20 43 -20h7.5h9h9t9.5 1t8.5 2t8.5 3t6.5 4.5t5.5 6t3 8.5l21 91q2 10 10.5 17t19.5 7q47 0 87.5 7t80.5 24.5t63.5 52.5t23.5 84q0 36 -14.5 61t-41 36.5t-53.5 15.5t-62 4zM1835 798q-26 0 -74 -6 q-38 -6 -48 -16q-7 -8 -11 -19q-8 -24 -8 -39q0 -10 8 -10q1 0 41 12q30 8 58 8q74 0 74 -36q0 -12 -10 -14q-4 -1 -57 -7q-38 -4 -64.5 -10t-56.5 -19.5t-45.5 -39t-15.5 -62.5t26 -58.5t64 -21.5q24 0 45 6t34 13t38 24q-3 -15 -3 -16q0 -5 2 -8.5t6.5 -5.5t8 -3.5 t10.5 -2t9.5 -0.5h9.5h8q42 0 48 25l45 194q3 15 3 31q0 81 -145 81zM2157 889h-55q-25 0 -33 -40q-10 -44 -36.5 -167t-42.5 -190v-5q0 -16 16 -18h1h57q10 0 18.5 6.5t10.5 16.5l83 374h-1l1 5q0 7 -5.5 12.5t-13.5 5.5zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048 q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
+<glyph unicode="&#xf1f5;" horiz-adv-x="2304" d="M1597 633q0 -69 -21 -106q-19 -35 -52 -35q-23 0 -41 9v224q29 30 57 30q57 0 57 -122zM2035 669h-110q6 98 56 98q51 0 54 -98zM476 534q0 59 -33 91.5t-101 57.5q-36 13 -52 24t-16 25q0 26 38 26q58 0 124 -33l18 112q-67 32 -149 32q-77 0 -123 -38q-48 -39 -48 -109 q0 -58 32.5 -90.5t99.5 -56.5q39 -14 54.5 -25.5t15.5 -27.5q0 -31 -48 -31q-29 0 -70 12.5t-72 30.5l-18 -113q72 -41 168 -41q81 0 129 37q51 41 51 117zM771 749l19 111h-96v135l-129 -21l-18 -114l-46 -8l-17 -103h62v-219q0 -84 44 -120q38 -30 111 -30q32 0 79 11v118 q-32 -7 -44 -7q-42 0 -42 50v197h77zM1087 724v139q-15 3 -28 3q-32 0 -55.5 -16t-33.5 -46l-10 56h-131v-471h150v306q26 31 82 31q16 0 26 -2zM1124 389h150v471h-150v-471zM1746 638q0 122 -45 179q-40 52 -111 52q-64 0 -117 -56l-8 47h-132v-645l150 25v151 q36 -11 68 -11q83 0 134 56q61 65 61 202zM1278 986q0 33 -23 56t-56 23t-56 -23t-23 -56t23 -56.5t56 -23.5t56 23.5t23 56.5zM2176 629q0 113 -48 176q-50 64 -144 64q-96 0 -151.5 -66t-55.5 -180q0 -128 63 -188q55 -55 161 -55q101 0 160 40l-16 103q-57 -31 -128 -31 q-43 0 -63 19q-23 19 -28 66h248q2 14 2 52zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
+<glyph unicode="&#xf1f6;" horiz-adv-x="2048" d="M1558 684q61 -356 298 -556q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-180.5 74.5t-75.5 180.5zM1024 -176q16 0 16 16t-16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5zM2026 1424q8 -10 7.5 -23.5t-10.5 -22.5 l-1872 -1622q-10 -8 -23.5 -7t-21.5 11l-84 96q-8 10 -7.5 23.5t10.5 21.5l186 161q-19 32 -19 66q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q124 -18 219 -82.5t148 -157.5 l418 363q10 8 23.5 7t21.5 -11z" />
+<glyph unicode="&#xf1f7;" horiz-adv-x="2048" d="M1040 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM503 315l877 760q-42 88 -132.5 146.5t-223.5 58.5q-93 0 -169.5 -31.5t-121.5 -80.5t-69 -103t-24 -105q0 -384 -137 -645zM1856 128 q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-180.5 74.5t-75.5 180.5l149 129h757q-166 187 -227 459l111 97q61 -356 298 -556zM1942 1520l84 -96q8 -10 7.5 -23.5t-10.5 -22.5l-1872 -1622q-10 -8 -23.5 -7t-21.5 11l-84 96q-8 10 -7.5 23.5t10.5 21.5l186 161 q-19 32 -19 66q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q124 -18 219 -82.5t148 -157.5l418 363q10 8 23.5 7t21.5 -11z" />
+<glyph unicode="&#xf1f8;" horiz-adv-x="1408" d="M512 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM768 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1024 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704 q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167 q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf1f9;" d="M1150 462v-109q0 -50 -36.5 -89t-94 -60.5t-118 -32.5t-117.5 -11q-205 0 -342.5 139t-137.5 346q0 203 136 339t339 136q34 0 75.5 -4.5t93 -18t92.5 -34t69 -56.5t28 -81v-109q0 -16 -16 -16h-118q-16 0 -16 16v70q0 43 -65.5 67.5t-137.5 24.5q-140 0 -228.5 -91.5 t-88.5 -237.5q0 -151 91.5 -249.5t233.5 -98.5q68 0 138 24t70 66v70q0 7 4.5 11.5t10.5 4.5h119q6 0 11 -4.5t5 -11.5zM768 1280q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5 t-51 248.5t-136.5 204t-204 136.5t-248.5 51zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf1fa;" d="M972 761q0 108 -53.5 169t-147.5 61q-63 0 -124 -30.5t-110 -84.5t-79.5 -137t-30.5 -180q0 -112 53.5 -173t150.5 -61q96 0 176 66.5t122.5 166t42.5 203.5zM1536 640q0 -111 -37 -197t-98.5 -135t-131.5 -74.5t-145 -27.5q-6 0 -15.5 -0.5t-16.5 -0.5q-95 0 -142 53 q-28 33 -33 83q-52 -66 -131.5 -110t-173.5 -44q-161 0 -249.5 95.5t-88.5 269.5q0 157 66 290t179 210.5t246 77.5q87 0 155 -35.5t106 -99.5l2 19l11 56q1 6 5.5 12t9.5 6h118q5 0 13 -11q5 -5 3 -16l-120 -614q-5 -24 -5 -48q0 -39 12.5 -52t44.5 -13q28 1 57 5.5t73 24 t77 50t57 89.5t24 137q0 292 -174 466t-466 174q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51q228 0 405 144q11 9 24 8t21 -12l41 -49q8 -12 7 -24q-2 -13 -12 -22q-102 -83 -227.5 -128t-258.5 -45q-156 0 -298 61 t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q344 0 556 -212t212 -556z" />
+<glyph unicode="&#xf1fb;" horiz-adv-x="1792" d="M1698 1442q94 -94 94 -226.5t-94 -225.5l-225 -223l104 -104q10 -10 10 -23t-10 -23l-210 -210q-10 -10 -23 -10t-23 10l-105 105l-603 -603q-37 -37 -90 -37h-203l-256 -128l-64 64l128 256v203q0 53 37 90l603 603l-105 105q-10 10 -10 23t10 23l210 210q10 10 23 10 t23 -10l104 -104l223 225q93 94 225.5 94t226.5 -94zM512 64l576 576l-192 192l-576 -576v-192h192z" />
+<glyph unicode="&#xf1fc;" horiz-adv-x="1792" d="M1615 1536q70 0 122.5 -46.5t52.5 -116.5q0 -63 -45 -151q-332 -629 -465 -752q-97 -91 -218 -91q-126 0 -216.5 92.5t-90.5 219.5q0 128 92 212l638 579q59 54 130 54zM706 502q39 -76 106.5 -130t150.5 -76l1 -71q4 -213 -129.5 -347t-348.5 -134q-123 0 -218 46.5 t-152.5 127.5t-86.5 183t-29 220q7 -5 41 -30t62 -44.5t59 -36.5t46 -17q41 0 55 37q25 66 57.5 112.5t69.5 76t88 47.5t103 25.5t125 10.5z" />
+<glyph unicode="&#xf1fd;" horiz-adv-x="1792" d="M1792 128v-384h-1792v384q45 0 85 14t59 27.5t47 37.5q30 27 51.5 38t56.5 11t55.5 -11t52.5 -38q29 -25 47 -38t58 -27t86 -14q45 0 85 14.5t58 27t48 37.5q21 19 32.5 27t31 15t43.5 7q35 0 56.5 -11t51.5 -38q28 -24 47 -37.5t59 -27.5t85 -14t85 14t59 27.5t47 37.5 q30 27 51.5 38t56.5 11q34 0 55.5 -11t51.5 -38q28 -24 47 -37.5t59 -27.5t85 -14zM1792 448v-192q-35 0 -55.5 11t-52.5 38q-29 25 -47 38t-58 27t-85 14q-46 0 -86 -14t-58 -27t-47 -38q-22 -19 -33 -27t-31 -15t-44 -7q-35 0 -56.5 11t-51.5 38q-29 25 -47 38t-58 27 t-86 14q-45 0 -85 -14.5t-58 -27t-48 -37.5q-21 -19 -32.5 -27t-31 -15t-43.5 -7q-35 0 -56.5 11t-51.5 38q-28 24 -47 37.5t-59 27.5t-85 14q-46 0 -86 -14t-58 -27t-47 -38q-30 -27 -51.5 -38t-56.5 -11v192q0 80 56 136t136 56h64v448h256v-448h256v448h256v-448h256v448 h256v-448h64q80 0 136 -56t56 -136zM512 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5q0 29 9.5 51t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150zM1024 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5q0 29 9.5 51 t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150zM1536 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5q0 29 9.5 51t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150z" />
+<glyph unicode="&#xf1fe;" horiz-adv-x="2048" d="M2048 0v-128h-2048v1536h128v-1408h1920zM1664 1024l256 -896h-1664v576l448 576l576 -576z" />
+<glyph unicode="&#xf200;" horiz-adv-x="1792" d="M768 646l546 -546q-106 -108 -247.5 -168t-298.5 -60q-209 0 -385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103v-762zM955 640h773q0 -157 -60 -298.5t-168 -247.5zM1664 768h-768v768q209 0 385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf201;" horiz-adv-x="2048" d="M2048 0v-128h-2048v1536h128v-1408h1920zM1920 1248v-435q0 -21 -19.5 -29.5t-35.5 7.5l-121 121l-633 -633q-10 -10 -23 -10t-23 10l-233 233l-416 -416l-192 192l585 585q10 10 23 10t23 -10l233 -233l464 464l-121 121q-16 16 -7.5 35.5t29.5 19.5h435q14 0 23 -9 t9 -23z" />
+<glyph unicode="&#xf202;" horiz-adv-x="1792" d="M1292 832q0 -6 10 -41q10 -29 25 -49.5t41 -34t44 -20t55 -16.5q325 -91 325 -332q0 -146 -105.5 -242.5t-254.5 -96.5q-59 0 -111.5 18.5t-91.5 45.5t-77 74.5t-63 87.5t-53.5 103.5t-43.5 103t-39.5 106.5t-35.5 95q-32 81 -61.5 133.5t-73.5 96.5t-104 64t-142 20 q-96 0 -183 -55.5t-138 -144.5t-51 -185q0 -160 106.5 -279.5t263.5 -119.5q177 0 258 95q56 63 83 116l84 -152q-15 -34 -44 -70l1 -1q-131 -152 -388 -152q-147 0 -269.5 79t-190.5 207.5t-68 274.5q0 105 43.5 206t116 176.5t172 121.5t204.5 46q87 0 159 -19t123.5 -50 t95 -80t72.5 -99t58.5 -117t50.5 -124.5t50 -130.5t55 -127q96 -200 233 -200q81 0 138.5 48.5t57.5 128.5q0 42 -19 72t-50.5 46t-72.5 31.5t-84.5 27t-87.5 34t-81 52t-65 82t-39 122.5q-3 16 -3 33q0 110 87.5 192t198.5 78q78 -3 120.5 -14.5t90.5 -53.5h-1 q12 -11 23 -24.5t26 -36t19 -27.5l-129 -99q-26 49 -54 70v1q-23 21 -97 21q-49 0 -84 -33t-35 -83z" />
+<glyph unicode="&#xf203;" d="M1432 484q0 173 -234 239q-35 10 -53 16.5t-38 25t-29 46.5q0 2 -2 8.5t-3 12t-1 7.5q0 36 24.5 59.5t60.5 23.5q54 0 71 -15h-1q20 -15 39 -51l93 71q-39 54 -49 64q-33 29 -67.5 39t-85.5 10q-80 0 -142 -57.5t-62 -137.5q0 -7 2 -23q16 -96 64.5 -140t148.5 -73 q29 -8 49 -15.5t45 -21.5t38.5 -34.5t13.5 -46.5v-5q1 -58 -40.5 -93t-100.5 -35q-97 0 -167 144q-23 47 -51.5 121.5t-48 125.5t-54 110.5t-74 95.5t-103.5 60.5t-147 24.5q-101 0 -192 -56t-144 -148t-50 -192v-1q4 -108 50.5 -199t133.5 -147.5t196 -56.5q186 0 279 110 q20 27 31 51l-60 109q-42 -80 -99 -116t-146 -36q-115 0 -191 87t-76 204q0 105 82 189t186 84q112 0 170 -53.5t104 -172.5q8 -21 25.5 -68.5t28.5 -76.5t31.5 -74.5t38.5 -74t45.5 -62.5t55.5 -53.5t66 -33t80 -13.5q107 0 183 69.5t76 174.5zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf204;" horiz-adv-x="2048" d="M1152 640q0 104 -40.5 198.5t-109.5 163.5t-163.5 109.5t-198.5 40.5t-198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5zM1920 640q0 104 -40.5 198.5 t-109.5 163.5t-163.5 109.5t-198.5 40.5h-386q119 -90 188.5 -224t69.5 -288t-69.5 -288t-188.5 -224h386q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5zM2048 640q0 -130 -51 -248.5t-136.5 -204t-204 -136.5t-248.5 -51h-768q-130 0 -248.5 51t-204 136.5 t-136.5 204t-51 248.5t51 248.5t136.5 204t204 136.5t248.5 51h768q130 0 248.5 -51t204 -136.5t136.5 -204t51 -248.5z" />
+<glyph unicode="&#xf205;" horiz-adv-x="2048" d="M0 640q0 130 51 248.5t136.5 204t204 136.5t248.5 51h768q130 0 248.5 -51t204 -136.5t136.5 -204t51 -248.5t-51 -248.5t-136.5 -204t-204 -136.5t-248.5 -51h-768q-130 0 -248.5 51t-204 136.5t-136.5 204t-51 248.5zM1408 128q104 0 198.5 40.5t163.5 109.5 t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5t-163.5 109.5t-198.5 40.5t-198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5z" />
+<glyph unicode="&#xf206;" horiz-adv-x="2304" d="M762 384h-314q-40 0 -57.5 35t6.5 67l188 251q-65 31 -137 31q-132 0 -226 -94t-94 -226t94 -226t226 -94q115 0 203 72.5t111 183.5zM576 512h186q-18 85 -75 148zM1056 512l288 384h-480l-99 -132q105 -103 126 -252h165zM2176 448q0 132 -94 226t-226 94 q-60 0 -121 -24l174 -260q15 -23 10 -49t-27 -40q-15 -11 -36 -11q-35 0 -53 29l-174 260q-93 -95 -93 -225q0 -132 94 -226t226 -94t226 94t94 226zM2304 448q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 97 39.5 183.5t109.5 149.5l-65 98l-353 -469 q-18 -26 -51 -26h-197q-23 -164 -149 -274t-294 -110q-185 0 -316.5 131.5t-131.5 316.5t131.5 316.5t316.5 131.5q114 0 215 -55l137 183h-224q-26 0 -45 19t-19 45t19 45t45 19h384v-128h435l-85 128h-222q-26 0 -45 19t-19 45t19 45t45 19h256q33 0 53 -28l267 -400 q91 44 192 44q185 0 316.5 -131.5t131.5 -316.5z" />
+<glyph unicode="&#xf207;" d="M384 320q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1408 320q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1362 716l-72 384q-5 23 -22.5 37.5t-40.5 14.5 h-918q-23 0 -40.5 -14.5t-22.5 -37.5l-72 -384q-5 -30 14 -53t49 -23h1062q30 0 49 23t14 53zM1136 1328q0 20 -14 34t-34 14h-640q-20 0 -34 -14t-14 -34t14 -34t34 -14h640q20 0 34 14t14 34zM1536 603v-603h-128v-128q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5 t-37.5 90.5v128h-768v-128q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5v128h-128v603q0 112 25 223l103 454q9 78 97.5 137t230 89t312.5 30t312.5 -30t230 -89t97.5 -137l105 -454q23 -102 23 -223z" />
+<glyph unicode="&#xf208;" horiz-adv-x="2048" d="M1463 704q0 -35 -25 -60.5t-61 -25.5h-702q-36 0 -61 25.5t-25 60.5t25 60.5t61 25.5h702q36 0 61 -25.5t25 -60.5zM1677 704q0 86 -23 170h-982q-36 0 -61 25t-25 60q0 36 25 61t61 25h908q-88 143 -235 227t-320 84q-177 0 -327.5 -87.5t-238 -237.5t-87.5 -327 q0 -86 23 -170h982q36 0 61 -25t25 -60q0 -36 -25 -61t-61 -25h-908q88 -143 235.5 -227t320.5 -84q132 0 253 51.5t208 139t139 208t52 253.5zM2048 959q0 -35 -25 -60t-61 -25h-131q17 -85 17 -170q0 -167 -65.5 -319.5t-175.5 -263t-262.5 -176t-319.5 -65.5 q-246 0 -448.5 133t-301.5 350h-189q-36 0 -61 25t-25 61q0 35 25 60t61 25h132q-17 85 -17 170q0 167 65.5 319.5t175.5 263t262.5 176t320.5 65.5q245 0 447.5 -133t301.5 -350h188q36 0 61 -25t25 -61z" />
+<glyph unicode="&#xf209;" horiz-adv-x="1280" d="M953 1158l-114 -328l117 -21q165 451 165 518q0 56 -38 56q-57 0 -130 -225zM654 471l33 -88q37 42 71 67l-33 5.5t-38.5 7t-32.5 8.5zM362 1367q0 -98 159 -521q18 10 49 10q15 0 75 -5l-121 351q-75 220 -123 220q-19 0 -29 -17.5t-10 -37.5zM283 608q0 -36 51.5 -119 t117.5 -153t100 -70q14 0 25.5 13t11.5 27q0 24 -32 102q-13 32 -32 72t-47.5 89t-61.5 81t-62 32q-20 0 -45.5 -27t-25.5 -47zM125 273q0 -41 25 -104q59 -145 183.5 -227t281.5 -82q227 0 382 170q152 169 152 427q0 43 -1 67t-11.5 62t-30.5 56q-56 49 -211.5 75.5 t-270.5 26.5q-37 0 -49 -11q-12 -5 -12 -35q0 -34 21.5 -60t55.5 -40t77.5 -23.5t87.5 -11.5t85 -4t70 0h23q24 0 40 -19q15 -19 19 -55q-28 -28 -96 -54q-61 -22 -93 -46q-64 -46 -108.5 -114t-44.5 -137q0 -31 18.5 -88.5t18.5 -87.5l-3 -12q-4 -12 -4 -14 q-137 10 -146 216q-8 -2 -41 -2q2 -7 2 -21q0 -53 -40.5 -89.5t-94.5 -36.5q-82 0 -166.5 78t-84.5 159q0 34 33 67q52 -64 60 -76q77 -104 133 -104q12 0 26.5 8.5t14.5 20.5q0 34 -87.5 145t-116.5 111q-43 0 -70 -44.5t-27 -90.5zM11 264q0 101 42.5 163t136.5 88 q-28 74 -28 104q0 62 61 123t122 61q29 0 70 -15q-163 462 -163 567q0 80 41 130.5t119 50.5q131 0 325 -581q6 -17 8 -23q6 16 29 79.5t43.5 118.5t54 127.5t64.5 123t70.5 86.5t76.5 36q71 0 112 -49t41 -122q0 -108 -159 -550q61 -15 100.5 -46t58.5 -78t26 -93.5 t7 -110.5q0 -150 -47 -280t-132 -225t-211 -150t-278 -55q-111 0 -223 42q-149 57 -258 191.5t-109 286.5z" />
+<glyph unicode="&#xf20a;" horiz-adv-x="2048" d="M785 528h207q-14 -158 -98.5 -248.5t-214.5 -90.5q-162 0 -254.5 116t-92.5 316q0 194 93 311.5t233 117.5q148 0 232 -87t97 -247h-203q-5 64 -35.5 99t-81.5 35q-57 0 -88.5 -60.5t-31.5 -177.5q0 -48 5 -84t18 -69.5t40 -51.5t66 -18q95 0 109 139zM1497 528h206 q-14 -158 -98 -248.5t-214 -90.5q-162 0 -254.5 116t-92.5 316q0 194 93 311.5t233 117.5q148 0 232 -87t97 -247h-204q-4 64 -35 99t-81 35q-57 0 -88.5 -60.5t-31.5 -177.5q0 -48 5 -84t18 -69.5t39.5 -51.5t65.5 -18q49 0 76.5 38t33.5 101zM1856 647q0 207 -15.5 307 t-60.5 161q-6 8 -13.5 14t-21.5 15t-16 11q-86 63 -697 63q-625 0 -710 -63q-5 -4 -17.5 -11.5t-21 -14t-14.5 -14.5q-45 -60 -60 -159.5t-15 -308.5q0 -208 15 -307.5t60 -160.5q6 -8 15 -15t20.5 -14t17.5 -12q44 -33 239.5 -49t470.5 -16q610 0 697 65q5 4 17 11t20.5 14 t13.5 16q46 60 61 159t15 309zM2048 1408v-1536h-2048v1536h2048z" />
+<glyph unicode="&#xf20b;" d="M992 912v-496q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v496q0 112 -80 192t-192 80h-272v-1152q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v1344q0 14 9 23t23 9h464q135 0 249 -66.5t180.5 -180.5t66.5 -249zM1376 1376v-880q0 -135 -66.5 -249t-180.5 -180.5 t-249 -66.5h-464q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h160q14 0 23 -9t9 -23v-768h272q112 0 192 80t80 192v880q0 14 9 23t23 9h160q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf20c;" d="M1311 694v-114q0 -24 -13.5 -38t-37.5 -14h-202q-24 0 -38 14t-14 38v114q0 24 14 38t38 14h202q24 0 37.5 -14t13.5 -38zM821 464v250q0 53 -32.5 85.5t-85.5 32.5h-133q-68 0 -96 -52q-28 52 -96 52h-130q-53 0 -85.5 -32.5t-32.5 -85.5v-250q0 -22 21 -22h55 q22 0 22 22v230q0 24 13.5 38t38.5 14h94q24 0 38 -14t14 -38v-230q0 -22 21 -22h54q22 0 22 22v230q0 24 14 38t38 14h97q24 0 37.5 -14t13.5 -38v-230q0 -22 22 -22h55q21 0 21 22zM1410 560v154q0 53 -33 85.5t-86 32.5h-264q-53 0 -86 -32.5t-33 -85.5v-410 q0 -21 22 -21h55q21 0 21 21v180q31 -42 94 -42h191q53 0 86 32.5t33 85.5zM1536 1176v-1072q0 -96 -68 -164t-164 -68h-1072q-96 0 -164 68t-68 164v1072q0 96 68 164t164 68h1072q96 0 164 -68t68 -164z" />
+<glyph unicode="&#xf20d;" horiz-adv-x="1792" />
+<glyph unicode="&#xf20e;" horiz-adv-x="1792" />
+<glyph unicode="&#xf500;" horiz-adv-x="1792" />
+</font>
+</defs></svg> \ No newline at end of file
diff --git a/META-INF/resources/webjars/font-awesome/4.2.0/fonts/fontawesome-webfont.ttf b/META-INF/resources/webjars/font-awesome/4.2.0/fonts/fontawesome-webfont.ttf
new file mode 100644
index 0000000..96a3639
--- /dev/null
+++ b/META-INF/resources/webjars/font-awesome/4.2.0/fonts/fontawesome-webfont.ttf
Binary files differ
diff --git a/META-INF/resources/webjars/font-awesome/4.2.0/fonts/fontawesome-webfont.woff b/META-INF/resources/webjars/font-awesome/4.2.0/fonts/fontawesome-webfont.woff
new file mode 100644
index 0000000..628b6a5
--- /dev/null
+++ b/META-INF/resources/webjars/font-awesome/4.2.0/fonts/fontawesome-webfont.woff
Binary files differ
diff --git a/images/Dropdown.png b/images/Dropdown.png
new file mode 100644
index 0000000..c28a60d
--- /dev/null
+++ b/images/Dropdown.png
Binary files differ
diff --git a/images/Hello World Console.png b/images/Hello World Console.png
new file mode 100644
index 0000000..3b83de3
--- /dev/null
+++ b/images/Hello World Console.png
Binary files differ
diff --git a/images/Hello World White.png b/images/Hello World White.png
new file mode 100644
index 0000000..f4d3774
--- /dev/null
+++ b/images/Hello World White.png
Binary files differ
diff --git a/images/Hello World.png b/images/Hello World.png
new file mode 100644
index 0000000..d333b5f
--- /dev/null
+++ b/images/Hello World.png
Binary files differ
diff --git a/images/IntelliJ Hello.png b/images/IntelliJ Hello.png
new file mode 100644
index 0000000..766df74
--- /dev/null
+++ b/images/IntelliJ Hello.png
Binary files differ
diff --git a/images/Scalatags Downloads.png b/images/Scalatags Downloads.png
new file mode 100644
index 0000000..4ff118c
--- /dev/null
+++ b/images/Scalatags Downloads.png
Binary files differ
diff --git a/images/javascript-the-good-parts-the-definitive-guide.jpg b/images/javascript-the-good-parts-the-definitive-guide.jpg
new file mode 100644
index 0000000..3c1a1c5
--- /dev/null
+++ b/images/javascript-the-good-parts-the-definitive-guide.jpg
Binary files differ
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..4224989
--- /dev/null
+++ b/index.html
@@ -0,0 +1,4072 @@
+<html><head><link href="META-INF/resources/webjars/font-awesome/4.2.0/css/font-awesome.min.css" rel="stylesheet" /><link href="styles.css" rel="stylesheet" /><script src="scripts.js"></script><script>
+ ['DOMContentLoaded', 'load'].forEach(function(ev){
+ addEventListener(ev, function(){
+ Array.prototype.forEach.call(
+ document.querySelectorAll('code.scalatex-highlight-js'),
+ hljs.highlightBlock
+ );
+ })
+ })
+ </script><meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><link rel="shortcut icon" type="image/png" href="favicon.png" /><title>Hands-on Scala.js</title><script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+
+ ga('create', 'UA-27464920-4', 'auto');
+ ga('send', 'pageview');
+ </script></head><body onload="scrollmenu.Controller().main({&quot;value&quot;:&quot;root&quot;,&quot;children&quot;:[{&quot;value&quot;:&quot;Hands-on Scala.js&quot;,&quot;children&quot;:[]},{&quot;value&quot;:&quot;Intro to Scala.js&quot;,&quot;children&quot;:[{&quot;value&quot;:&quot;About Javascript&quot;,&quot;children&quot;:[{&quot;value&quot;:&quot;Javascript-the-language&quot;,&quot;children&quot;:[]},{&quot;value&quot;:&quot;Javascript-the-platform&quot;,&quot;children&quot;:[]}]},{&quot;value&quot;:&quot;About Scala.js&quot;,&quot;children&quot;:[{&quot;value&quot;:&quot;The Language&quot;,&quot;children&quot;:[]},{&quot;value&quot;:&quot;Sharing Code&quot;,&quot;children&quot;:[]},{&quot;value&quot;:&quot;Client-Server Integration&quot;,&quot;children&quot;:[]}]}]},{&quot;value&quot;:&quot;Hands On&quot;,&quot;children&quot;:[{&quot;value&quot;:&quot;Getting Started&quot;,&quot;children&quot;:[{&quot;value&quot;:&quot;Opening up the Project&quot;,&quot;children&quot;:[]},{&quot;value&quot;:&quot;The Application Code&quot;,&quot;children&quot;:[]},{&quot;value&quot;:&quot;The Project Code&quot;,&quot;children&quot;:[{&quot;value&quot;:&quot;project/build.sbt&quot;,&quot;children&quot;:[]},{&quot;value&quot;:&quot;build.sbt&quot;,&quot;children&quot;:[]},{&quot;value&quot;:&quot;src/main/resources/index-dev.html&quot;,&quot;children&quot;:[]}]},{&quot;value&quot;:&quot;Publishing&quot;,&quot;children&quot;:[{&quot;value&quot;:&quot;Optimization&quot;,&quot;children&quot;:[]},{&quot;value&quot;:&quot;Blob Size&quot;,&quot;children&quot;:[]}]},{&quot;value&quot;:&quot;Recap&quot;,&quot;children&quot;:[]}]},{&quot;value&quot;:&quot;Making a Canvas App&quot;,&quot;children&quot;:[{&quot;value&quot;:&quot;Making a Sketchpad using Mouse Input&quot;,&quot;children&quot;:[]},{&quot;value&quot;:&quot;Making a Clock using setInterval&quot;,&quot;children&quot;:[]},{&quot;value&quot;:&quot;Tying it together: Flappy Box&quot;,&quot;children&quot;:[{&quot;value&quot;:&quot;Setting Up the Canvas&quot;,&quot;children&quot;:[]},{&quot;value&quot;:&quot;Defining our State&quot;,&quot;children&quot;:[]},{&quot;value&quot;:&quot;Game Logic&quot;,&quot;children&quot;:[]},{&quot;value&quot;:&quot;A Working Product&quot;,&quot;children&quot;:[]}]},{&quot;value&quot;:&quot;Canvas Recap&quot;,&quot;children&quot;:[{&quot;value&quot;:&quot;Development Speed&quot;,&quot;children&quot;:[]},{&quot;value&quot;:&quot;Full Scala&quot;,&quot;children&quot;:[]},{&quot;value&quot;:&quot;Seamless Javascript Interop&quot;,&quot;children&quot;:[]}]}]},{&quot;value&quot;:&quot;Interactive Web Pages&quot;,&quot;children&quot;:[{&quot;value&quot;:&quot;Hello World: HTML&quot;,&quot;children&quot;:[]},{&quot;value&quot;:&quot;Scalatags&quot;,&quot;children&quot;:[{&quot;value&quot;:&quot;User Input&quot;,&quot;children&quot;:[]},{&quot;value&quot;:&quot;Re-rendering&quot;,&quot;children&quot;:[]}]},{&quot;value&quot;:&quot;Using Web Services&quot;,&quot;children&quot;:[{&quot;value&quot;:&quot;Raw Javascript&quot;,&quot;children&quot;:[]},{&quot;value&quot;:&quot;dom.extensions&quot;,&quot;children&quot;:[]},{&quot;value&quot;:&quot;Parsing the Data&quot;,&quot;children&quot;:[]}]},{&quot;value&quot;:&quot;Tying it together: Weather Search&quot;,&quot;children&quot;:[]},{&quot;value&quot;:&quot;Interactive Web Pages Recap&quot;,&quot;children&quot;:[]}]},{&quot;value&quot;:&quot;The Command Line&quot;,&quot;children&quot;:[{&quot;value&quot;:&quot;Commands&quot;,&quot;children&quot;:[{&quot;value&quot;:&quot;The compile Command&quot;,&quot;children&quot;:[]},{&quot;value&quot;:&quot;The package Command&quot;,&quot;children&quot;:[]},{&quot;value&quot;:&quot;The fastOptJS Command&quot;,&quot;children&quot;:[]},{&quot;value&quot;:&quot;The fullOptJS Command&quot;,&quot;children&quot;:[]},{&quot;value&quot;:&quot;The run Command&quot;,&quot;children&quot;:[]},{&quot;value&quot;:&quot;The test Command&quot;,&quot;children&quot;:[]}]},{&quot;value&quot;:&quot;Headless Runtimes&quot;,&quot;children&quot;:[]},{&quot;value&quot;:&quot;Stages&quot;,&quot;children&quot;:[]}]},{&quot;value&quot;:&quot;Cross Publishing Libraries&quot;,&quot;children&quot;:[{&quot;value&quot;:&quot;A Simple Cross-Built Module&quot;,&quot;children&quot;:[{&quot;value&quot;:&quot;Build Configuration&quot;,&quot;children&quot;:[]},{&quot;value&quot;:&quot;Source Files&quot;,&quot;children&quot;:[]},{&quot;value&quot;:&quot;Running the Module&quot;,&quot;children&quot;:[]}]}]},{&quot;value&quot;:&quot;Integrating Client-Server&quot;,&quot;children&quot;:[{&quot;value&quot;:&quot;A Client-Server Setup&quot;,&quot;children&quot;:[]},{&quot;value&quot;:&quot;Client-Server Reflections&quot;,&quot;children&quot;:[{&quot;value&quot;:&quot;Shared Templating&quot;,&quot;children&quot;:[]},{&quot;value&quot;:&quot;Shared Code&quot;,&quot;children&quot;:[]},{&quot;value&quot;:&quot;Boilerplate-free Serialization&quot;,&quot;children&quot;:[]}]},{&quot;value&quot;:&quot;What's Left?&quot;,&quot;children&quot;:[]},{&quot;value&quot;:&quot;Autowire&quot;,&quot;children&quot;:[{&quot;value&quot;:&quot;Setting up Autowire&quot;,&quot;children&quot;:[]},{&quot;value&quot;:&quot;Why Autowire?&quot;,&quot;children&quot;:[]}]}]}]},{&quot;value&quot;:&quot;In Depth&quot;,&quot;children&quot;:[{&quot;value&quot;:&quot;Advanced Techniques&quot;,&quot;children&quot;:[{&quot;value&quot;:&quot;Functional-Reactive UIs&quot;,&quot;children&quot;:[{&quot;value&quot;:&quot;Why FRP&quot;,&quot;children&quot;:[]},{&quot;value&quot;:&quot;FRP with Scala.Rx&quot;,&quot;children&quot;:[]},{&quot;value&quot;:&quot;More Rx&quot;,&quot;children&quot;:[]}]},{&quot;value&quot;:&quot;Asynchronous Workflows&quot;,&quot;children&quot;:[{&quot;value&quot;:&quot;Futures &amp; Promises&quot;,&quot;children&quot;:[{&quot;value&quot;:&quot;Direct Use of XMLHttpRequest&quot;,&quot;children&quot;:[]},{&quot;value&quot;:&quot;Using dom.extensions.Ajax&quot;,&quot;children&quot;:[]},{&quot;value&quot;:&quot;Future Combinators&quot;,&quot;children&quot;:[]}]},{&quot;value&quot;:&quot;Scala-Async&quot;,&quot;children&quot;:[{&quot;value&quot;:&quot;Traditional Asynchrony&quot;,&quot;children&quot;:[]},{&quot;value&quot;:&quot;Using Scala-Async&quot;,&quot;children&quot;:[]}]}]}]},{&quot;value&quot;:&quot;Deviations from Scala-JVM&quot;,&quot;children&quot;:[{&quot;value&quot;:&quot;Language Differences&quot;,&quot;children&quot;:[{&quot;value&quot;:&quot;Primitive data types&quot;,&quot;children&quot;:[{&quot;value&quot;:&quot;Floats can behave as Doubles by default&quot;,&quot;children&quot;:[]},{&quot;value&quot;:&quot;toString of Float, Double and Unit&quot;,&quot;children&quot;:[]},{&quot;value&quot;:&quot;Runtime type tests are based on values&quot;,&quot;children&quot;:[]}]},{&quot;value&quot;:&quot;Undefined behaviors&quot;,&quot;children&quot;:[]},{&quot;value&quot;:&quot;Reflection&quot;,&quot;children&quot;:[]},{&quot;value&quot;:&quot;Regular expressions&quot;,&quot;children&quot;:[]},{&quot;value&quot;:&quot;Symbols&quot;,&quot;children&quot;:[]},{&quot;value&quot;:&quot;Enumerations&quot;,&quot;children&quot;:[]}]},{&quot;value&quot;:&quot;Library Differences&quot;,&quot;children&quot;:[{&quot;value&quot;:&quot;Standard Library&quot;,&quot;children&quot;:[]},{&quot;value&quot;:&quot;Macros v.s. Reflection&quot;,&quot;children&quot;:[]},{&quot;value&quot;:&quot;Pure-Scala v.s. Java Libraries&quot;,&quot;children&quot;:[]},{&quot;value&quot;:&quot;Javascript APIs v.s. JVM APIs&quot;,&quot;children&quot;:[]},{&quot;value&quot;:&quot;Scala/Browser tooling v.s. Java tooling&quot;,&quot;children&quot;:[]}]}]},{&quot;value&quot;:&quot;The Compilation Pipeline&quot;,&quot;children&quot;:[{&quot;value&quot;:&quot;Whole Program Optimizaton&quot;,&quot;children&quot;:[]},{&quot;value&quot;:&quot;How Compilation Works&quot;,&quot;children&quot;:[{&quot;value&quot;:&quot;Compilation&quot;,&quot;children&quot;:[]},{&quot;value&quot;:&quot;Fast Optimization&quot;,&quot;children&quot;:[]},{&quot;value&quot;:&quot;Full Optimization&quot;,&quot;children&quot;:[]}]}]},{&quot;value&quot;:&quot;Scala.js' Design Space&quot;,&quot;children&quot;:[{&quot;value&quot;:&quot;Why No Reflection?&quot;,&quot;children&quot;:[{&quot;value&quot;:&quot;Dead Code Elimination&quot;,&quot;children&quot;:[]},{&quot;value&quot;:&quot;Whither Reflection?&quot;,&quot;children&quot;:[]},{&quot;value&quot;:&quot;Macros&quot;,&quot;children&quot;:[]}]},{&quot;value&quot;:&quot;Why does error behavior differ?&quot;,&quot;children&quot;:[{&quot;value&quot;:&quot;Divide-by-zero: a case study&quot;,&quot;children&quot;:[]},{&quot;value&quot;:&quot;The Performance/Correctness Tradeoff&quot;,&quot;children&quot;:[]}]},{&quot;value&quot;:&quot;Small Executables&quot;,&quot;children&quot;:[{&quot;value&quot;:&quot;Raw Verbosity&quot;,&quot;children&quot;:[]},{&quot;value&quot;:&quot;Browsers Performance&quot;,&quot;children&quot;:[]},{&quot;value&quot;:&quot;Deployment Size&quot;,&quot;children&quot;:[]}]}]},{&quot;value&quot;:&quot;Java APIs&quot;,&quot;children&quot;:[{&quot;value&quot;:&quot;Available Java APIs&quot;,&quot;children&quot;:[]},{&quot;value&quot;:&quot;Porting Java APIs&quot;,&quot;children&quot;:[]}]}]}]})"><div id="layout"><a href="#menu" id="menuLink" class="menu-link"><span></span></a><div id="menu"></div></div><div id="main"><div id="main-box" class="scalatex-content" style="max-width: 840px;lineheight: 1.6em;">
+<div class="header scalatex-header scalatex-hover-container" id="Hands-onScala.js" style="display: block;"><h1>Hands-on Scala.js<a class="scalatex-header-link" href="#Hands-onScala.js" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a></h1><br /><h2>Writing client-side web applications in Scala</h2></div><div class="content">
+ <div class="pure-g">
+ <div class="pure-u-1 pure-u-md-13-24">
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">var x = 0.0
+type Graph = (String, Double =&gt; Double)
+val graphs = Seq[Graph](
+ (&quot;red&quot;, sin),
+ (&quot;green&quot;, x =&gt; abs(x % 4 - 2) - 1),
+ (&quot;blue&quot;, x =&gt; sin(x/12) * sin(x))
+).zipWithIndex
+dom.setInterval(() =&gt; {
+ x = (x + 1) % w; if (x == 0) clear()
+ for (((color, f), i) &lt;- graphs) {
+ val offset = h / 3 * (i + 0.5)
+ val y = f(x / w * 75) * h / 30
+ brush.fillStyle = color
+ brush.fillRect(x, y + offset, 3, 3)
+ }
+}, 20)</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/hands-on-scala-js/blob/master/examples/demos/src/main/scala/Splash.scala#L24-L40" target="_blank"><i class="fa fa-link "></i></a></pre>
+</div>
+ <div class="pure-u-1 pure-u-md-11-24">
+ <canvas id="example0" style="display: block;overflow: scroll;"></canvas><script>Splash().main(document.getElementById('example0'))</script>
+</div></div>
+ <p>
+ <a href="http://www.scala-js.org/">Scala.js</a> is a compiler that compiles Scala source code to equivalent Javascript code. That lets you write Scala code that you can run in a web browser, or other environments (Chrome plugins, Node.js, etc.) where Javascript is supported. This book is an introduction to Scala.js, which aims to get you from knowing-nothing about it to being relatively proficient.
+</p>
+ <p>
+ This book contains something for all levels of experience with Scala.js: absolute beginners can get started with the <a href="#IntrotoScala.js">Intro to Scala.js</a> and <a href="#HandsOn">Hands On</a> tutorial, people who have used it before can skip ahead to the later parts of the tutorial: <a href="#MakingaCanvasApp">Making a Canvas App</a> or <a href="#InteractiveWebPages">Interactive Web Pages</a>. Intermediate users will find interest in the chapters on <a href="#CrossPublishingLibraries">Cross Publishing Libraries</a> with Scala.js or <a href="#IntegratingClient-Server">Integrating Client-Server</a>, and even experienced users will find the <a href="#InDepth">In Depth</a> documention useful. Feel free to explore the navigation bar on the left to find chapters of interest.
+</p>
+ <p>
+ Even if we do not require any familiarity of Scala.js, this book nonetheless assumes a good amount of background knowledge: of Scala, of Javascript, and of web development as a whole. In general, you will not need deep knowledge of any of these subjects, though if you are coming in entirely without knowledge of any one of them, you'll have to be willing to spend time Google-ing things and picking things up as we go along. Someone who comes in without previous web-dev experience may miss or not-notice many of the nice touches and benefits that Scala.js brings to the table, having never done web-dev any other way,
+</p>
+ <p>
+ Many of the code samples are taken from examples available on the book's <a href="https://github.com/lihaoyi/scala-js-book">Github Page</a>; for those code samples (e.g. the animation above), there is a <i class="fa fa-link "></i> link in the top-right corner of the snippet that you can click on to go to the original code. These come in handy if you find you need additional context around the snippet, e.g. what imports you need for the code to work, or what the complete executable example looks like.
+</p>
+ <p>
+ This book is roughly divided into two sections:
+</p>
+ <ul>
+ <li>
+ <a href="#HandsOn">Hands On</a>
+is a set of tutorials that walks you through getting started with Scala.js. You'll build a range of small projects, from <a href="#MakingaCanvasApp">Making a Canvas App</a> to <a href="#InteractiveWebPages">Interactive Web Pages</a> to <a href="#IntegratingClient-Server">Integrating Client-Server</a>, and in the process will get a good overview of both Scala.js's use cases as well as the development experience
+</li>
+ <li>
+ <a href="#InDepth">In Depth</a>
+is a set of detailed expositions on various parts of the Scala.js platform. Nothing in here is necessary for you to make your first demos, but as you dig deeper into the platform, you will likely need or want to care about these things so you can properly understand what's going on &quot;under the hood&quot;
+
+</li></ul>
+ <p>
+ Feel free to jump ahead to either of them if you have some prior exposure to Scala.js. If not, it is best to start with the introduction...
+</p></div>
+<div class="header scalatex-header scalatex-hover-container" id="IntrotoScala.js" style="display: block;"><h1>Intro to Scala.js<a class="scalatex-header-link" href="#IntrotoScala.js" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a></h1><br /><h2></h2></div><div class="content">
+
+<p>
+ Scala.js compiles Scala code to equivalent, executable Javascript. Here's the compilation of a trivial hello-world example:
+</p>
+<div class="pure-g">
+ <div class="pure-u-1 pure-u-md-1-2">
+ <pre><code class="scala scalatex-highlight-js">object Main extends js.JSApp{
+ def main() = {
+ var x = 0
+ while(x &lt; 10) x += 3
+ println(x)
+ // 12
+ }
+}
+</code></pre></div>
+ <div class="pure-u-1 pure-u-md-1-2">
+ <pre><code class="javascript scalatex-highlight-js">ScalaJS.c.LMain$.prototype.main__V = (function() {
+ var x = 0;
+ while ((x &lt; 10)) {
+ x = ((x + 3) | 0)
+ };
+ ScalaJS.m.s_Predef$()
+ .println__O__V(x)
+ // 12
+});
+</code></pre></div></div>
+<p>
+ As you can see, both of the above programs do identical things: they'll count the variable <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">x</code> from <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">0</code>, <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">3</code>, <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">9</code>, and <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">12</code> before finally printing it out. It's just that the first is written in Scala and the second is in Javascript.
+</p>
+<p>
+ Traditionally, Scala has been a language which runs on the JVM. This eliminates it from consideration in many cases, e.g. when you need to build interactive web apps, the browser-client only runs Javascript. Even if your back-end is all written in Scala, you need to fall back to Javascript to run your client-side code, at a great loss in terms of toolability and maintainability. Scala.js lets you to develop web applications with the safety and toolability that comes with a statically typed language:
+</p>
+<ul>
+ <li>
+ Typo-safety due to its compiler which catches many silly errors before the code is run</li>
+ <li>
+ In-editor support for autocomplete, error-highlighting, refactors, and intelligent navigation</li>
+ <li>
+ Moderate sized compiled executables, in the 100-400kb range</li>
+ <li>
+ Source-maps for ease of debugging
+</li></ul>
+<p>
+ The value proposition is that due to the superior language and tooling, writing a web application in Scala.js will result in a codebase that is more flexible and robust than an equivalent application written in Javascript. The hope is that the benefits of using Scala.js will outweigh the additional (non-trivial) messiness of adding a whole new toolchain, as compared to directly writing raw Javascript.
+</p>
+<p>
+ I won't spend time on a detailed discussion on why Scala is good or why Javascript is bad; people's opinions on both sides can be found on the internet. The assumption is, going in, that you either already know and like Scala, or you are familiar with Javascript and are willing to try something new.
+</p>
+<div class="header scalatex-header scalatex-hover-container" id="AboutJavascript" style="display: block;"><h1 id="AboutJavascript">About Javascript<a class="scalatex-header-link" href="#AboutJavascript" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a></h1><br /></div>
+ <p>
+ Javascript is the language supported by web browsers, and is the only language available if you wish to write interactive web applications. As more and more activity moves online, the importance of web apps will only increase over time. Adobe Flash, Java Applets and Silverlight (which have historically allowed browser-client development in other languages) are all but dead: historically they have been the source of security vulnerabilities, none of them are available on the mobile browsers of Android or iOS or Windows8+. That leaves Javascript.
+</p>
+ <h1 id="Javascript-the-language" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#Javascript-the-language" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Javascript-the-language</h1>
+ <p>
+ Javascript is an OK language to do small-scale development: an animation here, an on-click transition there. There are a number of warts in the language, e.g. its verbosity, and a large amount of surprising behavior, but while your code-base doesn't extend past a few hundred lines of code, you often will not mind or care.
+</p>
+ <p>
+ However, Javascript is not an easy language to work in at scale: when your code-base extends to thousands, tens or hundreds of thousands of lines of code. The un-typed nature of the language, which is fine for small applications, becomes an issue when you are mainly working with code that you did not write.
+</p>
+ <p>
+ In a large code-base, finding out what methods or properties a variable has is often a long chase through dozens of files to see how it ended up being passed to the current function. Refactorings, which are OK when you can just test the code to see if it works, become dangerous when your code base is large enough that &quot;just test all the code&quot; would take hours. Language-warts which are slightly annoying in small programs become a minefield in large ones: it's only a matter of time before you hit one, often in code you did-not/cannot test, resulting in breakages in production.
+</p>
+ <p>
+ Apart from the inherent danger of the language, Javascript has another major problem: the language has left many things unspecified, yet at the same time provides the ability to emulate these things in a variety of ways. This means that rather than having a single way of e.g. defining a class and instantiating an object, there is a decade-long debate between a dozen different and equally-bad, hand-crafted alternatives. Large code-bases use third-party libraries, and most are guaranteed (purely due to how stastistics work) to do these basic things differently from your own code, making understanding these disparate code-bases (e.g. when something goes wrong) very difficult.
+</p>
+ <p>
+ To work in Javascript, you need the discipline to limit yourself to the sane subset of the language, avoiding all the pitfalls along the way:
+</p>
+ <img src="images/javascript-the-good-parts-the-definitive-guide.jpg" style="margin: auto;display: block;" />
+
+ <p>
+ Even if you manage to do so, what constitutes a pitfall and what constitutes a clever-language-feature changes yearly, making it difficult to maintain cohesiveness over time. This is compounded by the fact that refactoring is difficult, and so removing &quot;unwanted&quot; patterns from a large code-base a difficult (often multi-year) process.
+</p>
+ <h1 id="Javascript-the-platform" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#Javascript-the-platform" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Javascript-the-platform</h1>
+ <p>
+ However, even as Javascript-the-language sucks, Javascript-the-platform has some very nice properties that make it a good target for application developers:
+</p>
+ <ul>
+ <li>
+ Zero-install distribution: just go to a URL and have the application downloaded and ready to use.</li>
+ <li>
+ Hyperlinks: being able to link to a particular page or item within a web app is a feature other platforms lack, and makes it much easier to cross-reference between different systems</li>
+ <li>
+ Sandboxed security: web applications are secure by default. No matter how sketchy the websites you visit, you can be sure that once you close the page, they're gone
+</li></ul>
+ <p>
+ These features are all very nice to have, and together have made the web platform the success it is today. When you compare it to traditional applications, you can see the draw:</p>
+ <ul>
+ <li>
+ Installing traditional desktop applications is usually a several-minute-long process. If something goes wrong in the installation, that often leaves a botched half-install on your computer which makes installing, uninstalling, or running the program impossible without manual surgery to excise the broken files.</li>
+ <li>
+ Desktop applications generally do not talk to each other at all. While on the web you can easily link a page to someone, trying to get someone to a particular screen in desktop software often involves a chain of screenshots with detailed instructions of which buttons to click at each stage.</li>
+ <li>
+ Desktop application security is non-existent. Install one rogue application and it can take over your computer, steal your credit card number, use your email for sending spam, and all sorts of other nasty things. Removing these for-good sometimes involves re-installing your entire operating system. Hence people are much more wary about only installing desktop software from people they &quot;trust&quot;.
+</li></ul>
+ <p>
+ In many ways, mobile App platforms like Android and iOS have closed the gap between &quot;native&quot; and &quot;web&quot; applications. Installing a new App may take 30 seconds, you can often deep-link to certain pages within an App, and Apps have a much tighter security model than desktop software does. Nevertheless, 30 seconds is still much longer than the 0.5 seconds it takes to open a web page, deep-linking in apps is not very prevalent, and the security model still often leaves space for rogue Apps to misbehave and steal data.
+</p>
+ <hr />
+ <p>
+ Despite the problems with Javascript (and other tools like HTML an CSS, which have their own problems) the Web platform got a lot of things right, and the Desktop and Mobile platforms have a lot of catching up to do. If only we could improve upon the parts that aren't so great. This is where Scala.js comes in.
+</p>
+<div class="header scalatex-header scalatex-hover-container" id="AboutScala.js" style="display: block;"><h1 id="AboutScala.js">About Scala.js<a class="scalatex-header-link" href="#AboutScala.js" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a></h1><br /></div>
+
+ <p>
+ With Scala.js, you can cross compile your Scala code to a Javascript executable that can run on all major web browsers. You get all the benefits of the web platform in terms of deployability, security, and hyperlinking, with none of the problems of writing your software in Javascript. Scala.js provides a <a href="#TheLanguage">better language</a> to do your work in, but also provides some other goodies that have in-so-far never been seen in mainstream web development: <a href="#SharingCode">shared-code</a> and <a href="#Client-ServerIntegration">client-server integration</a>.
+</p>
+ <h1 id="TheLanguage" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#TheLanguage" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>The Language</h1>
+ <p>
+ At a first approximation, Scala.js provides you a sane language to do development in the web browser. This saves you from an endless stream of Javascript warts like this one:
+</p>
+ <pre><code class="javascript scalatex-highlight-js">javascript&gt; [&quot;10&quot;, &quot;10&quot;, &quot;10&quot;, &quot;10&quot;].map(parseInt)
+[10, NaN, 2, 3] // WTF
+</code></pre>
+ <pre><code class="scala scalatex-highlight-js">scala&gt; List(&quot;10&quot;, &quot;10&quot;, &quot;10&quot;, &quot;10&quot;).map(parseInt)
+List(10, 10, 10, 10) // Yay!
+
+</code></pre>
+ <p>
+ Not only do you have an expressive language with static types, you also have great tooling with IDEs like IntelliJ and Eclipse, a rich library of standard collections, and many other modern conveniences that we take for granted but are curiously missing when working in the wild west of web development: the browser! You get all of the upside of developing for the web platform.
+</p>
+ <p>
+ While not useful for small applications, where most of the logic is gluing together external APIs, this comes in very useful in large applications where a lot of the complexity and room-for-error is entirely internal. With larger apps, you can no longer blame browser vendors for confusing APIs that make your code terrible: these confusing APIs only lurk in the peripherals around a larger, complex application. One thing you learn working in large-ish web client-side code-bases is that the bulk of the confusion and complexity is no-one's fault but your own, as a team.
+</p>
+ <p>
+ At this point, all of Google, Facebook, and Microsoft have all announced work on a typed variant of Javascript. These are not academic exercises: <a href="https://www.dartlang.org/">Dart</a>/<a href="https://docs.google.com/document/d/11YUzC-1d0V1-Q3V0fQ7KSit97HnZoKVygDxpWzEYW0U/edit">AtScript</a>/<a href="https://lobste.rs/s/fp9ibi/flow_facebook_s_new_javascript_type_checker">Flow</a>/<a href="http://www.typescriptlang.org/">Typescript</a> are all problems that solve a real need, that these large companies have all faced once they've grown beyond a certain size. Clearly, Javascript isn't cutting it anymore, and the convenience and &quot;native-ness&quot; of the language is more than made up for in the constant barrage of self-inflicted problems. Scala.js takes this idea and runs with it!
+</p>
+ <h1 id="SharingCode" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#SharingCode" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Sharing Code</h1>
+ <p>
+ Shared code is one of the holy-grails of web development. Traditionally the client-side code and server-side code has been written in separate languages: PHP or Perl or Python or Ruby or Java on the server, with only Javascript on the client. This means that algorithms were often implemented twice, constants copied-&amp;-pasted, or awkward Ajax calls are made in an attempt to centralize the logic in one place (the server). With the advent of Node.js in the last few years, you can finally re-use the same code on the server as you can on the client, but with the cost of having all the previously client-only <a href="#Javascript-the-language">problems with Javascript</a> now inflicted upon your server code base. Node.js expanded your range-of-options for writing shared client/server logic from &quot;Write everything twice&quot; to &quot;Write everything twice, or write everything in Javascript&quot;. More options is always good, but it's not clear which of the two choices is more painful!
+</p>
+ <p>
+ Scala.js provides an alternative to this dilemma. With Scala.js, you can utilize the same libraries you use writing your Scala servers when writing your Scala web clients! On one end, you are sharing your templating language with <a href="https://github.com/lihaoyi/scalatags">Scalatags</a> or sharing your serialization logic with <a href="https://github.com/lihaoyi/upickle">uPickle</a>. At the other, you are sharing large, abstract libraries like <a href="https://github.com/japgolly/scalaz">Scalaz</a> or <a href="https://groups.google.com/forum/#!searchin/scala-js/shapeless/scala-js/5Sf2up0z3PU/9F9SYB0qHEcJ">Shapeless</a>.
+</p>
+ <p>
+ Sharing code means several things:
+</p>
+ <ul>
+ <li>
+ Not having to find two libraries to do a particular common task</li>
+ <li>
+ Not having to re-learn two different ways of doing the exact same thing</li>
+ <li>
+ Not needing to implement the same algorithms twice, for the times you can't find a good library to do what you want</li>
+ <li>
+ Not having to debug problems caused by subtle differences in the two implementations</li>
+ <li>
+ Not having to resort to awkward Ajax-calls or pre-computation to avoid duplicating logic between the client and server
+</li></ul>
+ <p>
+ Shared code doesn't just mean sharing pre-made libraries between the client and server. You can easily <a href="#CrossPublishingLibraries">publish your own libraries</a> that can be used on both Scala-JVM and Scala.js. This means that as a library author, you can at once target two completely different platforms, and (with some work) take advantage of the intricacies of each platform to optimize your library for each one. Take Scalatags as an example: as the first client-server Scala.js-ScalaJVM shared libraries, it enjoys a roughly even split of downloads from people using it on both platforms:
+</p>
+ <img src="images/Scalatags Downloads.png" style="width: 100%;" />
+
+ <p>
+ Shared code means that if you, as an application writer, want some logic to be available on both the client and server, you simply <a href="#AClient-ServerSetup">put it in a shared/ folder</a>, and that's the end of the discussion. No architectural patterns to follow, no clever techniques need to be involved. Shared logic, whether that means constants, functions, data structures, all the way to algorithms and entire libraries, can simply be placed in <code>shared/</code> and be instantly accessible from both your client-side web code and your server.
+</p>
+ <p>
+ Shared code has long been the holy-grail of web development. Even now, people speak of shared code as if it were a myth. With Scala.js, shared code is the simple, boring reality. And all this while, just as importantly, you don't need to re-write your large enterprise back-end systems in a language that doesn't scale well beyond 100s of lines of code.
+</p>
+ <h1 id="Client-ServerIntegration" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#Client-ServerIntegration" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Client-Server Integration</h1>
+ <p>
+ There is an endless supply of new platforms which have promised to change-the-way-we-do-web-development-forever. From old-timers like <a href="http://www.impredicative.com/ur/">Ur-Web</a>, to <a href="http://www.gwtproject.org/">GWT</a>, to Asana's <a href="https://asana.com/luna">LunaScript</a>, to more recently things like <a href="https://www.meteor.com/">Meteor.js</a>.</p>
+ <p>
+ One common theme in all these platforms is that their main selling point is their tight, seamless client-server integration, to the point where you can just make method calls across the client-server boundary and the platform/language/compiler figures out what to do.</p>
+ <p>
+ With Scala.js and Scala-JVM, such conveniences like making method calls across the client-server boundary is the <a href="#IntegratingClient-Server">boring reality</a>. Not only are the calls transparent, they are also statically checked, so any mistake in the route name or the parameters it expects, or the result type it returns to you, will be caught by the compiler long before even manual testing. It becomes <a href="#What'sLeft?">impossible to make a malformed Ajax call</a>.</p>
+ <p>
+ There's a lot to be said for automating things using a computer. The entire field of software engineering is basically about automating tasks that were previously done manually: accounting, banking, making travel arrangements, and all that. However, in the world of web-development, there has always been one set of tasks that has traditionally be done manually: the task of ensuring the web-clients are properly synchronized with the web-servers. Communication between the two has always been a manual, tedious, error-prone process, and mistakes often end un-noticed until something breaks in production.</p>
+ <p>
+ With Scala.js, like the other experimental platforms that have come before us, we attempt to provide a way forward from this manual-tedium.
+</p>
+ <hr />
+
+ <p>
+ In many ways, Scala.js all-at-once provides many of the traditional holy-grails of web development: People have always dreamed about doing web development in a sane, best-of-breed language that compiles to both client and server. Of not having to worry too hard about whether code goes on the client or on the server, and being able to move or share it if necessary. Of having a compiler that will verify and check that your entire system is correct.
+</p>
+ <p>
+ Scala.js provides all these things, and much more. If you're interested enough to want to make use of Scala.js, read on!</p>
+
+</div>
+<div class="header scalatex-header scalatex-hover-container" id="HandsOn" style="display: block;"><h1>Hands On<a class="scalatex-header-link" href="#HandsOn" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a></h1><br /><h2>Writing your first Scala.js programs</h2></div><div class="content">
+ <p>
+ This half of the book
+is a set of tutorials that walks you through getting started with Scala.js. You'll build a range of small projects, from <a href="#MakingaCanvasApp">Making a Canvas App</a> to <a href="#InteractiveWebPages">Interactive Web Pages</a> to <a href="#IntegratingClient-Server">Integrating Client-Server</a>, and in the process will get a good overview of both Scala.js's use cases as well as the development experience
+
+</p>
+ <div class="header scalatex-header scalatex-hover-container" id="GettingStarted" style="display: block;"><h1 id="GettingStarted">Getting Started<a class="scalatex-header-link" href="#GettingStarted" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a></h1><br /></div>
+
+
+<p>
+ To get started with Scala.js, you will need to prepare a few things:
+</p>
+<ul>
+ <li>
+ <a href="http://www.scala-sbt.org/">sbt</a>: SBT is the most common build-tool in the Scala community, and is what we will use for building our Scala.js application. Their home page has a link to download and install it. (If you are already using Typesafe Activator, that is effectively sbt.)</li>
+ <li>
+ An editor for Scala: <a href="http://blog.jetbrains.com/scala/">IntelliJ Scala</a> and <a href="http://scala-ide.org/">Eclipse ScalaIDE</a> are the most popular choices and work on all platforms, though there are others.</li>
+ <li>
+ <a href="http://git-scm.com/">Git</a>: This is a version-control system that we will use to download and manage our Scala.js projects.</li>
+ <li>
+ A terminal: on OSX you have <a href="http://guides.macrumors.com/Terminal">Terminal.app</a> already installed, in Linux you have <a href="https://help.ubuntu.com/community/UsingTheTerminal">Terminal</a>, and on Windows you have <a href="http://en.wikipedia.org/wiki/Windows_PowerShell">PowerShell</a>.</li>
+ <li>
+ Your favorite web browser: <a href="https://www.google.com/chrome">Chrome</a> and <a href="https://www.mozilla.org/en-US/firefox">Firefox</a> are the most popular.
+</li></ul>
+<p>
+ If you've worked with Scala before, you probably already have most of these installed. Otherwise, take a moment to download them before we get to work.
+</p>
+<p>
+ The quickest way to get started with Scala.js is to <code>git clone</code> <a href="https://github.com/lihaoyi/workbench-example-app">workbench-example-app</a>, go into the repository root, and run <code>sbt ~fastOptJS</code>
+</p>
+<pre><code class="bash scalatex-highlight-js">git clone https://github.com/lihaoyi/workbench-example-app
+cd workbench-example-app
+sbt ~fastOptJS
+</code></pre>
+<p>
+ This should result in a bunch of spam to the console, and may take a few minutes the first time as SBT resolves and downloads all necessary dependencies. A successful run looks like this
+</p>
+<pre>
+ haoyi-mbp:Workspace haoyi$ git clone https://github.com/lihaoyi/workbench-example-app
+ Cloning into 'workbench-example-app'...
+ remote: Counting objects: 876, done.
+ remote: Total 876 (delta 0), reused 0 (delta 0)
+ Receiving objects: 100% (876/876), 676.59 KiB | 317.00 KiB/s, done.
+ Resolving deltas: 100% (308/308), done.
+ Checking connectivity... done.
+ haoyi-mbp:Workspace haoyi$ cd workbench-example-app/
+ haoyi-mbp:workbench-example-app haoyi$ sbt ~fastOptJS
+ [info] Loading global plugins from /Users/haoyi/.sbt/0.13/plugins
+ [info] Updating {file:/Users/haoyi/.sbt/0.13/plugins/}global-plugins...
+ [info] Resolving org.fusesource.jansi#jansi;1.4 ...
+ [info] Done updating.
+ [info] Loading project definition from /Users/haoyi/Dropbox (Personal)/Workspace/workbench-example-app/project
+ [info] Updating {file:/Users/haoyi/Dropbox%20(Personal)/Workspace/workbench-example-app/project/}workbench-example-app-build...
+ [info] Resolving org.fusesource.jansi#jansi;1.4 ...
+ [info] Done updating.
+ [info] Set current project to Example (in build file:/Users/haoyi/Dropbox%20(Personal)/Workspace/workbench-example-app/)
+ [INFO] [10/26/2014 15:42:09.791] [SystemLol-akka.actor.default-dispatcher-2] [akka://SystemLol/user/IO-HTTP/listener-0] Bound to localhost/127.0.0.1:12345
+ [info] Updating {file:/Users/haoyi/Dropbox%20(Personal)/Workspace/workbench-example-app/}workbench-example-app...
+ [info] Resolving jline#jline;2.12 ...
+ [info] Done updating.
+ [info] Compiling 1 Scala source to /Users/haoyi/Dropbox (Personal)/Workspace/workbench-example-app/target/scala-2.11/classes...
+ [info] Fast optimizing /Users/haoyi/Dropbox (Personal)/Workspace/workbench-example-app/target/scala-2.11/example-fastopt.js
+ [info] workbench: Checking example-fastopt.js
+ [info] workbench: Refreshing http://localhost:12345/target/scala-2.11/example-fastopt.js
+ [success] Total time: 11 s, completed Oct 26, 2014 3:42:21 PM
+ 1. Waiting for source changes... (press enter to interrupt)
+</pre>
+<p>
+ The line <code>Waiting for source changes...</code> is telling you that your Scala.js program is ready! Now, when you go to the web URL <code>http://localhost:12345/target/scala-2.11/classes/index-dev.html</code> in your browser, you should see the following:
+
+ <img src="images/Hello World.png" style="max-width: 100%;" />
+</p>
+<p>
+ Congratulations, you just built and ran your first Scala.js application! If something here does not happen as expected, it means that one of the steps did not complete successfully. Make sure you can get this working before you proceed onward.
+</p>
+<h1 id="OpeninguptheProject" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#OpeninguptheProject" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Opening up the Project</h1>
+
+ <p>
+ The next thing to do once you have the project built and running in your browser is to load it into your editor. Both IntelliJ and Eclipse should let you import the Scala.js project without any hassle. Opening it and navigating to <code>ScalaJSExample.scala</code> would look like this:
+</p>
+ <img src="images/IntelliJ Hello.png" style="max-width: 100%;" />
+
+ <p>
+ Let's try changing one line to change the background fill from black to white:
+</p>
+ <pre><code class="diff scalatex-highlight-js">- ctx.fillStyle = &quot;black&quot;
++ ctx.fillStyle = &quot;white&quot;
+</code></pre>
+ <p>
+ Because we started <code>sbt ~fastOptJS</code> with the <code>~</code> prefix earlier, it should pick up the change and automatically recompile. The example project is set up to automatically refresh the page when recompilation is complete.
+</p>
+ <img src="images/Hello World White.png" style="max-width: 100%;" />
+
+ <p>
+ If you open up your browser's developer console, you'll see that the SBT log output is being mirrored there:
+</p>
+ <img src="images/Hello World Console.png" style="max-width: 100%;" />
+
+ <p>
+ Apart from the SBT log output (which is handled by Workbench) any <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">println</code>s in your Scala.js code will also end up in the browser console (the <code>main</code> you see in the console is printed inside the Scala.js application, see if you can find it!) and so will the stack traces for any thrown exceptions.
+</p>
+<h1 id="TheApplicationCode" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#TheApplicationCode" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>The Application Code</h1>
+
+ <p>
+ We've downloaded, compiled, ran, and made changes to our first Scala.js application. Let's now take a closer look at the code that we just ran:</p>
+
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">package example
+import scala.scalajs.js.annotation.JSExport
+import org.scalajs.dom
+import org.scalajs.dom.html
+import scala.util.Random
+
+case class Point(x: Int, y: Int){
+ def +(p: Point) = Point(x + p.x, y + p.y)
+ def /(d: Int) = Point(x / d, y / d)
+}
+
+@JSExport
+object ScalaJSExample {
+ @JSExport
+ def main(canvas: html.Canvas): Unit = {
+ val ctx = canvas.getContext(&quot;2d&quot;)
+ .asInstanceOf[dom.CanvasRenderingContext2D]
+
+ var count = 0
+ var p = Point(0, 0)
+ val corners = Seq(Point(255, 255), Point(0, 255), Point(128, 0))
+
+ def clear() = {
+ ctx.fillStyle = &quot;black&quot;
+ ctx.fillRect(0, 0, 255, 255)
+ }
+
+ def run = for (i &lt;- 0 until 10){
+ if (count % 3000 == 0) clear()
+ count += 1
+ p = (p + corners(Random.nextInt(3))) / 2
+
+ val height = 512.0 / (255 + p.y)
+ val r = (p.x * height).toInt
+ val g = ((255-p.x) * height).toInt
+ val b = p.y
+ ctx.fillStyle = s&quot;rgb($g, $r, $b)&quot;
+
+ ctx.fillRect(p.x, p.y, 1, 1)
+ }
+
+ dom.setInterval(() =&gt; run, 50)
+ }
+}</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/workbench-example-app/blob/master/src/main/scala/example/ScalaJSExample.scala#L0-L44" target="_blank"><i class="fa fa-link "></i></a></pre>
+
+ <p>
+ It's a good chunk of code, though not a huge amount. To someone who didn't know about Scala.js, they would just think it's normal Scala, albeit with this unusual <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">dom</code> library and a few weird annotations. Let's pick it apart starting from the top:
+</p>
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">case class Point(x: Int, y: Int){
+ def +(p: Point) = Point(x + p.x, y + p.y)
+ def /(d: Int) = Point(x / d, y / d)
+}</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/workbench-example-app/blob/master/src/main/scala/example/ScalaJSExample.scala#L6-L11" target="_blank"><i class="fa fa-link "></i></a></pre>
+
+ <p>
+ Here we are defining a <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Point</code> case class which represents a X/Y position, with some basic operators defined on it. This is done mostly for convenience later on, when we want to manipulate these two-dimensional points. Scala.js is Scala, and supports the entirety of the Scala language. <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Point</code> here behaves identically as it would if you had run Scala on the JVM.
+</p>
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">@JSExport
+object ScalaJSExample {
+ @JSExport
+ def main(canvas: html.Canvas): Unit = {</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/workbench-example-app/blob/master/src/main/scala/example/ScalaJSExample.scala#L11-L15" target="_blank"><i class="fa fa-link "></i></a></pre>
+
+ <p>
+ This <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">@JSExport</code> annotation is used to tell Scala.js that you want this method to be visible and callable from Javascript. By default, Scala.js does <a href="#FastOptimization">dead code elimination</a> and removes any methods or classes which are not used. This is done to keep the compiled executables a reasonable size, since most projects use only a small fraction of e.g. the standard library. <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">@JSExport</code> is used to tell Scala.js that the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">ScalaJSExample</code> object and its <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">def main</code> method are entry points to the program. Even if they aren't called anywhere internally, they are called externally by Javascript that the Scala.js compiler is not aware of, and should not be removed. In this case, we are going to call this method from Javascript to start the Scala.js program.
+</p>
+ <p>
+ Apart from this annotation, <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">ScalaJSExample</code> is just a normal Scala <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">object</code>, and behaves like one in every way. Note that the main-method in this case takes a <a href="https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement">html.Canvas</a>: your exported methods can have any signature, with arbitrary arity or types for parameters or the return value. This is in contrast to the main method on the JVM which always takes an <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Array[String]</code> and returns <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Unit</code>. In fact, there's nothing special about this method at all! It's like any other exported method, we just happen to attribute it the &quot;main&quot; entry point. It is entirely possible to define multiple exported classes and methods, and build a &quot;library&quot; using Scala.js of methods that are intended for external Javascript to use.
+</p>
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">val ctx = canvas.getContext(&quot;2d&quot;)
+ .asInstanceOf[dom.CanvasRenderingContext2D]</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/workbench-example-app/blob/master/src/main/scala/example/ScalaJSExample.scala#L15-L18" target="_blank"><i class="fa fa-link "></i></a></pre>
+
+ <p>
+ Here we are retrieving a handle to the canvas we will draw on using <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">document.getElementById</code>, and from it we can get a <a href="https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D">CanvasRenderingContext2D</a> which we actually use to draw on it.
+</p>
+ <p>
+ We need to perform the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">asInstanceOf</code> call because depending on what you pass to <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">getElementById</code> and <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">getContext</code>, you could be returned elements and contexts of different types. Hence we need to tell the compiler explicitly that we're expecting a <a href="https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement">html.Canvas</a> and <a href="https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D">CanvasRenderingContext2D</a> back from these methods for the strings we passed in.
+</p>
+ <p>
+ Note how the <a href="https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement">html.Canvas</a> comes from the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">html</code> namespace, while the <a href="https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D">CanvasRenderingContext2D</a> comes from the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">dom</code> namespace. Traditionally, these types are imported via their qualified names: e.g. <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">html.Canvas</code> rather than just <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Canvas</code>.
+</p>
+ <p>
+ In general, <a href="http://scala-js.github.io/scala-js-dom/">scala-js-dom</a> provides <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">org.scalajs.dom.html</code> to access the HTML element types of the browser, an <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">org.scalajs.dom</code> to access other things. There are a number of other namespaces (<code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">dom.svg</code>, <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">dom.idb</code>, etc.) accessible inside <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">org.scalajs.dom</code>: read the <a href="http://scala-js.github.io/scala-js-dom/">scala-js-dom docs</a> to learn more.
+</p>
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">def run = for (i &lt;- 0 until 10){
+ if (count % 3000 == 0) clear()
+ count += 1
+ p = (p + corners(Random.nextInt(3))) / 2
+
+ val height = 512.0 / (255 + p.y)
+ val r = (p.x * height).toInt
+ val g = ((255-p.x) * height).toInt
+ val b = p.y
+ ctx.fillStyle = s&quot;rgb($g, $r, $b)&quot;
+
+ ctx.fillRect(p.x, p.y, 1, 1)
+}</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/workbench-example-app/blob/master/src/main/scala/example/ScalaJSExample.scala#L27-L41" target="_blank"><i class="fa fa-link "></i></a></pre>
+
+ <p>
+ This is the part of the Scala.js program which does the real work. It runs 10 iterations of a <a href="http://en.wikipedia.org/wiki/Sierpinski_triangle#Chaos_game">small algorithm</a> that generates a Sierpinski Triangle point-by-point. The steps, as described by the linked article, are roughly:
+</p>
+ <ul>
+ <li>
+ Pick a random corner of the large-triangle</li>
+ <li>
+ Move your current-position <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">p</code> halfway between its current location and that corner</li>
+ <li>
+ Draw a dot</li>
+ <li>
+ Repeat
+</li></ul>
+ <p>
+ In this example, the triangle is hard-coded to be 255 pixels high by 255 pixels wide, and some math is done to pick a color for each dot which will give the triangle a pretty gradient.
+</p>
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">dom.setInterval(() =&gt; run, 50)</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/workbench-example-app/blob/master/src/main/scala/example/ScalaJSExample.scala#L41-L42" target="_blank"><i class="fa fa-link "></i></a></pre>
+
+ <p>
+ Now this is the call that actually does the useful work. All this method does is call <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">dom.setInterval</code>, which tells the browser to run the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">run</code> method every 50 milliseconds. As mentioned earlier, the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">dom.*</code> methods are simply facades to their native Javascript equivalents, and <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">dom.setInterval</code> is <a href="https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers.setInterval">no different</a>. Note how you can pass a Scala lambda to <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">setInterval</code> to have it called by the browser, where in Javascript you'd need to pass a Javascript <code class="javascript scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">function(){...</code>}
+</p>
+<h1 id="TheProjectCode" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#TheProjectCode" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>The Project Code</h1>
+
+ <p>
+ We've already taken a look at the application code for a simple, self-contained Scala.js application, but this application is not <i>entirely</i> self contained. It's wrapped in a small SBT project that sets up the necessary dependencies and infrastructure for this application to work.
+</p>
+ <h2 id="project/build.sbt" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#project/build.sbt" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>project/build.sbt</h2>
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">addSbtPlugin(&quot;org.scala-js&quot; % &quot;sbt-scalajs&quot; % &quot;0.6.0&quot;)
+
+addSbtPlugin(&quot;com.lihaoyi&quot; % &quot;workbench&quot; % &quot;0.2.3&quot;)</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/workbench-example-app/blob/master/project/build.sbt#L0-L3" target="_blank"><i class="fa fa-link "></i></a></pre>
+
+ <p>
+ This is the list of SBT plugins used by this small example application. There are two of them: the Scala.js plugin (which contains the Scala.js compiler and other things, e.g. tasks such as <code>fastOptJS</code>) and the <a href="https://github.com/lihaoyi/workbench">Workbench</a> plugin, which is used to provide the auto-reload-on-change behavior and the forwarding of SBT logspam to the browser console.
+</p>
+ <p>
+ Of the two, only the Scala.js plugin is really necessary. The Workbench plugin is a convenience that makes development easier. Without it you'd need to keep a terminal open to view the SBT logspam, and manually refresh the page when compilation finished. Not the end of the world.
+
+</p>
+ <h2 id="build.sbt" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#build.sbt" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>build.sbt</h2>
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">import com.lihaoyi.workbench.Plugin._
+
+enablePlugins(ScalaJSPlugin)
+
+workbenchSettings
+
+name := &quot;Example&quot;
+
+version := &quot;0.1-SNAPSHOT&quot;
+
+scalaVersion := &quot;2.11.4&quot;
+
+libraryDependencies ++= Seq(
+ &quot;org.scala-js&quot; %%% &quot;scalajs-dom&quot; % &quot;0.8.0&quot;
+)
+
+bootSnippet := &quot;example.ScalaJSExample().main(document.getElementById('canvas'));&quot;
+
+updateBrowsers &lt;&lt;= updateBrowsers.triggeredBy(fastOptJS in Compile)</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/workbench-example-app/blob/master/build.sbt#L0-L19" target="_blank"><i class="fa fa-link "></i></a></pre>
+
+ <p>
+ The <code>build.sbt</code> project file for this application is similarly unremarkable: It includes the settings for the two SBT plugins we saw earlier, as well as boilerplate <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">name</code>/<code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">version</code>/<code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">scalaVersion</code> values common to all projects.
+</p>
+ <p>
+ Of interest is the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">libraryDependencies</code>. In Scala-JVM, this key is used to declare dependencies on libraries from Maven Central, so you can use them in your Scala-JVM projects. In Scala.js, the same key is used to declare dependencies on libraries so you can use them in your Scala.js projects! Re-usable libraries can be built and published with Scala.js just as you do on Scala-JVM, and here we make use of one which provides the typed facades with which we used to access the DOM in the application code.
+</p>
+ <p>
+ Lastly, we have two Workbench related settings: <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">bootSnippet</code> basically tells Workbench how to restart your application when a new compilation run finishes, and <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">updateBrowsers</code> actually tells it to perform this application-restarting.
+</p>
+ <h2 id="src/main/resources/index-dev.html" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#src/main/resources/index-dev.html" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>src/main/resources/index-dev.html</h2>
+ <pre class="scalatex-hover-container"><code class=" scalatex-highlight-js hljs">&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;head&gt;
+ &lt;title&gt;Example Scala.js application&lt;/title&gt;
+ &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot;/&gt;
+&lt;/head&gt;
+&lt;body style=&quot;margin: 0px&quot;&gt;
+
+&lt;div&gt;
+ &lt;canvas style=&quot;display: block&quot; id=&quot;canvas&quot; width=&quot;255&quot; height=&quot;255&quot;/&gt;
+&lt;/div&gt;
+
+&lt;script type=&quot;text/javascript&quot; src=&quot;../example-fastopt.js&quot;&gt;&lt;/script&gt;
+&lt;script type=&quot;text/javascript&quot; src=&quot;/workbench.js&quot;&gt;&lt;/script&gt;
+&lt;script&gt;
+ example.ScalaJSExample().main(document.getElementById('canvas'));
+&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/workbench-example-app/blob/master/src/main/resources/index-dev.html#L0-L19" target="_blank"><i class="fa fa-link "></i></a></pre>
+
+ <p>
+ This is the HTML page which our toy app lives in, and the same page that we have so far been using to view the app in the browser. To anyone who has used HTML, most of it is probably familiar. Things of note are the <code class="html scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">&lt;script&gt;</code> tags: <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">&quot;../example-fastopt.js&quot;</code> Is the executable blob spat out by the compiler, which we need to include in the HTML page for anything to happen. This is where the results of your compiled Scala code appear. <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">&quot;workbench.js&quot;</code> is the client for the Workbench plugin that connects to SBT, reloads the browser and forwards logspam to the browser console.
+</p>
+ <p>
+ The <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">example.ScalaJSExample().main()</code> call is what kicks off the Scala.js application and starts its execution. Scala.js follows Scala semantics in that <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">object</code>s are evaluated lazily, with no top-level code allowed. This is in contrast to Javascript, where you can include top-level statements and object-literals in your code which execute immediately. In Scala.js, nothing happens when <code>../example-fastopt.js</code> is imported! We have to call the main-method first. In this case, we're passing the canvas object (attained using <code class="javascript scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">getElementById</code>) to it so it knows where to do its thing.
+
+</p>
+ <p>
+ <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">document.getElementById</code> is the exact same API that's used in normal Javascript, as documented <a href="https://developer.mozilla.org/en-US/docs/Web/API/document.getElementById">here</a>. In fact, the entire <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">org.scalajs.dom</code> namespace (imported at the top of the file) comprises statically typed facades for the javascript APIs provided by the browser.
+
+ <p>
+ Lastly, only <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">@JSExport</code>ed objects and methods can be called from Javascript. Also, although this example only exports the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">main</code> method which is called once, there is nothing stopping you from exporting any number of objects and methods and calling them whenever you need to. In this way, you can easily make a Scala.js &quot;library&quot; which is available to external Javascript as an API.
+</p></p>
+<h1 id="Publishing" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#Publishing" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Publishing</h1>
+ <p>
+ The last thing that we'll do with our toy application is to publish it. If you look in the <code>target/scala-2.11</code> folder, you'll see the output of everything we've done so far:
+</p>
+ <pre><code class="bash scalatex-highlight-js">target/scala-2.11
+├── classes
+│   ├── JS_DEPENDENCIES
+│   ├── example
+│   │   ├── Point$.class
+│   │   ├── Point$.sjsir
+│   │   ├── Point.class
+│   │   ├── Point.sjsir
+│   │   ├── ScalaJSExample$$anonfun$main$1.class
+│   │   ├── ScalaJSExample$$anonfun$run$1.class
+│   │   ├── ScalaJSExample$.class
+│   │   ├── ScalaJSExample$.sjsir
+│   │   └── ScalaJSExample.class
+│   ├── index-dev.html
+│   └── index-opt.html
+├── example-fastopt.js
+└── example-fastopt.js.map
+</code></pre>
+ <p>
+ All the <code>.class</code> and <code>.sjsir</code> files are the direct output of the Scala.js compiler, and aren't necessary to actually run the application. The only two files necessary are <code>index-dev.html</code> and <code>example-fastopt.js</code>. You may recognize <code>index-dev.html</code> as the file that we were navigating to in the browser earlier.
+</p>
+ <p>
+ These two files can be extracted and published as-is: you can put them on <a href="https://pages.github.com/">Github-Pages</a>, <a href="http://docs.aws.amazon.com/gettingstarted/latest/swh/website-hosting-intro.html">Amazon Web Services</a>, or a hundred other places. However, one thing of note is the fact that the generated Javascript file is quite large:
+</p>
+ <pre><code class="bash scalatex-highlight-js">haoyi-mbp:temp haoyi$ du -h target/scala-2.11/example-fastopt.js
+656K target/scala-2.11/example-fastopt.js
+</code></pre>
+ <p>
+ 656 Kilobytes for a hello world app! That is clearly too large. If you examine the contents of the file, you'll see that your code has been translated into something like this:
+</p>
+ <pre><code class="javascript scalatex-highlight-js">var v1 = i;
+if (((count$1.elem$1 % 3000) === 0)) {
+ ScalaJS.m.Lexample_ScalaJSExample$().example$ScalaJSExample$$clear$1__Lorg_scalajs_dom_CanvasRenderingContext2D__V(ctx$1)
+};
+count$1.elem$1 = ((1 + count$1.elem$1) | 0);
+var jsx$1 = ScalaJS.as.Lexample_Point(p$1.elem$1);
+var this$4 = ScalaJS.m.s_util_Random$();
+p$1.elem$1 = jsx$1.$$plus__Lexample_Point__Lexample_Point(ScalaJS.as.Lexample_Point(corners$1.apply__I__O(this$4.self$1.nextInt__I__I(3)))).$$div__I__Lexample_Point(2);
+var height = (512.0 / ((255 + ScalaJS.as.Lexample_Point(p$1.elem$1).y$1) | 0));
+var r = ((ScalaJS.as.Lexample_Point(p$1.elem$1).x$1 * height) | 0);
+var g = ((((255 - ScalaJS.as.Lexample_Point(p$1.elem$1).x$1) | 0) * height) | 0);
+</code></pre>
+ <p>
+ As you can see, this code is still very verbose, with lots of unnecessarily long identifiers such as <code class="javascript scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Lexample_ScalaJSExample$</code> in it. This is because we've only performed the <a href="#FastOptimization">Fast Optimization</a> on this file, to try and keep the time taken to edit -&gt; compile while developing reasonably short.
+</p>
+ <h2 id="Optimization" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#Optimization" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Optimization</h2>
+ <p>
+ If we're planning on publishing the app for real, we can run the <a href="#FullOptimization">Full Optimization</a>. This takes several seconds longer than the <a href="#FastOptimization">Fast Optimization</a>, but results in a significantly smaller and leaner output file <code>example-opt.js</code>.
+</p>
+ <pre><code class="bash scalatex-highlight-js">haoyi-mbp:temp haoyi$ du -h target/scala-2.11/example-opt.js
+104K target/scala-2.11/example-opt.js
+</code></pre>
+ <p>
+ 104 Kilobytes! Better. Not great, though! In general, Scala.js does not produce tiny executables, although the output size of the compiled executables is dropping all the time. If you look inside that file, you'll see all of the long identifiers have been replaced by short ones by the <a href="https://developers.google.com/closure/compiler/">Google Closure Compiler</a>.
+</p>
+ <pre><code class="javascript scalatex-highlight-js"> y=fb(gb((new F).Ya([&quot;rgb(&quot;,&quot;, &quot;,&quot;, &quot;,&quot;)&quot;])),(new F).Ya([(255-c.l.Db|0)*y|0,c.l.Db*y|0,c.l.Eb]));a.fillStyle=y;a.fillRect(c.l.Db,c.l.Eb,1,1);w=1+w|0}}}(a,b,c,e),50)}Xa.prototype.main=function(a){Ya(a)};Xa.prototype.a=new x({$g:0},!1,&quot;example.ScalaJSExample$&quot;,B,{$g:1,b:1});var hb=void 0;function bb(){hb||(hb=(new Xa).c());return hb}ba.example=ba.example||{};ba.example.ScalaJSExample=bb;function Da(){this.Pb=null}Da.prototype=new A;
+</code></pre>
+
+ <p>
+ These files are basically unreadable, but nonetheless behave the same as the <code>-fastopt</code> versions. Try it out by opening the <code>index-opt.html</code> file in the <code>target/scala-2.11/classes</code> directory with your browser: you should see the thing as when opening <code>index-dev</code>, except it will be pulling in the fully-optmized version of your application.
+</p>
+ <p>
+ This means you can develop and debug using <code>fastOptJS</code>, and only spend the extra time (and increased debugging-difficulty) on the <code>fullOptJS</code> version just as you're going to publish it, with the assurance that although the code is much more compact, its behavior will not change.
+</p>
+ <h2 id="BlobSize" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#BlobSize" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Blob Size</h2>
+ <p>
+ Even the fully-optimized version of our toy Scala.js app are pretty large. There are some factors that mitigate the large size of these executables:
+</p>
+ <ul>
+ <li>
+ A large portion of this 104k is the Scala standard library, and so the size of the compiled blob does not grow that fast as your program grows. For example, while this ~50 line application is 104k, a <a href="https://github.com/lihaoyi/roll">much larger ~2000 line application</a> is only 288k.</li>
+ <li>
+ This size is pre-<a href="http://en.wikipedia.org/wiki/Gzip">gzip</a>, and most webservers serve their contents compressed via gzip to reduce the download size. Gzip cuts the actual download size down to 28k, which is more acceptable.</li>
+ <li>
+ You will likely have other portions of the page that are of similar size: e.g. <a href="http://jquery.com/">JQuery</a> is extremely popular, and weights in at a comparable 32kb minified and gzipped, while <a href="http://facebook.github.io/react/downloads.html">React.js</a> weighs in at a cool 150kb gzipped. Scala.js arguably provides more than either of these libraries.
+</li></ul>
+ <p>
+ Regardless, there is ongoing work to shrink the size of these executables. If you want to read more about this, check out the section on <a href="#TheCompilationPipeline">The Compilation Pipeline</a> to learn about what we currently do to crunch the executables down.
+</p>
+ <hr />
+
+ <p>
+ In general, all the output of the Scala.js compiler is bundled up into the <code>example-fastopt.js</code> and <code>example-opt.js</code> files. As a first approximation, these files can be included directly on a HTML page (as we have here, with <code>index-dev.html</code> and <code>index-opt.html</code>) and published together as a working web app. Even zipping them up and emailing them to a friend is sufficient to give someone a working, live version of your hard work!
+</p>
+ <p>
+ More advanced users would want to integrate them into their build process or serve them from a web server, all of which is entirely possible. You just need to run the Scala.js compiler and place the output <code>.js</code> file somewhere your web server can pick it up, e.g. in some static-resource folder. We cover an example setup of this with a Scala webserver in our chapter <a href="#IntegratingClient-Server">Integrating Client-Server</a>.
+</p>
+<h1 id="Recap" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#Recap" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Recap</h1>
+
+ <p>
+ If you've made it this far, you've downloaded, made modifications to, and published a toy Scala.js application. At the same time, we've gone over many of the key concepts in the Scala.js development process:
+</p>
+ <ul>
+ <li>
+ Getting a Scala.js application</li>
+ <li>
+ Building it and seeing it work in the browser</li>
+ <li>
+ Made modifications to it to see it update</li>
+ <li>
+ Examined the source code to try and understand what it's doing</li>
+ <li>
+ Examined the output code, at two levels of optimization, to see how the Scala.js compiler works</li>
+ <li>
+ Packaged the application in a form that can be easily published online
+</li></ul>
+ <p>
+ Hopefully this gives a good sense of the workflow involved in developing a Scala.js application end-to-end, as well as a feel for the magic involved in the compilation process. Nevertheless, we have barely written any Scala.js code itself!
+</p>
+ <p>
+ Since you have a working development environment set up, you should take this time to poke around what you can do with our small Sierpinski-Triangle drawing app. Possible exercises include:
+</p>
+ <ul>
+ <li>
+ Javascript includes APIs for <a href="http://stackoverflow.com/questions/1248081/get-the-browser-viewport-dimensions-with-javascript">getting the size of the window</a> and <a href="http://stackoverflow.com/questions/9251480/set-canvas-size-using-javascript">changing the size of a canvas</a>. These Javascript APIs are available in Scala.js, and we've already used some of them in the course of this example. Try making the Canvas full-screen, and re-positioning the corners of the triangle to match.</li>
+ <li>
+ The <a href="https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D">CanvasRenderingContext2D</a> has a bunch of methods on it that can be used to draw things. Here we only draw 1x1 rectangles to put points on the canvas; try modifying the code to make it draw something else.</li>
+ <li>
+ We've looked at the <code>master</code> branch of <code>workbench-example-app</code>, but this project also has several other branches showing off different facets of Scala.js: <a href="https://github.com/lihaoyi/workbench-example-app/tree/dodge-the-dots">dodge-the-dots</a> and <a href="https://github.com/lihaoyi/workbench-example-app/tree/space-invaders">space-invaders</a> are both interesting branches worth playing with as a beginner. Check them out!</li>
+ <li>
+ Try publishing the output code somewhere. You only need <code>example-opt.js</code> and <code>index-opt.html</code>; try putting them somewhere online where the world can see it.
+</li></ul>
+ <p>
+ When you're done poking around our toy web application, read on to the next chapter, where we will explore making something more meaty using the Scala.js toolchain!</p>
+
+
+ <div class="header scalatex-header scalatex-hover-container" id="MakingaCanvasApp" style="display: block;"><h1 id="MakingaCanvasApp">Making a Canvas App<a class="scalatex-header-link" href="#MakingaCanvasApp" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a></h1><br /></div>
+
+<p>
+ By this point, you've already cloned and got your hands dirty fiddling around with the toy <a href="https://github.com/lihaoyi/workbench-example-app">workbench-example-app</a>. You have your editor set up, SBT installed, and have published the example application in a way you can host online for other people to see. Maybe you've even made some changes to the application to see what happens. Hopefully you're curious, and want to learn more.
+</p>
+<p>
+ In this section of the book, we will walk through making a small canvas application. This will expose you to important concepts like:
+</p>
+<ul>
+ <li>
+ Taking input with Javascript event handlers</li>
+ <li>
+ Writing your application logic in Scala</li>
+ <li>
+ Using a timer to drive periodic actions
+</li></ul>
+<p>
+ In general, while the previous chapter was mostly set-up and exploring the Scala.js project, this chapter will walk you through actually writing a non-trivial, self-contained Scala.js application. Throughout this chapter, we will only be making modifications to <code>ScalaJSExample.scala</code>; the rest of the project will remain unchanged.
+</p>
+<h1 id="MakingaSketchpadusingMouseInput" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#MakingaSketchpadusingMouseInput" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Making a Sketchpad using Mouse Input</h1>
+
+ <p>
+ To begin with, lets remove all the existing stuff in our <code>.scala</code> file and leave only the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">object</code> and the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">main</code> method. Let's start off with some necessary boilerplate:
+</p>
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">/*setup*/
+val renderer = canvas.getContext(&quot;2d&quot;)
+ .asInstanceOf[dom.CanvasRenderingContext2D]
+
+canvas.width = canvas.parentElement.clientWidth
+canvas.height = canvas.parentElement.clientHeight
+
+renderer.fillStyle = &quot;#f8f8f8&quot;
+renderer.fillRect(0, 0, canvas.width, canvas.height)</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/hands-on-scala-js/blob/master/examples/demos/src/main/scala/canvasapp/ScratchPad.scala#L12-L22" target="_blank"><i class="fa fa-link "></i></a></pre>
+
+ <p>
+ As described earlier, this code uses the <a href="https://developer.mozilla.org/en-US/docs/Web/API/document.getElementById">document.getElementById</a> function to fish out the <code>canvas</code> element that we interested in from the DOM. It then gets a rendering context from that <code>canvas</code>, and sets the height and width of the canvas to completely fill its containing element. Lastly, it fills out the canvas light-gray, so that we can see it on the page.
+</p>
+ <p>
+ Next, let's set some event handlers on the canvas:
+</p>
+ <div class="pure-g">
+ <div class="pure-u-1 pure-u-md-13-24">
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">/*code*/
+renderer.fillStyle = &quot;black&quot;
+var down = false
+canvas.onmousedown =
+ (e: dom.MouseEvent) =&gt; down = true
+
+canvas.onmouseup =
+ (e: dom.MouseEvent) =&gt; down = false
+
+canvas.onmousemove = {
+ (e: dom.MouseEvent) =&gt;
+ val rect =
+ canvas.getBoundingClientRect()
+ if (down) renderer.fillRect(
+ e.clientX - rect.left,
+ e.clientY - rect.top,
+ 10, 10
+ )
+}</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/hands-on-scala-js/blob/master/examples/demos/src/main/scala/canvasapp/ScratchPad.scala#L22-L41" target="_blank"><i class="fa fa-link "></i></a></pre>
+</div>
+ <div class="pure-u-1 pure-u-md-11-24">
+ <canvas id="example1" style="display: block;overflow: scroll;"></canvas><script>canvasapp.ScratchPad().main(document.getElementById('example1'))</script>
+</div></div>
+ <p>
+ This code sets up the <a href="https://developer.mozilla.org/en-US/docs/Web/Events/mousedown">mousedown</a> and <a href="https://developer.mozilla.org/en-US/docs/Web/Events/mouseup">mouseup</a> events to keep track of whether or not the mouse has currently been clicked. It then draws black squares any time you move the mouse while the button is down. This lets you basically click-and-drag to draw pictures on the canvas. Try it out!
+</p>
+ <p>
+ In general, you have access to all the DOM APIs through the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">dom</code> package as well as through Javascript objects such as the <a href="https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement">html.Canvas</a>. Setting the <code>onmouseXXX</code> callbacks is just one way of interacting with the DOM. With Scala.js, you also get a very handy autocomplete in the editor, which you can use to browse the various other APIs that are available for use:
+</p>
+ <img src="images/Dropdown.png" style="max-width: 100%;" />
+
+ <p>
+ Apart from mouse events, keyboard events, scroll events, input events, etc. are all usable from Scala.js as you'd expect. If you have problems getting this to work, feel free to click on the link <i class="fa fa-link "></i> icon below the code snippet to see what the full code for the example looks like
+</p>
+<h1 id="MakingaClockusingsetInterval" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#MakingaClockusingsetInterval" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Making a Clock using setInterval</h1>
+
+ <p>
+ You've already seen this in the previous example, but <a href="https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers.setInterval">WindowTimers.setInterval</a> can be used to schedule recurring, periodic events in your program. Common use cases include running the <a href="http://gameprogrammingpatterns.com/game-loop.html">event loop for a game</a>, making smooth animations, and other tasks of that sort which require some work to happen over a period of time.
+</p>
+ <p>
+ Again, we need roughly the same boilerplate as just now to set up the canvas:
+</p>
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">/*setup*/
+val renderer = canvas.getContext(&quot;2d&quot;)
+ .asInstanceOf[dom.CanvasRenderingContext2D]
+
+canvas.width = canvas.parentElement.clientWidth
+canvas.height = canvas.parentElement.clientHeight
+
+val gradient = renderer.createLinearGradient(
+ canvas.width / 2 - 100, 0, canvas.width/ 2 + 100, 0
+)
+gradient.addColorStop(0,&quot;red&quot;)
+gradient.addColorStop(0.5,&quot;green&quot;)
+gradient.addColorStop(1,&quot;blue&quot;)
+renderer.fillStyle = gradient
+//renderer.fillStyle = &quot;black&quot;
+
+renderer.textAlign = &quot;center&quot;
+renderer.textBaseline = &quot;middle&quot;</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/hands-on-scala-js/blob/master/examples/demos/src/main/scala/canvasapp/Clock.scala#L11-L30" target="_blank"><i class="fa fa-link "></i></a></pre>
+
+ <p>
+ The only thing unusual here is that I'm going to create a <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">linearGradient</code> in order to make the stopwatch look pretty. This is by no means necessary, and you could simply make the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">fillStyle</code> <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">&quot;black&quot;</code> if you want to keep things simple.
+</p>
+ <p>
+ Once that's done, it's only a few lines of code to set up a nice, live clock:
+</p>
+ <div class="pure-g">
+ <div class="pure-u-1 pure-u-md-13-24">
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">/*code*/
+def render() = {
+ val date = new js.Date()
+ renderer.clearRect(
+ 0, 0, canvas.width, canvas.height
+ )
+
+ renderer.font = &quot;75px sans-serif&quot;
+ renderer.fillText(
+ Seq(
+ date.getHours(),
+ date.getMinutes(),
+ date.getSeconds()
+ ).mkString(&quot;:&quot;),
+ canvas.width / 2,
+ canvas.height / 2
+ )
+}
+dom.setInterval(render _, 1000)</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/hands-on-scala-js/blob/master/examples/demos/src/main/scala/canvasapp/Clock.scala#L30-L49" target="_blank"><i class="fa fa-link "></i></a></pre>
+</div>
+ <div class="pure-u-1 pure-u-md-11-24">
+ <canvas id="example2" style="display: block;overflow: scroll;"></canvas><script>canvasapp.Clock().main(document.getElementById('example2'))</script>
+</div></div>
+ <p>
+ As you can see, we're using more <a href="https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D">Canvas APIs</a>, in this case dealing with rendering text on the canvas. Another thing we're using is the Javascript <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date">Date</a> class, in Scala.js under the full name <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">scala.scalajs.js.Date</code>, here imported as <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">js.Date</code>. Again, click on the link <i class="fa fa-link "></i> icon to view the full-code if you're having trouble here.
+</p>
+<h1 id="Tyingittogether:FlappyBox" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#Tyingittogether:FlappyBox" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Tying it together: Flappy Box</h1>
+
+ <p>
+ You've just seen two examples of how to use Scala.js, together with the Javascript DOM APIs, to make simple applications. However, we've only used the &quot;Scala&quot; in Scala.js in the most rudimentary fashion: setting a few primitives here and there, defining some methods, mainly just gluing together a few Javascript APIs
+</p>
+ <p>
+ In this example we will make a spiritual clone of the popular <a href="http://en.wikipedia.org/wiki/Flappy_Bird">Flappy Bird</a> video game. This game involves a few simple rules
+</p>
+ <ul>
+ <li>
+ Your character starts in the middle of the screen</li>
+ <li>
+ Gravity pulls your character down</li>
+ <li>
+ Clicking/tapping the screen makes your character jump up</li>
+ <li>
+ There are obstacles that approach your character from the right side of the screen, and you have to make sure you go through the hole in each obstacle to avoid hitting it</li>
+ <li>
+ Don't go out of bounds!
+</li></ul>
+ <p>
+ It's a relatively simple game, but there should be enough &quot;business logic&quot; in here that we won't be simply gluing together APIs. Let's start!
+</p>
+ <h2 id="SettingUptheCanvas" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#SettingUptheCanvas" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Setting Up the Canvas</h2>
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">/*setup*/
+val renderer = canvas.getContext(&quot;2d&quot;)
+ .asInstanceOf[dom.CanvasRenderingContext2D]
+
+canvas.width = canvas.parentElement.clientWidth
+canvas.height = 400
+
+renderer.font = &quot;50px sans-serif&quot;
+renderer.textAlign = &quot;center&quot;
+renderer.textBaseline = &quot;middle&quot;</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/hands-on-scala-js/blob/master/examples/demos/src/main/scala/canvasapp/FlappyLine.scala#L12-L23" target="_blank"><i class="fa fa-link "></i></a></pre>
+
+ <p>
+ This section of the code is peripherally necessary, but not core to the implementation or logic of Flappy Box. We see the same <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">canvas</code>/<code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">renderer</code> logic we've seen in all our examples, along with some logic to make the canvas a reasonable size, and some configuration of how we will render text to the canvas.
+</p>
+ <p>
+ In general, code like this will usually end up being necessary in a Scala.js program: the Javascript APIs that the browser provides to do things often ends up being somewhat roundabout and verbose. It's somewhat annoying to have to do for a small program such as this one, but in a larger application, the cost is both spread out over thousands of lines of code and also typically hidden away in helper functions, so the verbosity and non-idiomatic-scala-ness doesn't bother you much.
+</p>
+ <h2 id="DefiningourState" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#DefiningourState" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Defining our State</h2>
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">/*variables*/
+val obstacleGap = 200 // Gap between the approaching obstacles
+val holeSize = 50 // Size of the hole in each obstacle you must go through
+val gravity = 0.1 // Y acceleration of the player
+
+var playerY = canvas.height / 2.0 // Y position of the player; X is fixed
+var playerV = 0.0 // Y velocity of the player
+// Whether the player is dead or not;
+// 0 means alive, &gt;0 is number of frames before respawning
+var dead = 0
+// What frame this is; used to keep track
+// of where the obstacles should be positioned
+var frame = -50
+// List of each obstacle, storing only the Y position of the hole.
+// The X position of the obstacle is calculated by its position in the
+// queue and in the current frame.
+val obstacles = collection.mutable.Queue.empty[Int]</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/hands-on-scala-js/blob/master/examples/demos/src/main/scala/canvasapp/FlappyLine.scala#L23-L42" target="_blank"><i class="fa fa-link "></i></a></pre>
+
+ <p>
+ This is where we start defining things that are relevant to Flappy Box. There are roughly two groups of values here: immutable constants in the top group, and mutable variables in the bottom. The rough meaning of each variable is documented in the comments, and we'll see exactly how we use them later.
+</p>
+ <p>
+ One notable thing is that we're using a <a href="http://docs.scala-lang.org/overviews/collections/concrete-mutable-collection-classes.html">collection.mutable.Queue</a> to store the list of obstacles. This is defined in the Scala standard library; in general, all the collections in the Scala standard library can be used without issue in Scala.js.
+</p>
+ <h2 id="GameLogic" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#GameLogic" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Game Logic</h2>
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">def runLive() = {
+ frame += 2
+
+ // Create new obstacles, or kill old ones as necessary
+ if (frame &gt;= 0 &amp;&amp; frame % obstacleGap == 0)
+ obstacles.enqueue(Random.nextInt(canvas.height - 2 * holeSize) + holeSize)
+ if (obstacles.length &gt; 7){
+ obstacles.dequeue()
+ frame -= obstacleGap
+ }
+
+ // Apply physics
+ playerY = playerY + playerV
+ playerV = playerV + gravity
+
+
+ // Render obstacles, and check for collision
+ renderer.fillStyle = &quot;darkblue&quot;
+ for((holeY, i) &lt;- obstacles.zipWithIndex){
+ // Where each obstacle appears depends on what frame it is.
+ // This is what keeps the obstacles moving to the left as time passes.
+ val holeX = i * obstacleGap - frame + canvas.width
+ renderer.fillRect(holeX, 0, 5, holeY - holeSize)
+ renderer.fillRect(
+ holeX, holeY + holeSize, 5, canvas.height - holeY - holeSize
+ )
+
+ // Kill the player if he hits some obstacle
+ if (math.abs(holeX - canvas.width/2) &lt; 5 &amp;&amp;
+ math.abs(holeY - playerY) &gt; holeSize){
+ dead = 50
+ }
+ }
+
+ // Render player
+ renderer.fillStyle = &quot;darkgreen&quot;
+ renderer.fillRect(canvas.width / 2 - 5, playerY - 5, 10, 10)
+
+ // Check for out-of-bounds player
+ if (playerY &lt; 0 || playerY &gt; canvas.height){
+ dead = 50
+ }
+}</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/hands-on-scala-js/blob/master/examples/demos/src/main/scala/canvasapp/FlappyLine.scala#L42-L86" target="_blank"><i class="fa fa-link "></i></a></pre>
+
+ <p>
+ The <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">runLive</code> function is the meat of Flappy Box. In it, we
+</p>
+ <ul>
+ <li>
+ Clear the canvas</li>
+ <li>
+ Generate new obstacles</li>
+ <li>
+ Apply velocity and acceleration to the player</li>
+ <li>
+ Check for collisions or out-of-bounds, killing the player if it happens</li>
+ <li>
+ Rendering everything, including the player as the namesake box
+</li></ul>
+ <p>
+ This function basically contains all the game logic, from motion, to collision-detection, to rendering, so it's pretty large. Not that large though! And entirely understandable, even if it takes a few moments to read through.
+</p>
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">def runDead() = {
+ playerY = canvas.height / 2
+ playerV = 0
+ frame = -50
+ obstacles.clear()
+ dead -= 1
+ renderer.fillStyle = &quot;darkred&quot;
+ renderer.fillText(&quot;Game Over&quot;, canvas.width / 2, canvas.height / 2)
+}</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/hands-on-scala-js/blob/master/examples/demos/src/main/scala/canvasapp/FlappyLine.scala#L86-L96" target="_blank"><i class="fa fa-link "></i></a></pre>
+
+ <p>
+ This is the function that handles what happens when you're dead. Essentially, we reset all the mutable variables to their initial state, and just count down the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">dead</code> counter until it reaches zero and we're considered alive again.
+</p>
+ <h2 id="AWorkingProduct" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#AWorkingProduct" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>A Working Product</h2>
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">def run() = {
+ renderer.clearRect(0, 0, canvas.width, canvas.height)
+ if (dead &gt; 0) runDead()
+ else runLive()
+}
+
+dom.setInterval(run _, 20)
+
+canvas.onclick = (e: dom.MouseEvent) =&gt; {
+ playerV -= 5
+}</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/hands-on-scala-js/blob/master/examples/demos/src/main/scala/canvasapp/FlappyLine.scala#L96-L107" target="_blank"><i class="fa fa-link "></i></a></pre>
+
+ <p>
+ And finally, this is the code that kicks everything off: we define the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">run</code> function to swap between <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">runLive</code> and <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">runDead</code>, register an <a href="https://developer.mozilla.org/en-US/docs/Web/Events/onclick">onclick</a> handler to make the player jump by tweaking his velocity, and we call <a href="https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers.setInterval">WindowTimers.setInterval</a> to run the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">run</code> function every 20 milliseconds.
+</p>
+ <p>
+ At almost 100 lines of code, this is quite a meaty example! Nonetheless, when all is said and done, you will find that the example actually works! Try it out!
+</p>
+ <div>
+ <canvas id="example3" style="display: block;overflow: scroll;"></canvas><script>canvasapp.FlappyLine().main(document.getElementById('example3'))</script>
+</div>
+<h1 id="CanvasRecap" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#CanvasRecap" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Canvas Recap</h1>
+ <p>
+ We've now gone through the workings of building a handful of toy applications using Scala.js. What have we learnt in the process?
+</p>
+ <h2 id="DevelopmentSpeed" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#DevelopmentSpeed" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Development Speed</h2>
+ <p>
+ We've by now written a good chunk of Scala.js code, and perhaps debugged some mysterious errors, and tried some new things. One thing you've probably noticed is the efficiency of the process: you make a change in your editor, the browser reloads itself, and life goes on. There is a compile cycle, but after a few runs the compiler warms up and the compilation cycle drops to less than a second.</p>
+ <p>
+ Apart from the compilation/reload speed, you've probably noticed the benefit of tooling around Scala.js. Unlike Javascript editors, your existing Scala IDEs like <a href="http://blog.jetbrains.com/scala/">IntelliJ</a> or <a href="http://scala-ide.org/">Eclipse</a> can give very useful help when you're working with Scala.js. Autocomplete, error-highlighting, jump-to-definition, and a myriad other modern conveniences that are missing when working in dynamically-typed languages are present when working in Scala.js. This makes the code much less mysterious: you're no longer trying to guess what methods a value has, or what a method returns: it's all laid out in front of you in plain sight.
+</p>
+ <h2 id="FullScala" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#FullScala" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Full Scala</h2>
+ <p>
+ All of the examples so far have been very self-contained: they do not touch the HTML DOM, they do not make Ajax calls, or try to access web services. They don't push the limits of the browser's API.
+</p>
+ <p>
+ Nevertheless, these examples have exercised a good amount of the Scala language. List comprehensions, collections, the math library, and more. In general, most of the Scala standard library works under Scala.js, as well as a large number of third-party libraries. Unlike many other compile-to-Javascript languages out there, this isn't a language-that-looks-like-Scala: it is Scala through and through, with a tiny number of semantic differences.
+</p>
+ <h2 id="SeamlessJavascriptInterop" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#SeamlessJavascriptInterop" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Seamless Javascript Interop</h2>
+ <p>
+ Even if we take some time to read through the code we've written, it is not immediately obvious which bits of code are Scala and which bits are Javascript! It all kind of meshes together, for example if we take the Flappy Box source code:
+</p>
+ <ul>
+ <li>
+ <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">obstacles</code> is a Scala <a href="http://docs.scala-lang.org/overviews/collections/concrete-mutable-collection-classes.html">mutable.Queue</a>, as we defined it earlier, and all the methods on it are Scala method calls</li>
+ <li>
+ <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">renderer</code> is a Javascript <a href="https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D">CanvasRenderingContext2D</a>, and all the methods on it are Javascript method calls directly on the Javascript object</li>
+ <li>
+ <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">frame</code> is a Scala <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Int</code>, and obeys Scala semantics, though it is implemented as a Javascript <code class="javascript scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Number</code> under the hood.</li>
+ <li>
+ <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">playerY</code> and <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">playerV</code> are Scala <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Double</code>s, implemented directly as Javascript <code class="javascript scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Number</code>s
+</li></ul>
+ <p>
+ This reveals something pretty interesting about Scala.js: even though Scala at-first-glance is a very different language from Javascript, the interoperation with Javascript is so seamless that you can't even tell from the code which values/methods are defined in Scala and which values/methods come from Javascript!</p>
+ <p>
+ These two classes of values/methods are treated very differently by the compiler when it comes to emitting the executable Javascript blob, but the compiler does not need extra syntax telling it which things belong to Scala and which to Javascript: the types are sufficient. <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">renderer</code>, for example is of type <a href="https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D">CanvasRenderingContext2D</a> which is a subtype of <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">scalajs.js.Object</code>, indicating to the compiler that it needs special treatment. Primitives like <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Double</code>s and <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Int</code>s have similar treatment
+</p>
+ <p>
+ Overall, this seamless mix of Scala and Javascript values/methods/functions is a common theme in Scala.js applications, so you should expect to see more of it in later chapters of the book.
+</p>
+ <hr />
+
+ <p>
+ You've now had some experience building small canvas applications in Scala.js. Why not try exercising your new-found skills? Here are some possibilities:
+</p>
+ <ul>
+ <li>
+ Make more video games! I have a set of <a href="http://lihaoyi.github.io/scala-js-games/">retro-games ported to Scala.js</a>. Maybe re-make one of them without looking at the source, or maybe port some other game you're familiar with and enjoy playing. Even just drawing things on canvas, games can get <a href="http://lihaoyi.github.io/roll/">pretty elaborate</a>.
+</li>
+ <li>
+ Explore the APIs! We've touched on a small number of Javascript APIs here, mainly for dealign with the canvas, but modern browsers offer a whole <a href="https://developer.mozilla.org/en-US/docs/Web/API">zoo of functionality</a>. Try making an application that uses <a href="https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Storage">localStorage</a> to save state even when you close the tab, or an application that works with the HTML DOM.
+</li>
+ <li>
+ Draw something pretty! We have a working canvas, a nice programming language, and a way to easily publish the results online. <a href="http://www.scala-js-fiddle.com/gist/77a3840678d154257ca1/KochSnowflake.scala">Various</a> <a href="http://www.scala-js-fiddle.com/gist/77a3840678d154257ca1/KochCurve.scala">fractals</a>, or <a href="http://www.scala-js-fiddle.com/gist/9443f8e0ecc68d1058ad/RayTracer.scala">colorful visualizations</a> are all possibilities.
+</li></ul>
+ <p>
+ By this point you've some experience building stand-alone, single-canvas Scala.js applications, which has hopefully given you a feel for how Scala.js works. The problem is that few web applications satisfy the criteria of being stand-alone single-page canvas applications! Most web applications need to deal with the DOM of the HTML page, need to fetch data from web services, and generally need to do a lot of other messy things. We'll go into that in the next chapter</p>
+
+
+ <div class="header scalatex-header scalatex-hover-container" id="InteractiveWebPages" style="display: block;"><h1 id="InteractiveWebPages">Interactive Web Pages<a class="scalatex-header-link" href="#InteractiveWebPages" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a></h1><br /></div>
+
+
+<p>
+ Most web applications aren't neat little games which live on a single canvas: they are large, structured HTML pages, which involve displaying data (whether from the user or from the web) in multiple ways, while allowing the user to make changes to the data that can be saved back to whatever remote web-service/database it came from.
+</p>
+<p>
+ At this point, you are already competent at using Scala.js to make basic, self-contained canvas applications. In this chapter, we will cover how to use Scala.js to build the sort of interactive-web-pages that make up the bulk of the modern-day internet. We'll cover how to use powerful libraries that turn front-end development form the typical fragile-mess into a structured, robust piece of software.
+</p>
+
+
+<h1 id="HelloWorld:HTML" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#HelloWorld:HTML" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Hello World: HTML</h1>
+
+ <p>
+ The most basic way of building interactive web pages using Scala.js is to use the Javascript APIs to blat HTML strings directly into some container <code class="html scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">&lt;div&gt;</code> or <code class="html scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">&lt;body&gt;</code>. This approach works, as the following code snippet demonstrates:
+</p>
+ <div class="pure-g">
+ <div class="pure-u-1 pure-u-md-13-24">
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">package webpage
+import org.scalajs.dom
+import dom.html
+import scalajs.js.annotation.JSExport
+@JSExport
+object HelloWorld0 extends{
+ @JSExport
+ def main(target: html.Div) ={
+ val (f, d) = (&quot;fox&quot;, &quot;dog&quot;)
+ target.innerHTML = s&quot;&quot;&quot;
+ &lt;div&gt;
+ &lt;h1&gt;Hello World!&lt;/h1&gt;
+ &lt;p&gt;
+ The quick brown &lt;b&gt;$f&lt;/b&gt;
+ jumps over the lazy &lt;i&gt;$d&lt;/b&gt;
+ &lt;/p&gt;
+ &lt;/div&gt;
+ &quot;&quot;&quot;
+ }
+}</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/hands-on-scala-js/blob/master/examples/demos/src/main/scala/webpage/HelloWorld0.scala#L0-L20" target="_blank"><i class="fa fa-link "></i></a></pre>
+</div>
+ <div class="pure-u-1 pure-u-md-11-24">
+ <div id="example4" style="display: block;overflow: scroll;"></div><script>webpage.HelloWorld0().main(document.getElementById('example4'))</script>
+</div></div>
+ <p>
+ Remember that we're now requiring a <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">html.Div</code> instead of a <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">html.Canvas</code> to be passed in when the Javascript calls <code class="javascript scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">webpage.HelloWorld0().main(...)</code>. If you're coming to this point from the previous chapter, you'll need to update the on-page Javascript's <code class="javascript scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">document.getElementById</code> to pick a <code class="html scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">&lt;div&gt;</code> rather than the <code class="html scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">&lt;canvas&gt;</code> we were using in the previous chapter.
+</p>
+ <p>
+ This approach works, as the above example shows, but has a couple of disadvantages:
+</p>
+ <ul>
+ <li>
+ It is untyped: it is easy to accidentally mistype something, and result in malformed HTML. A typo such as <code class="html scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">&lt;dvi&gt;</code> would go un-noticed at build-time. Depending on where the typo happens, it could go un-noticed until the application is deployed, causing subtle bugs that only get resolved much later.</li>
+ <li>
+ It is insecure: <a href="http://en.wikipedia.org/wiki/Cross-site_scripting">Cross-site Scripting</a> is a real thing, and it is easy to forget to escape the values you are putting into your HTML strings. Above they're constants like <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">&quot;dog&quot;</code>, but if they're user-defined, you may not notice there is a problem until something like <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">&quot;&lt;script&gt;...&lt;/script&gt;&quot;</code> sneaks through and your users' accounts &amp; data is compromised.
+</li></ul>
+ <p>
+ There are more, but we won't go deep into the intricacies of these problems. Suffice to say it makes mistakes easy to make and hard to catch, and we have something better...
+</p>
+<h1 id="Scalatags" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#Scalatags" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Scalatags</h1>
+ <p>
+ <a href="https://github.com/lihaoyi/scalatags">Scalatags</a> is a cross-platform Scala.js/Scala-JVM library that is designed to generate HTML. To use Scalatags, you need to add it as a dependency to your Scala.js SBT project, in the <code>build.sbt</code> file:
+</p>
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">libraryDependencies += &quot;com.lihaoyi&quot; %%% &quot;scalatags&quot; % &quot;0.4.5&quot;</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/hands-on-scala-js/blob/master/examples/demos/build.sbt#L16-L17" target="_blank"><i class="fa fa-link "></i></a></pre>
+
+ <p>
+ With that, the above snippet of code re-written using Scalatags looks as follows:
+</p>
+ <div class="pure-g">
+ <div class="pure-u-1 pure-u-md-13-24">
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">package webpage
+import org.scalajs.dom
+import dom.html
+import scalajs.js.annotation.JSExport
+import scalatags.JsDom.all._
+@JSExport
+object HelloWorld1 extends{
+ @JSExport
+ def main(target: html.Div) = {
+ val (animalA, animalB) = (&quot;fox&quot;, &quot;dog&quot;)
+ target.appendChild(
+ div(
+ h1(&quot;Hello World!&quot;),
+ p(
+ &quot;The quick brown &quot;, b(animalA),
+ &quot; jumps over the lazy &quot;,
+ i(animalB), &quot;.&quot;
+ )
+ ).render
+ )
+ }
+}</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/hands-on-scala-js/blob/master/examples/demos/src/main/scala/webpage/HelloWorld1.scala#L0-L22" target="_blank"><i class="fa fa-link "></i></a></pre>
+</div>
+ <div class="pure-u-1 pure-u-md-11-24">
+ <div id="example5" style="display: block;overflow: scroll;"></div><script>webpage.HelloWorld1().main(document.getElementById('example5'))</script>
+</div></div>
+ <p>
+ Scalatags has some nice advantages over plain HTML: it's type-safe, so typos like <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">dvi</code> get caught at compile-time. It's also secure, such that you don't need to worry about script-tags in strings or similar. The <a href="https://github.com/lihaoyi/scalatags#scalatags">Scalatags Readme</a> elaborates on these points and other advantages. As you can see, it takes just 1 import at the top of the file to bring it in scope, and then you can use all of Scalatags' functionality.
+</p>
+ <p>
+ The Scalatags github page has <a href="https://github.com/lihaoyi/scalatags#hello-world">comprehensive documentation</a> on how to express all manner of HTML fragments using Scalatags, so anyone who's familiar with how HTML works can quickly get up to speed. Instead of a detailed listing, we'll walk through some interactive examples to show Scalatags in action!
+</p>
+ <h2 id="UserInput" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#UserInput" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>User Input</h2>
+ <div class="pure-g">
+ <div class="pure-u-1 pure-u-md-13-24">
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">val box = input(
+ `type`:=&quot;text&quot;,
+ placeholder:=&quot;Type here!&quot;
+).render
+
+val output = span.render
+
+box.onkeyup = (e: dom.Event) =&gt; {
+ output.textContent =
+ box.value.toUpperCase
+}
+
+target.appendChild(
+ div(
+ h1(&quot;Capital Box!&quot;),
+ p(
+ &quot;Type here and &quot; +
+ &quot;have it capitalized!&quot;
+ ),
+ div(box),
+ div(output)
+ ).render
+)</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/hands-on-scala-js/blob/master/examples/demos/src/main/scala/webpage/Inputs.scala#L11-L34" target="_blank"><i class="fa fa-link "></i></a></pre>
+</div>
+ <div class="pure-u-1 pure-u-md-11-24">
+ <div style="height: 150px;display: block;overflow: scroll;" id="example6"></div><script>webpage.Inputs().main(document.getElementById('example6'))</script>
+</div></div>
+ <p>
+ In Scalatags, you build up fragments of type <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Frag</code> using functions like <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">div</code>, <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">h1</code>, etc., and call <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">.render</code> on it to turn it into a real <a href="https://developer.mozilla.org/en-US/docs/Web/API/Element">Element</a>. Different fragments render to different things: e.g. <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">input.render</code> gives you a <a href="https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement">html.Input</a>, <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">span.render</code> gives you a <a href="https://developer.mozilla.org/en-US/docs/Web/API/HTMLSpanElement">html.Span</a>. You can then access the properties of these elements: adding callbacks, checking their value, anything you want.
+</p>
+ <p>
+ In this example, we render and <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">input</code> element and a <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">span</code>, wire up the input to set the value of the span whenever you press a key in the input, and then stuff both of them into a larger HTML fragment that forms the contents of our <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">target</code> element.
+</p>
+ <h2 id="Re-rendering" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#Re-rendering" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Re-rendering</h2>
+ <p>
+ Let's look at a slightly longer example. While above we spliced small snippets of text into the DOM, here we are going to re-render entire sections of HTML! The goal of this little exercise is to make a filtering search-box: starting from a default list of items, narrow it down as the user enters text into the box.
+</p>
+ <p>
+ To begin with, let's define our list of items: Fruits!
+</p>
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">val listings = Seq(
+ &quot;Apple&quot;, &quot;Apricot&quot;, &quot;Banana&quot;, &quot;Cherry&quot;,
+ &quot;Mango&quot;, &quot;Mangosteen&quot;, &quot;Mandarin&quot;,
+ &quot;Grape&quot;, &quot;Grapefruit&quot;, &quot;Guava&quot;
+)</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/hands-on-scala-js/blob/master/examples/demos/src/main/scala/webpage/Search0.scala#L11-L17" target="_blank"><i class="fa fa-link "></i></a></pre>
+
+ <p>
+ Next, let's think about how we want to render these fruits. One natural way would be as a list, which in HTML is represented by a <code class="html scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">&lt;ul&gt;</code> with <code class="html scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">&lt;li&gt;</code>s inside of it if we wanted the list to be unordered. We'll make it a <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">def</code>, because we know up-front we're going to need to re-render this listing as the search query changes. Lastly, we know we want 1 list item for each fruit, but only if the fruit starts with the search query.
+</p>
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">def renderListings = ul(
+ for {
+ fruit &lt;- listings
+ if fruit.toLowerCase.startsWith(
+ box.value.toLowerCase
+ )
+ } yield li(fruit)
+).render</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/hands-on-scala-js/blob/master/examples/demos/src/main/scala/webpage/Search0.scala#L17-L26" target="_blank"><i class="fa fa-link "></i></a></pre>
+
+ <p>
+ Using a <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">for</code>-loop with a filter inside the Scalatags fragment is just normal Scala, since you can nest arbitrary Scala expressions inside a Scalatags snippet. In this case, we're converting both the fruit and the search query to lower case so we can compare them case-insensitively.
+</p>
+ <p>
+ Lastly, we just need to define the input box and output-container (as we did earlier), set the <a href="https://developer.mozilla.org/en-US/docs/Web/Events/onkeyup">onkeyup</a> event handler, and place it in a larger fragment, and then into our target:
+</p>
+ <div class="pure-g">
+ <div class="pure-u-1 pure-u-md-13-24">
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">val output = div(renderListings).render
+
+box.onkeyup = (e: dom.Event) =&gt; {
+ output.innerHTML = &quot;&quot;
+ output.appendChild(renderListings)
+}
+
+target.appendChild(
+ div(
+ h1(&quot;Search Box!&quot;),
+ p(
+ &quot;Type here to filter &quot; +
+ &quot;the list of things below!&quot;
+ ),
+ div(box),
+ output
+ ).render
+)</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/hands-on-scala-js/blob/master/examples/demos/src/main/scala/webpage/Search0.scala#L31-L49" target="_blank"><i class="fa fa-link "></i></a></pre>
+</div>
+ <div class="pure-u-1 pure-u-md-11-24">
+ <div id="example7" style="display: block;overflow: scroll;"></div><script>webpage.Search0().main(document.getElementById('example7'))</script>
+</div></div>
+ <p>
+ And there you have it! A working search box. This is a relatively self-contained example: all the items its searching are available locally, no Ajax calls, and there's no fancy handling of the searched items. If we want to, for example, highlight the matched section of each fruit's name, we can modify the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">def renderListings</code> call to do so:
+</p>
+ <div class="pure-g">
+ <div class="pure-u-1 pure-u-md-13-24">
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">def renderListings = ul(
+ for {
+ fruit &lt;- listings
+ if fruit.toLowerCase.startsWith(
+ box.value.toLowerCase
+ )
+ } yield {
+ val (first, last) = fruit.splitAt(
+ box.value.length
+ )
+ li(
+ span(
+ backgroundColor:=&quot;yellow&quot;,
+ first
+ ),
+ last
+ )
+ }
+).render</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/hands-on-scala-js/blob/master/examples/demos/src/main/scala/webpage/Search1.scala#L16-L37" target="_blank"><i class="fa fa-link "></i></a></pre>
+</div>
+ <div class="pure-u-1 pure-u-md-11-24">
+ <div id="example8" style="display: block;overflow: scroll;"></div><script>webpage.Search1().main(document.getElementById('example8'))</script>
+</div></div>
+ <p>
+ Here, instead of sticking the name of the matched fruits directly into the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">li</code>, we instead first split off the part which matches the query, and then highlght the first section yellow. Easy!
+</p>
+ <hr />
+
+ <p>
+ Hopefully this has given you a good overview of how to do things using Scala.js and Scalatags. I won't go too deep into the various ways you can use Scalatags: the <a href="https://github.com/lihaoyi/scalatags">documentation</a> should cover most of it. Now that you've gone through this experience, it's worth re-iterating a few things you've probably already noticed about Scalatags
+</p>
+ <ul>
+ <li>
+ It's safe! If you make a trivial syntactic mistake, the compiler will catch it, because Scalatags is plain Scala. Try it!</li>
+ <li>
+ It's composable! You can easily define fragments and assign them to variables, to be used later. You can break apart large Scalatags fragments the same way you break apart normal code, avoiding the huge monolithic HTML templates that are common in other templating systems.</li>
+ <li>
+ It's Scala! You have the full power of the Scala language to write your fragments. No need to learn special syntax/cases for conditionals or repetitions: you can use plain-old-Scala <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">if</code>-<code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">else</code>s, <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">for</code>-loops, etc.
+</li></ul>
+ <p>
+ Now that you've gotten a quick overview of the kinds of things you can do with Scalatags, let's move on to the next section of our hands-on tutorial...
+</p>
+<h1 id="UsingWebServices" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#UsingWebServices" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Using Web Services</h1>
+
+ <p>
+ One half of the web application faces forwards towards the user, managing and rendering HTML or Canvas for the user to view and interact with. Another half faces backwards, talking to various web-services or databases which turn the application from a standalone-widget into part of a greater whole. We've already seen how to make the front half, let's now talk about working with the back half.
+</p>
+ <h2 id="RawJavascript" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#RawJavascript" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Raw Javascript</h2>
+ <div class="pure-g">
+ <div class="pure-u-1 pure-u-md-13-24">
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">val xhr = new dom.XMLHttpRequest()
+xhr.open(&quot;GET&quot;,
+ &quot;http://api.openweathermap.org/&quot; +
+ &quot;data/2.5/weather?q=Singapore&quot;
+)
+xhr.onload = (e: dom.Event) =&gt; {
+ if (xhr.status == 200) {
+ target.appendChild(
+ pre(xhr.responseText).render
+ )
+ }
+}
+xhr.send()</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/hands-on-scala-js/blob/master/examples/demos/src/main/scala/webpage/Weather0.scala#L12-L25" target="_blank"><i class="fa fa-link "></i></a></pre>
+</div>
+ <div class="pure-u-1 pure-u-md-11-24">
+ <div style="height: 400px;display: block;overflow: scroll;" id="example9"></div><script>webpage.Weather0().main(document.getElementById('example9'))</script></div></div>
+ <p>
+ The above snippet of code uses the raw Javascript Ajax API in order to make a request to <a href="http://openweathermap.org/">openweathermap.org</a>, to get the weather data for the city of Singapore as a JSON blob. The part of the API that we'll be using is documented <a href="http://openweathermap.org/current">here</a>, and if you're interested you can read all about the various options that they provide. For now, we're unceremoniously dumping it in a <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">pre</code> so you can see the raw response data.
+</p>
+ <p>
+ As you can see, using the raw Javascript API to make the Ajax call looks almost identical to actually doing this in Javascript, shown below:
+</p>
+ <div class="pure-g">
+ <div class="pure-u-1 pure-u-md-13-24">
+ <pre class="scalatex-hover-container"><code class="javascript scalatex-highlight-js hljs">var xhr = new XMLHttpRequest()
+
+xhr.open(&quot;GET&quot;,
+ &quot;http://api.openweathermap.org/data/&quot; +
+ &quot;2.5/weather?q=Singapore&quot;
+);
+
+xhr.onload = function (e) {
+ if (xhr.status == 200) {
+ var pre = document.createElement(&quot;pre&quot;);
+ pre.textContent = xhr.responseText;
+ target.appendChild(pre);
+ }
+};
+xhr.send();</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/hands-on-scala-js/blob/master/examples/demos/src/main/resources/webpage/weather.js#L1-L16" target="_blank"><i class="fa fa-link "></i></a></pre>
+</div>
+ <div class="pure-u-1 pure-u-md-11-24">
+ <div id="example10" style="display: block;overflow: scroll;"></div><script>WeatherJs(document.getElementById('example10'))</script>
+</div></div>
+ <p>
+ The primary syntactic differences are:
+</p>
+ <ul>
+ <li>
+ <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">val</code>s for immutable data v.s. mutable <code class="javascript scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">var</code>s.</li>
+ <li>
+ <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">=&gt;</code> v.s. <code class="javascript scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">function</code> to define the callback.</li>
+ <li>
+ Scalatags' <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">pre</code> v.s. <code class="javascript scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">document.createElement(&quot;pre&quot;)</code>
+</li></ul>
+ <p>
+ Overall, they're pretty close, which is a common theme in Scala.js: using Javascript APIs in Scala.js is often as seamless and easy as using them in Javascript itself, and it often looks almost identical.
+</p>
+ <h2 id="dom.extensions" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#dom.extensions" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>dom.extensions</h2>
+ <p>
+ Although the Javascript XMLHttpRequest API is workable, it's kind of awkward and clunky compared to what you're used to in Scala. We create a half-baked object, set some magic properties, and call a magic function, which all has to be done in the correct order or it won't work.
+</p>
+ <p>
+ With Scala.js, we provide a simpler API that is more clearly functional. First, you need to import some things into scope:
+</p>
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">import dom.html
+@JSExport
+object Weather1 extends{
+ @JSExport
+ def main(target: html.Div) = {
+ import dom.ext._
+ import scala.scalajs
+ .concurrent
+ .JSExecutionContext
+ .Implicits
+ .runNow</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/hands-on-scala-js/blob/master/examples/demos/src/main/scala/webpage/Weather1.scala#L7-L19" target="_blank"><i class="fa fa-link "></i></a></pre>
+
+ <p>
+ The first import brings in Scala adapters to several DOM APIs, which allow you to use them more idiomatically from Scala. The second brings in an implicit <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">scala.concurrent.ExecutionContext</code> that we'll need to run our asynchronous operations.
+</p>
+ <p>
+ Then we need the code itself:
+</p>
+ <div class="pure-g">
+ <div class="pure-u-1 pure-u-md-13-24">
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">val url =
+ &quot;http://api.openweathermap.org/&quot; +
+ &quot;data/2.5/weather?q=Singapore&quot;
+
+Ajax.get(url).onSuccess{ case xhr =&gt;
+ target.appendChild(
+ pre(xhr.responseText).render
+ )
+}</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/hands-on-scala-js/blob/master/examples/demos/src/main/scala/webpage/Weather1.scala#L19-L28" target="_blank"><i class="fa fa-link "></i></a></pre>
+</div>
+ <div class="pure-u-1 pure-u-md-11-24">
+ <div style="height: 400px;overflow: scroll;display: block;overflow: scroll;" id="example11"></div><script>webpage.Weather1().main(document.getElementById('example11'))</script>
+</div></div>
+ <p>
+ A single call to <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Ajax.get(...)</code>, with the URL, and we receive a <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">scala.concurrent.Future</code> that we can use to get access to the result when ready. Here we're just using it's <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">onSuccess</code>, but we could use it in a for-comprehension, with <a href="https://github.com/scala/async">Scala Async</a>, or however else we can use normal <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Future</code>s
+</p>
+ <h2 id="ParsingtheData" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#ParsingtheData" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Parsing the Data</h2>
+ <p>
+ We've taken the data-dump from OpenWeatherMap in three different ways, but there's still something missing: we need to actually parse the JSON data to make use of it! Most people don't use their JSON data as strings but as structured documents, querying and extracting only the bits we need.
+</p>
+ <p>
+ First, let's make the call prettyprint the document, so at least we can see what it contains:
+</p>
+ <div class="pure-g">
+ <div class="pure-u-1 pure-u-md-13-24">
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">Ajax.get(url).onSuccess{ case xhr =&gt;
+ target.appendChild(
+ pre(
+ js.JSON.stringify(
+ js.JSON.parse(xhr.responseText),
+ space=4
+ )
+ ).render
+ )
+}</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/hands-on-scala-js/blob/master/examples/demos/src/main/scala/webpage/Weather2.scala#L24-L34" target="_blank"><i class="fa fa-link "></i></a></pre>
+</div>
+ <div class="pure-u-1 pure-u-md-11-24">
+ <div style="height: 400px;display: block;overflow: scroll;" id="example12"></div><script>webpage.Weather2().main(document.getElementById('example12'))</script>
+</div></div>
+ <p>
+ We do this by taking <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">xhr.responseText</code> and putting it through both <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">JSON.parse</code> and <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">JSON.stringify</code>, passing in a <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">space</code> argument to tell <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">JSON.stringify</code> to spread it out nicely.
+</p>
+ <p>
+ Now that we've pretty-printed it, we can immediately see what data it contains and which part of the data we want. Let's change the previous example's <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">onSuccess</code> call to extract the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">weather</code>, <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">temp</code> and <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">humidity</code> and put them in a nice, human-friendly format for us to enjoy:
+</p>
+ <div class="pure-g">
+ <div class="pure-u-1 pure-u-md-13-24">
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">Ajax.get(url).onSuccess{ case xhr =&gt;
+ if (xhr.status == 200) {
+ val json = js.JSON.parse(
+ xhr.responseText
+ )
+ val name = json.name.toString
+ val weather = json.weather
+ .pop()
+ .main
+ .toString
+
+ def celsius(kelvins: js.Dynamic) = {
+ kelvins.asInstanceOf[Double] - 273.15
+ }.toInt
+ val min = celsius(json.main.temp_min)
+ val max = celsius(json.main.temp_max)
+ val humid = json.main.humidity.toString
+ target.appendChild(
+ div(
+ b(&quot;Weather in Singapore:&quot;),
+ ul(
+ li(b(&quot;Country &quot;), name),
+ li(b(&quot;Weather &quot;), weather),
+ li(b(&quot;Temp &quot;), min, &quot; - &quot;, max),
+ li(b(&quot;Humidity &quot;), humid, &quot;%&quot;)
+ )
+ ).render
+ )
+ }
+}</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/hands-on-scala-js/blob/master/examples/demos/src/main/scala/webpage/Weather3.scala#L24-L54" target="_blank"><i class="fa fa-link "></i></a></pre>
+</div>
+ <div class="pure-u-1 pure-u-md-11-24">
+ <div style="height: 400px;overflow: scroll;display: block;overflow: scroll;" id="example13"></div><script>webpage.Weather3().main(document.getElementById('example13'))</script>
+</div></div>
+ <p>
+ First we parse the incoming response, extract a bunch of values from it, and then stick it in a Scalatags fragment for us to see. Note how we can use the names of the attributes e.g. <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">json.name</code> even though <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">name</code> is a dynamic property which you can't be sure exists: this is because <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">json</code> is of type <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">js.Dynamic</code>, which allows us to refer to arbitrary parameters and methods on the underlying object without type-checking.
+</p>
+ <p>
+ Calls on <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">js.Dynamic</code> resolve directly to javascript property/method references, and will fail at run-time with an exception if used wrongly. This is also why we need to call <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">.toString</code> or <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">.asInstanceOf</code>on the values before use: without these casts, the compiler can't be sure what kind of value is underneath the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">js.Dynamic</code> type, and so we have to provide it the guarantee that it is what it needs.
+</p>
+<h1 id="Tyingittogether:WeatherSearch" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#Tyingittogether:WeatherSearch" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Tying it together: Weather Search</h1>
+ <p>
+ At this point we've made a small app that allows us to search from a pre-populated list of words, as well as a small app that lets us query a remote web-service to find the weather in Singapore. The natural thing to do is to put these things together to make a app that will let us search from a list of countries and query the weather in any country we desire. Let's start!
+</p>
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">lazy val box = input(
+ `type`:=&quot;text&quot;,
+ placeholder:=&quot;Type here!&quot;
+).render
+
+lazy val output = div(
+ height:=&quot;400px&quot;,
+ overflowY:=&quot;scroll&quot;
+).render
+
+box.onkeyup = (e: dom.Event) =&gt; {
+ output.innerHTML = &quot;Loading...&quot;
+ fetchWeather(box.value)
+}
+
+target.appendChild(
+ div(
+ h1(&quot;Weather Search&quot;),
+ p(
+ &quot;Enter the name of a city to pull the &quot;,
+ &quot;latest weather data from api.openweathermap.com!&quot;
+ ),
+ p(box),
+ hr, output, hr
+ ).render
+)</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/hands-on-scala-js/blob/master/examples/demos/src/main/scala/webpage/WeatherSearch.scala#L15-L42" target="_blank"><i class="fa fa-link "></i></a></pre>
+
+ <p>
+ This sets up the basics: an input box, an output div, and sets an <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">onkeyup</code> that fetches the weather data each time you hit a key. It then renders all these components and sticks them into the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">target</code> div. This is basically the same stuff we saw in the early examples, with minor tweaks e.g. adding a <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">maxHeight</code> and <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">overflowY:=&quot;scroll&quot;</code> to the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">output</code> box in case the output is too large. Whenever we enter something in the box, we call the function <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">fetchWeather</code>, which is defined as:
+</p>
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">def fetchWeather(query: String) = {
+ val searchUrl =
+ &quot;http://api.openweathermap.org/data/&quot; +
+ &quot;2.5/find?type=like&amp;mode=json&amp;q=&quot; +
+ query
+
+ for{
+ xhr &lt;- Ajax.get(searchUrl)
+ if query == box.value
+ } js.JSON.parse(xhr.responseText).list match{
+ case jsonlist: js.Array[js.Dynamic] =&gt;
+ output.innerHTML = &quot;&quot;
+ showResults(jsonlist, query)
+ case _ =&gt;
+ output.innerHTML = &quot;No Results&quot;
+ }
+}</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/hands-on-scala-js/blob/master/examples/demos/src/main/scala/webpage/WeatherSearch.scala#L42-L60" target="_blank"><i class="fa fa-link "></i></a></pre>
+
+ <p>
+ This is where the actual data fetching happens. It's relatively straightforward: we make an <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Ajax.get</code> request, <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">JSON.parse</code> the response, and feed it into the callback function. We're using a slightly different API from earlier: we now have the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">&quot;type=like&quot;</code> flag, which is documented in the <a href="http://openweathermap.org/current#other">OpenWeatherMap API docs</a> to return multiple results for each city whose name matches your query.
+</p>
+ <p>
+ Notably, before we re-render the results, we check whether the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">query</code> that was passed in is the same value that's in the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">box</code>. This is to prevent a particularly slow ajax call from finishing out-of-order, potentially stomping over the results of more recent searches. We also check whether the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">.list: js.Dynamic</code> property we want is an instance of <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">js.Array</code>: if it isn't, it means we don't have any results to show, and we can skip the whole render-output step.
+</p>
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">def showResults(jsonlist: js.Array[js.Dynamic], query: String) = {
+ for (json &lt;- jsonlist) {
+ val name = json.name.toString
+ val country = json.sys.country.toString
+ val weather = json.weather.pop().main.toString
+
+ def celsius(kelvins: js.Dynamic) = {
+ kelvins.asInstanceOf[Double] - 273.15
+ }.toInt
+
+ val min = celsius(json.main.temp_min)
+ val max = celsius(json.main.temp_max)
+ val humid = json.main.humidity.toString
+ val (first, last) = name.splitAt(query.length)
+ output.appendChild(
+ div(
+ b(span(first, backgroundColor:=&quot;yellow&quot;), last, &quot;, &quot;, country),
+ ul(
+ li(b(&quot;Weather &quot;), weather),
+ li(b(&quot;Temp &quot;), min, &quot; - &quot;, max),
+ li(b(&quot;Humidity &quot;), humid, &quot;%&quot;)
+ )
+ ).render
+ )
+ }
+
+}</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/hands-on-scala-js/blob/master/examples/demos/src/main/scala/webpage/WeatherSearch.scala#L60-L89" target="_blank"><i class="fa fa-link "></i></a></pre>
+
+ <p>
+ Here is the meat and potatoes of this program: every time it gets called with an array of weather-data, we iterate over the cities in that array. It then does a similar sort of data-extraction that we did earlier, putting the results into the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">output</code> div we defined above, including highlighting.
+</p>
+ <div id="example14" style="display: block;overflow: scroll;"></div><script>webpage.WeatherSearch().main(document.getElementById('example14'))</script>
+
+ <p>
+ And that's the working example! Try searching for cities like &quot;Singapore&quot; or &quot;New York&quot; or &quot;San Francisco&quot; and watch as the search narrows as you enter more characters into the text box. Note that the OpenWeatherMap API limits ambiguous searches to about a dozen results, so if a city doesn't turn up in a partial-search, try entering more characters to narrow it down.
+</p>
+<h1 id="InteractiveWebPagesRecap" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#InteractiveWebPagesRecap" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Interactive Web Pages Recap</h1>
+ <p>
+ In this chapter, we've explored the basics of how you can use Scala.js to build interactive web pages. The two main contributions are using Scalatags to render HTML in a concise, safe way, and making Ajax calls to external web services. We combined these two capabilities in a small weather-search app that let a user interactively search for the weather in different cities around the world.</p>
+ <p>
+ Some things you may have noticed in the process:
+</p>
+ <ul>
+ <li>
+ Using Scalatags to render HTML fragments, and managing them at runtime with callbacks and getting/setting properties, is really quite nice</li>
+ <li>
+ Using <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">new dom.XMLHttpRequest</code> to make web requests feels just like the Javascript code to do so</li>
+ <li>
+ Using <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Ajax.get(...)</code> and working with the resultant : <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Future</code> feels a lot cleaner than directly using the Javascript API
+</li></ul>
+ <p>
+ You're at this point reasonably pro</p>
+
+
+ <div class="header scalatex-header scalatex-hover-container" id="TheCommandLine" style="display: block;"><h1 id="TheCommandLine">The Command Line<a class="scalatex-header-link" href="#TheCommandLine" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a></h1><br /></div>
+
+
+<p>
+ We've by this point done a bunch of work in the browser: we've made a small game that runs in the web browser on the HTML5 canvas, and we've made a number of small web-apps that interact with HTML and 3rd party web-services. However, there's a whole other side to the Scala.js ecosystem: the command line interace, or CLI.
+</p>
+<p>
+ Even though the goal of Scala.js is to get your code running in peoples' browsers, it still is useful to be familiar with the things that you can do in the command-line. It is much easier to write-code-print-results in the command line without having to set up a HTML page and opening a browser to test it, and this extends to things like unit test suites, which are almost exclusively run in the command-line using <code>sbt ~test</code> to keep re-running them when the code changes.
+</p>
+<p>
+ The Scala.js command line is where you go to do things to your Scala.js code. Although Scala.js comes with <a href="http://www.scala-js.org/downloads.html">standalone executables</a> that can be used from any shell (sh, bash, zsh, etc.) the primary supported way of setting up, compiling and testing your Scala.js applications is through <a href="http://www.scala-sbt.org/">SBT</a>: Scala's primary build tool.
+</p>
+<p>
+ You've already used fragments of the Scala.js CLI in earlier chapters of this book: <code>~fastOptJS</code> is what you used for development, <code>fullOptJS</code> for publishing. Apart from these, Scala.js allows you to execute code via <a href="https://developer.mozilla.org/en-US/docs/Mozilla/Projects/Rhino">Rhino</a>/<a href="http://nodejs.org/">Node.js</a>/<a href="http://phantomjs.org/">PhantomJS</a> from the command-line, as well as running test-suites under the same conditions. This chapter will go deeper into the various things you can do with the Scala.js command line:
+</p>
+<ul>
+ <li>
+ <code>compile</code>: converting code from Scala source into not-yet-executable Scala.js IR</li>
+ <li>
+ <code>package</code>: bundling up our Scala.js IR into a <code>.jar</code> file, for publishing or distribution as a library</li>
+ <li>
+ <code>fastOptJS</code>: aggregating our Scala.js IR and converting it to a <code>.js</code> executable.</li>
+ <li>
+ <code>fullOptJS</code>: aggregating our Scala.js IR and converting it to a smaller, faster <code>.js</code> executable.</li>
+ <li>
+ <code>run</code>: run your compiled Scala.js code as Javascript in Rhino, Node.js or Phantom.js</li>
+ <li>
+ <code>test</code>: run your compiled Scala.js code as a test suite in Rhino, Node.js or Phantom.js
+</li></ul>
+<p>
+ Now, let's open up your SBT console in your Scala.js app
+</p>
+<pre><code class="bash scalatex-highlight-js">&gt;
+</code></pre>
+<p>
+ And let's get started!
+</p>
+<h1 id="Commands" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#Commands" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Commands</h1>
+ <p>
+ The most fundamental thing you can do in the Scala.js CLI is to compile your code. Let's go through the various mechanisms of &quot;compiling&quot; things:
+</p>
+ <h2 id="ThecompileCommand" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#ThecompileCommand" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>The compile Command</h2>
+ <pre><code class="bash scalatex-highlight-js">&gt; compile
+</code></pre>
+ <p>
+ Just as you can <code>compile</code> Scala-JVM projects, you can also <code>compile</code> Scala.js projects. Like compiling Scala-JVM projects, this leaves a bunch of <code>.class</code> files in your <code>target</code> directory. Unlike Scala-JVM projects, this also leaves a bunch of <code>.sjsir</code> files, which correspond to your Scala.js output files:
+</p>
+ <pre><code class="bash scalatex-highlight-js">classes
+└── example
+ ├── Point$.class
+ ├── Point$.sjsir
+ ├── Point.class
+ ├── Point.sjsir
+ ├── ScalaJSExample$$anonfun$main$1.class
+ ├── ScalaJSExample$$anonfun$run$1.class
+ ├── ScalaJSExample$.class
+ ├── ScalaJSExample$.sjsir
+ └── ScalaJSExample.class
+</code></pre>
+ <p>
+ However, unlike on Scala-JVM, you cannot directly run the <code>.sjsir</code> files spat out by the Scala.js compiler. These files are an Intermediate Representation, which needs to go through the next step in the compilation pipeline before being turned into Javascript.
+</p>
+ <h2 id="ThepackageCommand" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#ThepackageCommand" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>The package Command</h2>
+ <pre><code class="bash scalatex-highlight-js">&gt; package</code></pre>
+ <p>
+ Also like on Scala-JVM, Scala.js also supports the <code>package</code> command. This command generates a <code>.jar</code> like it does in Scala-JVM, except this version appends this weird <code>_sjs0.6</code> suffix.
+</p>
+ <pre><code class="bash scalatex-highlight-js">target/scala-2.11/
+└── example_sjs0.6_2.11-0.1-SNAPSHOT.jar
+</code></pre>
+ <p>
+ The purpose of this suffix is to link the compiled <code>.jar</code> file to the version of Scala.js used to compile it. This allows you to make sure that you don't accidentally depend on a version of a jar that is incompatible with your current version.
+</p>
+ <p>
+ Again, unlike Scala-JVM, these <code>.jar</code> files are not directly executable: the <code>.sjsir</code> files need further processing to turn into runnable Javascript. Instead, their sole purpose is to hold bundles of <code>.sjsir</code> files to be published and depended-upon: they can be <code>publishLocal</code>ed to be used by other projects on your computer, or <code>publishSigned</code>ed to <a href="http://search.maven.org/">Maven Central</a>, just like any Scala-JVM project.
+</p>
+ <h2 id="ThefastOptJSCommand" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#ThefastOptJSCommand" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>The fastOptJS Command</h2>
+ <pre><code class="bash scalatex-highlight-js">&gt; fastOptJS</code></pre>
+ <p>
+ <code>fastOptJS</code> is a command we've used in earlier chapters. It basically runs the <a href="#FastOptimization">Fast Optimization</a> stage of the compilation pipeline. This results in a moderately-sized executable, which you can then load in the browser with a <code class="html scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">&lt;script&gt;</code> tag and run.
+</p>
+ <p>
+ This is the first phase which actually results in an executable blob of Javascript. I won't go into much detail about this command: you've used it before, and more details about the particular kind of optimization and how it fits into the large process is available in the chapter on The Compilation Pipeline. Nonetheless, it's fast, produces not-too-huge output code, and is what you typically use for iterative development in the browser.
+</p>
+ <h2 id="ThefullOptJSCommand" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#ThefullOptJSCommand" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>The fullOptJS Command</h2>
+ <pre><code class="bash scalatex-highlight-js">&gt; fullOptJS</code></pre>
+ <p>
+ <code>fullOptJS</code> is another command that we've seen before: it performs an aggressive, somewhat slower <a href="#FullOptimization">Full Optimization</a> pass on the generated Javascript. This results in a much smaller executable Javascript blob, which you can also load via a <code class="html scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">&lt;script&gt;</code> tag and run.</p>
+ <p>
+ Again, I won't go into much details, as exactly what this optimization does is described in the chapter on the Compilation Pipeline. This command is somewhat too-slow to be running during iterative development, and is instead typically used just before deployment to minimize the size of the file your users have to download.
+</p>
+ <h2 id="TherunCommand" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#TherunCommand" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>The run Command</h2>
+ <pre><code class="bash scalatex-highlight-js">&gt; run</code></pre>
+ <p>
+ Here's something you haven't seen before: the <code>run</code> command gives you the ability to run a Scala.js program from the command line. This prints its output to standard output (i.e. the terminal). Like Scala-JVM, you need a <code>main</code> method to run to kick off your program. Unlike Scala-JVM, the main method is marked on an <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">object</code> which <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">extends scala.scalajs.js.JSApp</code>, e.g.
+</p>
+ <pre><code class="scala scalatex-highlight-js">// src/main/scala/RunMe.scala
+object RunMe extends scala.scalajs.js.JSApp{
+ def main(): Unit = {
+ println(&quot;Hello World!&quot;)
+ println(&quot;In Scala.js, (1.0).toString is ${(1.0).toString}!&quot;)
+ }
+}
+</code></pre>
+ <p>
+ Running <code>sbt run</code> with the above Scala.js code will print out
+</p>
+ <pre><code class="bash scalatex-highlight-js">Hello World!
+In Scala.js, (1.0).toString is 1!
+</code></pre>
+ <p>
+ This exhibits the weirdness of <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Double.toString</code> in Scala.js, which is one of the few ways in which <a href="#DeviationsfromScala-JVM">Scala.js deviates from Scala-JVM</a>. This also shows us we're really running on Scala.js: on Scala-JVM, <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">(1.0).toString</code> returns <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">&quot;1.0&quot;</code> rather than <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">&quot;1&quot;</code>!
+</p>
+ <p>
+ One thing you may be wondering is: when you run a Scala.js program in the terminal, how does it execute the output Javascript? What about the DOM? and Ajax calls? Can it access the filesystem? The answer to all these questions is &quot;it depends&quot;: it turns out there are multiple ways you can run Scala.js from the command-line, dictated by the <i>stage</i> and the <i>environment</i>.
+</p>
+ <p>
+ By default, runs are done in the <code>PreLinkStage</code>, which uses the Rhino environment. With the sbt setting <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">jsDependencies += RuntimeDOM</code>, the Scala.js runner will automatically set up <b>env.js</b> in Rhino so that you have access to an emulation of the DOM API.
+</p>
+ <p>
+ You can enable a different stage, <code>FastOptStage</code> or <code>FullOptStage</code>, with the following sbt command:
+</p>
+ <pre><code class="bash scalatex-highlight-js">&gt; set scalaJSStage in Global := FastOptStage
+</code></pre>
+ <p>
+ In <code>FastOptStage</code> and <code>FullOptStage</code>, the environment can be one of <b>Node.js</b> or <b>PhantomJS</b>. These JavaScript VMs must be installed separately.
+</p>
+ <ul>
+ <li>
+ By default, Node.js is used.</li>
+ <li>
+ With the sbt setting <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">jsDependencies += RuntimeDOM</code>, PhantomJS is used instead, so that a headless DOM is available.
+</li></ul>
+ <p>
+ Typically, the best way to get started is using Rhino, since it's setup-free, and setting up Node.js or PhantomJS later as necessary. The next two sections elaborate on the differences between these ways of running your code. Check out the later sections on <a href="#HeadlessRuntimes">Headless Runtimes</a> and <a href="#Stages">Stages</a> to learn more about the other settings and why you would want to use them.
+</p>
+ <h2 id="ThetestCommand" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#ThetestCommand" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>The test Command</h2>
+ <pre><code class="bash scalatex-highlight-js">&gt; test
+</code></pre>
+ <p>
+ The <code>sbt test</code> command behaves very similarly to <code>sbt run</code>. It also runs on Rhino, Node.js or PhantomJS, dependending of the stage and the dependency on the DOM.</p>
+ <p>
+ The difference is that instead of simply running your <code>main</code> method, <code>sbt test</code> runs whatever test-suite you have set-up, which will look through your <code>tests/</code> folder to find suites of tests it has to run, and aggregate the results formatted nicely for you to see. The exact operation of this depends on which testing library you're using.</p>
+ <p>
+ We won't spend much time talking about <code>sbt test</code> here. Not because it's not important: it most certainly is! Rather, we will be spending a good amount of time setting up tests in <a href="#CrossPublishingLibraries">the next chapter</a>, so feel free to jump ahead if you want to see an example usage of <code>sbt test</code>.
+</p>
+<h1 id="HeadlessRuntimes" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#HeadlessRuntimes" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Headless Runtimes</h1>
+ <ul>
+ <li>
+ <a href="https://developer.mozilla.org/en-US/docs/Mozilla/Projects/Rhino">Rhino</a> is the default way of running Scala.js applications. The upside of using Rhino is that it is pure-Java, and doesn't need any additional binaries or installation. The downside of using Rhino is that it is slow: maybe a hundred times slower than the alternatives, making it not suitable for running long-running, compute-intensive programs.</li>
+ <li>
+ <a href="http://nodejs.org/">Node.js</a>, a relatively new Javascript runtime based on Google's V8 Javascript engine, Node.js lets you run your Scala.js application from the command line much faster than in Rhino, with performance that matches that of modern browsers. However, you need to separately <a href="http://nodejs.org/download/">install Node.js</a> in order to use it. Node.js does not have DOM or browser-related functionality. You need to set the stage with <code>set scalaJSStage in Global := FastOptStage</code> to run using Node.js.</li>
+ <li>
+ <a href="http://phantomjs.org/">PhantomJS</a> is a headless Webkit browser. This means that unlike Node.js, PhantomJS provides you with a full DOM and all its APIs to use in your tests, if you wish to e.g. test interactions with the HTML of the web page. On the other hand, it is somewhat slower than Node.js, though still much faster than Rhino. Like Node.js, it needs to be installed separately. You need to set the stage with <code>set scalaJSStage in Global := FastOptStage</code>, as well as setting the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">jsDependencies += RuntimeDOM</code> flag in your SBT configuration, to use PhantomJS.</li></ul>
+ <p>
+ These are your three options to run your Scala.js code via the command-line. Generally, it's easiest to get started with Rhino since it's the default and requires no setup, though you will quickly find it worthwhile to setup Node.js or PhantomJS to speed up your runs and tests.
+</p>
+<h1 id="Stages" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#Stages" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Stages</h1>
+ <p>
+ Let us recap the three different stages of execution, and what they mean.
+</p>
+ <ul>
+ <li>
+ <code>PreLinkStage</code> (the default): this does not perform any optimization of the output Scala.js files, and does lazy-loading to minimize the amount of files being loading into the interpreter. This is necessary for Rhino because it can't handle large blobs of Javascript, but doesn't map to any compilation mode you'd use for the browser.</li>
+ <li>
+ <code>FastOptStage</code>: this performs the same compilation and optimization as <code>sbt fastOptJS</code>, as described under Fast Optimizations. It then takes the entire output executable (which probably weighs around 1mb) and hands it to Node.js or PhantomJS, which then run it.</li>
+ <li>
+ <code>FullOptStage</code>: this performs the same compilation and optimization as <code>sbt fullOptJS</code>, as described under Full Optimizations. This takes longer to run than the <code>FastOptStage</code>, and results in a smaller/faster executable. Practically speaking, this size/speed advantage does not matter from the command line, but <code>FullOptStage</code> is still useful to verify that the behavior does not change (it shouldn't!) under the aggressive full optimization. This is typically used in continuous integration builds, but rarely manually.
+</li></ul>
+<hr />
+
+<p>
+ Hopefully by this point you more-or-less know your way around the Scala.js command-line tools. As mentioned earlier, command line tools make it much easier to run a bunch of Scala.js code, e.g. unit tests, without having to muck around with HTML pages or refreshing the browser. That will come in handy soon, as we're next going to learn to publish a standalone, distributable Scala.js module. And what's a module without tests...</p>
+
+ <div class="header scalatex-header scalatex-hover-container" id="CrossPublishingLibraries" style="display: block;"><h1 id="CrossPublishingLibraries">Cross Publishing Libraries<a class="scalatex-header-link" href="#CrossPublishingLibraries" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a></h1><br /></div>
+
+<p>
+ We've spent several chapters exploring the experience of making web apps using Scala.js, but any large application (web or not!) likely relies on a host of libraries in order to implement large chunks of its functionality. Ideally these libraries would be re-usable, and can be shared among different projects, teams or even companies.
+</p>
+<p>
+ Not all code is developed in the browser. Maybe you want to run simple snippets of Scala.js which don't interact with the browser at all, and having to keep a browser open is an overkill. Maybe you want to write unit tests for your browser-destined code, so you can verify that it works without firing up Chrome. Maybe it's not a simple script but a re-distributable library, and you want to run the same command-line unit tests on both Scala.js and Scala-JVM to verify that the behavior is identical. This chapter will go through all these cases.
+
+</p>
+<h1 id="ASimpleCross-BuiltModule" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#ASimpleCross-BuiltModule" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>A Simple Cross-Built Module</h1>
+
+ <p>
+ As always, we will start with an example: in this case a toy library whose sole purpose in life is to take a series of timestamps (milliseconds UTC) and format them into a single, newline-delimited string. This is what the project layout looks like:
+</p>
+ <pre><code class="bash scalatex-highlight-js">$ tree
+.
+├── build.sbt
+├── js
+│   ├── shared/main/scala/simple/Simple.scala
+│   └── src/main/scala/simple/Platform.scala
+├── jvm
+│   ├── shared -&gt; ../js/shared
+│   └── src/main/scala/simple/Platform.scala
+└── project/ build.sbt</code></pre>
+ <p>
+ In this case the two <code>shared/</code> folders are symlinked together to keep them in sync. This can be done by first creating <code>js/shared</code>, and then running
+</p>
+ <pre><code class="bash scalatex-highlight-js">$ ln -s ../js/shared jvm/shared
+</code></pre>
+ <h2 id="BuildConfiguration" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#BuildConfiguration" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Build Configuration</h2>
+ <p>
+ From the bash shell in the project root. Let's take a look at the various files that make up this project. First, the <code>build.sbt</code> files:
+</p>
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">/*project/build.sbt*/
+addSbtPlugin(&quot;org.scala-js&quot; % &quot;sbt-scalajs&quot; % &quot;0.6.0-RC2&quot;)</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/hands-on-scala-js/blob/master/examples/crossBuilds/simple/project/build.sbt#L0-L2" target="_blank"><i class="fa fa-link "></i></a></pre>
+
+ <p>
+ The <code>project/build.sbt</code> file is uneventful: it simply includes the Scala.js SBT plugin. However, the <code>build.sbt</code> file is a bit more interesting:
+</p>
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">val sharedSettings = Seq(
+ unmanagedSourceDirectories in Compile +=
+ baseDirectory.value / &quot;shared&quot; / &quot;main&quot; / &quot;scala&quot;
+)
+
+lazy val js = project.in(file(&quot;js&quot;)).enablePlugins(ScalaJSPlugin)
+ .settings(sharedSettings:_*)
+
+lazy val jvm = project.in(file(&quot;jvm&quot;)).settings(sharedSettings:_*)</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/hands-on-scala-js/blob/master/examples/crossBuilds/simple/build.sbt#L0-L9" target="_blank"><i class="fa fa-link "></i></a></pre>
+
+ <p>
+ Unlike the equivalent <code>build.sbt</code> files you saw in earlier chapters, this does not simply enable the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">ScalaJSPlugin</code> to the root project. Rather, it sets up two projects: one in the <code>js/</code> folder and one in the <code>jvm/</code> folder, with the <code>js/</code> version getting the Scala.js plugin. To both of these, we add <code>shared/main/scala</code> to the list of source directories. This means that both projects will pick up the sources we symlinked between <code>js/shared/</code> and <code>jvm/shared/</code>.
+</p>
+ <h2 id="SourceFiles" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#SourceFiles" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Source Files</h2>
+
+ <p>
+ Now, let's look at the contents of the <code>.scala</code> files that make up the meat of this project:
+</p>
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">/*shared/main/scala/simple/Simple.scala*/
+package simple
+object Simple{
+ def formatTimes(timestamps: Seq[Long]): Seq[String] = {
+ timestamps.map(Platform.format).map(_.dropRight(5))
+ }
+}</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/hands-on-scala-js/blob/master/examples/crossBuilds/simple/js/shared/main/scala/simple/Simple.scala#L0-L7" target="_blank"><i class="fa fa-link "></i></a></pre>
+
+ <p>
+ In <code>Simple.scala</code> we have the shared, cross-platform API of our library: a single <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">object</code> with a single method <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">def</code> which does what we want, which can then be used in either Scala.js or Scala-JVM. In general, you can put as much shared logic here as you want: classes, objects, methods, anything that can run on both Javascript and on the JVM. We're chopping off the last 5 characters (the milliseconds) to keep the formatted dates slightly less verbose.
+</p>
+ <p>
+ However, when it comes to actually formatting the date, we have a problem: Javascript and Java provide different utilities for formatting dates! They both let you format them, but they provide different APIs. Thus, to do the formatting of each individual date, we call out to the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Platform.format</code> function, which is implemented twice: once in <code>js/</code> and once in <code>jvm/</code>:
+</p>
+ <div class="pure-g">
+ <div class="pure-u-1 pure-u-md-1-2">
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">//js/src/main/scala/simple/Platform.scala
+package simple
+import scalajs.js
+
+object Platform extends js.JSApp{
+ def format(ts: Long) = {
+ new js.Date(ts).toISOString()
+ }
+ def main() = {
+ val times = Seq(
+ 0L,
+ 1L &lt;&lt; 32
+ )
+ println(&quot;Running on JS! &quot; + 1.0d)
+ println(Simple.formatTimes(times))
+ }
+}</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/hands-on-scala-js/blob/master/examples/crossBuilds/simple/js/src/main/scala/simple/Platform.scala#L0-L17" target="_blank"><i class="fa fa-link "></i></a></pre>
+</div>
+ <div class="pure-u-1 pure-u-md-1-2">
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">//jvm/src/main/scala/simple/Platform.scala
+package simple
+import java.text.SimpleDateFormat
+import java.util.{TimeZone, Locale}
+
+object Platform{
+ def format(ts: Long) = {
+ val fmt = new SimpleDateFormat(
+ &quot;yyyy-MM-dd'T'HH:mm:ss.sss'Z'&quot;
+ )
+ fmt.setTimeZone(TimeZone.getTimeZone(&quot;UTC&quot;))
+ fmt.format(new java.util.Date(ts))
+ }
+ def main(args: Array[String]) = {
+ val times = Seq(
+ 0L,
+ 1L &lt;&lt; 32
+ )
+ println(&quot;Running on JVM! &quot; + 1.0d)
+ println(Simple.formatTimes(times))
+ }
+}</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/hands-on-scala-js/blob/master/examples/crossBuilds/simple/jvm/src/main/scala/simple/Platform.scala#L0-L22" target="_blank"><i class="fa fa-link "></i></a></pre>
+</div></div>
+ <p>
+ In the <code>js/</code> version, we are using the Javascript <code class="javascript scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Date</code> object to take the millis and do what we want. In the <code>jvm/</code> version, we instead use <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">java.text.SimpleDateFormat</code> with a custom formatter (The syntax is defined <a href="http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html">here</a>).
+</p>
+ <p>
+ Again, you can put as much platform-specific logic in these files as you want, to account for differences in the available APIs. Maybe you want to use <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse">Json.parse</a> for parsing JSON blobs in <code>js/</code>, but <a href="http://jackson.codehaus.org/">Jackson</a> or <a href="https://code.google.com/p/google-gson/">GSON</a> for parsing them in <code>jvm/</code>.</p>
+ <p>
+ Lastly, you'll also have noticed the two identical <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">main</code> methods in the platform-specific code. This is an implementation detail around the fact that Scala.js picks up the main method differently from Scala-JVM, using <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">js.JSApp</code> instead of looking for a <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">main(args: Array[String]): Unit</code> method. These two main methods allow us to test our implementations</p>
+ <h2 id="RunningtheModule" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#RunningtheModule" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Running the Module</h2>
+ <pre><code class="bash scalatex-highlight-js">&gt; ; js/run; jvm/run
+[info] Running simple.Platform
+Running on JS! 1
+November 2, 2014 2:58:48 PM PST
+November 2, 2014 2:58:49 PM PST
+[success] Total time: 4 s, completed Nov 2, 2014 2:58:48 PM
+[info] Running simple.Platform
+Running on JVM! 1.0
+November 2, 2014 2:58:49 PM PST
+November 2, 2014 2:58:50 PM PST
+[success] Total time: 0 s, completed Nov 2, 2014 2:58:49 PM
+</code></pre>
+ <p>
+ As you can see, both runs printed the same results, modulo three things:
+</p>
+ <ul>
+ <li>
+ The &quot;Running on XXX!&quot; statement which shows us we're actually running on two platforms.</li>
+ <li>
+ The other hint is the time taken: the second run is instant while the first takes three seconds! This is because by default we run on <a href="https://developer.mozilla.org/en-US/docs/Mozilla/Projects/Rhino">Rhino</a>, which is a simple interpreter hundreds of times slower than running code natively on the JVM.</li>
+ <li>
+ In Scala-JVM the double 1.0 is printed as <code>1.0</code>, while in Scala.js it's printed as <code>1</code>. This is one of a small number of differences between Scala.js and Scala-JVM, and verifies that we are indeed running on both platforms!
+</li></ul>
+ <p>
+ You've by this point set up a basic cross-building Scala.js/Scala-JVM project!</p>
+
+
+ <div class="header scalatex-header scalatex-hover-container" id="IntegratingClient-Server" style="display: block;"><h1 id="IntegratingClient-Server">Integrating Client-Server<a class="scalatex-header-link" href="#IntegratingClient-Server" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a></h1><br /></div>
+
+
+
+<p>
+ Historically, sharing code across client &amp; server has been a holy-grail for web development. There are many things which have made it hard in the past:
+</p>
+<ul>
+ <li>
+ Javascript on the client v.s. PHP/Perl/Python/Ruby/Java on the server</li>
+ <li>
+ Most back-ends make heavy use of C extensions, and front-end code was tightly coupled to the DOM. Even if you manage to port the main language</li></ul>
+<p>
+ There have been some attempts in recent years with more traction: Node.js, for example, has been very successful at running Javascript on the server, the Clojure/Clojurescript community has their own version of cross-built code, and there are a number of smaller, more esoteric platforms.
+</p>
+<p>
+ Scala.js lets you share code between client and server relatively straightforwardly. As we saw in the previous chapter, where we made a shared module. Let's work to turn that shared module into a working client-server application!
+</p>
+
+
+<h1 id="AClient-ServerSetup" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#AClient-ServerSetup" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>A Client-Server Setup</h1>
+ <p>
+ Getting started with client-server integration, let's go with the simplest configuration possible: a Spray server and a Scala.js client. Most of the other web-frameworks (<a href="https://www.playframework.com/">Play</a>, <a href="http://www.scalatra.org/">Scalatra</a>, etc.) will have more complex configurations, but the basic mechanism of wiring up Scala.js to your web framework will be the same. Our project will look like this:
+</p>
+ <pre><code class="bash scalatex-highlight-js">$ tree
+.
+├── build.sbt
+├── client
+│   ├── shared/main/scala/simple/FileData.scala
+│   └── src/main/scala/simple/Client.scala
+├── project
+│   └── build.sbt
+└── server
+ ├── shared -&gt; ../client/shared
+ └── src/main/scala/simple
+ ├── Page.scala
+ └── Server.scala
+</code></pre>
+ <p>
+ First, let's do the wiring in <code>build.sbt</code>:
+</p>
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">import NativePackagerKeys._
+val sharedSettings = Seq(
+ unmanagedSourceDirectories in Compile +=
+ baseDirectory.value / &quot;shared&quot; / &quot;main&quot; / &quot;scala&quot;,
+ libraryDependencies ++= Seq(
+ &quot;com.lihaoyi&quot; %%% &quot;scalatags&quot; % &quot;0.4.5&quot;,
+ &quot;com.lihaoyi&quot; %%% &quot;upickle&quot; % &quot;0.2.7&quot;
+ ),
+ scalaVersion := &quot;2.11.5&quot;
+)
+
+lazy val client = project.in(file(&quot;client&quot;))
+ .enablePlugins(ScalaJSPlugin)
+ .settings(sharedSettings:_*)
+ .settings(
+ libraryDependencies ++= Seq(
+ &quot;org.scala-js&quot; %%% &quot;scalajs-dom&quot; % &quot;0.8.0&quot;
+ )
+)
+
+lazy val server = project.in(file(&quot;server&quot;))
+ .settings(sharedSettings:_*)
+ .settings(packageArchetype.java_application:_*)
+ .settings(
+ libraryDependencies ++= Seq(
+ &quot;io.spray&quot; %% &quot;spray-can&quot; % &quot;1.3.2&quot;,
+ &quot;io.spray&quot; %% &quot;spray-routing&quot; % &quot;1.3.2&quot;,
+ &quot;com.typesafe.akka&quot; %% &quot;akka-actor&quot; % &quot;2.3.6&quot;
+ ),
+ (resources in Compile) += (fastOptJS in (client, Compile)).value.data
+)</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/hands-on-scala-js/blob/master/examples/crossBuilds/clientserver/build.sbt#L0-L31" target="_blank"><i class="fa fa-link "></i></a></pre>
+
+ <p>
+ We have two projects: <code>client</code> and <code>server</code>, one of which is a Scala.js project (indicated by the presence of <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">enablePlugins(ScalaJSPlugin)</code>). Both projects share a number of settings: the presence of the <code>shared/</code> folder, which shared code can live in (similar to what we saw in <a href="#CrossPublishingLibraries">Cross Publishing Libraries</a>) and the settings to add <a href="https://github.com/lihaoyi/scalatags">Scalatags</a> and <a href="https://github.com/lihaoyi/upickle">uPickle</a> to the build. Note that those two dependencies use the triple <code>%%%</code> instead of the double <code>%%</code> to declare: this means that for each dependency, we will pull in the Scala-JVM or Scala.js version depending on whether it's being used in a Scala.js project. Note also the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">packageArchetype.java_application</code> setting, which isn't strictly necessary depending on what you want to do with the application, but this example needs it as part of the deployment to Heroku.
+</p>
+ <p>
+ The <code>client</code> subproject is uneventful, with a dependency on the by-now-familiar <code>scalajs-dom</code> library. The <code>server</code> project, on the other hand, is interesting: it contains the dependencies required for us to set up out Spray server, and one additional thing: we add the output of <code>fastOptJS</code> from the client to the <code>resources</code> on the server. This will allow the <code>server</code> to serve the compiled-javascript from our <code>client</code> project from its resources.
+</p>
+ <p>
+ Next, let's kick off the Spray server in our Scala-JVM main method:
+
+</p>
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">package simple
+
+import akka.actor.ActorSystem
+import spray.http.{HttpEntity, MediaTypes}
+import spray.routing.SimpleRoutingApp
+
+import scala.util.Properties
+
+object Server extends SimpleRoutingApp{
+ def main(args: Array[String]): Unit = {
+ implicit val system = ActorSystem()
+ val port = Properties.envOrElse(&quot;PORT&quot;, &quot;8080&quot;).toInt
+ startServer(&quot;0.0.0.0&quot;, port = port){
+ get{
+ pathSingleSlash{
+ complete{
+ HttpEntity(
+ MediaTypes.`text/html`,
+ Page.skeleton.render
+ )
+ }
+ } ~
+ getFromResourceDirectory(&quot;&quot;)
+ } ~
+ post{
+ path(&quot;ajax&quot; / &quot;list&quot;){
+ extract(_.request.entity.asString) { e =&gt;
+ complete {
+ upickle.write(list(e))
+ }
+ }
+ }
+ }
+ }
+ }
+ def list(path: String) = {
+ val (dir, last) = path.splitAt(path.lastIndexOf(&quot;/&quot;) + 1)
+ val files =
+ Option(new java.io.File(&quot;./&quot; + dir).listFiles())
+ .toSeq.flatten
+ for{
+ f &lt;- files
+ if f.getName.startsWith(last)
+ } yield FileData(f.getName, f.length())
+ }
+}</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/hands-on-scala-js/blob/master/examples/crossBuilds/clientserver/server/src/main/scala/simple/Server.scala#L0-L46" target="_blank"><i class="fa fa-link "></i></a></pre>
+
+ <p>
+ This is a not-very-interesting <a href="http://spray.io/documentation/1.2.2/spray-routing/">spray-routing</a> application: we set up a server on <code>localhost:8080</code>, have the root URL serve the main page on GET, and have other GET URLs serve resources. This includes the <code>js-fastopt.js</code> file that is now in our resources because of our <code>build.sbt</code> config earlier! We also add a POST route to allow the client ask the server to list files various directories.
+</p>
+ <p>
+ The HTML template <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Page.skeleton</code> is not shown above; I put it in a separate file for neatness:
+</p>
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">package simple
+import scalatags.Text.all._
+
+object Page{
+ val boot =
+ &quot;simple.Client().main(document.getElementById('contents'))&quot;
+ val skeleton =
+ html(
+ head(
+ script(src:=&quot;/client-fastopt.js&quot;),
+ link(
+ rel:=&quot;stylesheet&quot;,
+ href:=&quot;https://cdnjs.cloudflare.com/ajax/libs/pure/0.5.0/pure-min.css&quot;
+ )
+ ),
+ body(
+ onload:=boot,
+ div(id:=&quot;contents&quot;)
+ )
+ )
+}</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/hands-on-scala-js/blob/master/examples/crossBuilds/clientserver/server/src/main/scala/simple/Page.scala#L0-L21" target="_blank"><i class="fa fa-link "></i></a></pre>
+
+ <p>
+ This is a typical <a href="https://github.com/lihaoyi/scalatags">Scalatags</a> HTML snippet. Note that since we're serving it directly from the server in Scala code, we do not need to leave a <code>.html</code> file somewhere on the filesystem! We can declare all HTML, including the skeleton of the page, in Scalatags. Otherwise it's the same as what we saw in earlier chapters: A simple HTML page which includes a script tag to run our Scala.js application.</p>
+ <p>
+ Lastly, we'll set up the Scala.js main method, which we are calling in the <code class="html scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">&lt;script&gt;</code> tag above to kick off the client-side application.
+</p>
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">package simple
+
+import scalatags.JsDom.all._
+import scalajs.concurrent.JSExecutionContext.Implicits.runNow
+import org.scalajs.dom
+import dom.extensions.Ajax
+import scalajs.js.annotation.JSExport
+
+@JSExport
+object Client extends{
+ @JSExport
+ def main(container: html.Div) = {
+ val inputBox = input.render
+ val outputBox = ul.render
+ def update() = Ajax.post(&quot;/ajax/list&quot;, inputBox.value).foreach{ xhr =&gt;
+ val data = upickle.read[Seq[FileData]](xhr.responseText)
+ outputBox.innerHTML = &quot;&quot;
+ for(FileData(name, size) &lt;- data){
+ outputBox.appendChild(
+ li(
+ b(name), &quot; - &quot;, size, &quot; bytes&quot;
+ ).render
+ )
+ }
+ }
+ inputBox.onkeyup = (e: dom.Event) =&gt; update()
+ update()
+ container.appendChild(
+ div(
+ h1(&quot;File Search&quot;),
+ inputBox,
+ outputBox
+ ).render
+ )
+ }
+}</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/hands-on-scala-js/blob/master/examples/crossBuilds/clientserver/client/src/main/scala/simple/Client.scala#L0-L36" target="_blank"><i class="fa fa-link "></i></a></pre>
+
+ <p>
+ Again this is a simple Scala.js application, not unlike what we saw in earlier chapters. However, there is one difference: earlier, we made our Ajax calls to <code>api.openweathermap.org/...</code>. Here, we're making it to <code>/ajax</code>: the same server the page is served from!
+</p>
+ <p>
+ You may have noticed in both client and server, we have made reference to a mysterious <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">FileData</code> type which holds the name and size of each file. <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">FileData</code> is defined in the <code>shared/</code> folder, so it can be accessed from both Scala-JVM and Scala.js:
+
+</p>
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">package simple
+
+case class FileData(name: String, size: Long)</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/hands-on-scala-js/blob/master/examples/crossBuilds/clientserver/client/shared/main/scala/simple/FileData.scala#L0-L3" target="_blank"><i class="fa fa-link "></i></a></pre>
+
+ <p>
+ Now, if we go to the browser at <code>localhost:8080</code>, we should see our web-page!
+</p>
+ <iframe id="heroku1" style="width: 100%;height: 350px;" frameBorder="0"></iframe>
+ <script>
+ window.addEventListener("load", function(){
+ document.getElementById("heroku1").src = 'https://hands-on-scala-js.herokuapp.com/'
+ })
+</script>
+
+
+ <p>
+ This is a real, live example running on a <a href="https://hands-on-scala-js.herokuapp.com/">Heroku server</a>. Feel free to poke around and explore the filesystem on the server, just to convince yourself that this actually works and is not just a mock up.
+</p>
+<h1 id="Client-ServerReflections" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#Client-ServerReflections" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Client-Server Reflections</h1>
+ <p>
+ By now you've already set up your first client-server application. However, it might not be immediately clear what we've done and why it's interesting! Here are some points to consider.
+</p>
+ <h2 id="SharedTemplating" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#SharedTemplating" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Shared Templating</h2>
+
+ <p>
+ In both the client code and the server code, we made use of the same Scalatags HTML generation library. This is pretty neat: transferring rendering logic between client and server no longer means an annoying/messy rewrite! You can simply C&amp;P the Scalatags snippet over. That means it's easy if you want to e.g. shift the logic from one side to the other in order to optimize for performance or time-to-load or other things.</p>
+ <p>
+ One thing to take note of is that we're actually using subtly <i>different</i> implementations of Scalatags on both sides: on the server, we're importing from <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">scalatags.Text</code>, while on the client we're using <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">scalatags.JsDom</code>. The <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Text</code> backend renders directly to Strings, and is available on both Scala-JVM and Scala.js. The <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">JsDom</code> backend, on the other hand, renders to <a href="https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement">html.Element</a>-s which only exist on Scala.js. Thus while on the client you can do things like attach event listeners to the rendered <a href="https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement">html.Element</a> objects, or checking their runtime <code>.value</code>, on the server you can't. And that's exactly what you want!
+</p>
+ <h2 id="SharedCode" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#SharedCode" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Shared Code</h2>
+ <p>
+ One thing that we skimmed over is the fact that we could easily define our <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">case class FileData(name: String, size: Long)</code> in the <code>shared/</code> folder, and have it instantly and consistently available on both client and server. This perhaps does not seem so amazing: we've already done many similar things earlier when we were building Cross-platform Modules. Nevertheless, in the context of web development, it is a relatively novel idea to be able to ad-hoc share bits of code between client and server.</p>
+ <p>
+ Sharing code is not limited to class definitions: <i>anything</i> can be shared. Objects, classes, interfaces/traits, functions and algorithms, constants: all of these are things that you will likely want to share at some point or another. Traditionally, people have simply re-implemented the same code twice in two languages, or have resorted to awkward Ajax calls to push the logic to the server. With Scala.js, you no longer need to do so: you can easily, create ad-hoc bits of code which are available on both platforms.
+</p>
+ <h2 id="Boilerplate-freeSerialization" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#Boilerplate-freeSerialization" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Boilerplate-free Serialization</h2>
+ <p>
+ The Ajax/RPC layer is one of the more fragile parts of web applications. Often, you have your various Ajax endpoints written once on the server, have a set of routes written to connect those Ajax endpoints to URLs, and client code (traditionally Javascript) made calls to those URLs with &quot;raw&quot; data: basically whatever you wanted, packed in an ad-hoc mix of CSV and JSON and raw-strings.
+</p>
+ <p>
+ This has always been annoying boilerplate, and Scala.js removes it. With <a href="https://github.com/lihaoyi/upickle">uPickle</a>, you can simply call <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">upickle.write(...)</code> and <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">upickle.read[T](...)</code> to convert your collections, primitives or case-classes to and from JSON. This means you do not need to constantly re-invent different ways of making Ajax calls: you can just fling the data right across the network from client to server and back again.
+</p>
+<h1 id="What'sLeft?" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#What'sLeft?" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>What's Left?</h1>
+ <p>
+ We've built a small client-server web application with a Scala.js web-client that makes Ajax calls to a Scala-JVM web-server running on Spray. We performed these Ajax calls using uPickle to serialize the data back and forth, so serializing the arguments and return-value was boilerplate-free and correct.
+</p>
+ <p>
+ However, there is still some amount of duplication in the code. In particular, the definition of the endpoint name &quot;list&quot; is duplicated 4 times:
+</p>
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">path(&quot;ajax&quot; / &quot;list&quot;){</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/hands-on-scala-js/blob/master/examples/crossBuilds/clientserver/server/src/main/scala/simple/Server.scala#L25-L26" target="_blank"><i class="fa fa-link "></i></a></pre>
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">upickle.write(list(e))</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/hands-on-scala-js/blob/master/examples/crossBuilds/clientserver/server/src/main/scala/simple/Server.scala#L28-L29" target="_blank"><i class="fa fa-link "></i></a></pre>
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">def list(path: String) = {</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/hands-on-scala-js/blob/master/examples/crossBuilds/clientserver/server/src/main/scala/simple/Server.scala#L35-L36" target="_blank"><i class="fa fa-link "></i></a></pre>
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">def update() = Ajax.post(&quot;/ajax/list&quot;, inputBox.value).foreach{ xhr =&gt;</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/hands-on-scala-js/blob/master/examples/crossBuilds/clientserver/client/src/main/scala/simple/Client.scala#L14-L15" target="_blank"><i class="fa fa-link "></i></a></pre>
+
+ <p>
+ Three times on the server and once on the client! What's worse, two of the appearances of <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">&quot;list&quot;</code> are in string literals, which are not checked by the compiler to match up with themselves or the name of the method <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">list</code>. Apart from this, there is one other piece of duplication that is unchecked: the type being returned from <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">list</code> (<code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Seq[FileData]</code>) is being repeated on the client in <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">upickle.read[Seq[FileData]]</code> in order to de-serialize the serialized data. This leaves three opportunities for error wide-open:
+</p>
+ <ul>
+ <li>
+ You could change the string literals <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">&quot;list&quot;</code> and forget to change the method-name <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">list</code>, thus confusing future maintainers of the code.</li>
+ <li>
+ You could change one of literal <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">&quot;list&quot;</code>s but forget to change the other, thus causing an error at run-time (e.g. a 404 NOT FOUND response)</li>
+ <li>
+ You could update the return type of the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">list</code> method and forget to update the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">upickle.read</code> deserialization call on the client, resulting in a deserialization failure at runtime.
+</li></ul>
+ <p></p>
+
+ <p>
+ Neither of these scenarios is great! Although we've already made great progress in making our client-server application type-safe (via Scala.js on the client) and DRY (via shared code in <code>shared/</code>) we still have this tiny bit of annoying, un-checked duplication and danger lurking in the code-base. The basic problem is that what is normally called the &quot;routing layer&quot; in the web application is still unsafe, and so these silly errors can go un-caught and blow up on unsuspecting developers at run-time. Let's see how we can fix it.
+</p>
+<h1 id="Autowire" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#Autowire" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Autowire</h1>
+
+ <p>
+ <a href="https://github.com/lihaoyi/autowire">Autowire</a> is a library that turns your request routing layer from a fragile, hand-crafted mess into a solid, type-checked, boilerplate-free experience. Autowire basically turns what was previously a stringly-typed, hand-crafted Ajax call and route:
+</p>
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">def update() = Ajax.post(&quot;/ajax/list&quot;, inputBox.value).foreach{ xhr =&gt;</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/hands-on-scala-js/blob/master/examples/crossBuilds/clientserver/client/src/main/scala/simple/Client.scala#L14-L15" target="_blank"><i class="fa fa-link "></i></a></pre>
+
+ <p>
+ Into a safe, type-checked function call:
+</p>
+
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">def update() = Ajaxer[Api].list(inputBox.value).call().foreach{ data =&gt;</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/hands-on-scala-js/blob/master/examples/crossBuilds/clientserver2/client/src/main/scala/simple/Client.scala#L25-L26" target="_blank"><i class="fa fa-link "></i></a></pre>
+
+ <p>
+ Let's see how we can do that.
+</p>
+ <h2 id="SettingupAutowire" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#SettingupAutowire" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Setting up Autowire</h2>
+
+ <p>
+ To begin with, Autowire requires you to provide three things:
+</p>
+ <ul>
+ <li>
+ An <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">autowire.Server</code> on the Server, set up to feed the incoming request into Autowire's routing logic</li>
+ <li>
+ An <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">autowire.Client</code> on the Client, set up to take a serialized request and send it across the network to the server.</li>
+ <li>
+ An interface (A Scala <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">trait</code>) which defines the interface between these two
+</li></ul>
+ <p>
+ Let's start with our client-server interface definition
+</p>
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">package simple
+
+case class FileData(name: String, size: Long)
+
+trait Api{
+ def list(path: String): Seq[FileData]
+}</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/hands-on-scala-js/blob/master/examples/crossBuilds/clientserver2/client/shared/main/scala/simple/Shared.scala#L0-L7" target="_blank"><i class="fa fa-link "></i></a></pre>
+
+ <p>
+ Here, you can see that in addition to sharing the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">FileData</code> class, we are also creating an <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Api</code> trait which contains the signature of our <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">list</code> method. The exact name of the trait doesn't matter. We need it to be in <code>shared/</code> so that the code in both client and server can reference it.
+</p>
+ <p>
+ Next, let's look at modifying our server code to make use of Autowire:
+</p>
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">package simple
+
+import akka.actor.ActorSystem
+import spray.http.{HttpEntity, MediaTypes}
+import spray.routing.SimpleRoutingApp
+import scala.concurrent.ExecutionContext.Implicits.global
+
+object Router extends autowire.Server[String, upickle.Reader, upickle.Writer]{
+ def read[Result: upickle.Reader](p: String) = upickle.read[Result](p)
+ def write[Result: upickle.Writer](r: Result) = upickle.write(r)
+}
+
+object Server extends SimpleRoutingApp with Api{
+ def main(args: Array[String]): Unit = {
+ implicit val system = ActorSystem()
+ startServer(&quot;localhost&quot;, port = 8080){
+ get{
+ pathSingleSlash{
+ complete{
+ HttpEntity(
+ MediaTypes.`text/html`,
+ Page.skeleton.render
+ )
+ }
+ } ~
+ getFromResourceDirectory(&quot;&quot;)
+ } ~
+ post{
+ path(&quot;ajax&quot; / Segments){ s =&gt;
+ extract(_.request.entity.asString) { e =&gt;
+ complete {
+ Router.route[Api](Server)(
+ autowire.Core.Request(
+ s,
+ upickle.read[Map[String, String]](e)
+ )
+ )
+ }
+ }
+ }
+ }
+ }
+ }
+ def list(path: String) = {
+ val (dir, last) = path.splitAt(path.lastIndexOf(&quot;/&quot;) + 1)
+ val files =
+ Option(new java.io.File(&quot;./&quot; + dir).listFiles())
+ .toSeq.flatten
+ for{
+ f &lt;- files
+ if f.getName.startsWith(last)
+ } yield FileData(f.getName, f.length())
+ }
+}</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/hands-on-scala-js/blob/master/examples/crossBuilds/clientserver2/server/src/main/scala/simple/Server.scala#L0-L54" target="_blank"><i class="fa fa-link "></i></a></pre>
+
+ <p>
+ Now, instead of hard-coding the route <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">&quot;ajax&quot; / &quot;list&quot;</code>, we now take in any route matching <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">&quot;ajax&quot; / Segments</code>, feeding the resultant path segments into the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Router</code> object:
+</p>
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">path(&quot;ajax&quot; / Segments){ s =&gt;
+ extract(_.request.entity.asString) { e =&gt;
+ complete {
+ Router.route[Api](Server)(
+ autowire.Core.Request(
+ s,
+ upickle.read[Map[String, String]](e)
+ )
+ )
+ }
+ }
+}</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/hands-on-scala-js/blob/master/examples/crossBuilds/clientserver2/server/src/main/scala/simple/Server.scala#L28-L40" target="_blank"><i class="fa fa-link "></i></a></pre>
+ <p>
+ The <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Router</code> object in turn simply defines how you intend the objects to be serialized and deserialized:
+</p>
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">object Router extends autowire.Server[String, upickle.Reader, upickle.Writer]{
+ def read[Result: upickle.Reader](p: String) = upickle.read[Result](p)
+ def write[Result: upickle.Writer](r: Result) = upickle.write(r)
+}</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/hands-on-scala-js/blob/master/examples/crossBuilds/clientserver2/server/src/main/scala/simple/Server.scala#L7-L12" target="_blank"><i class="fa fa-link "></i></a></pre>
+
+ <p>
+ In this case using uPickle. Note how the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">route</code> call explicitly states the type (here <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Api</code>) that it is to generate routes against; this ensures that only methods which you explicitly put in your public interface <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Api</code> are publically reachable.
+</p>
+ <p>
+ Next, let's look at the modified client code:
+</p>
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">package simple
+import scalatags.JsDom.all._
+import org.scalajs.dom
+import scalajs.js.annotation.JSExport
+import scalajs.concurrent.JSExecutionContext.Implicits.runNow
+import autowire._
+
+object Ajaxer extends autowire.Client[String, upickle.Reader, upickle.Writer]{
+ override def doCall(req: Request) = {
+ dom.extensions.Ajax.post(
+ url = &quot;/ajax/&quot; + req.path.mkString(&quot;/&quot;),
+ data = upickle.write(req.args)
+ ).map(_.responseText)
+ }
+
+ def read[Result: upickle.Reader](p: String) = upickle.read[Result](p)
+ def write[Result: upickle.Writer](r: Result) = upickle.write(r)
+}
+
+@JSExport
+object Client extends{
+ @JSExport
+ def main(container: html.Div) = {
+ val inputBox = input.render
+ val outputBox = ul.render
+ def update() = Ajaxer[Api].list(inputBox.value).call().foreach{ data =&gt;
+ outputBox.innerHTML = &quot;&quot;
+ for(FileData(name, size) &lt;- data){
+ outputBox.appendChild(
+ li(
+ b(name), &quot; - &quot;, size, &quot; bytes&quot;
+ ).render
+ )
+ }
+ }
+ inputBox.onkeyup = (e: dom.Event) =&gt; update()
+ update()
+ container.appendChild(
+ div(
+ h1(&quot;File Search&quot;),
+ inputBox,
+ outputBox
+ ).render
+ )
+ }
+}</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/hands-on-scala-js/blob/master/examples/crossBuilds/clientserver2/client/src/main/scala/simple/Client.scala#L0-L46" target="_blank"><i class="fa fa-link "></i></a></pre>
+
+ <p>
+ There are two main modifications here: the existence of the new <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Ajaxer</code> object, and the modification to the Ajax call-site. Let's first look at <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Ajaxer</code>:
+</p>
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">object Ajaxer extends autowire.Client[String, upickle.Reader, upickle.Writer]{
+ override def doCall(req: Request) = {
+ dom.extensions.Ajax.post(
+ url = &quot;/ajax/&quot; + req.path.mkString(&quot;/&quot;),
+ data = upickle.write(req.args)
+ ).map(_.responseText)
+ }
+
+ def read[Result: upickle.Reader](p: String) = upickle.read[Result](p)
+ def write[Result: upickle.Writer](r: Result) = upickle.write(r)
+}</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/hands-on-scala-js/blob/master/examples/crossBuilds/clientserver2/client/src/main/scala/simple/Client.scala#L7-L19" target="_blank"><i class="fa fa-link "></i></a></pre>
+
+ <p>
+ Like the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Router</code> object, <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Ajaxer</code> also defines how you perform the serialization and deserialization of data-structures, again using uPickle. Unlike the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Router</code> object, <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Ajaxer</code> also defines how the out-going Ajax call gets sent over the network. Here we're doing it using the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Ajax.post</code> method.
+</p>
+ <p>
+ Lastly, let's look at the modified callsite for the ajax call itself:
+</p>
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">def update() = Ajaxer[Api].list(inputBox.value).call().foreach{ data =&gt;</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/hands-on-scala-js/blob/master/examples/crossBuilds/clientserver2/client/src/main/scala/simple/Client.scala#L25-L26" target="_blank"><i class="fa fa-link "></i></a></pre>
+
+ <p>
+ There are a few things of note here:
+</p>
+ <ul>
+ <li>
+ The previous call to <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Ajax.post</code> with the path as a string has been replaced by calling <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Ajaxer[Api].list(...).call()</code>, since the logic of actually performing the POST is specified once-and-only-once in the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Ajaxer</code> object.</li>
+ <li>
+ While <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Ajax.post</code> returned a <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Future[dom.XMLHttpRequest]</code> and left us to call <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">upickle.read</code> and deserialize the data ourselves, <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Ajaxer[Api].list(...).call()</code> now returns a <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Future[Seq[FileData]]</code>! Thus we don't need to worry about making a mistake in the deserialization logic when we write it by hand.
+</li></ul>
+ <p>
+ Other than that, nothing much has changed. If you've done this correctly, the web application will look and behave exactly as it did earlier!
+</p>
+ <iframe id="heroku2" style="width: 100%;height: 350px;" frameBorder="0"></iframe>
+ <script>
+ window.addEventListener("load", function(){
+ document.getElementById("heroku2").src = 'https://hands-on-scala-js.herokuapp.com/'
+ })
+</script>
+
+
+ <p>
+ So why did we do this in the first place?
+</p>
+ <h2 id="WhyAutowire?" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#WhyAutowire?" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Why Autowire?</h2>
+ <p>
+ Overall, this set up requires some boilerplate to define the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Ajaxer</code> and <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Router</code> objects, as well as the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Api</code> trait. However, these can be defined just once and used over and over; while it might be wasteful/unnecessary for making a single Ajax call, the cost is much less amortized over a number of Ajax calls. In a non-trivial web application with dozens of routes being called all over the place, spending a dozen lines setting up things up-front isn't a huge cost.
+</p>
+ <p>
+ What have we gotten in exchange? It turns out that by using Autowire, we have eliminated the three failure modes described earlier, that could:
+</p>
+ <ul>
+ <li>
+ It is impossible for the route and the endpoint method-name to diverge accidentally: if the endpoint is called <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">list</code>, the requests will go through the <code>/list</code> URL. No room for discussion, or to make a mistake</li>
+ <li>
+ You cannot accidentally rename the route on the server without changing the client, or vice versa. Attempts to do so will cause a compilation error, and even your IDE should highlight it as red. Try it out!
+</li>
+ <li>
+ There is no chance of messing up the serialization/deserialization code, e.g. writing a response of type A on the server and trying to read a data-structure of type B on the client. You have no opportunity to make an error: you pass arguments to the Ajax call, and they are serialized/deserialized automatically, such that by the time you get access to the value on the server, it is already of the correct type! The same applies to serializing/deserializing the return-value on the client. There is simply no place for you as a developer to accidentally make a mistake!
+</li></ul>
+ <p>
+ Although the functionality of the web application is the same, it is mostly in terms of <i>safety</i> that we have made the biggest gains. All of the common failure modes described earlier have been guarded against, and you as a developer will have a hard time trying to make a mal-formed Ajax call. It's worth taking some time to poke at the source code to see the boundaries of the type-safety provided by autowire, as it is a very different experience from the traditional &quot;route it manually&quot; approach to making interactive client-server applications.
+</p>
+<hr />
+
+<p>
+ Hopefully this chapter has given you a glimpse of how a basic client-server application works using Scala.js. Although it is specific to a Spray server, there isn't any reason why you couldn't set up an equivalent thing for your Play, Scalatra or whichever other web framework that you're using.
+</p>
+<p>
+ It's probably worth taking a moment to play around with the existing client-server system you have set up. Ideas for improvement include:
+</p>
+<ul>
+ <li>
+ Try adding additional functionality to the client-server interface: what about making it show the contents of a file if you've entered its full path? This can be added as a separate Ajax call or as part of the existing one.</li>
+ <li>
+ How about setting up the build.sbt so it serves the fully-optimized Scala.js blob, <code>client-opt.js</code>? This is probably what you want before deployment into production, and the same technique as we used to serve the fast-optimized version applies here too.</li>
+ <li>
+ What if you wanted to use another server rather than Spray? How about trying to set up a Play or Scalatra server to serve our Scala.js application code?</li></ul>
+</div>
+<div class="header scalatex-header scalatex-hover-container" id="InDepth" style="display: block;"><h1>In Depth<a class="scalatex-header-link" href="#InDepth" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a></h1><br /><h2>Exploring Scala.js</h2></div><div class="content">
+ <p>
+ This half of the book
+is a set of detailed expositions on various parts of the Scala.js platform. Nothing in here is necessary for you to make your first demos, but as you dig deeper into the platform, you will likely need or want to care about these things so you can properly understand what's going on &quot;under the hood&quot;
+
+</p>
+ <div class="header scalatex-header scalatex-hover-container" id="AdvancedTechniques" style="display: block;"><h1 id="AdvancedTechniques">Advanced Techniques<a class="scalatex-header-link" href="#AdvancedTechniques" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a></h1><br /></div>
+
+<p>
+ <a href="#GettingStarted">Getting Started</a> walks you through how to set up some basic Scala.js applications, but that only scratches the surface of the things you can do with Scala.js. Apart from being able to use the same techniques you're used to in Scala-JVM in the browser, Scala.js opens up a whole range of possibilities and novel techniques that are not found in typical Scala-JVM applications.
+</p>
+<p>
+ Although these techniques may technically be possible on the JVM, very few Scala-JVM applications are built in a way that can take advantage of them. Most Scala-JVM code runs on back-end servers which have a completely different structure from the client-side apps that Scala.js allows.</p>
+<p>
+ This client-side user-interface-focused code lends itself to completely different design patterns from those used to develop server-side code. This section will explore a number of techniques which are present
+</p>
+<ul>
+ <li>
+ <a href="#Functional-ReactiveUIs">Functional-reactive user interfaces</a></li>
+ <li>
+ <a href="#AsynchronousWorkflows">Asynchronous user-interation workflows</a>
+</li></ul>
+<p>
+ One note is that these are &quot;Techniques&quot; rather than &quot;Libraries&quot; because they have not been packaged up in a way that is sufficiently nice that you can use them out-of-the-box just by adding a dependency somewhere. Thus, they each require some small amount of boilerplate before use, though the amount of boilerplate is fixed: it does not grow with the size of your program, and anyway gives you a chance to tweak it to do exactly what you want.
+</p>
+
+
+<h1 id="Functional-ReactiveUIs" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#Functional-ReactiveUIs" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Functional-Reactive UIs</h1>
+ <p>
+ <a href="http://en.wikipedia.org/wiki/Functional_reactive_programming">Functional-reactive Programming</a> (FRP) is a field with encompasses several things:
+</p>
+ <ul>
+ <li>
+ <b>Discrete</b>: Handling of first-class event-streams like in <link>RxJShttps://github.com/Reactive-Extensions/RxJS</link></li>
+ <li>
+ <b>Continuous</b>: Handling of first-class signals, like in <link>Elmhttp://elm-lang.org/learn/What-is-FRP.elm</link>
+</li></ul>
+ <h2 id="WhyFRP" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#WhyFRP" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Why FRP</h2>
+ <p>
+ The value proposition of FRP is that in a &quot;traditional&quot; program, when an event occurs, events and changes propagate throughout the program in an ad-hoc manner. An event-listener may trigger additional events, call some callbacks, or set some mutable variables that subsequent code will read and react to.
+</p>
+ <p>
+ This works, but the ad-hoc nature is both free-ing and limiting. You are free to do whatever you want in response to any action, but in return the developer who maintains your code (e.g. yourself 6 months from now) has no idea what your code is doing in response to any action: the possible consequence of an action is basically &quot;Anything&quot;!
+</p>
+ <p>
+ Furthermore, because the propagation is ad-hoc, there is no way for the code to help ensure that you are propagating changes in a &quot;valid&quot; manner: it is thus easy for programmer errors to result in changes or events being incorrectly propagated. This most often results in data falling out of sync: a UI widget may forget to update when an action is taken, resulting in an inconsistent state being shown to the user, ultimately resulting in confused users.
+</p>
+ <p>
+ FRP basically structures these event- or change-propagations as first-class values within the program, either as an <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">EventSource[T]</code> type that represents a discrete source of individual <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">T</code> events, or as a <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Signal[T]</code> type which represents a continuous time-varying value <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">T</code>. This comes at some cost within the program: you now have to program using these <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">EventSource</code>s or <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Signal</code>s, rather than just ad-hoc running callbacks or listening-to/triggering events all over the place. In exchange, you get more powerful tools to work with these values, making it easy for the library to e.g. ensure that changes always propagate correctly throughout your program, and that all values are always kept in sync.
+</p>
+ <h2 id="FRPwithScala.Rx" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#FRPwithScala.Rx" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>FRP with Scala.Rx</h2>
+ <p>
+ <a href="https://github.com/lihaoyi/scala.rx">Scala.Rx</a> is a change-propagation library that implements the <b>Continuous</b> style of FRP. To begin with, we need to include it in our <code>build.sbt</code> dependencies:
+</p>
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">libraryDependencies += &quot;com.lihaoyi&quot; %%% &quot;scalarx&quot; % &quot;0.2.7&quot;</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/hands-on-scala-js/blob/master/examples/demos/build.sbt#L18-L19" target="_blank"><i class="fa fa-link "></i></a></pre>
+
+ <p>
+ Scala.Rx provides you with smart variables that automatically track dependencies with each other, such that if one smart variable changes, the rest re-compute immediately and automatically. The main primitives in Scala.Rx are:
+</p>
+ <ul>
+ <li>
+ <b>Var</b>s: Smart variables that can be set manually, and automatically notify their dependents that they need to recompute</li>
+ <li>
+ <b>Rx</b>s: Smart values which are set as some computation of other <b>Rx</b>s or <b>Var</b>s, which recompute automatically when their dependencies change, and notify their dependents</li>
+ <li>
+ <b>Obs</b>s: Observers on either an <b>Rx</b> or a <b>Var</b>, which performs some action when it changes
+</li></ul>
+ <p>
+ <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Var</code>s and <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Rx</code>s roughly correspond to the idea of a <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Signal</code> described earlier. The documentation for Scala.Rx goes into this in much more detail, so if you're curious you should read it. This section will jump straight into how to use Scala.Rx with Scala.js.
+</p>
+ <p>
+ To begin with, let's set up our imports:
+</p>
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">package advanced
+
+import org.scalajs.dom
+import scalajs.js
+import scalajs.js.annotation.JSExport
+import rx._
+import scalatags.JsDom.all._
+import dom.html</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/hands-on-scala-js/blob/master/examples/demos/src/main/scala/advanced/BasicRx.scala#L0-L8" target="_blank"><i class="fa fa-link "></i></a></pre>
+
+ <p>
+ Here we are seeing the same <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">dom</code> and <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">scalatags</code>, imports we saw in the hands-on tutorial, as well a new <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">import rx._</code> which bring all the Scala.Rx names into the local namespace.
+</p>
+ <p>
+ Scala.Rx does not &quot;natively&quot; bind to Scalatags, but integrating them yourself is simple enough that it's not worth putting into a separate library. He's a simple integration:
+</p>
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">implicit def rxFrag[T &lt;% Frag](r: Rx[T]): Frag = {
+ def rSafe: dom.Node = span(r()).render
+ var last = rSafe
+ Obs(r, skipInitial = true){
+ val newLast = rSafe
+ js.Dynamic.global.last = last
+ last.parentNode.replaceChild(newLast, last)
+ last = newLast
+ }
+ last
+}</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/hands-on-scala-js/blob/master/examples/demos/src/main/scala/advanced/BasicRx.scala#L68-L79" target="_blank"><i class="fa fa-link "></i></a></pre>
+
+ <p>
+ Scalatags requires that anything you want to embed in a Scalatags fragment be implicitly convertible to <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Frag</code>; here we are providing one for any Scala.Rx <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Rx[T]</code>s, as long as the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">T</code> provided is itself convertible to a <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Frag</code>. We call <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">r().render</code> to extract the &quot;current&quot; value of the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Rx</code>, and then set up an <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Obs</code> that watches the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Rx</code>, replacing the previous value with the current one every time its value changes.
+</p>
+ <p>
+ Now that the set-up is out of the way, let's consider a simple HTML widget that lets you enter text in a <code class="html scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">&lt;textarea&gt;</code>, and keeps track of the number of words, characters, and counts how long each word is.
+</p>
+ <div class="pure-g">
+ <div class="pure-u-1 pure-u-md-13-24">
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">val txt = Var(&quot;&quot;)
+val numChars = Rx{txt().length}
+val numWords = Rx{
+ txt().split(' ')
+ .filter(_.length &gt; 0)
+ .length
+}
+
+val avgWordLength = Rx{
+ txt().count(_ != ' ') * 1.0 / numWords()
+}
+
+val txtInput = textarea.render
+txtInput.onkeyup = (e: dom.Event) =&gt; {
+ txt() = txtInput.value
+}
+
+container.appendChild(
+ div(
+ txtInput,
+ ul(
+ li(&quot;Chars: &quot;, numChars),
+ li(&quot;Words: &quot;, numWords),
+ li(&quot;Word Length: &quot;, avgWordLength)
+ )
+ ).render
+)</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/hands-on-scala-js/blob/master/examples/demos/src/main/scala/advanced/BasicRx.scala#L12-L39" target="_blank"><i class="fa fa-link "></i></a></pre>
+</div>
+ <div class="pure-u-1 pure-u-md-11-24">
+ <div id="example15" style="display: block;overflow: scroll;"></div><script>advanced.BasicRx().main(document.getElementById('example15'))</script>
+</div></div>
+ <p>
+ This snippet sets up a basic data-flow graph. We have our <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">txt</code> <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Var</code>, and a bunch of <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Rx</code>s (<code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">numChars</code>, <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">numWords</code>, <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">avgWordLength</code>) that are computed based on <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">txt</code>.
+</p>
+ <p>
+ Next, we construct our Scalatags fragment: a <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">textarea</code> tag with a listener that updates <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">txt</code>, and a <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">div</code> containing the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">textarea</code> and a list containing the bound values of our <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Rx</code>s.
+</p>
+ <p>
+ That's all we need to end up with a live-updating widget, which re-renders the necessary bits of the page when the contents of the text box changes! Note how the code basically flows top-to-bottom, like a batch-rendering program, but at the end of it we get a live widget. The code is much simpler than a similar widget built up using jQuery or Backbone.
+</p>
+ <p>
+ Furthermore, there is no chance for the parts of the DOM which are &quot;live&quot; to fall out of sync. There is no visible logic that handles the individual re-calulations and re-renders: that is all done by Scala.Rx and by our <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">rxFrag</code> implicit. Because we do not need to write code for each site to keep each individual <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Rx</code> and each DOM fragment in sync, that means there is no chance of the developer screwing it up and resulting in an out-of-sync page.
+</p>
+ <h2 id="MoreRx" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#MoreRx" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>More Rx</h2>
+ <p>
+ That was a pretty simple example to get you started with a simple Scala.Rx application. Let's look at a more meaty example to see how we can use Scala.Rx to help structure our interactive web application:
+
+</p>
+ <div class="pure-g">
+ <div class="pure-u-1 pure-u-md-13-24">
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">val fruits = Seq(
+ &quot;Apple&quot;, &quot;Apricot&quot;, &quot;Banana&quot;, &quot;Cherry&quot;,
+ &quot;Mango&quot;, &quot;Mangosteen&quot;, &quot;Mandarin&quot;,
+ &quot;Grape&quot;, &quot;Grapefruit&quot;, &quot;Guava&quot;
+)
+val query = Var(&quot;&quot;)
+val txtInput = input.render
+txtInput.onkeyup = (e: dom.Event) =&gt; {
+ query() = txtInput.value
+}
+
+val fragments =
+ for(fruit &lt;- fruits) yield Rx {
+ val shown = fruit.toLowerCase
+ .startsWith(query())
+ if (shown) li(fruit)
+ else li(display := &quot;none&quot;)
+ }
+
+container.appendChild(
+ div(
+ txtInput,
+ ul(fragments)
+ ).render
+)</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/hands-on-scala-js/blob/master/examples/demos/src/main/scala/advanced/BasicRx.scala#L42-L67" target="_blank"><i class="fa fa-link "></i></a></pre>
+</div>
+ <div class="pure-u-1 pure-u-md-11-24">
+ <div id="example16" style="display: block;overflow: scroll;"></div><script>advanced.BasicRx().main2(document.getElementById('example16'))</script>
+</div></div>
+ <p>
+ This is a basic re-implementation of the autocomplete widget we created in the chapter <a href="#InteractiveWebPages">Interactive Web Pages</a>, except done using Scala.Rx. Note that unlike the original implementation, we don't need to manage the clearing of the output area via <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">innerHTML = &quot;&quot;</code> and the re-rendering via <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">appendChild(...)</code>. All this is handled by the same <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">rxFrag</code> code we wrote earlier.
+</p>
+ <p>
+ Furthermore, this implementation is more efficient than the original: In the original, everything is always re-rendered every time, which can be a problem if the number of things being rendered is large. In this implementation, only when a fruit appears-in/disappears-from the list does re-rendering happen, and only for that particular fruit. For the bulk of the fruits which did not experience any change in appearance, the DOM is left entirely untouched.
+</p>
+ <p>
+ Again, there is no chance for the developer to make a mistake updating things, because all this rendering and re-rendering is hidden from view inside the library.
+</p>
+ <hr />
+
+ <p>
+ Hopefully this has given you a sense of how you can use Scala.Rx to help build complex, interactive web applications. The implementation is tricky, but the basic value proposition is clear: you get to write your code top-to-bottom, like the most old-fashioned static pages, and have it transformed by Scala.Rx into an interactive, always-consistent web app. By abstracting away the whole event-propagation, manual-updating process inside the library, we have ensured that there is no place where the developer can screw it up, and the application's UI will forever be in sync with its data.
+</p>
+<h1 id="AsynchronousWorkflows" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#AsynchronousWorkflows" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Asynchronous Workflows</h1>
+ <p>
+ In a traditional setting, Scala applications tend to have a mix of concurrency models: some spawn multiple threads and use thread-blocking operations or libraries, others do things with Actors or Futures, trying hard to stay non-blocking throughout, while most are a mix of these two paradigms.
+</p>
+ <p>
+ On Scala.js, things are different: multi-threaded concurrency is a non-starter, since Javascript engines are all single-threaded. As a result, there are virtually no blocking APIs in Javascript: all operations need to be asynchronous if you don't want them to freeze the user interface of the browser while the operation is happening. Scala.js uses standard Javascript APIs and is no different.
+</p>
+ <p>
+ However, Scala.js has much more powerful tools to work with than your typical Javascript libraries. The Scala standard library comes with a rich API for <a href="#Futures&amp;Promises">Futures &amp; Promises</a>, which are thankfully 100% asynchronous. Though this design was chosen for performance on the JVM, it perfectly fits our 100% asynchronous Javascript APIs. We have tools like <a href="#Scala-Async">Scala-Async</a>, which works perfectly with Scala.js, and lets you create asynchronous computations in a much less confusing manner.
+</p>
+ <h2 id="Futures&amp;Promises" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#Futures&amp;Promises" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Futures &amp; Promises</h2>
+ <p>
+ A Future represents an in-progress computation that may or may not have completed. It may encapsulate a web request, or an RPC, or a task happening on another thread. They are not a novel concept, and Scala provides a good in-built implementation of Futures that works well with Scala.js.
+</p>
+ <p>
+ To motivate this, let's consider a simple example application that:
+</p>
+ <ul>
+ <li>
+ Takes as user input a comma-separated list of city-names</li>
+ <li>
+ Fetches the temperature in each city from <code>api.openweathermap.org</code></li>
+ <li>
+ Displays the results when they are all back
+</li></ul>
+ <p>
+ We'll work through a few implementations of this.
+</p>
+ <p>
+ To begin with, let's write the scaffolding code, that will display the input box, deal with the listeners, and all that:
+</p>
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">val myInput = input(value:=&quot;London,Singapore,Berlin,New York&quot;).render
+val output = div.render
+myInput.onkeyup = (e: dom.KeyboardEvent) =&gt; {
+ if (e.keyCode == KeyCode.enter){
+ handle(myInput.value.split(','), output)
+ }
+}
+container.appendChild(
+ div(
+ i(&quot;Press Enter in the box to fetch temperatures &quot;),
+ myInput,
+ output
+ ).render
+)</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/hands-on-scala-js/blob/master/examples/demos/src/main/scala/advanced/Futures.scala#L16-L30" target="_blank"><i class="fa fa-link "></i></a></pre>
+
+ <p>
+ So far so good. The only thing that's missing here is the mysterious <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">handle</code> function, which is given the list of names and the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">output</code> div, and must handle the Ajax requests, aggregating the results, and displaying them in <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">output</code>. Let's also define a small number of helper functions that we'll use later:
+</p>
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">def urlFor(name: String) = {
+ &quot;http://api.openweathermap.org/data/&quot; +
+ &quot;2.5/find?mode=json&amp;q=&quot; +
+ name
+}</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/hands-on-scala-js/blob/master/examples/demos/src/main/scala/advanced/Futures.scala#L31-L36" target="_blank"><i class="fa fa-link "></i></a></pre>
+
+ <p>
+ <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">urlFor</code> encapsulates the messy URL-construction logic that we need to make the Ajax call to the right place.
+</p>
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">def parseTemp(text: String) = {
+ val data = js.JSON.parse(text)
+ val kelvins = data.list
+ .pop()
+ .main
+ .temp
+ .asInstanceOf[Double]
+ kelvins - 272.15
+}</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/hands-on-scala-js/blob/master/examples/demos/src/main/scala/advanced/Futures.scala#L36-L45" target="_blank"><i class="fa fa-link "></i></a></pre>
+
+ <p>
+ <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">parseTemp</code> encapsulates the messy result-extraction logic that we need to get the data we want (current temperature, in celsius) out of the structured JSON return blob.
+</p>
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">def formatResults(output: html.Element, results: Seq[(String, Double)]) = {
+ output.innerHTML = &quot;&quot;
+ output.appendChild(ul(
+ for((name, temp) &lt;- results) yield li(
+ b(name), &quot; - &quot;, temp.toInt, &quot;C&quot;
+ )
+ ).render)
+}
+@JSExport</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/hands-on-scala-js/blob/master/examples/demos/src/main/scala/advanced/Futures.scala#L45-L54" target="_blank"><i class="fa fa-link "></i></a></pre>
+
+ <p>
+ <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">formatResults</code> encapsulates the conversion of the final <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">(name, celsius)</code> data back into readable HTML.
+</p>
+ <p>
+ Overall, these helper functions do nothing special, btu we're defining them first to avoid having to copy-&amp;-paste code throughout the subsequent examples. Now that we've defined all the relevant scaffolding, let's walk through a few ways that we can implement the all-important <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">handle</code> method.
+</p>
+
+
+ <h3 id="DirectUseofXMLHttpRequest" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#DirectUseofXMLHttpRequest" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Direct Use of XMLHttpRequest</h3>
+ <div style="height: 200px;display: block;overflow: scroll;" id="example17"></div><script>advanced.Futures().main0(document.getElementById('example17'))</script>
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">def handle0(names: Seq[String], output: html.Div) = {
+ val results = mutable.Buffer.empty[(String, Double)]
+ for(name &lt;- names){
+ val xhr = new XMLHttpRequest
+ xhr.open(&quot;GET&quot;, urlFor(name))
+ xhr.onload = (e: dom.Event) =&gt; {
+ val temp = parseTemp(xhr.responseText)
+ results.append((name, temp))
+ if (results.length == names.length){
+ formatResults(output, results)
+ }
+ }
+ xhr.send()
+ }
+}</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/hands-on-scala-js/blob/master/examples/demos/src/main/scala/advanced/Futures.scala#L55-L70" target="_blank"><i class="fa fa-link "></i></a></pre>
+
+ <p>
+ This is a simple solution that directly uses the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">XMLHttpRequest</code> class that is available in Javascript in order to perform the Ajax call. Every Ajax call that returns, we aggregate in a <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">results</code> buffer, and when the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">results</code> buffer is full we then append the formatted results to the output div.</p>
+ <p>
+ This is relatively straightforward, though maybe knottier than people would be used to. For example, we have to &quot;construct&quot; the Ajax call via calling mutating methods and setting properties on the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">XMLHttpRequest</code> object, where it's easy to make a mistake. Furthermore, we need to manually aggregate the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">results</code> and keep track ourselves whether or not the calls have all completed, which again is messy and error-prone.
+</p>
+ <p>
+ This solution is basically equivalent to the initial code given in the <a href="#RawJavascript">Raw Javascript</a> section of <a href="#InteractiveWebPages">Interactive Web Pages</a>, with the additional code necessary for aggregation. As described in <a href="#dom.extensions">dom.extensions</a>, we can make use of the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Ajax</code> object to make it slightly tidier.
+</p>
+ <h3 id="Usingdom.extensions.Ajax" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#Usingdom.extensions.Ajax" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Using dom.extensions.Ajax</h3>
+ <div style="height: 200px;display: block;overflow: scroll;" id="example18"></div><script>advanced.Futures().main1(document.getElementById('example18'))</script>
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">def handle1(names: Seq[String], output: html.Div) = {
+ val results = mutable.Buffer.empty[(String, Double)]
+ for{
+ name &lt;- names
+ xhr &lt;- Ajax.get(urlFor(name))
+ } {
+ val temp = parseTemp(xhr.responseText)
+ results.append((name, temp))
+ if (results.length == names.length){
+ formatResults(output, results)
+ }
+ }
+}</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/hands-on-scala-js/blob/master/examples/demos/src/main/scala/advanced/Futures.scala#L74-L87" target="_blank"><i class="fa fa-link "></i></a></pre>
+
+ <p>
+ This solution uses the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">dom.extensions.Ajax</code> object, as described in <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">dom.extensions</code>. This basically wraps the messy <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">XMLHttpRequest</code> interface in a single function that returns a <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">scala.concurrent.Future</code>, which you can then map/foreach over to perform the action when the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Future</code> is complete.</p>
+ <p>
+ However, we still have the messiness inherent in the result aggregation: we don't actually want to perform our action (writing to the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">output</code> div) when one <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Future</code> is complete, but only when <i>all</i> the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Future</code>s are complete. Thus we still need to do some amount of manual book-keeping in the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">results</code> buffer.
+</p>
+ <h3 id="FutureCombinators" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#FutureCombinators" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Future Combinators</h3>
+ <div style="height: 200px;display: block;overflow: scroll;" id="example19"></div><script>advanced.Futures().main2(document.getElementById('example19'))</script>
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">def handle2(names: Seq[String], output: html.Div) = {
+ val futures = for(name &lt;- names) yield{
+ Ajax.get(urlFor(name)).map( xhr =&gt;
+ (name, parseTemp(xhr.responseText))
+ )
+ }
+
+ for(results &lt;- Future.sequence(futures)){
+ formatResults(output, results)
+ }
+}</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/hands-on-scala-js/blob/master/examples/demos/src/main/scala/advanced/Futures.scala#L91-L103" target="_blank"><i class="fa fa-link "></i></a></pre>
+
+ <p>
+ Since we're using Scala's <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Future</code>s, we aren't limited to just map/foreach-ing over them. <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">scala.concurrent.Future</code> provides a <a href="http://www.scala-lang.org/files/archive/nightly/docs/library/scala/concurrent/Future.html">rich api</a> that can be used to deal with common tasks like working with lists of futures in parallel, or aggregating the result of futures together.</p>
+ <p>
+ Here, instead of manually counting until all the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Future</code>s are complete, we instead create the Futures which will contain what we want (name and temperature) and store them in a list. Then we can use the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Future.sequence</code> function to invert the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Seq[Future[T]]</code> into a <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Future[Seq[T]]</code>, a single Future that will provide all the results in a single list when every Future is complete. We can then simply foreach- over the single Future to get the data we need to feed to <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">formatResults</code>/<code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">appendChild</code>.
+</p>
+ <p>
+ This approach is significantly neater than the previous two examples: we no longer have any mutation going on, and the logic is expressed in a very high-level, simple manner. &quot;Make a bunch of Futures, join them, use the result&quot; is much less error-prone than the imperative result-aggregation-and-counting logic used in the previous examples.
+</p>
+ <hr />
+
+ <p>
+ <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">scala.concurrent.Future</code> isn't limited to just calling <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">.sequence</code> on lists. It provides the ability to <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">.zip</code> two Futures of different types together to get their result, or <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">.recover</code> in the case where Futures fail. Although these tools were originally built for Scala-JVM, all of them work unchanged on Scala.js, and serve their purpose well in simplifying messy asynchronous computations.
+</p>
+ <h2 id="Scala-Async" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#Scala-Async" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Scala-Async</h2>
+ <p>
+ Let's look at how to use Scala-Async. To motivate us, let's consider a simple paint-like canvas application similar to the one we built in the section <a href="#MakingaSketchpadusingMouseInput">Making a Sketchpad using Mouse Input</a>. This application will have a few properties:
+</p>
+ <ul>
+ <li>
+ The user clicks and drags to begin drawing a line on the canvas</li>
+ <li>
+ When the user releases the mouse, we fill the shape that was formed by the dragging</li>
+ <li>
+ The user clicks again to clear the canvas; like most clicks, the action happens when the button is released</li>
+ <li>
+ And can repeat the process from the top, indefinitely
+</li></ul>
+ <p>
+ This is a toy example, but is enough to bring out the difficulty of doing things the &quot;traditional&quot; way, and why using Scala-Async with Scala.js is superior. To begin with, let's set the stage:
+</p>
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">val renderer = canvas.getContext(&quot;2d&quot;)
+ .asInstanceOf[dom.CanvasRenderingContext2D]
+
+canvas.style.backgroundColor = &quot;#f8f8f8&quot;
+canvas.height = canvas.parentElement.clientHeight
+canvas.width = canvas.parentElement.clientWidth
+
+renderer.lineWidth = 5
+renderer.strokeStyle = &quot;red&quot;
+renderer.fillStyle = &quot;cyan&quot;
+renderer</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/hands-on-scala-js/blob/master/examples/demos/src/main/scala/advanced/Async.scala#L12-L23" target="_blank"><i class="fa fa-link "></i></a></pre>
+
+ <p>
+ To initialize the canvas with the part of the code which will remain the same, so we can look more closely at the code which differs.
+</p>
+ <h3 id="TraditionalAsynchrony" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#TraditionalAsynchrony" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Traditional Asynchrony</h3>
+ <p>
+ Let's look at a traditional implementation, using Scala.js but no special features. We'll just use the Javascript <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">canvas.onmouveXXX</code> operations directly.
+</p>
+ <div class="pure-g">
+ <div class="pure-u-1 pure-u-md-13-24">
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">// traditional
+def rect = canvas.getBoundingClientRect()
+
+var dragState = 0
+
+canvas.onmousemove ={(e: dom.MouseEvent) =&gt;
+ if (dragState == 1) {
+ renderer.lineTo(
+ e.clientX - rect.left,
+ e.clientY - rect.top
+ )
+ renderer.stroke()
+ }
+}
+canvas.onmouseup = {(e: dom.MouseEvent) =&gt;
+ if(dragState == 1) {
+ renderer.fill()
+ dragState = 2
+ }else if (dragState == 2){
+ renderer.clearRect(0, 0, 1000, 1000)
+ dragState = 0
+ }
+}
+canvas.onmousedown ={(e: dom.MouseEvent) =&gt;
+ if (dragState == 0) {
+ dragState = 1
+ renderer.beginPath()
+ renderer.moveTo(
+ e.clientX - rect.left,
+ e.clientY - rect.top
+ )
+ }
+}</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/hands-on-scala-js/blob/master/examples/demos/src/main/scala/advanced/Async.scala#L67-L100" target="_blank"><i class="fa fa-link "></i></a></pre>
+</div>
+ <div class="pure-u-1 pure-u-md-11-24">
+ <canvas id="example20" style="display: block;overflow: scroll;"></canvas><script>advanced.Async().main0(document.getElementById('example20'))</script></div></div>
+ <p>
+ This is a working implementation, and you can play with it on the right. We basically set the three listeners:
+</p>
+ <ul>
+ <li>
+ <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">canvas.onmousemove</code></li>
+ <li>
+ <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">canvas.onmousedown</code></li>
+ <li>
+ <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">canvas.onmouseup</code>
+</li></ul>
+ <p>
+ And each listener is in charge of deciding what to do when it is it's turn to fire.
+</p>
+ <p>
+ This code is pretty tricky and hard to follow. It's not immediately clear what it is doing. One thing you may notice is the presence of this <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">dragState</code> variable, which seems to add a lot to the confusion with branches all over the place. At first you may think you can simplify the code to do without it, but attempts to do so will reveal why it is necessary.
+</p>
+ <p>
+ This variable is necessary because each mouse event could mean different things at different times. For example, <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">canvas.onmousemove</code> should do nothing it occurs between an <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">canvas.onmousedown</code> and <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">canvas.onmouseup</code>. <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">canvas.onmouseup</code> itself has two tasks: it either ends the dragging phase (which necessitates the fill-current-shape call) or it serves to clear the canvas if happening after a drag. And <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">canvas.onmousedown</code> should not start a new drag if the previous drawing hasn't been cleared from the canvas.
+</p>
+ <p>
+ This is a pretty simple workflow for the user, and yet the code is already tricky enough it's not obvious that it's correct at first glance. More complex tools will have correspondingly more complex workflows, and it is easy to see how just another 1 or 2 more states can get out of hand.
+</p>
+ <h3 id="UsingScala-Async" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#UsingScala-Async" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Using Scala-Async</h3>
+ <p>
+ Now we've seen what a &quot;traditional&quot; approach looks like, let's look at how we would do this using Scala-Async.
+</p>
+ <div class="pure-g">
+ <div class="pure-u-1 pure-u-md-13-24">
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">// async
+def rect = canvas.getBoundingClientRect()
+
+type ME = dom.MouseEvent
+val mousemove =
+ new Channel[ME](canvas.onmousemove = _)
+val mouseup =
+ new Channel[ME](canvas.onmouseup = _)
+val mousedown =
+ new Channel[ME](canvas.onmousedown = _)
+
+// Disabled due to scala-js#1469
+async{
+ while(true){
+ val start = await(mousedown())
+ renderer.beginPath()
+ renderer.moveTo(
+ start.clientX - rect.left,
+ start.clientY - rect.top
+ )
+
+ var res = await(mousemove | mouseup)
+ while(res.`type` == &quot;mousemove&quot;){
+ renderer.lineTo(
+ res.clientX - rect.left,
+ res.clientY - rect.top
+ )
+ renderer.stroke()
+ res = await(mousemove | mouseup)
+ }
+
+ renderer.fill()
+ await(mouseup())
+ renderer.clearRect(0, 0, 1000, 1000)
+ }
+}</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/hands-on-scala-js/blob/master/examples/demos/src/main/scala/advanced/Async.scala#L27-L63" target="_blank"><i class="fa fa-link "></i></a></pre>
+</div>
+ <div class="pure-u-1 pure-u-md-11-24">
+ <canvas id="example21" style="display: block;overflow: scroll;"></canvas><script>advanced.Async().main(document.getElementById('example21'))</script>
+</div></div>
+ <p>
+ We have an <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">async</code> block, which contains a while loop. Each round around the loop, we wait for the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">mousedown</code> channel to start the path, waiting for either <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">mousemove</code> or <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">mouseup</code> (which continues the path or ends it respectively), fill the shape, and then wait for another <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">mousedown</code> before clearing the canvas and going again.
+</p>
+ <p>
+ Hopefully you'd agree that this code is much simpler to read and understand than the previous version. In particular, the control-flow of the code goes from top to bottom in a &quot;natural&quot; fashion, rather than jumping around ad-hoc like in the previous callback-based design.</p>
+ <p>
+ You may be wondering what these <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Channel</code> things are, and where they are coming from. Although these are not provided by Scala, they are pretty straightforward to define ourselves:
+</p>
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">class Channel[T](init: (T =&gt; Unit) =&gt; Unit){
+ init(update)
+ private[this] var value: Promise[T] = null
+ def apply(): Future[T] = {
+ value = Promise[T]()
+ value.future
+ }
+ def update(t: T): Unit = {
+ if (value != null &amp;&amp; !value.isCompleted) value.success(t)
+ }
+ def |(other: Channel[T]): Future[T] = {
+ val p = Promise[T]()
+ for{
+ f &lt;- Seq(other(), this())
+ t &lt;- f
+ } p.trySuccess(t)
+ p.future
+ }
+}</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/lihaoyi/hands-on-scala-js/blob/master/examples/demos/src/main/scala/advanced/Async.scala#L103-L122" target="_blank"><i class="fa fa-link "></i></a></pre>
+
+ <p>
+ The point of <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Channel</code> is to allow us to turn event-callbacks (like those provided by the DOM's <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">onmouseXXX</code> properties) into some kind of event-stream, that we can listen to asynchronously (via <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">apply</code> that returns a <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Future</code>) or merge via <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">|</code>. This is a minimal implementation for what we need now, but it would be easy to provide more functionality (filter, map, etc.) as necessary.
+</p>
+ <hr />
+
+ <p>
+ Scala-Async is a Macro; that means that it is both more flexible and more limited than normal Scala, e.g. you cannot put the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">await</code> call inside a lambda or higher-order-function like <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">.map</code>. Like Futures, it doesn't provide any fundamentally new capabilities, but is a tool that can be used to simplify otherwise messy asynchronous workflows.</p>
+
+
+ <div class="header scalatex-header scalatex-hover-container" id="DeviationsfromScala-JVM" style="display: block;"><h1 id="DeviationsfromScala-JVM">Deviations from Scala-JVM<a class="scalatex-header-link" href="#DeviationsfromScala-JVM" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a></h1><br /></div>
+
+<p>
+ Although Scala.js tries very hard to maintain compatibility with Scala-JVM, there are some parts where the two platforms differs. This can be roughly grouped into two things: differences in the libraries available, and differences in the language itself. This chapter will cover both of these facets.
+</p>
+<h1 id="LanguageDifferences" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#LanguageDifferences" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Language Differences</h1>
+
+ <h2 id="Primitivedatatypes" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#Primitivedatatypes" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Primitive data types</h2>
+ <p>
+ All primitive data types work exactly as on the JVM, with the three following
+ exceptions.
+</p>
+ <h3 id="FloatscanbehaveasDoublesbydefault" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#FloatscanbehaveasDoublesbydefault" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Floats can behave as Doubles by default</h3>
+ <p>
+ Scala.js underspecifies the behavior of <code>Float</code>s by default. Any <code>Float</code> value can be stored as a <code>Double</code> instead, and any operation on <code>Float</code>s can be computed with double precision. The choice of whether or not to behave as such, when and where, is left to the
+ implementation.</p>
+ <p>
+ If exact single precision operations are important to your application, you can enable strict-floats semantics in Scala.js, with the following sbt setting:</p>
+ <pre><code class="scala scalatex-highlight-js">scalaJSSemantics ~= { _.withStrictFloats(true) }</code></pre>
+ <p>
+ Note that this can have a major impact on performance of your application on JS interpreters that do not support <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/fround">the Math.fround function</a>.
+</p>
+ <h3 id="toStringofFloat,DoubleandUnit" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#toStringofFloat,DoubleandUnit" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>toString of Float, Double and Unit</h3>
+ <p>
+ <code>x.toString()</code> returns slightly different results for floating point numbers and <code>()</code> (<code>Unit</code>).
+</p>
+ <div class="pure-g">
+ <div class="pure-u-1 pure-u-md-1-2">
+ <pre><code class="scala scalatex-highlight-js">// Scala-JVM
+&gt; println(())
+()
+&gt; println(1.0)
+1.0
+&gt; println(1.4f)
+1.4
+</code></pre></div>
+ <div class="pure-u-1 pure-u-md-1-2">
+ <pre><code class="scala scalatex-highlight-js">// Scala.js
+&gt; println(())
+undefined
+&gt; println(1.0)
+1
+&gt; println(1.4f)
+1.399999976158142
+</code></pre></div></div>
+ <p>
+ In general, a trailing <code>.0</code> is omitted. Floats print in a weird way because they are printed as if they were Doubles, which means their lack of precision shows up.</p>
+ <p>
+ To get sensible and portable string representation of floating point numbers, use <code>String.format()</code> or related methods.
+</p>
+ <h3 id="Runtimetypetestsarebasedonvalues" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#Runtimetypetestsarebasedonvalues" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Runtime type tests are based on values</h3>
+ <p>
+ Instance tests (and consequently pattern matching) on any of <code>Byte</code>, <code>Short</code>, <code>Int</code>, <code>Float</code>, <code>Double</code> are based on the value and not the type they were created with. The following are examples:</p>
+ <ul>
+ <li>
+ 1 matches <code>Byte</code>, <code>Short</code>, <code>Int</code>, <code>Float</code>, <code>Double</code></li>
+ <li>
+ 128 (<code>&gt; Byte.MaxValue</code>) matches <code>Short</code>, <code>Int</code>, <code>Float</code>, <code>Double</code></li>
+ <li>
+ 32768 (<code>&gt; Short.MaxValue</code>) matches <code>Int</code>, <code>Float</code>, <code>Double</code></li>
+ <li>
+ 2147483647 matches <code>Int</code>, <code>Double</code> if strict-floats are enabled, otherwise <code>Float</code> as well</li>
+ <li>
+ 2147483648 (<code>&gt; Int.MaxValue</code>) matches <code>Float</code>, <code>Double</code></li>
+ <li>
+ 1.5 matches <code>Float</code>, <code>Double</code></li>
+ <li>
+ 1.4 matches <code>Double</code> only if strict-floats are enabled, otherwise <code>Float</code> and <code>Double</code></li>
+ <li>
+ <code>NaN</code>, <code>Infinity</code>, <code>-Infinity</code> and <code>-0.0</code> match <code>Float</code>, <code>Double</code></li></ul>
+ <p>
+ As a consequence, the following apparent subtyping relationships hold:</p>
+ <pre><code class="scala scalatex-highlight-js">Byte &lt;:&lt; Short &lt;:&lt; Int &lt;:&lt; Double
+ &lt;:&lt; Float &lt;:&lt;</code></pre>
+ <p>
+ if strict-floats are enabled, or</p>
+ <pre><code class="scala scalatex-highlight-js">Byte &lt;:&lt; Short &lt;:&lt; Int &lt;:&lt; Float =:= Double</code></pre>
+ <p>
+ otherwise.
+</p>
+ <h2 id="Undefinedbehaviors" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#Undefinedbehaviors" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Undefined behaviors</h2>
+ <p>
+ The JVM is a very well specified environment, which even specifies how some bugs are reported as exceptions. Some examples are:</p>
+ <ul>
+ <li>
+ <code>NullPointerException</code></li>
+ <li>
+ <code>ArrayIndexOutOfBoundsException</code> and <code>StringIndexOutOfBoundsException</code></li>
+ <li>
+ <code>ClassCastException</code></li>
+ <li>
+ <code>ArithmeticException</code> (such as integer division by 0)</li>
+ <li>
+ <code>StackOverflowError</code> and other <code>VirtualMachineError</code>s</li></ul>
+ <p>
+ Because Scala.js does not receive VM support to detect such erroneous conditions, checking them is typically too expensive.</p>
+ <p>
+ Therefore, all of these are considered <a href="http://en.wikipedia.org/wiki/Undefined_behavior">undefined behavior</a>.</p>
+ <p>
+ Some of these, however, can be configured to be compliant with sbt settings. Currently, only <code>ClassCastException</code>s (thrown by invalid <code>asInstanceOf</code> calls) are configurable, but the list will probably expand in future versions.</p>
+ <p>
+ Every configurable undefined behavior has 3 possible modes:</p>
+ <ul>
+ <li>
+ <b>Compliant</b>: behaves as specified on a JVM</li>
+ <li>
+ <b>Unchecked</b>: completely unchecked and undefined</li>
+ <li>
+ <b>Fatal</b>: checked, but throws <a href="http://www.scala-js.org/api/scalajs-library/0.6.0/#scala.scalajs.runtime.UndefinedBehaviorError">UndefinedBehaviorError</a>s instead of the specified exception.</li></ul>
+ <p>
+ By default, undefined behaviors are in Fatal mode for fastOptJS and in Unchecked mode for fullOptJS. This is so that bugs can be detected more easily during development, with predictable exceptions and stack traces. In production code (fullOptJS), the checks are removed for maximum efficiency.</p>
+ <p>
+ <code>UndefinedBehaviorError</code>s are <i>fatal</i> in the sense that they are not matched by <code>case NonFatal(e)</code> handlers. This makes sure that they always crash your program as early as possible, so that you can detect and fix the bug. It is <i>never</i> OK to catch an <code>UndefinedBehaviorError</code> (other than in a testing framework), since that means your program will behave differently in fullOpt stage than in fastOpt.</p>
+ <p>
+ If you need a particular kind of exception to be thrown in compliance with the JVM semantics, you can do so with an sbt setting. For example, this setting enables compliant <code>asInstanceOf</code>s:</p>
+ <pre><code class="scala scalatex-highlight-js">scalaJSSemantics ~= { _.withAsInstanceOfs(
+ org.scalajs.core.tools.sem.CheckedBehavior.Compliant) }</code></pre>
+ <p>
+ Note that this will have (potentially major) performance impacts.</p>
+ <p>
+ For a more detailed rationale, see the section <a href="#Whydoeserrorbehaviordiffer?">Why does error behavior differ?</a>.
+</p>
+ <h2 id="Reflection" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#Reflection" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Reflection</h2>
+ <p>
+ Java reflection and, a fortiori, Scala reflection, are not supported. There is limited support for <code>java.lang.Class</code>, e.g., <code>obj.getClass.getName</code> will work for any Scala.js object (not for objects that come from JavaScript interop). Reflection makes it difficult to perform the optimizations that Scala.js heavily relies on. For a more detailed discussion on this topic, take a look at the section <a href="#WhyNoReflection?">Why No Reflection?</a>.
+</p>
+ <h2 id="Regularexpressions" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#Regularexpressions" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Regular expressions</h2>
+ <p>
+ <a href="http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Guide:Regular_Expressions">JavaScript regular expressions</a> are slightly different from <a href="http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html">Java regular expressions</a>. The support for regular expressions in Scala.js is implemented on top of JavaScript regexes.</p>
+ <p>
+ This sometimes has an impact on functions in the Scala library that use regular expressions themselves. A list of known functions that are
+ affected is given here:</p>
+ <ul>
+ <li>
+ <code>StringLike.split(x: Array[Char])</code>
+</li></ul>
+ <h2 id="Symbols" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#Symbols" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Symbols</h2>
+ <p>
+ <code>scala.Symbol</code> is supported, but is a potential source of memory leaks in applications that make heavy use of symbols. The main reason is that
+ JavaScript does not support weak references, causing all symbols created by Scala.js to remain in memory throughout the lifetime of the application.
+</p>
+ <h2 id="Enumerations" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#Enumerations" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Enumerations</h2>
+ <p>
+ The methods <code>Value()</code> and <code>Value(i: Int)</code> on <code>scala.Enumeration</code> use reflection to retrieve a string representation of the member name and are therefore -- in principle -- unsupported. However, since Enumerations are an integral part of the Scala library, Scala.js adds limited support for these two methods:</p>
+ <p>
+ Calls to either of these two methods of the forms:</p>
+ <pre><code class="scala scalatex-highlight-js">val &lt;ident&gt; = Value
+val &lt;ident&gt; = Value(&lt;num&gt;)</code></pre>
+ <p>
+ are statically rewritten to (a slightly more complicated version of):</p>
+ <pre><code class="scala scalatex-highlight-js">val &lt;ident&gt; = Value(&quot;&lt;ident&gt;&quot;)
+val &lt;ident&gt; = Value(&lt;num&gt;, &quot;&lt;ident&gt;&quot;)</code></pre>
+ <p>
+ Note that this also includes calls like</p>
+ <pre><code class="scala scalatex-highlight-js">val A, B, C, D = Value</code></pre>
+ <p>
+ since they are desugared into separate <code>val</code> definitions.</p>
+ <p>
+ Calls to either of these two methods which could not be rewritten, or calls to constructors of the protected &lt;code&gt;Val&lt;/code&gt; class without an explicit name as parameter, will issue a warning.</p>
+ <p>
+ Note that the name rewriting honors the <code>nextName</code> iterator. Therefore, the full rewrite is:</p>
+ <pre><code class="scala scalatex-highlight-js">val &lt;ident&gt; = Value(
+ if (nextName != null &amp;&amp; nextName.hasNext)
+ nextName.next()
+ else
+ &quot;&lt;ident&gt;&quot;
+)</code></pre>
+ <p>
+ We believe that this covers most use cases of <code>scala.Enumeration</code>. Please let us know if another (generalized) rewrite would make your life easier.
+</p>
+<h1 id="LibraryDifferences" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#LibraryDifferences" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Library Differences</h1>
+
+
+ <p>
+ Scala.js differs from Scala-JVM not just in the corner-cases of the language, but also in the libraries available. Scala-JVM has access to JVM APIs and the wealth of the Java libraries, while Scala.js has access to Javascript APIs and Javascript libraries. It's also possible to write pure-Scala libraries that run on both Scala.js and Scala-JVM, as detailed <a>here</a>.</p>
+ <p>
+ This table gives a quick overview of the sorts of libraries you can and can't use when working on Scala.js:
+</p>
+
+
+ <table class="pure-table pure-table-horizontal half-table"><thead><th>Can Use</th><th>Can't Use</th></thead><tbody>
+
+ <tr>
+ <td>Most of java.lang.*</td><td>java.lang.Thread, java.lang.Runtime, ...</td>
+</tr>
+ <tr>
+ <td>Almost all of scala.*</td><td>scala.collection.parallel, scala.tools.nsc</td>
+</tr>
+ <tr>
+ <td>Some of java.util.*</td><td>org.omg.CORBA, sun.misc.*</td>
+</tr>
+ <tr>
+ <td>Macros: uPickle, Scala-Async, Scalaxy, etc</td><td>Reflection: Scala-Pickling, Scala-Reflect</td>
+</tr>
+ <tr>
+ <td>Shapeless, Scalaz, Scalatags, uTest</td><td>Scalatest, Scalate</td>
+</tr>
+ <tr>
+ <td>XMLHttpRequest, Websockets. Localstorage</td><td>Netty, Akka, Spray, File IO, JNI</td>
+</tr>
+ <tr>
+ <td>HTML DOM, Canvas, WebGL</td><td>AWT, Swing, SWT, OpenGL</td>
+</tr>
+ <tr>
+ <td>Chipmunk.js, Hand.js, React.js, jQuery</td><td>Guice, JUnit, Apache-Commons, log4j</td>
+</tr>
+ <tr>
+ <td>IntelliJ, Eclipse, SBT, Chrome console, Firebug</td><td>Scala REPL, Yourkit, VisualVM, JProfiler</td>
+</tr></tbody></table>
+ <p>
+ We'll go into each section bit by bit
+</p>
+ <h2 id="StandardLibrary" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#StandardLibrary" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Standard Library</h2>
+ <table class="pure-table pure-table-horizontal half-table"><thead><th>Can Use</th><th>Can't Use</th></thead><tbody>
+
+ <tr>
+ <td>Most of java.lang.*</td><td>java.lang.Thread, java.lang.Runtime, ...</td>
+</tr>
+ <tr>
+ <td>Almost all of scala.*</td><td>scala.collection.parallel, scala.tools.nsc</td>
+</tr>
+ <tr>
+ <td>Some of java.util.*</td><td>org.omg.CORBA, sun.misc.*</td>
+</tr></tbody></table>
+ <p>
+ You can use more-or-less the whole Scala standard library in Scala.js, sans some more esoteric components like the parallel collections or the tools. Furthermore, we've ported some subset of the Java standard library that many common Scala libraries depends on, including most of <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">java.lang.*</code> and some of <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">java.util.*</code>.</p>
+ <p>
+ There isn't a full list of standard library library APIs which are available from Scala.js, but it should be enough to give you a rough idea of what is supported. The full list of classes that have been ported to Scala.js is available under <a href="#AvailableJavaAPIs">Available Java APIs</a>
+</p>
+ <h2 id="Macrosv.s.Reflection" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#Macrosv.s.Reflection" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Macros v.s. Reflection</h2>
+ <table class="pure-table pure-table-horizontal half-table"><thead><th>Can Use</th><th>Can't Use</th></thead><tbody>
+
+ <tr>
+ <td>Macros: uPickle, Scala-Async, Scalaxy, etc</td><td>Reflection: Scala-Pickling, Scala-Reflect</td>
+</tr></tbody></table>
+ <p>
+ As described <a href="#WhyNoReflection?">here</a>, Reflection is not supported in Scala.js, due to the way it inhibits optimization. This doesn't just mean you can't use reflection yourself: many third-party libraries also use reflection, and you won't be able to use them either.
+</p>
+ <p>
+ On the other hand, Scala.js does support Macros, and macros can in many ways substitute many of the use cases that people have traditionally used reflection for (see <a href="#Macros">here</a>). For example, instead of using a reflection-based serialization library like <a href="https://github.com/scala/pickling">scala-pickling</a>, you can use a macro-based library such as <a href="https://github.com/lihaoyi/upickle">uPickle</a>.
+</p>
+ <h2 id="Pure-Scalav.s.JavaLibraries" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#Pure-Scalav.s.JavaLibraries" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Pure-Scala v.s. Java Libraries</h2>
+ <table class="pure-table pure-table-horizontal half-table"><thead><th>Can Use</th><th>Can't Use</th></thead><tbody>
+
+ <tr>
+ <td>Shapeless, Scalaz, Scalatags, uTest</td><td>Scalatest, Scalate</td></tr></tbody></table>
+ <p>
+ Scala.js has access to any pure-Scala libraries that you have cross-compiled to Scala.js, and cross-compiling a pure-Scala library with no dependencies is straightforward. Many of them, such as the ones listed above, have already been cross-compiled and can be used via their maven coordinates.</p>
+ <p>
+ You cannot use any libraries which have a Java dependency. This means libraries like <a href="http://www.scalatest.org/">ScalaTest</a> or <a href="https://github.com/scalate/scalate">Scalate</a>, which depend on a number of external Java libraries or source files, cannot be used from Scala.js. You can only use libraries which have no dependency on Java libraries or sources.
+</p>
+ <h2 id="JavascriptAPIsv.s.JVMAPIs" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#JavascriptAPIsv.s.JVMAPIs" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Javascript APIs v.s. JVM APIs</h2>
+ <table class="pure-table pure-table-horizontal half-table"><thead><th>Can Use</th><th>Can't Use</th></thead><tbody>
+
+ <tr>
+ <td>XMLHttpRequest, Websockets. Localstorage</td><td>Netty, Akka, Spray, File IO, JNI</td>
+</tr>
+ <tr>
+ <td>HTML DOM, Canvas, WebGL</td><td>AWT, Swing, SWT, OpenGL</td>
+</tr></tbody></table>
+ <p>
+ Apart from depending on Java sources, the other thing that you can't use in Scala.js are JVM-specific APIs. This means that anything which goes down to the underlying operating system, filesystem, GUI or network are unavailable in Scala.js. This makes sense when you consider that these capabilities are no provided by the browser which Scala.js runs in, and it's impossible to re-implement them ourselves.</p>
+ <p>
+ In exchange for this, Scala.js provides you access to Browser APIs that do related things. Although you can't set up a HTTP server to take in-bound requests, you can make out-bound requests using <a href="https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest">XMLHttpRequest</a> to other servers. You can't write to the filesystem or databases directly, but you can write to the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">dom.localStorage</code> provided by the browser. You can't use Swing or AWT or WebGL but instead work with the DOM and Canvas and WebGL.</p>
+ <p>
+ Naturally, none of these are an exact replacement, as the browser environment is fundamentally different from that of a desktop application running on the JVM. Nonetheless, there are many analogues, and if so desired you can write code to abstract away these differences and run on both Scala.js and Scala-JVM
+
+</p>
+ <h2 id="Scala/Browsertoolingv.s.Javatooling" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#Scala/Browsertoolingv.s.Javatooling" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Scala/Browser tooling v.s. Java tooling</h2>
+ <table class="pure-table pure-table-horizontal half-table"><thead><th>Can Use</th><th>Can't Use</th></thead><tbody>
+
+ <tr>
+ <td>Chipmunk.js, Hand.js, React.js, jQuery</td><td>Guice, JUnit, Apache-Commons, log4j</td>
+
+</tr></tbody></table>
+ <p>
+ Lastly, there is the matter of tools. Naturally, all the Scala tools which depend on the JVM are out. This means things like the <a href="http://www.yourkit.com/">Yourkit</a>, <a href="http://visualvm.java.net/">VisualVM</a> and <a href="https://www.ej-technologies.com/products/jprofiler/overview.html">JProfiler</a> profilers, as well as things like the Scala command-line REPL which relies on classloaders and other such things to run on the JVM</p>
+ <p>
+ On the other hand, you do get to keep and continue using many tools which are build for Scala but JVM-agnostic. For example, IDEs such a <a href="http://blog.jetbrains.com/scala/">IntelliJ</a> and <a href="http://scala-ide.org/">Eclipse</a> work great with Scala.js; from their point of view, it's just Scala, and things like code-navigation, refactoring and error-highlighting all work out of the box. SBT works with Scala.js too, and you see the same compile-erorrs in the command-line as you would in vanilla Scala, and even things like incremental compilation work un-changed.</p>
+ <p>
+ Lastly, you gain access to browser tools that don't work with normal Scala: you can use the Chrome or Firefox consoles to poke at your Scala.js application from the command line, or their profilers/debuggers. With source maps set up, you can even step-through debug your Scala.js application directly in Chrome.</p>
+
+
+ <div class="header scalatex-header scalatex-hover-container" id="TheCompilationPipeline" style="display: block;"><h1 id="TheCompilationPipeline">The Compilation Pipeline<a class="scalatex-header-link" href="#TheCompilationPipeline" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a></h1><br /></div>
+
+
+<p>
+ Scala.js is implemented as a compiler plugin in the Scala compiler. Despite this, the overall process looks very different from that of a normal Scala application. This is because Scala.js optimizes for the size of the compiled executable, which is something that Scala-JVM does not usually do.
+</p>
+<h1 id="WholeProgramOptimizaton" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#WholeProgramOptimizaton" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Whole Program Optimizaton</h1>
+ <p>
+ At a first approximation, Scala.js achieves its tiny executables by using whole-program optimization. Scala-JVM, like Java, allows for separate compilation: this means that after compilation, you can combine your compiled code with code compiled separately, which can interact with the code you already compiled in an ad-hoc basis: code from both sides can call each others methods, instantiate each others classes, etc. without any limits.
+</p>
+ <p>
+ Even things like package-private do not help you: Java packages are separate-compile-able too, and multiple compilation runs can dump things in the same package! You may think that private members and methods may be some salvation, but the Java ecosystem typically relies heavily on reflection, which depends on the fact that these private things remain exactly as-they-are.
+</p>
+ <p>
+ Overall, this makes it difficult to do any meaningful optimization: you never know whether or not you can eliminate a class, method or field. Even if it's not used anywhere you can see, it could easily be used by some other code compiled separately, or accessed through reflection.
+</p>
+ <p>
+ With Scala.js, we have decided to forgo reflection, and forgo separate compilation, in exchange for smaller executables. This is made easier by the fact that the pure-Scala ecosystem makes little use of reflection overall. Thus, at the right before shipping your Scala.js app to your users, the Scala.js optimizer gathers up all your Scala.js code, determines which things are used and which are not, and eliminates all the un-used classes/methods/variables. This allows us to achieve a much smaller code size than is possible with reflection/separate-compilation support. Furthermore, because we forgo these two things, we can perform much more aggressive inlining and other compile-time optimizations than is possible with Scala-JVM, further reducing code size and improving performance.
+</p>
+ <p>
+ It's worth noting that such optimizations exist as an option on the JVM aswell: <a href="http://proguard.sourceforge.net/">Proguard</a> is a well known library for doing similar DCE/optimization for Java/Scala applications, and is extensively used in developing mobile applications which face similar &quot;minimize-code-size&quot; constraints that web-apps do. However, the bulk of Scala code which runs on the server does not use these tools.
+</p>
+<h1 id="HowCompilationWorks" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#HowCompilationWorks" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>How Compilation Works</h1>
+ <p>
+ The Scala.js compilation pipeline is roughly split into multiple stages:
+</p>
+ <ul>
+ <li>
+ <b>Initial Compilation</b>: <code>.scala</code> files to <code>.class</code> and <code>.sjsir</code> files</li>
+ <li>
+ <b>Fast Optimization</b>: <code>.sjsir</code> files to one smallish/fast <code>.js</code> file, or</li>
+ <li>
+ <b>Full Optimization</b>: <code>.sjsir</code> files to one smaller/faster <code>.js</code> file
+</li></ul>
+ <p>
+ <code>.scala</code> files are the source code you're familiar with. <code>.class</code> files are the JVM-targetted artifacts which aren't used for actually producing <code>.js</code> files, but are kept around for pretty much everything else: the compiler uses them for separate compilation and macros, and tools such as <a href="http://blog.jetbrains.com/scala/">IntelliJ</a> or <a href="http://scala-ide.org/">Eclipse</a> use these files to provide IDE support for Scala.js code. <code>.js</code> files are the output Javascript, which we can execute in a web browser.</p>
+ <p>
+ <code>.sjsir</code> files are worth calling out: the name stands for &quot;ScalaJS Intermediate Representation&quot;, and these files contain compiled code half-way between Scala and Javascript: most Scala features have by this point been replaced by their Java/Javascript equivalents, but it still contains Types (which have all been inferred) that can aid in analysis. Many Scala.js specific optimizations take place on this IR.
+</p>
+ <p>
+ Each stage has a purpose, and together the stages do bring benefits to offset their cost in complexity. The original compilation pipeline was much more simple:
+</p>
+ <ul>
+ <li>
+ <b>Compilation</b>: <code>.scala</code> files to <code>.js</code> files
+</li></ul>
+ <p>
+ But produced far larger (20mb) and slower executables. This section will explore each stage and we'll learn what these stages do, starting with a small example program:
+</p>
+ <pre><code class="scala scalatex-highlight-js">def main() = {
+ var x = 0
+ while(x &lt; 999){
+ x = x + &quot;2&quot;.toInt
+ }
+ println(x)
+}
+</code></pre>
+ <h2 id="Compilation" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#Compilation" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Compilation</h2>
+ <p>
+ As described earlier, the Scala.js compiler is implemented as a Scala compiler plugin, and lives in the main repository in <a href="https://github.com/scala-js/scala-js/tree/master/compiler">compiler/</a>. The bulk of the plugin runs after the <code>mixin</code> phase in the <a href="http://stackoverflow.com/a/4528092/871202">Scala compilation pipeline</a>. By this point:
+</p>
+ <ul>
+ <li>
+ Types and implicits have all been inferred</li>
+ <li>
+ Pattern-matches have been compiled to imperative code</li>
+ <li>
+ <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">@tailrec</code> functions have been translated to while-loops, <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">lazy val</code>s have been replaced by <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">var</code>s.</li>
+ <li>
+ <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">trait</code>s have been <a href="http://stackoverflow.com/a/2558317/871202">replaced by interfaces and classes</a>
+</li></ul>
+ <p>
+ Overall, by the time the Scala.js compiler plugin takes action, most of the high-level features of the Scala language have already been removed. Compared to a hypothetical, alternative &quot;from scratch&quot; implementation, this approach has several advantages:
+</p>
+ <ul>
+ <li>
+ It helps ensure that the semantics of these features always, 100% match that of Scala-JVM</li>
+ <li>
+ It reduces the amount of implementation work required by re-using the existing compilation phases
+</li></ul>
+ <p>
+ This first phase is mostly a translation from the Scala compiler's internal AST to the Scala.js Intermediate Representation, and does not contain very many interesting optimizations. At the end of the initial compilation, the Scala compiler with Scala.js plugin results in two sets of files:
+</p>
+ <ul>
+ <li>
+ The original <code>.class</code> files, <i>almost</i> as if they were compiled on the JVM, but not quite. They are sufficiently valid that the compiler can execute macros defined in them, but they should not be used to actually run.</li>
+ <li>
+ The <code>.sjsir</code> files, destined for further compilation in the Scala.js pipeline.
+</li></ul>
+ <p>
+ The ASTs defined in the <code>.sjsir</code> files is at about the same level of abstraction as the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Tree</code>s that the Scala compiler is working with at this stage. However, the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Tree</code>s within the Scala compiler contain a lot of cruft related to the compiler internals, and are also not easily serializable. This phase cleans them up into a &quot;purer&quot; format, (defined in the <a href="https://github.com/scala-js/scala-js/blob/master/ir/src/main/scala/scala/scalajs/ir/Trees.scala">ir/</a> folder) which is also serializable.
+</p>
+ <p>
+ This is the only phase in the Scala.js compilation pipeline that separate compilation is possible: you can compile many different sets of Scala.js <code>.scala</code> files separately, only to combine them later. This is used e.g. for distributing Scala.js libraries as Maven Jars, which are compiled separately by library authors to be combined into a final executable later.
+</p>
+ <h2 id="FastOptimization" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#FastOptimization" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Fast Optimization</h2>
+ <p>
+ Without optimizations, the actual JavaScript code emitted for the above snippet would look like this:</p>
+ <pre><code class="javascript scalatex-highlight-js">ScalaJS.c.Lexample_ScalaJSExample$.prototype.main__V = (function() {
+ var x = 0;
+ while ((x &lt; 999)) {
+ x = ((x + new ScalaJS.c.sci_StringOps().init___T(
+ ScalaJS.m.s_Predef$().augmentString__T__T(&quot;2&quot;)).toInt__I()) | 0)
+ };
+ ScalaJS.m.s_Predef$().println__O__V(x)
+});</code></pre>
+ <p>
+ This is a pretty straightforward translation from the intermediate reprensentation into vanilla JavaScript code:
+</p>
+ <ul>
+ <li>
+ Scala-style method <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">def</code>s become Javascript-style prototype-function-assignment</li>
+ <li>
+ Scala <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">val</code>s and <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">var</code>s become Javascript <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">var</code>s</li>
+ <li>
+ Scala <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">while</code>s become Javascript <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">while</code>s</li>
+ <li>
+ Implicits are materialized, hence all the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">StringOps</code> and <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">augmentString</code> extensions are present in the output</li>
+ <li>
+ Classes and methods are fully-qualified, e.g. <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">println</code> becomes <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Predef().println</code></li>
+ <li>
+ Method names are qualified by their types, e.g. <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">__O__V</code> means that <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">println</code> takes <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Object</code> and returns <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">void</code>
+</li></ul>
+ <p>
+ This is an incomplete description of the translation, but it should give a good sense of how the translation from Scala to Javascript looks like. In general, the output is verbose but straightforward.
+</p>
+ <p>
+ In addition to this superficial translation, the optimizer does a number of things which are more subtle and vary from case to case. Without diving into too much detail, here are a few optimizations that are performed:
+</p>
+ <ul>
+ <li>
+ <b>Dead-code elimination</b>: entry-points to the program such as <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">@JSExport</code>ed methods/classes are kept, as are any methods/classes that these reference. All others are removed. This reduces the potentially 20mb of Javascript generated by a naive compilation to a more manageable 400kb-1mb for a typical application</li>
+ <li>
+ <b>Inlining</b>: under some circumstances, the optimizer inlines the implementation of methods at call sites. For example, it does so for all &quot;small enough&quot; methods. This typically reduces the code size by a small amount, but offers a several-times speedup of the generated code by inlining away much of the overhead from the abstractions (implicit-conversions, higher-order-functions, etc.) in Scala's standard library.</li>
+ <li>
+ <b>Constant-folding</b>: due to inlining and other optimizations, some variables that could have arbitrary values are known to contain a constant. These variables are replaced by their respective constants, which, in turn, can trigger more optimizations.</li>
+ <li>
+ <b>Closure elimination</b>: probably one of the most important optimizations. When inlining a higher-order method such as <code>map</code>, the optimizer can in turn inline the anonymous function inside the body of the loop, effectively turning polymorphic dispatch with closures into bare-metal loops.</li></ul>
+ <p>
+ Applying these optimizations on our examples results in the following JavaScript code instead, which is what you typically execute in fastOpt stage:
+</p>
+ <pre><code class="javascript scalatex-highlight-js">ScalaJS.c.Lexample_ScalaJSExample$.prototype.main__V = (function() {
+ var x = 0;
+ while ((x &lt; 999)) {
+ var jsx$1 = x;
+ var this$2 = new ScalaJS.c.sci_StringOps().init___T(&quot;2&quot;);
+ var this$4 = ScalaJS.m.jl_Integer$();
+ var s = this$2.repr$1;
+ x = ((jsx$1 + this$4.parseInt__T__I__I(s, 10)) | 0)
+ };
+ var x$1 = x;
+ var this$6 = ScalaJS.m.s_Console$();
+ var this$7 = this$6.outVar$2;
+ ScalaJS.as.Ljava_io_PrintStream(this$7.tl$1.get__O()).println__O__V(x$1)
+});
+</code></pre>
+ <p>
+ As a whole-program optimization, it tightly ties together the code it is compiling and does not let you e.g. inject additional classes later. This does not mean you cannot interact with external code at all: you can, but it has to go through explicitly <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">@JSExport</code>ed methods and classes via Javascript Interop, and not on ad-hoc classes/methods within the module. Thus it's entirely possible to have multiple &quot;whole-programs&quot; running in the same browser; they just will likely have duplicate copies of e.g. standard library classes inside of them, since they cannot share the code as it's not exported.
+</p>
+ <p>
+ While the input for this phase is the aggregate <code>.sjsir</code> files from your project and all your dependencies, the output is executable Javascript. This phase usually runs in less than a second, outputs a Javascript blob in the 400kb-1mb range, and is suitable for repeated use during development. This corresponds to the <code>fastOptJS</code> command in SBT.
+</p>
+ <h2 id="FullOptimization" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#FullOptimization" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Full Optimization</h2>
+ <pre><code class="javascript scalatex-highlight-js">Fd.prototype.main = function() {
+ for(var a = 0;999 &gt; a;) {
+ var b = (new D).j(&quot;2&quot;);
+ E();
+ a = a + Ja(0, b.R) | 0
+ }
+ b = Xa(ed().pc.Sb);
+ fd(b, gd(s(), a));
+ fd(b, &quot;\n&quot;);
+};
+</code></pre>
+ <p>
+ The <a href="https://developers.google.com/closure/compiler/">Google Closure Compiler</a> (GCC) is a set of tools that work with Javascript. It has multiple <a href="https://developers.google.com/closure/compiler/docs/compilation_levels">levels of optimization</a>, doing everything from basic whitespace-removal to heavy optimization. It is an old, relatively mature project that is relied on both inside and outside Google to optimize the delivery of Javascript to the browser.
+</p>
+ <p>
+ Scala.js uses GCC in its most aggressive mode: <a href="https://developers.google.com/closure/compiler/docs/api-tutorial3">Advanced Optimization</a>. GCC spits out a compressed, minified version of the Javascript (above) that <a href="#FastOptimization">Fast Optimization</a> spits out: e.g. in the example above, all identifiers have been renamed to short strings, the <code class="javascript scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">while</code>-loop has been replaced by a <code class="javascript scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">for</code>-loop, and the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">println</code> function has been inlined.
+</p>
+ <p>
+ As described in the linked documentation, GCC performs optimizations such as:
+</p>
+ <ul>
+ <li>
+ Whitespace removal</li>
+ <li>
+ Variable and property renaming</li>
+ <li>
+ Dead code elimination</li>
+ <li>
+ Inlining
+</li></ul>
+ <p>
+ Notably, GCC <i>does not preserve the semantics of arbitrary Javascript</i>! In particular, it only works for a subset of Javascript that it understands and can properly analyze. This is an issue when hand-writing Javascript for GCC since it's very easy to step outside that subset and have GCC break your code, but is not a worry when using Scala.js: the Scala.js optimizer (the previous phase in the pipeline) automatically outputs Javascript which GCC understands and can work with.</p>
+ <p>
+ There is some overlap between the optimizations performed by the Scala.js optimizer and GCC. For example, both apply DCE and inlining in some form. However, there are also a lot of optimizations specific to each tool. In general, the Scala.js optimizer is more concerned about producing very efficient JavaScript code, while GCC shines at making that JavaScript as small as possible (in terms of the number of characters).</p>
+ <p>
+ The combination of both these tools produces small and fast output blobs: ~100-400kb. This takes 5-10 seconds to run, which makes it somewhat slow for iterative development, so it's typically only run right before final testing and deployment. This corresponds to the <code>fullOptJS</code> command in SBT.
+</p>
+<hr />
+
+<p>
+ This hopefully has given a good overview of how the Scala.js compilation pipeline works. The pipeline and optimizer is a work-in-progress, and is changing all the time in an attempt to achieve ever-smaller executables and ever-faster code.
+</p>
+<p>
+ This whole chapter has been focused on the <i>what</i> but not the <i>why</i>. The chapter on <a href="#Scala.js'DesignSpace">Scala.js' Design Space</a> contains a section which talks about <a href="#SmallExecutables">why we care so much about small executables</a>.</p>
+
+ <div class="header scalatex-header scalatex-hover-container" id="Scala.js'DesignSpace" style="display: block;"><h1 id="Scala.js'DesignSpace">Scala.js' Design Space<a class="scalatex-header-link" href="#Scala.js'DesignSpace" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a></h1><br /></div>
+
+
+<p>
+ Scala.js is a relatively large project, and is the result of both an enormous amount of hard work as well as a number of decisions that craft what it's like to program in Scala.js today. Many of these decisions result in marked differences from the behavior of the same code running on the JVM. This chapter explores the reasoning and rationale behind these decisions.
+
+</p>
+<h1 id="WhyNoReflection?" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#WhyNoReflection?" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Why No Reflection?</h1>
+ <p>
+ Scala.js prohibits reflection as it makes dead-code elimination difficult, and the compiler relies heavily on dead-code elimination to generate reasonably-sized executables. The chapter on <a href="#TheCompilationPipeline">The Compilation Pipeline</a> goes into more detail of why, but a rough estimate of the effect of various optimizations on a small application is:
+</p>
+ <ul>
+ <li>
+ <b>Full Output</b> - ~20mb</li>
+ <li>
+ <b>Naive Dead-Code-Elimnation</b> - ~800kb</li>
+ <li>
+ <b>Inlining Dead-Code-Elimnation</b> - ~600kb</li>
+ <li>
+ <b>Minified by Google Closure Compiler</b> - ~200kb
+</li></ul>
+ <p>
+ The default output size of 20mb makes the executables difficult to work with. Even though browsers can deal with 20mb Javascript blobs, it takes the browser several seconds to even load it, and up to a minute after that for the JIT to optimize the whole thing.
+</p>
+ <h2 id="DeadCodeElimination" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#DeadCodeElimination" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Dead Code Elimination</h2>
+ <p>
+ To illustrate why reflection makes things difficult, consider a tiny application:
+</p>
+ <pre><code class="scala scalatex-highlight-js">@JSExport
+object App extends js.JSApp{
+ @JSExport
+ def main() = {
+ println(foo())
+ }
+ def foo() = 10
+ def bar = &quot;i am a cow&quot;
+}
+object Dead{
+ def complexFunction() = ...
+}
+</code></pre>
+ <p>
+ When the <a href="#FastOptimization">Scala.js optimizer</a>, looks at this application, it is able to deduce certain things immediately:
+</p>
+ <ul>
+ <li>
+ <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">App</code> and <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">App.main</code> are exported via <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">@JSExport</code>, and thus can't be considered dead code.</li>
+ <li>
+ <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">App.foo</code> is called from <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">App.main</code>, and so has to be kept around</li>
+ <li>
+ <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">App.bar</code> is never called from <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">App.main</code> or <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">App.foo</code>, and so can be eliminated</li>
+ <li>
+ <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Dead</code>, including <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Dead.complexFunction</code>, are not called from any live code, and can be eliminated.
+</li></ul>
+ <p>
+ The actual process is a bit more involved than this, but this is a first-approximation of how the dead-code-elimination works: you start with a small set of live code (e.g. <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">@JSExport</code>ed things), search out to find the things which are recursively reachable from that set, and eliminate all the rest. This means that the Scala.js compiler can eliminate, e.g., parts of the Scala standard library that you are not using. The standard library is not small, and makes up the bulk of the 20mb of the uncompressed blob.
+</p>
+ <h2 id="WhitherReflection?" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#WhitherReflection?" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Whither Reflection?</h2>
+ <p>
+ To imagine why reflection makes this difficult, imagine a slightly modified program which includes some reflective calls in <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">App.main</code>
+</p>
+ <pre><code class="scala scalatex-highlight-js">@JSExport
+object App extends js.JSApp{
+ @JSExport
+ def main() = {
+ Class.forName(userInput()).getMethod(userInput()).invoke()
+ }
+ def foo() = 10
+ def bar = &quot;i am a cow&quot;
+}
+object Dead{
+ def complexFunction() = ...
+}
+</code></pre>
+ <p>
+ Here, we're assuming <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">userInput()</code> is some method which returns a <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">String</code> that was input by the user or otherwise somehow decided at runtime.</p>
+ <p>
+ We can start the same process: <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">App.main</code> is live since we <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">@JSExport</code>ed it, but what objects or methods are reachable from <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">App.main</code>? The answer is: it depends on the values of <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">userInput()</code>, which we don't know. And hence we don't know which classes or methods are reachable! Depending on what <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">userInput()</code> returns, any or all methods and classes could be used by <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">App.main()</code>.</p>
+ <p>
+ This leaves us a few options:
+</p>
+ <ul>
+ <li>
+ Keep every method or class around at runtime. This severely hampers the compiler's ability to optimize, and results in massive 20mb executables.</li>
+ <li>
+ Ignore reflection, and go ahead and eliminate/optimize things assuming reflection did not exist.</li>
+ <li>
+ Allow the user to annotate methods/classes that should be kept, and eliminate the rest.
+</li></ul>
+ <p>
+ All three are possible options: Scala.js started off with #1. #3 is the approach used by <a href="http://proguard.sourceforge.net/manual/examples.html#annotated">Proguard</a>, which lets you annotate things e.g. <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">@KeepApplication</code> to preserve things for reflection and preventing Proguard from eliminating them as dead code.
+</p>
+ <p>
+ In the end, Scala.js chose #2. This is helped by the fact that overall, Scala code tends not to use reflection as heavily as Java, or dynamic languages which use it heavily. Scala uses techniques such as <a href="http://docs.scala-lang.org/tutorials/tour/anonymous-function-syntax.html">lambdas</a> or <a href="http://docs.scala-lang.org/tutorials/tour/implicit-parameters.html">implicits</a> to satisfy many use cases which Java has traditionally used reflection for, while friendly to the optimizer.
+</p>
+ <p>
+ There are a range of use-cases for reflection where you want to inspect an object's structure or methods, where lambdas or implicits don't help. People use reflection to <a href="http://jackson.codehaus.org/DataBindingDeepDive">serialize objects</a>, or for <a href="https://access.redhat.com/documentation/en-US/Fuse_ESB_Enterprise/7.1/html/Implementing_Enterprise_Integration_Patterns/files/BasicPrinciples-BeanIntegration.html">routing messages to methods</a>. However, both these cases can be satisfied by...
+</p>
+ <h2 id="Macros" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#Macros" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Macros</h2>
+
+ <p>
+ The Scala programming language, since the 2.10.x series, has support for <a href="http://docs.scala-lang.org/overviews/macros/overview.html">Macros</a> in the language. Although experimental, these are heavily used in many projects such as Play and Slick and Akka, and allow a developer to perform compile-time computations and generate code where-ever the macros are used.
+</p>
+ <p>
+ People typically think of macros as AST-transformers: you pass in an AST and get a modified AST out. However, in Scala, these ASTs are strongly-typed, and the macro is able to inspect the types involved in generating the output AST. This leads to a lot of <a href="http://docs.scala-lang.org/overviews/macros/implicits.html">interesting techniques</a> around macros where you synthesize ASTs based on the type (explicit or inferred) of the macro callsite, something that is impossible in dynamic languages.
+</p>
+ <p>
+ Practically, this means that you can use macros to do things such as inspecting the methods, fields and other type-level properties of a typed value. This allows us to do things like <a href="https://github.com/lihaoyi/upickle">serialize objects with no boilerplate</a>:
+</p>
+ <pre><code class="scala scalatex-highlight-js">import upickle._
+
+case class Thing(a: Int, b: String)
+write(Thing(1, &quot;gg&quot;))
+// res23: String = {&quot;a&quot;: 1, &quot;b&quot;: &quot;gg&quot;}
+</code></pre>
+ <p>
+ Or to <a href="https://github.com/lihaoyi/autowire">route messages to the appropiate methods</a> without boilerplate, and <i>without</i> using reflection!
+</p>
+ <p>
+ The fact that you can satisfy these use cases with macros is non-obvious: in dynamic languages, macros only get an AST, which is basically opaque when you're only passing a single value to it. With Scala, you get the value <i>together with it's type</i>, which lets you inspect the type and generate the proper serialization/routing code that is impossible to do in a dynamic language with macros.
+</p>
+ <p>
+ Using macros here also plays well with the Scala.js optimizer: the macros are fully expanded before the optimizer is run, so by the time the optimizer sees the code, there is no more magic left: it is then free to do dead-code-elimination/inlining/other-optimizations without worrying about reflection causing the code to do weird things at runtime. Thus, we've managed to substitute most of the main use-cases of reflection, and so can do without it.
+</p>
+<h1 id="Whydoeserrorbehaviordiffer?" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#Whydoeserrorbehaviordiffer?" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Why does error behavior differ?</h1>
+ <p>
+ Scala.js deviates from the semantics of Scala-JVM in several ways. Many of these ways revolve around the edge-conditions of a program: what happens when something goes wrong? An array index is out of bounds? An integer is divided-by-zero? These differences cause some amount of annoyance when debugging, since when you mess up an array index, you expect an exception, not silently-invalid-data!
+</p>
+ <p>
+ In most of these cases, it was a trade-off between performance and correctness. These are situations where the default semantics of Scala deviate from that of Javascript, and Scala.js would have to perform extra work to emulate the desired behavior. For example, compare the division behavior of the JVM and Javascript.</p>
+ <h2 id="Divide-by-zero:acasestudy" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#Divide-by-zero:acasestudy" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Divide-by-zero: a case study</h2>
+ <pre><code class="scala scalatex-highlight-js">/*JVM*/
+15 / 4 // 3</code></pre>
+ <pre><code class="javascript scalatex-highlight-js">/*JS*/
+15 / 4 // 3.25</code></pre>
+ <p>
+ On the JVM, integer division is a primitive, and dividing <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">15 / 4</code> gives <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">3</code>. However, in Javascript, it gives <code class="javascript scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">3.25</code>, since all numbers of double-precision floating points.
+</p>
+ <p>
+ Scala.js works around this in the general case by adding a <code class="javascript scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">| 0</code> to the translation, e.g.
+</p>
+ <pre><code class="scala scalatex-highlight-js">/*JVM*/
+15 / 4 // 3</code></pre>
+ <pre><code class="javascript scalatex-highlight-js">/*JS*/
+(15 / 4) | 0 // 3
+</code></pre>
+ <p>
+ This gives the correct result for most numbers, and is reasonably efficient (actually, it tends to be <i>more</i> efficient on modern VMs). However, what about dividing-by-zero?
+</p>
+ <pre><code class="scala scalatex-highlight-js">/*JVM*/
+15 / 0 // ArithmeticException</code></pre>
+ <pre><code class="javascript scalatex-highlight-js">/*JS*/
+15 / 0 // Infinity
+(15 / 0) | 0 // 0
+</code></pre>
+ <p>
+ On the JVM, the JVM is kind enough to throw an exception for you. However, in Javascript, the integer simply wraps around to <code class="javascript scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">Infinity</code>, which then gets truncated down to zero.</p>
+ <p>
+ So that's the current behavior of integers in Scala.js. One may ask: can we fix it? And the answer is, we can:</p>
+ <pre><code class="scala scalatex-highlight-js">/*JVM*/
+1 / 0 // ArithmeticException</code></pre>
+ <pre><code class="javascript scalatex-highlight-js">/*JS*/
+function intDivide(x, y){
+ var z = x / y
+ if (z == Infinity) throw new ArithmeticException(&quot;Divide by Zero&quot;)
+ else return z
+}
+intDivide(1, 0) // ArithmeticException</code></pre>
+ <p>
+ This translation fixes the problem, and enforces that the <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">ArithmeticException</code> is thrown at the correct time. However, this approach causes some overhead: what was previously two primitive operations is now a function call, a local variable assignment, and a conditional. That is a lot more expensive than two primitive operations!
+</p>
+ <h2 id="ThePerformance/CorrectnessTradeoff" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#ThePerformance/CorrectnessTradeoff" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>The Performance/Correctness Tradeoff</h2>
+ <p>
+ In the end, a lot of the semantic differences listed here come down to the same tradeoff: we could make the code behave more-like-Scala, but at a cost of adding overhead via function calls and other checks. Furthermore, the cost is paid regardless of whether the &quot;exceptional case&quot; is triggered or not: in the example above, every division in the program pays the cost!</p>
+ <p>
+ The decision to not support these exceptional cases comes down to a value judgement: how often do people actually depend on an exception being thrown as part of their program semantics, e.g. by catching it and performing actions? And how often are they just a way of indicating bugs? It turns out that very few <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">ArithmeticException</code>s, <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">ArrayIndexOutOfBoundsException</code>s, or similar are actually a necessary part of the program! They exist during debugging, but after that, these code paths are never relied upon &quot;in production&quot;.</p>
+ <p>
+ Thus Scala.js goes for a compromise: in the Fast Optimization mode, we run the code with all these checks in place (this is work in progress; currently only <code>asInstanceOf</code>s are thus checked), so as to catch cases where these errors occur close-to-the-source and make it easy for you to debug them. In Full Optimization mode, on the other hand, we remove these checks, assuming you've already ran through these cases and found any bugs during development.</p>
+ <p>
+ This is a common pattern in situations where there's a tradeoff between debuggability and speed. In Scala.js' case, it allows us to get good debuggability in development, as well as good performance in production. There's some loss in debuggability in development, sacrificed in exchange for greater performance.
+</p>
+<h1 id="SmallExecutables" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#SmallExecutables" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Small Executables</h1>
+ Why do we care so much about how big our executables are in Scala.js? Why don't we care about how big they are on Scala-JVM? This is mostly due to three reasons:
+
+ <ul>
+ <li>
+ When cross-compiling Scala to Javascript, the end-result tends to be much more verbose than when cross-compiled to Java Bytecode.</li>
+ <li>
+ Scala.js typically is run in web browsers, which typically do not work well with large executables compared to e.g. the JVM</li>
+ <li>
+ Scala.js often is delivered to many users over the network, and long download times force users to wait, degrading the user experience
+</li></ul>
+ <p>
+ These factors combined means that Scala.js has to put in extra effort to optimize the code to reduce it's size at compile-time.
+</p>
+ <h2 id="RawVerbosity" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#RawVerbosity" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Raw Verbosity</h2>
+ <p>
+ Scala.js compiles to Javascript source code, while Scala-JVM compiles to Java bytecode. Java bytecode is a binary format and thus somewhat optimized for size, while Javascript is textual and is designed to be easy to read and write by hand.</p>
+ <p>
+ What does these mean, concretely? This means that a symbol marking something, e.g. the start of a function, is often a single byte in Java bytecode. Even more, it may not have any delimiter at all, instead the meaning of the binary data being inferred from its position in the file! On the other hand, in Javascript, declaring a function takes a long-and-verbose <code class="javascript scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">function</code> keyword, which together with peripheral punctuation (<code>.</code>, <code> = </code>, etc.) often adds up to tens of bytes to express a single idea.</p>
+ <p>
+ What does this mean concretely? This means that expressing the same meaning in Javascript usually takes more &quot;raw code&quot; than expressing the same meaning in Java bytecode. Even though Java bytecode is relatively verbose for a binary format, it still is significantly more concise the Javascript, and it shows: the Scala standard library weighs in at a cool 6mb on Scala-JVM, while it weighs 20mb on Scala.js.</p>
+ <p>
+ All things being equal, this would mean that Scala.js would have to work harder to keep down code-size than Scala-JVM would have to. Alas, not all other things are equal.
+</p>
+ <h2 id="BrowsersPerformance" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#BrowsersPerformance" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Browsers Performance</h2>
+ <p>
+ Without any optimization, a naive compilation to Scala.js results in an executable (Including the standard library) weighing around 20mb. On the surface, this isn't a problem: runtimes like the JVM have no issue with loading 20mb of Java bytecode to execute; many large desktop applications weigh in the 100s of megabytes while still loading and executing fine.</p>
+ <p>
+ However, the web browser isn't a native execution environment; loading 20mb of Javascript is sufficient to heavily tax even the most modern web browsers such as Chrome and Firefox. Even though most of the code comprises class and method definitions that never have their contents executed, loading such a heavy load into e.g. Chrome makes it freeze for 5-10 seconds initially. Even after that, even after the code has all been parsed and isn't been actively executed, having all this Javascript makes the browser sluggish for up to a minute before the JIT compiler can speed things up.</p>
+ <p>
+ Overall, this means that you probably do not want to work with un-optimized Scala.js executables. Even for development, the slow load times and initial sluggishness make testing the results of your hard-work in the browser a frustrating experience. But that's not all...
+</p>
+ <h2 id="DeploymentSize" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#DeploymentSize" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Deployment Size</h2>
+ <p>
+ Scala.js applications often run in the browser. Not just any browser, but the browsers of your users, who had come to your website or web-app to try and accomplish some task. This is in stark contrast the Scala-JVM applications, which most often run on servers: servers that you own and control, and can deploy code to at your leisure.
+</p>
+ <p>
+ When running code on your own servers in some data center, you often do not care how big the compiled code is: the Scala standard library is several (6-7) megabytes, which added to your own code and any third-party libraries you're using, may add up to tens of megabytes, maybe a hundred or two if it's a relatively large application. Even that pales in comparison to the size of the JVM, which weighs in the 100s of megabytes.</p>
+ <p>
+ Even so, you are deploying your code on an machine (virtual or real) which has several gigabytes of memory and 100s of gigabytes of disk space. Even if the size of the code makes deployment slower, you only deploy fresh code a handful of times a day at most, and the size of your executable typically does not worry you.</p>
+ <p>
+ Scala.js is different: it runs in the browsers of your users. Before it can run in their browser, it first has to be downloaded, probably over a connection that is much slower than the one used to deploy your code to your servers or data-center. It probably is downloaded thousands of times per day, and every user which downloads it must pay the cost of waiting for it to finish downloading before they can take any actions on your website.
+</p>
+ <p>
+ A typical website loads ~100kb-1mb of Javascript, and 1mb is on the heavy side. Most Javascript libraries weigh in on the order of 50-100kb. For Scala.js to be useful in the browser, it has to be able to compare favorably with these numbers.
+</p>
+ <hr />
+
+ <p>
+ Thus, while on Scala-JVM you typically have executables that (including dependencies) end up weighing 10s to 100s of megabytes, Scala.js has a much tighter budget. A hello world Scala.js application weighs in at around 100kb, and as you write more code and use more libraries (and parts of the standard library) this number rises to the 100s of kb. This isn't tiny, especially compared to the many small Javascript libraries out there, but it definitely is much smaller than what you'd be used to on the JVM.</p>
+
+
+ <div class="header scalatex-header scalatex-hover-container" id="JavaAPIs" style="display: block;"><h1 id="JavaAPIs">Java APIs<a class="scalatex-header-link" href="#JavaAPIs" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a></h1><br /></div>
+
+
+<p>
+ Below is a list of classes from the Java Standard Library that are available from Scala.js. In general, much of <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">java.lang</code>, and parts of <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">java.io</code>, <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">java.util</code> and <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">java.net</code> have been ported over. This means that all these classes are available for use in Scala.js applications despite being part of the Java standard library.</p>
+<p>
+ There are many reasons you may want to port a Java class to Scala.js: you want to use it directly, you may be trying to port a library which uses it. In general, we haven't been porting things &quot;for fun&quot;, and obscure classes like <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">org.omg.corba</code> will likely never be ported: we've been porting things as the need arises in order to support libraries (e.g. <a href="https://github.com/lihaoyi/scala.rx">Scala.Rx</a> that need them.
+</p>
+<h1 id="AvailableJavaAPIs" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#AvailableJavaAPIs" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Available Java APIs</h1>
+
+ <ul>
+
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/lang/Appendable.html">java.lang.Appendable</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/lang/AutoCloseable.html">java.lang.AutoCloseable</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/lang/Boolean.html">java.lang.Boolean</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/lang/Byte.html">java.lang.Byte</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/lang/Character.html">java.lang.Character</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/lang/CharSequence.html">java.lang.CharSequence</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/lang/Class.html">java.lang.Class</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/lang/ClassLoader.html">java.lang.ClassLoader</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/lang/Cloneable.html">java.lang.Cloneable</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html">java.lang.Comparable</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/lang/Double.html">java.lang.Double</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/lang/Float.html">java.lang.Float</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/lang/InheritableThreadLocal.html">java.lang.InheritableThreadLocal</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html">java.lang.Integer</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/lang/Long.html">java.lang.Long</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/lang/Math.html">java.lang.Math</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/lang/Number.html">java.lang.Number</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/lang/Readable.html">java.lang.Readable</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.html">java.lang.Runnable</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/lang/Runtime.html">java.lang.Runtime</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/lang/Short.html">java.lang.Short</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/lang/StackTraceElement.html">java.lang.StackTraceElement</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/lang/StringBuffer.html">java.lang.StringBuffer</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html">java.lang.StringBuilder</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/lang/System.html">java.lang.System</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html">java.lang.Thread</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/lang/ThreadLocal.html">java.lang.ThreadLocal</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/lang/Throwables.html">java.lang.Throwables</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/lang/Void.html">java.lang.Void</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/lang/ref/PhantomReference.html">java.lang.ref.PhantomReference</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/lang/ref/Reference.html">java.lang.ref.Reference</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/lang/ref/ReferenceQueue.html">java.lang.ref.ReferenceQueue</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/lang/ref/SoftReference.html">java.lang.ref.SoftReference</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/lang/ref/WeakReference.html">java.lang.ref.WeakReference</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Array.html">java.lang.reflect.Array</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html">java.io.BufferedReader</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/io/ByteArrayInputStream.html">java.io.ByteArrayInputStream</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/io/ByteArrayOutputStream.html">java.io.ByteArrayOutputStream</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/io/Closeable.html">java.io.Closeable</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/io/DataInput.html">java.io.DataInput</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/io/FilterInputStream.html">java.io.FilterInputStream</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/io/FilterOutputStream.html">java.io.FilterOutputStream</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/io/Flushable.html">java.io.Flushable</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html">java.io.InputStream</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/io/InputStreamReader.html">java.io.InputStreamReader</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/io/OutputStream.html">java.io.OutputStream</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/io/OutputStreamWriter.html">java.io.OutputStreamWriter</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/io/PrintStream.html">java.io.PrintStream</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/io/PrintWriter.html">java.io.PrintWriter</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/io/Reader.html">java.io.Reader</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html">java.io.Serializable</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/io/StringReader.html">java.io.StringReader</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/io/StringWriter.html">java.io.StringWriter</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/io/Throwables.html">java.io.Throwables</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/io/Writer.html">java.io.Writer</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/net/URI.html">java.net.URI</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/net/URISyntaxException.html">java.net.URISyntaxException</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/nio/Buffer.html">java.nio.Buffer</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/nio/BufferOverflowException.html">java.nio.BufferOverflowException</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/nio/BufferUnderflowException.html">java.nio.BufferUnderflowException</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html">java.nio.ByteBuffer</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/nio/ByteOrder.html">java.nio.ByteOrder</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/nio/CharBuffer.html">java.nio.CharBuffer</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/nio/HeapByteBuffer.html">java.nio.HeapByteBuffer</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/nio/HeapCharBuffer.html">java.nio.HeapCharBuffer</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/nio/InvalidMarkException.html">java.nio.InvalidMarkException</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/nio/ReadOnlyBufferException.html">java.nio.ReadOnlyBufferException</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/nio/StringCharBuffer.html">java.nio.StringCharBuffer</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/nio/charset/CharacterCodingException.html">java.nio.charset.CharacterCodingException</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/nio/charset/Charset.html">java.nio.charset.Charset</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/nio/charset/CharsetDecoder.html">java.nio.charset.CharsetDecoder</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/nio/charset/CharsetEncoder.html">java.nio.charset.CharsetEncoder</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/nio/charset/CoderMalfunctionError.html">java.nio.charset.CoderMalfunctionError</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/nio/charset/CoderResult.html">java.nio.charset.CoderResult</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/nio/charset/CodingErrorAction.html">java.nio.charset.CodingErrorAction</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/nio/charset/MalformedInputException.html">java.nio.charset.MalformedInputException</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/nio/charset/StandardCharsets.html">java.nio.charset.StandardCharsets</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/nio/charset/UnmappableCharacterException.html">java.nio.charset.UnmappableCharacterException</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/nio/charset/UnsupportedCharsetException.html">java.nio.charset.UnsupportedCharsetException</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html">java.util.Arrays</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/util/Comparator.html">java.util.Comparator</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/util/Date.html">java.util.Date</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/util/Formattable.html">java.util.Formattable</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/util/FormattableFlags.html">java.util.FormattableFlags</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/util/Formatter.html">java.util.Formatter</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/util/Random.html">java.util.Random</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/util/Throwables.html">java.util.Throwables</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/util/UUID.html">java.util.UUID</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Executor.html">java.util.concurrent.Executor</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Throwables.html">java.util.concurrent.Throwables</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/TimeUnit.html">java.util.concurrent.TimeUnit</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicBoolean.html">java.util.concurrent.atomic.AtomicBoolean</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicInteger.html">java.util.concurrent.atomic.AtomicInteger</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicLong.html">java.util.concurrent.atomic.AtomicLong</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicReference.html">java.util.concurrent.atomic.AtomicReference</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/util/regex/Matcher.html">java.util.regex.Matcher</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/util/regex/MatchResult.html">java.util.regex.MatchResult</a>
+</li>
+ <li>
+ <a href="https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html">java.util.regex.Pattern</a>
+</li></ul>
+<h1 id="PortingJavaAPIs" style="display: block;" class="scalatex-header scalatex-hover-container"><a class="scalatex-header-link" href="#PortingJavaAPIs" style="position: absolute;right: 0;"><i class="fa fa-link"></i></a>Porting Java APIs</h1>
+ <p>
+ The process for making Java library classes available in Scala.js is relatively straightforward:</p>
+ <ul>
+ <li>
+ Find a class that you want to use in Scala.js, but is not implemented.</li>
+ <li>
+ Write a clean-room implementation in Scala, without looking at the source code of <a href="http://openjdk.java.net/">OpenJDK</a>. This is due to legal-software-license incompatibility between OpenJDK and Scala.js. Reading the docs or specification are fine, as is looking at the source of alternate implementations such as <a href="http://harmony.apache.org/">Harmony</a></li>
+ <li>
+ Submit a pull-request to the <a href="https://github.com/scala-js/scala-js">Scala.js repository</a>, including your implementation, together with tests. See the <a href="https://github.com/scala-js/scala-js/tree/master/test-suite/src/test/scala/org/scalajs/testsuite/javalib">existing tests</a> in the repository if you need examples of how to write your own.
+</li></ul>
+ <p>
+ In general, this is a simple process, for &quot;pure-Java&quot; classes which do not use any special JVM/Java-specific APIs. However, this will not be possible for classes which do! This means that classes that make use of Java-specific things like:
+</p>
+ <ul>
+ <li>
+ Threads</li>
+ <li>
+ Filesystem APIs</li>
+ <li>
+ Network APIs</li>
+ <li>
+ <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">sun.misc.Unsafe</code>
+</li></ul>
+ <p>
+ And other similar APIs will either need to be rewritten to not-use them. For example, <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">AtomicXXXs</code> can be written without threading/unsafe APIs because Javascript is single-threaded, making the implementation for e.g. an <code class="scala scalatex-highlight-js" style="display: inline;padding: 0;margin: 0;">AtomicBoolean</code> pretty trivial:
+</p>
+ <pre class="scalatex-hover-container"><code class="scala scalatex-highlight-js hljs">package java.util.concurrent.atomic
+
+class AtomicBoolean(private[this] var value: Boolean) extends Serializable {
+ def this() = this(false)
+
+ final def get(): Boolean = value
+
+ final def compareAndSet(expect: Boolean, update: Boolean): Boolean = {
+ if (expect != value) false else {
+ value = update
+ true
+ }
+ }
+
+ // For some reason, this method is not final
+ def weakCompareAndSet(expect: Boolean, update: Boolean): Boolean =
+ compareAndSet(expect, update)
+
+ final def set(newValue: Boolean): Unit =
+ value = newValue
+
+ final def lazySet(newValue: Boolean): Unit =
+ set(newValue)
+
+ final def getAndSet(newValue: Boolean): Boolean = {
+ val old = value
+ value = newValue
+ old
+ }
+
+ override def toString(): String =
+ value.toString()
+}</code><a class="scalatex-header-link" style="position: absolute;right: 0.5em;top: 0.5em;display: block;font-size: 24px;" href="https://github.com/scala-js/scala-js/blob/master/javalib/src/main/scala/java/util/concurrent/atomic/AtomicBoolean.scala#L0-L33" target="_blank"><i class="fa fa-link "></i></a></pre>
+
+ <p>
+ Others can't be ported at all (e.g. <code>java.io.File</code>) simply because the API capabilities they provide (blocking reads &amp; writes to files) do not exist in the Javascript runtime.
+</p>
+</div>
+</div></div></body></html> \ No newline at end of file
diff --git a/scripts.js b/scripts.js
new file mode 100644
index 0000000..7d37fce
--- /dev/null
+++ b/scripts.js
@@ -0,0 +1,770 @@
+var hljs=new function(){function j(v){return v.replace(/&/gm,"&amp;").replace(/</gm,"&lt;").replace(/>/gm,"&gt;")}function t(v){return v.nodeName.toLowerCase()}function h(w,x){var v=w&&w.exec(x);return v&&v.index==0}function r(w){var v=(w.className+" "+(w.parentNode?w.parentNode.className:"")).split(/\s+/);v=v.map(function(x){return x.replace(/^lang(uage)?-/,"")});return v.filter(function(x){return i(x)||/no(-?)highlight/.test(x)})[0]}function o(x,y){var v={};for(var w in x){v[w]=x[w]}if(y){for(var w in y){v[w]=y[w]}}return v}function u(x){var v=[];(function w(y,z){for(var A=y.firstChild;A;A=A.nextSibling){if(A.nodeType==3){z+=A.nodeValue.length}else{if(A.nodeType==1){v.push({event:"start",offset:z,node:A});z=w(A,z);if(!t(A).match(/br|hr|img|input/)){v.push({event:"stop",offset:z,node:A})}}}}return z})(x,0);return v}function q(w,y,C){var x=0;var F="";var z=[];function B(){if(!w.length||!y.length){return w.length?w:y}if(w[0].offset!=y[0].offset){return(w[0].offset<y[0].offset)?w:y}return y[0].event=="start"?w:y}function A(H){function G(I){return" "+I.nodeName+'="'+j(I.value)+'"'}F+="<"+t(H)+Array.prototype.map.call(H.attributes,G).join("")+">"}function E(G){F+="</"+t(G)+">"}function v(G){(G.event=="start"?A:E)(G.node)}while(w.length||y.length){var D=B();F+=j(C.substr(x,D[0].offset-x));x=D[0].offset;if(D==w){z.reverse().forEach(E);do{v(D.splice(0,1)[0]);D=B()}while(D==w&&D.length&&D[0].offset==x);z.reverse().forEach(A)}else{if(D[0].event=="start"){z.push(D[0].node)}else{z.pop()}v(D.splice(0,1)[0])}}return F+j(C.substr(x))}function m(y){function v(z){return(z&&z.source)||z}function w(A,z){return RegExp(v(A),"m"+(y.cI?"i":"")+(z?"g":""))}function x(D,C){if(D.compiled){return}D.compiled=true;D.k=D.k||D.bK;if(D.k){var z={};var E=function(G,F){if(y.cI){F=F.toLowerCase()}F.split(" ").forEach(function(H){var I=H.split("|");z[I[0]]=[G,I[1]?Number(I[1]):1]})};if(typeof D.k=="string"){E("keyword",D.k)}else{Object.keys(D.k).forEach(function(F){E(F,D.k[F])})}D.k=z}D.lR=w(D.l||/\b[A-Za-z0-9_]+\b/,true);if(C){if(D.bK){D.b="\\b("+D.bK.split(" ").join("|")+")\\b"}if(!D.b){D.b=/\B|\b/}D.bR=w(D.b);if(!D.e&&!D.eW){D.e=/\B|\b/}if(D.e){D.eR=w(D.e)}D.tE=v(D.e)||"";if(D.eW&&C.tE){D.tE+=(D.e?"|":"")+C.tE}}if(D.i){D.iR=w(D.i)}if(D.r===undefined){D.r=1}if(!D.c){D.c=[]}var B=[];D.c.forEach(function(F){if(F.v){F.v.forEach(function(G){B.push(o(F,G))})}else{B.push(F=="self"?D:F)}});D.c=B;D.c.forEach(function(F){x(F,D)});if(D.starts){x(D.starts,C)}var A=D.c.map(function(F){return F.bK?"\\.?("+F.b+")\\.?":F.b}).concat([D.tE,D.i]).map(v).filter(Boolean);D.t=A.length?w(A.join("|"),true):{exec:function(F){return null}}}x(y)}function c(T,L,J,R){function v(V,W){for(var U=0;U<W.c.length;U++){if(h(W.c[U].bR,V)){return W.c[U]}}}function z(V,U){if(h(V.eR,U)){return V}if(V.eW){return z(V.parent,U)}}function A(U,V){return !J&&h(V.iR,U)}function E(W,U){var V=M.cI?U[0].toLowerCase():U[0];return W.k.hasOwnProperty(V)&&W.k[V]}function w(aa,Y,X,W){var U=W?"":b.classPrefix,V='<span class="'+U,Z=X?"":"</span>";V+=aa+'">';return V+Y+Z}function N(){if(!I.k){return j(C)}var U="";var X=0;I.lR.lastIndex=0;var V=I.lR.exec(C);while(V){U+=j(C.substr(X,V.index-X));var W=E(I,V);if(W){H+=W[1];U+=w(W[0],j(V[0]))}else{U+=j(V[0])}X=I.lR.lastIndex;V=I.lR.exec(C)}return U+j(C.substr(X))}function F(){if(I.sL&&!f[I.sL]){return j(C)}var U=I.sL?c(I.sL,C,true,S):e(C);if(I.r>0){H+=U.r}if(I.subLanguageMode=="continuous"){S=U.top}return w(U.language,U.value,false,true)}function Q(){return I.sL!==undefined?F():N()}function P(W,V){var U=W.cN?w(W.cN,"",true):"";if(W.rB){D+=U;C=""}else{if(W.eB){D+=j(V)+U;C=""}else{D+=U;C=V}}I=Object.create(W,{parent:{value:I}})}function G(U,Y){C+=U;if(Y===undefined){D+=Q();return 0}var W=v(Y,I);if(W){D+=Q();P(W,Y);return W.rB?0:Y.length}var X=z(I,Y);if(X){var V=I;if(!(V.rE||V.eE)){C+=Y}D+=Q();do{if(I.cN){D+="</span>"}H+=I.r;I=I.parent}while(I!=X.parent);if(V.eE){D+=j(Y)}C="";if(X.starts){P(X.starts,"")}return V.rE?0:Y.length}if(A(Y,I)){throw new Error('Illegal lexeme "'+Y+'" for mode "'+(I.cN||"<unnamed>")+'"')}C+=Y;return Y.length||1}var M=i(T);if(!M){throw new Error('Unknown language: "'+T+'"')}m(M);var I=R||M;var S;var D="";for(var K=I;K!=M;K=K.parent){if(K.cN){D=w(K.cN,"",true)+D}}var C="";var H=0;try{var B,y,x=0;while(true){I.t.lastIndex=x;B=I.t.exec(L);if(!B){break}y=G(L.substr(x,B.index-x),B[0]);x=B.index+y}G(L.substr(x));for(var K=I;K.parent;K=K.parent){if(K.cN){D+="</span>"}}return{r:H,value:D,language:T,top:I}}catch(O){if(O.message.indexOf("Illegal")!=-1){return{r:0,value:j(L)}}else{throw O}}}function e(y,x){x=x||b.languages||Object.keys(f);var v={r:0,value:j(y)};var w=v;x.forEach(function(z){if(!i(z)){return}var A=c(z,y,false);A.language=z;if(A.r>w.r){w=A}if(A.r>v.r){w=v;v=A}});if(w.language){v.second_best=w}return v}function g(v){if(b.tabReplace){v=v.replace(/^((<[^>]+>|\t)+)/gm,function(w,z,y,x){return z.replace(/\t/g,b.tabReplace)})}if(b.useBR){v=v.replace(/\n/g,"<br>")}return v}function p(A){var B=r(A);if(/no(-?)highlight/.test(B)){return}var y;if(b.useBR){y=document.createElementNS("http://www.w3.org/1999/xhtml","div");y.innerHTML=A.innerHTML.replace(/\n/g,"").replace(/<br[ \/]*>/g,"\n")}else{y=A}var z=y.textContent;var v=B?c(B,z,true):e(z);var x=u(y);if(x.length){var w=document.createElementNS("http://www.w3.org/1999/xhtml","div");w.innerHTML=v.value;v.value=q(x,u(w),z)}v.value=g(v.value);A.innerHTML=v.value;A.className+=" hljs "+(!B&&v.language||"");A.result={language:v.language,re:v.r};if(v.second_best){A.second_best={language:v.second_best.language,re:v.second_best.r}}}var b={classPrefix:"hljs-",tabReplace:null,useBR:false,languages:undefined};function s(v){b=o(b,v)}function l(){if(l.called){return}l.called=true;var v=document.querySelectorAll("pre code");Array.prototype.forEach.call(v,p)}function a(){addEventListener("DOMContentLoaded",l,false);addEventListener("load",l,false)}var f={};var n={};function d(v,x){var w=f[v]=x(this);if(w.aliases){w.aliases.forEach(function(y){n[y]=v})}}function k(){return Object.keys(f)}function i(v){return f[v]||f[n[v]]}this.highlight=c;this.highlightAuto=e;this.fixMarkup=g;this.highlightBlock=p;this.configure=s;this.initHighlighting=l;this.initHighlightingOnLoad=a;this.registerLanguage=d;this.listLanguages=k;this.getLanguage=i;this.inherit=o;this.IR="[a-zA-Z][a-zA-Z0-9_]*";this.UIR="[a-zA-Z_][a-zA-Z0-9_]*";this.NR="\\b\\d+(\\.\\d+)?";this.CNR="(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)";this.BNR="\\b(0b[01]+)";this.RSR="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~";this.BE={b:"\\\\[\\s\\S]",r:0};this.ASM={cN:"string",b:"'",e:"'",i:"\\n",c:[this.BE]};this.QSM={cN:"string",b:'"',e:'"',i:"\\n",c:[this.BE]};this.PWM={b:/\b(a|an|the|are|I|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such)\b/};this.CLCM={cN:"comment",b:"//",e:"$",c:[this.PWM]};this.CBCM={cN:"comment",b:"/\\*",e:"\\*/",c:[this.PWM]};this.HCM={cN:"comment",b:"#",e:"$",c:[this.PWM]};this.NM={cN:"number",b:this.NR,r:0};this.CNM={cN:"number",b:this.CNR,r:0};this.BNM={cN:"number",b:this.BNR,r:0};this.CSSNM={cN:"number",b:this.NR+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",r:0};this.RM={cN:"regexp",b:/\//,e:/\/[gim]*/,i:/\n/,c:[this.BE,{b:/\[/,e:/\]/,r:0,c:[this.BE]}]};this.TM={cN:"title",b:this.IR,r:0};this.UTM={cN:"title",b:this.UIR,r:0}}();hljs.registerLanguage("coffeescript",function(c){var b={keyword:"in if for while finally new do return else break catch instanceof throw try this switch continue typeof delete debugger super then unless until loop of by when and or is isnt not",literal:"true false null undefined yes no on off",reserved:"case default function var void with const let enum export import native __hasProp __extends __slice __bind __indexOf",built_in:"npm require console print module global window document"};var a="[A-Za-z$_][0-9A-Za-z$_]*";var f=c.inherit(c.TM,{b:a});var e={cN:"subst",b:/#\{/,e:/}/,k:b};var d=[c.BNM,c.inherit(c.CNM,{starts:{e:"(\\s*/)?",r:0}}),{cN:"string",v:[{b:/'''/,e:/'''/,c:[c.BE]},{b:/'/,e:/'/,c:[c.BE]},{b:/"""/,e:/"""/,c:[c.BE,e]},{b:/"/,e:/"/,c:[c.BE,e]}]},{cN:"regexp",v:[{b:"///",e:"///",c:[e,c.HCM]},{b:"//[gim]*",r:0},{b:/\/(?![ *])(\\\/|.)*?\/[gim]*(?=\W|$)/}]},{cN:"property",b:"@"+a},{b:"`",e:"`",eB:true,eE:true,sL:"javascript"}];e.c=d;return{aliases:["coffee","cson","iced"],k:b,i:/\/\*/,c:d.concat([{cN:"comment",b:"###",e:"###"},c.HCM,{cN:"function",b:"(^\\s*|\\B)("+a+"\\s*=\\s*)?(\\(.*\\))?\\s*\\B[-=]>",e:"[-=]>",rB:true,c:[f,{cN:"params",b:"\\([^\\(]",rB:true,c:[{b:/\(/,e:/\)/,k:b,c:["self"].concat(d)}]}]},{cN:"class",bK:"class",e:"$",i:/[:="\[\]]/,c:[{bK:"extends",eW:true,i:/[:="\[\]]/,c:[f]},f]},{cN:"attribute",b:a+":",e:":",rB:true,eE:true,r:0}])}});hljs.registerLanguage("nginx",function(c){var b={cN:"variable",v:[{b:/\$\d+/},{b:/\$\{/,e:/}/},{b:"[\\$\\@]"+c.UIR}]};var a={eW:true,l:"[a-z/_]+",k:{built_in:"on off yes no true false none blocked debug info notice warn error crit select break last permanent redirect kqueue rtsig epoll poll /dev/poll"},r:0,i:"=>",c:[c.HCM,{cN:"string",c:[c.BE,b],v:[{b:/"/,e:/"/},{b:/'/,e:/'/}]},{cN:"url",b:"([a-z]+):/",e:"\\s",eW:true,eE:true,c:[b]},{cN:"regexp",c:[c.BE,b],v:[{b:"\\s\\^",e:"\\s|{|;",rE:true},{b:"~\\*?\\s+",e:"\\s|{|;",rE:true},{b:"\\*(\\.[a-z\\-]+)+"},{b:"([a-z\\-]+\\.)+\\*"}]},{cN:"number",b:"\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b"},{cN:"number",b:"\\b\\d+[kKmMgGdshdwy]*\\b",r:0},b]};return{aliases:["nginxconf"],c:[c.HCM,{b:c.UIR+"\\s",e:";|{",rB:true,c:[{cN:"title",b:c.UIR,starts:a}],r:0}],i:"[^\\s\\}]"}});hljs.registerLanguage("json",function(a){var e={literal:"true false null"};var d=[a.QSM,a.CNM];var c={cN:"value",e:",",eW:true,eE:true,c:d,k:e};var b={b:"{",e:"}",c:[{cN:"attribute",b:'\\s*"',e:'"\\s*:\\s*',eB:true,eE:true,c:[a.BE],i:"\\n",starts:c}],i:"\\S"};var f={b:"\\[",e:"\\]",c:[a.inherit(c,{cN:null})],i:"\\S"};d.splice(d.length,0,b,f);return{c:d,k:e,i:"\\S"}});hljs.registerLanguage("http",function(a){return{i:"\\S",c:[{cN:"status",b:"^HTTP/[0-9\\.]+",e:"$",c:[{cN:"number",b:"\\b\\d{3}\\b"}]},{cN:"request",b:"^[A-Z]+ (.*?) HTTP/[0-9\\.]+$",rB:true,e:"$",c:[{cN:"string",b:" ",e:" ",eB:true,eE:true}]},{cN:"attribute",b:"^\\w",e:": ",eE:true,i:"\\n|\\s|=",starts:{cN:"string",e:"$"}},{b:"\\n\\n",starts:{sL:"",eW:true}}]}});hljs.registerLanguage("javascript",function(a){return{aliases:["js"],k:{keyword:"in if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const class",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document"},c:[{cN:"pi",b:/^\s*('|")use strict('|")/,r:10},a.ASM,a.QSM,a.CLCM,a.CBCM,a.CNM,{b:"("+a.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return throw case",c:[a.CLCM,a.CBCM,a.RM,{b:/</,e:/>;/,r:0,sL:"xml"}],r:0},{cN:"function",bK:"function",e:/\{/,eE:true,c:[a.inherit(a.TM,{b:/[A-Za-z$_][0-9A-Za-z$_]*/}),{cN:"params",b:/\(/,e:/\)/,c:[a.CLCM,a.CBCM],i:/["'\(]/}],i:/\[|%/},{b:/\$[(.]/},{b:"\\."+a.IR,r:0}]}});hljs.registerLanguage("sql",function(a){var b={cN:"comment",b:"--",e:"$"};return{cI:true,i:/[<>]/,c:[{cN:"operator",bK:"begin end start commit rollback savepoint lock alter create drop rename call delete do handler insert load replace select truncate update set show pragma grant merge describe use explain help declare prepare execute deallocate savepoint release unlock purge reset change stop analyze cache flush optimize repair kill install uninstall checksum restore check backup",e:/;/,eW:true,k:{keyword:"abs absolute acos action add adddate addtime aes_decrypt aes_encrypt after aggregate all allocate alter analyze and any are as asc ascii asin assertion at atan atan2 atn2 authorization authors avg backup before begin benchmark between bin binlog bit_and bit_count bit_length bit_or bit_xor both by cache call cascade cascaded case cast catalog ceil ceiling chain change changed char_length character_length charindex charset check checksum checksum_agg choose close coalesce coercibility collate collation collationproperty column columns columns_updated commit compress concat concat_ws concurrent connect connection connection_id consistent constraint constraints continue contributors conv convert convert_tz corresponding cos cot count count_big crc32 create cross cume_dist curdate current current_date current_time current_timestamp current_user cursor curtime data database databases datalength date_add date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts datetimeoffsetfromparts day dayname dayofmonth dayofweek dayofyear deallocate declare decode default deferrable deferred degrees delayed delete des_decrypt des_encrypt des_key_file desc describe descriptor diagnostics difference disconnect distinct distinctrow div do domain double drop dumpfile each else elt enclosed encode encrypt end end-exec engine engines eomonth errors escape escaped event eventdata events except exception exec execute exists exp explain export_set extended external extract fast fetch field fields find_in_set first first_value floor flush for force foreign format found found_rows from from_base64 from_days from_unixtime full function get get_format get_lock getdate getutcdate global go goto grant grants greatest group group_concat grouping grouping_id gtid_subset gtid_subtract handler having help hex high_priority hosts hour ident_current ident_incr ident_seed identified identity if ifnull ignore iif ilike immediate in index indicator inet6_aton inet6_ntoa inet_aton inet_ntoa infile initially inner innodb input insert install instr intersect into is is_free_lock is_ipv4 is_ipv4_compat is_ipv4_mapped is_not is_not_null is_used_lock isdate isnull isolation join key kill language last last_day last_insert_id last_value lcase lead leading least leaves left len lenght level like limit lines ln load load_file local localtime localtimestamp locate lock log log10 log2 logfile logs low_priority lower lpad ltrim make_set makedate maketime master master_pos_wait match matched max md5 medium merge microsecond mid min minute mod mode module month monthname mutex name_const names national natural nchar next no no_write_to_binlog not now nullif nvarchar oct octet_length of old_password on only open optimize option optionally or ord order outer outfile output pad parse partial partition password patindex percent_rank percentile_cont percentile_disc period_add period_diff pi plugin position pow power pragma precision prepare preserve primary prior privileges procedure procedure_analyze processlist profile profiles public publishingservername purge quarter query quick quote quotename radians rand read references regexp relative relaylog release release_lock rename repair repeat replace replicate reset restore restrict return returns reverse revoke right rlike rollback rollup round row row_count rows rpad rtrim savepoint schema scroll sec_to_time second section select serializable server session session_user set sha sha1 sha2 share show sign sin size slave sleep smalldatetimefromparts snapshot some soname soundex sounds_like space sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_no_cache sql_small_result sql_variant_property sqlstate sqrt square start starting status std stddev stddev_pop stddev_samp stdev stdevp stop str str_to_date straight_join strcmp string stuff subdate substr substring subtime subtring_index sum switchoffset sysdate sysdatetime sysdatetimeoffset system_user sysutcdatetime table tables tablespace tan temporary terminated tertiary_weights then time time_format time_to_sec timediff timefromparts timestamp timestampadd timestampdiff timezone_hour timezone_minute to to_base64 to_days to_seconds todatetimeoffset trailing transaction translation trigger trigger_nestlevel triggers trim truncate try_cast try_convert try_parse ucase uncompress uncompressed_length unhex unicode uninstall union unique unix_timestamp unknown unlock update upgrade upped upper usage use user user_resources using utc_date utc_time utc_timestamp uuid uuid_short validate_password_strength value values var var_pop var_samp variables variance varp version view warnings week weekday weekofyear weight_string when whenever where with work write xml xor year yearweek zon",literal:"true false null",built_in:"array bigint binary bit blob boolean char character date dec decimal float int integer interval number numeric real serial smallint varchar varying int8 serial8 text"},c:[{cN:"string",b:"'",e:"'",c:[a.BE,{b:"''"}]},{cN:"string",b:'"',e:'"',c:[a.BE,{b:'""'}]},{cN:"string",b:"`",e:"`",c:[a.BE]},a.CNM,a.CBCM,b]},a.CBCM,b]}});hljs.registerLanguage("php",function(b){var e={cN:"variable",b:"(\\$|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*"};var a={cN:"preprocessor",b:/<\?(php)?|\?>/};var c={cN:"string",c:[b.BE,a],v:[{b:'b"',e:'"'},{b:"b'",e:"'"},b.inherit(b.ASM,{i:null}),b.inherit(b.QSM,{i:null})]};var d={v:[b.BNM,b.CNM]};return{aliases:["php3","php4","php5","php6"],cI:true,k:"and include_once list abstract global private echo interface as static endswitch array null if endwhile or const for endforeach self var while isset public protected exit foreach throw elseif include __FILE__ empty require_once do xor return parent clone use __CLASS__ __LINE__ else break print eval new catch __METHOD__ case exception default die require __FUNCTION__ enddeclare final try switch continue endfor endif declare unset true false trait goto instanceof insteadof __DIR__ __NAMESPACE__ yield finally",c:[b.CLCM,b.HCM,{cN:"comment",b:"/\\*",e:"\\*/",c:[{cN:"phpdoc",b:"\\s@[A-Za-z]+"},a]},{cN:"comment",b:"__halt_compiler.+?;",eW:true,k:"__halt_compiler",l:b.UIR},{cN:"string",b:"<<<['\"]?\\w+['\"]?$",e:"^\\w+;",c:[b.BE]},a,e,{cN:"function",bK:"function",e:/[;{]/,eE:true,i:"\\$|\\[|%",c:[b.UTM,{cN:"params",b:"\\(",e:"\\)",c:["self",e,b.CBCM,c,d]}]},{cN:"class",bK:"class interface",e:"{",eE:true,i:/[:\(\$"]/,c:[{bK:"extends implements"},b.UTM]},{bK:"namespace",e:";",i:/[\.']/,c:[b.UTM]},{bK:"use",e:";",c:[b.UTM]},{b:"=>"},c,d]}});hljs.registerLanguage("makefile",function(a){var b={cN:"variable",b:/\$\(/,e:/\)/,c:[a.BE]};return{aliases:["mk","mak"],c:[a.HCM,{b:/^\w+\s*\W*=/,rB:true,r:0,starts:{cN:"constant",e:/\s*\W*=/,eE:true,starts:{e:/$/,r:0,c:[b]}}},{cN:"title",b:/^[\w]+:\s*$/},{cN:"phony",b:/^\.PHONY:/,e:/$/,k:".PHONY",l:/[\.\w]+/},{b:/^\t+/,e:/$/,r:0,c:[a.QSM,b]}]}});hljs.registerLanguage("bash",function(b){var a={cN:"variable",v:[{b:/\$[\w\d#@][\w\d_]*/},{b:/\$\{(.*?)\}/}]};var d={cN:"string",b:/"/,e:/"/,c:[b.BE,a,{cN:"variable",b:/\$\(/,e:/\)/,c:[b.BE]}]};var c={cN:"string",b:/'/,e:/'/};return{aliases:["sh","zsh"],l:/-?[a-z\.]+/,k:{keyword:"if then else elif fi for break continue while in do done exit return set declare case esac export exec",literal:"true false",built_in:"printf echo read cd pwd pushd popd dirs let eval unset typeset readonly getopts source shopt caller type hash bind help sudo",operator:"-ne -eq -lt -gt -f -d -e -s -l -a"},c:[{cN:"shebang",b:/^#![^\n]+sh\s*$/,r:10},{cN:"function",b:/\w[\w\d_]*\s*\(\s*\)\s*\{/,rB:true,c:[b.inherit(b.TM,{b:/\w[\w\d_]*/})],r:0},b.HCM,b.NM,d,c,a]}});hljs.registerLanguage("cpp",function(a){var b={keyword:"false int float while private char catch export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const struct for static_cast|10 union namespace unsigned long throw volatile static protected bool template mutable if public friend do return goto auto void enum else break new extern using true class asm case typeid short reinterpret_cast|10 default double register explicit signed typename try this switch continue wchar_t inline delete alignof char16_t char32_t constexpr decltype noexcept nullptr static_assert thread_local restrict _Bool complex _Complex _Imaginary",built_in:"std string cin cout cerr clog stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap array shared_ptr abort abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf"};return{aliases:["c","h","c++","h++"],k:b,i:"</",c:[a.CLCM,a.CBCM,a.QSM,{cN:"string",b:"'\\\\?.",e:"'",i:"."},{cN:"number",b:"\\b(\\d+(\\.\\d*)?|\\.\\d+)(u|U|l|L|ul|UL|f|F)"},a.CNM,{cN:"preprocessor",b:"#",e:"$",k:"if else elif endif define undef warning error line pragma",c:[{b:'include\\s*[<"]',e:'[>"]',k:"include",i:"\\n"},a.CLCM]},{cN:"stl_container",b:"\\b(deque|list|queue|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array)\\s*<",e:">",k:b,c:["self"]},{b:a.IR+"::"}]}});hljs.registerLanguage("perl",function(c){var d="getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qqfileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent shutdown dump chomp connect getsockname die socketpair close flock exists index shmgetsub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedirioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when";var f={cN:"subst",b:"[$@]\\{",e:"\\}",k:d};var g={b:"->{",e:"}"};var a={cN:"variable",v:[{b:/\$\d/},{b:/[\$\%\@](\^\w\b|#\w+(\:\:\w+)*|{\w+}|\w+(\:\:\w*)*)/},{b:/[\$\%\@][^\s\w{]/,r:0}]};var e={cN:"comment",b:"^(__END__|__DATA__)",e:"\\n$",r:5};var h=[c.BE,f,a];var b=[a,c.HCM,e,{cN:"comment",b:"^\\=\\w",e:"\\=cut",eW:true},g,{cN:"string",c:h,v:[{b:"q[qwxr]?\\s*\\(",e:"\\)",r:5},{b:"q[qwxr]?\\s*\\[",e:"\\]",r:5},{b:"q[qwxr]?\\s*\\{",e:"\\}",r:5},{b:"q[qwxr]?\\s*\\|",e:"\\|",r:5},{b:"q[qwxr]?\\s*\\<",e:"\\>",r:5},{b:"qw\\s+q",e:"q",r:5},{b:"'",e:"'",c:[c.BE]},{b:'"',e:'"'},{b:"`",e:"`",c:[c.BE]},{b:"{\\w+}",c:[],r:0},{b:"-?\\w+\\s*\\=\\>",c:[],r:0}]},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},{b:"(\\/\\/|"+c.RSR+"|\\b(split|return|print|reverse|grep)\\b)\\s*",k:"split return print reverse grep",r:0,c:[c.HCM,e,{cN:"regexp",b:"(s|tr|y)/(\\\\.|[^/])*/(\\\\.|[^/])*/[a-z]*",r:10},{cN:"regexp",b:"(m|qr)?/",e:"/[a-z]*",c:[c.BE],r:0}]},{cN:"sub",bK:"sub",e:"(\\s*\\(.*?\\))?[;{]",r:5},{cN:"operator",b:"-\\w\\b",r:0}];f.c=b;g.c=b;return{aliases:["pl"],k:d,c:b}});hljs.registerLanguage("ini",function(a){return{cI:true,i:/\S/,c:[{cN:"comment",b:";",e:"$"},{cN:"title",b:"^\\[",e:"\\]"},{cN:"setting",b:"^[a-z0-9\\[\\]_-]+[ \\t]*=[ \\t]*",e:"$",c:[{cN:"value",eW:true,k:"on off true false yes no",c:[a.QSM,a.NM],r:0}]}]}});hljs.registerLanguage("apache",function(a){var b={cN:"number",b:"[\\$%]\\d+"};return{aliases:["apacheconf"],cI:true,c:[a.HCM,{cN:"tag",b:"</?",e:">"},{cN:"keyword",b:/\w+/,r:0,k:{common:"order deny allow setenv rewriterule rewriteengine rewritecond documentroot sethandler errordocument loadmodule options header listen serverroot servername"},starts:{e:/$/,r:0,k:{literal:"on off all"},c:[{cN:"sqbracket",b:"\\s\\[",e:"\\]$"},{cN:"cbracket",b:"[\\$%]\\{",e:"\\}",c:["self",b]},b,a.QSM]}}],i:/\S/}});hljs.registerLanguage("java",function(c){var b=c.UIR+"(<"+c.UIR+">)?";var a="false synchronized int abstract float private char boolean static null if const for true while long throw strictfp finally protected import native final return void enum else break transient new catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private";return{aliases:["jsp"],k:a,i:/<\//,c:[{cN:"javadoc",b:"/\\*\\*",e:"\\*/",r:0,c:[{cN:"javadoctag",b:"(^|\\s)@[A-Za-z]+"}]},c.CLCM,c.CBCM,c.ASM,c.QSM,{cN:"class",bK:"class interface",e:/[{;=]/,eE:true,k:"class interface",i:/[:"\[\]]/,c:[{bK:"extends implements"},c.UTM]},{bK:"new",e:/\s/,r:0},{cN:"function",b:"("+b+"\\s+)+"+c.UIR+"\\s*\\(",rB:true,e:/[{;=]/,eE:true,k:a,c:[{b:c.UIR+"\\s*\\(",rB:true,c:[c.UTM]},{cN:"params",b:/\(/,e:/\)/,k:a,c:[c.ASM,c.QSM,c.CNM,c.CBCM]},c.CLCM,c.CBCM]},c.CNM,{cN:"annotation",b:"@[A-Za-z]+"}]}});hljs.registerLanguage("xml",function(a){var c="[A-Za-z0-9\\._:-]+";var d={b:/<\?(php)?(?!\w)/,e:/\?>/,sL:"php",subLanguageMode:"continuous"};var b={eW:true,i:/</,r:0,c:[d,{cN:"attribute",b:c,r:0},{b:"=",r:0,c:[{cN:"value",v:[{b:/"/,e:/"/},{b:/'/,e:/'/},{b:/[^\s\/>]+/}]}]}]};return{aliases:["html","xhtml","rss","atom","xsl","plist"],cI:true,c:[{cN:"doctype",b:"<!DOCTYPE",e:">",r:10,c:[{b:"\\[",e:"\\]"}]},{cN:"comment",b:"<!--",e:"-->",r:10},{cN:"cdata",b:"<\\!\\[CDATA\\[",e:"\\]\\]>",r:10},{cN:"tag",b:"<style(?=\\s|>|$)",e:">",k:{title:"style"},c:[b],starts:{e:"</style>",rE:true,sL:"css"}},{cN:"tag",b:"<script(?=\\s|>|$)",e:">",k:{title:"script"},c:[b],starts:{e:"<\/script>",rE:true,sL:"javascript"}},{b:"<%",e:"%>",sL:"vbscript"},d,{cN:"pi",b:/<\?\w+/,e:/\?>/,r:10},{cN:"tag",b:"</?",e:"/?>",c:[{cN:"title",b:/[^ \/><\n\t]+/,r:0},b]}]}});hljs.registerLanguage("markdown",function(a){return{aliases:["md","mkdown","mkd"],c:[{cN:"header",v:[{b:"^#{1,6}",e:"$"},{b:"^.+?\\n[=-]{2,}$"}]},{b:"<",e:">",sL:"xml",r:0},{cN:"bullet",b:"^([*+-]|(\\d+\\.))\\s+"},{cN:"strong",b:"[*_]{2}.+?[*_]{2}"},{cN:"emphasis",v:[{b:"\\*.+?\\*"},{b:"_.+?_",r:0}]},{cN:"blockquote",b:"^>\\s+",e:"$"},{cN:"code",v:[{b:"`.+?`"},{b:"^( {4}|\t)",e:"$",r:0}]},{cN:"horizontal_rule",b:"^[-\\*]{3,}",e:"$"},{b:"\\[.+?\\][\\(\\[].*?[\\)\\]]",rB:true,c:[{cN:"link_label",b:"\\[",e:"\\]",eB:true,rE:true,r:0},{cN:"link_url",b:"\\]\\(",e:"\\)",eB:true,eE:true},{cN:"link_reference",b:"\\]\\[",e:"\\]",eB:true,eE:true}],r:10},{b:"^\\[.+\\]:",rB:true,c:[{cN:"link_reference",b:"\\[",e:"\\]:",eB:true,eE:true,starts:{cN:"link_url",e:"$"}}]}]}});hljs.registerLanguage("cs",function(c){var b="abstract as base bool break byte case catch char checked const continue decimal default delegate do double else enum event explicit extern false finally fixed float for foreach goto if implicit in int interface internal is lock long new null object operator out override params private protected public readonly ref return sbyte sealed short sizeof stackalloc static string struct switch this throw true try typeof uint ulong unchecked unsafe ushort using virtual volatile void while async await protected public private internal ascending descending from get group into join let orderby partial select set value var where yield";var a=c.IR+"(<"+c.IR+">)?";return{aliases:["csharp"],k:b,i:/::/,c:[{cN:"comment",b:"///",e:"$",rB:true,c:[{cN:"xmlDocTag",v:[{b:"///",r:0},{b:"<!--|-->"},{b:"</?",e:">"}]}]},c.CLCM,c.CBCM,{cN:"preprocessor",b:"#",e:"$",k:"if else elif endif define undef warning error line region endregion pragma checksum"},{cN:"string",b:'@"',e:'"',c:[{b:'""'}]},c.ASM,c.QSM,c.CNM,{bK:"class namespace interface",e:/[{;=]/,i:/[^\s:]/,c:[c.TM,c.CLCM,c.CBCM]},{bK:"new",e:/\s/,r:0},{cN:"function",b:"("+a+"\\s+)+"+c.IR+"\\s*\\(",rB:true,e:/[{;=]/,eE:true,k:b,c:[{b:c.IR+"\\s*\\(",rB:true,c:[c.TM]},{cN:"params",b:/\(/,e:/\)/,k:b,c:[c.ASM,c.QSM,c.CNM,c.CBCM]},c.CLCM,c.CBCM]}]}});hljs.registerLanguage("ruby",function(f){var j="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?";var i="and false then defined module in return redo if BEGIN retry end for true self when next until do begin unless END rescue nil else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor";var b={cN:"yardoctag",b:"@[A-Za-z]+"};var c={cN:"value",b:"#<",e:">"};var k={cN:"comment",v:[{b:"#",e:"$",c:[b]},{b:"^\\=begin",e:"^\\=end",c:[b],r:10},{b:"^__END__",e:"\\n$"}]};var d={cN:"subst",b:"#\\{",e:"}",k:i};var e={cN:"string",c:[f.BE,d],v:[{b:/'/,e:/'/},{b:/"/,e:/"/},{b:"%[qw]?\\(",e:"\\)"},{b:"%[qw]?\\[",e:"\\]"},{b:"%[qw]?{",e:"}"},{b:"%[qw]?<",e:">"},{b:"%[qw]?/",e:"/"},{b:"%[qw]?%",e:"%"},{b:"%[qw]?-",e:"-"},{b:"%[qw]?\\|",e:"\\|"},{b:/\B\?(\\\d{1,3}|\\x[A-Fa-f0-9]{1,2}|\\u[A-Fa-f0-9]{4}|\\?\S)\b/}]};var a={cN:"params",b:"\\(",e:"\\)",k:i};var h=[e,c,k,{cN:"class",bK:"class module",e:"$|;",i:/=/,c:[f.inherit(f.TM,{b:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"}),{cN:"inheritance",b:"<\\s*",c:[{cN:"parent",b:"("+f.IR+"::)?"+f.IR}]},k]},{cN:"function",bK:"def",e:" |$|;",r:0,c:[f.inherit(f.TM,{b:j}),a,k]},{cN:"constant",b:"(::)?(\\b[A-Z]\\w*(::)?)+",r:0},{cN:"symbol",b:f.UIR+"(\\!|\\?)?:",r:0},{cN:"symbol",b:":",c:[e,{b:j}],r:0},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},{cN:"variable",b:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{b:"("+f.RSR+")\\s*",c:[c,k,{cN:"regexp",c:[f.BE,d],i:/\n/,v:[{b:"/",e:"/[a-z]*"},{b:"%r{",e:"}[a-z]*"},{b:"%r\\(",e:"\\)[a-z]*"},{b:"%r!",e:"![a-z]*"},{b:"%r\\[",e:"\\][a-z]*"}]}],r:0}];d.c=h;a.c=h;var g=[{b:/^\s*=>/,cN:"status",starts:{e:"$",c:h}},{cN:"prompt",b:/^\S[^=>\n]*>+/,starts:{e:"$",c:h}}];return{aliases:["rb","gemspec","podspec","thor","irb"],k:i,c:[k].concat(g).concat(h)}});hljs.registerLanguage("diff",function(a){return{aliases:["patch"],c:[{cN:"chunk",r:10,v:[{b:/^\@\@ +\-\d+,\d+ +\+\d+,\d+ +\@\@$/},{b:/^\*\*\* +\d+,\d+ +\*\*\*\*$/},{b:/^\-\-\- +\d+,\d+ +\-\-\-\-$/}]},{cN:"header",v:[{b:/Index: /,e:/$/},{b:/=====/,e:/=====$/},{b:/^\-\-\-/,e:/$/},{b:/^\*{3} /,e:/$/},{b:/^\+\+\+/,e:/$/},{b:/\*{5}/,e:/\*{5}$/}]},{cN:"addition",b:"^\\+",e:"$"},{cN:"deletion",b:"^\\-",e:"$"},{cN:"change",b:"^\\!",e:"$"}]}});hljs.registerLanguage("objectivec",function(a){var d={keyword:"int float while char export sizeof typedef const struct for union unsigned long volatile static bool mutable if do return goto void enum else break extern asm case short default double register explicit signed typename this switch continue wchar_t inline readonly assign readwrite self @synchronized id typeof nonatomic super unichar IBOutlet IBAction strong weak copy in out inout bycopy byref oneway __strong __weak __block __autoreleasing @private @protected @public @try @property @end @throw @catch @finally @autoreleasepool @synthesize @dynamic @selector @optional @required",literal:"false true FALSE TRUE nil YES NO NULL",built_in:"NSString NSData NSDictionary CGRect CGPoint UIButton UILabel UITextView UIWebView MKMapView NSView NSViewController NSWindow NSWindowController NSSet NSUUID NSIndexSet UISegmentedControl NSObject UITableViewDelegate UITableViewDataSource NSThread UIActivityIndicator UITabbar UIToolBar UIBarButtonItem UIImageView NSAutoreleasePool UITableView BOOL NSInteger CGFloat NSException NSLog NSMutableString NSMutableArray NSMutableDictionary NSURL NSIndexPath CGSize UITableViewCell UIView UIViewController UINavigationBar UINavigationController UITabBarController UIPopoverController UIPopoverControllerDelegate UIImage NSNumber UISearchBar NSFetchedResultsController NSFetchedResultsChangeType UIScrollView UIScrollViewDelegate UIEdgeInsets UIColor UIFont UIApplication NSNotFound NSNotificationCenter NSNotification UILocalNotification NSBundle NSFileManager NSTimeInterval NSDate NSCalendar NSUserDefaults UIWindow NSRange NSArray NSError NSURLRequest NSURLConnection NSURLSession NSURLSessionDataTask NSURLSessionDownloadTask NSURLSessionUploadTask NSURLResponseUIInterfaceOrientation MPMoviePlayerController dispatch_once_t dispatch_queue_t dispatch_sync dispatch_async dispatch_once"};var c=/[a-zA-Z@][a-zA-Z0-9_]*/;var b="@interface @class @protocol @implementation";return{aliases:["m","mm","objc","obj-c"],k:d,l:c,i:"</",c:[a.CLCM,a.CBCM,a.CNM,a.QSM,{cN:"string",v:[{b:'@"',e:'"',i:"\\n",c:[a.BE]},{b:"'",e:"[^\\\\]'",i:"[^\\\\][^']"}]},{cN:"preprocessor",b:"#",e:"$",c:[{cN:"title",v:[{b:'"',e:'"'},{b:"<",e:">"}]}]},{cN:"class",b:"("+b.split(" ").join("|")+")\\b",e:"({|$)",eE:true,k:b,l:c,c:[a.UTM]},{cN:"variable",b:"\\."+a.UIR,r:0}]}});hljs.registerLanguage("css",function(a){var b="[a-zA-Z-][a-zA-Z0-9_-]*";var c={cN:"function",b:b+"\\(",rB:true,eE:true,e:"\\("};return{cI:true,i:"[=/|']",c:[a.CBCM,{cN:"id",b:"\\#[A-Za-z0-9_-]+"},{cN:"class",b:"\\.[A-Za-z0-9_-]+",r:0},{cN:"attr_selector",b:"\\[",e:"\\]",i:"$"},{cN:"pseudo",b:":(:)?[a-zA-Z0-9\\_\\-\\+\\(\\)\\\"\\']+"},{cN:"at_rule",b:"@(font-face|page)",l:"[a-z-]+",k:"font-face page"},{cN:"at_rule",b:"@",e:"[{;]",c:[{cN:"keyword",b:/\S+/},{b:/\s/,eW:true,eE:true,r:0,c:[c,a.ASM,a.QSM,a.CSSNM]}]},{cN:"tag",b:b,r:0},{cN:"rules",b:"{",e:"}",i:"[^\\s]",r:0,c:[a.CBCM,{cN:"rule",b:"[^\\s]",rB:true,e:";",eW:true,c:[{cN:"attribute",b:"[A-Z\\_\\.\\-]+",e:":",eE:true,i:"[^\\s]",starts:{cN:"value",eW:true,eE:true,c:[c,a.CSSNM,a.QSM,a.ASM,a.CBCM,{cN:"hexcolor",b:"#[0-9A-Fa-f]+"},{cN:"important",b:"!important"}]}}]}]}]}});hljs.registerLanguage("python",function(a){var f={cN:"prompt",b:/^(>>>|\.\.\.) /};var b={cN:"string",c:[a.BE],v:[{b:/(u|b)?r?'''/,e:/'''/,c:[f],r:10},{b:/(u|b)?r?"""/,e:/"""/,c:[f],r:10},{b:/(u|r|ur)'/,e:/'/,r:10},{b:/(u|r|ur)"/,e:/"/,r:10},{b:/(b|br)'/,e:/'/},{b:/(b|br)"/,e:/"/},a.ASM,a.QSM]};var d={cN:"number",r:0,v:[{b:a.BNR+"[lLjJ]?"},{b:"\\b(0o[0-7]+)[lLjJ]?"},{b:a.CNR+"[lLjJ]?"}]};var e={cN:"params",b:/\(/,e:/\)/,c:["self",f,d,b]};var c={e:/:/,i:/[${=;\n]/,c:[a.UTM,e]};return{aliases:["py","gyp"],k:{keyword:"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda nonlocal|10 None True False",built_in:"Ellipsis NotImplemented"},i:/(<\/|->|\?)/,c:[f,d,b,a.HCM,a.inherit(c,{cN:"function",bK:"def",r:10}),a.inherit(c,{cN:"class",bK:"class"}),{cN:"decorator",b:/@/,e:/$/},{b:/\b(print|exec)\(/}]}});
+hljs.registerLanguage("scala",function(d){var b={cN:"annotation",b:"@[A-Za-z]+"};var c={cN:"string",b:'u?r?"""',e:'"""',r:10};var a={cN:"symbol",b:"'\\w[\\w\\d_]*(?!')"};var e={cN:"type",b:"\\b[A-Z][A-Za-z0-9_]*",r:0};var h={cN:"title",b:/[^0-9\n\t "'(),.`{}\[\]:;][^\n\t "'(),.`{}\[\]:;]+|[^0-9\n\t "'(),.`{}\[\]:;=]/,r:0};var i={cN:"class",bK:"class object trait type",e:/[:={\[(\n;]/,c:[{cN:"keyword",bK:"extends with",r:10},h]};var g={cN:"function",bK:"def val",e:/[:={\[(\n;]/,c:[h]};var f={cN:"javadoc",b:"/\\*\\*",e:"\\*/",c:[{cN:"javadoctag",b:"@[A-Za-z]+"}],r:10};return{k:{literal:"true false null",keyword:"type yield lazy override def with val var sealed abstract private trait object if forSome for while throw finally protected extends import final return else break new catch super class case package default try this match continue throws implicit"},c:[d.CLCM,d.CBCM,c,d.QSM,a,e,g,i,d.CNM,b]}});
+hljs.registerLanguage("javascript",function(a){return{aliases:["js"],k:{keyword:"in if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const class",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document"},c:[{cN:"pi",b:/^\s*('|")use strict('|")/,r:10},a.ASM,a.QSM,a.CLCM,a.CBCM,a.CNM,{b:"("+a.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return throw case",c:[a.CLCM,a.CBCM,a.RM,{b:/</,e:/>;/,r:0,sL:"xml"}],r:0},{cN:"function",bK:"function",e:/\{/,eE:true,c:[a.inherit(a.TM,{b:/[A-Za-z$_][0-9A-Za-z$_]*/}),{cN:"params",b:/\(/,e:/\)/,c:[a.CLCM,a.CBCM],i:/["'\(]/}],i:/\[|%/},{b:/\$[(.]/},{b:"\\."+a.IR,r:0}]}});
+hljs.registerLanguage("bash",function(b){var a={cN:"variable",v:[{b:/\$[\w\d#@][\w\d_]*/},{b:/\$\{(.*?)\}/}]};var d={cN:"string",b:/"/,e:/"/,c:[b.BE,a,{cN:"variable",b:/\$\(/,e:/\)/,c:[b.BE]}]};var c={cN:"string",b:/'/,e:/'/};return{aliases:["sh","zsh"],l:/-?[a-z\.]+/,k:{keyword:"if then else elif fi for break continue while in do done exit return set declare case esac export exec",literal:"true false",built_in:"printf echo read cd pwd pushd popd dirs let eval unset typeset readonly getopts source shopt caller type hash bind help sudo",operator:"-ne -eq -lt -gt -f -d -e -s -l -a"},c:[{cN:"shebang",b:/^#![^\n]+sh\s*$/,r:10},{cN:"function",b:/\w[\w\d_]*\s*\(\s*\)\s*\{/,rB:true,c:[b.inherit(b.TM,{b:/\w[\w\d_]*/})],r:0},b.HCM,b.NM,d,c,a]}});
+hljs.registerLanguage("diff",function(a){return{aliases:["patch"],c:[{cN:"chunk",r:10,v:[{b:/^\@\@ +\-\d+,\d+ +\+\d+,\d+ +\@\@$/},{b:/^\*\*\* +\d+,\d+ +\*\*\*\*$/},{b:/^\-\-\- +\d+,\d+ +\-\-\-\-$/}]},{cN:"header",v:[{b:/Index: /,e:/$/},{b:/=====/,e:/=====$/},{b:/^\-\-\-/,e:/$/},{b:/^\*{3} /,e:/$/},{b:/^\+\+\+/,e:/$/},{b:/\*{5}/,e:/\*{5}$/}]},{cN:"addition",b:"^\\+",e:"$"},{cN:"deletion",b:"^\\-",e:"$"},{cN:"change",b:"^\\!",e:"$"}]}});
+hljs.registerLanguage("xml",function(a){var c="[A-Za-z0-9\\._:-]+";var d={b:/<\?(php)?(?!\w)/,e:/\?>/,sL:"php",subLanguageMode:"continuous"};var b={eW:true,i:/</,r:0,c:[d,{cN:"attribute",b:c,r:0},{b:"=",r:0,c:[{cN:"value",v:[{b:/"/,e:/"/},{b:/'/,e:/'/},{b:/[^\s\/>]+/}]}]}]};return{aliases:["html","xhtml","rss","atom","xsl","plist"],cI:true,c:[{cN:"doctype",b:"<!DOCTYPE",e:">",r:10,c:[{b:"\\[",e:"\\]"}]},{cN:"comment",b:"<!--",e:"-->",r:10},{cN:"cdata",b:"<\\!\\[CDATA\\[",e:"\\]\\]>",r:10},{cN:"tag",b:"<style(?=\\s|>|$)",e:">",k:{title:"style"},c:[b],starts:{e:"</style>",rE:true,sL:"css"}},{cN:"tag",b:"<script(?=\\s|>|$)",e:">",k:{title:"script"},c:[b],starts:{e:"<\/script>",rE:true,sL:"javascript"}},{b:"<%",e:"%>",sL:"vbscript"},d,{cN:"pi",b:/<\?\w+/,e:/\?>/,r:10},{cN:"tag",b:"</?",e:"/?>",c:[{cN:"title",b:/[^ \/><\n\t]+/,r:0},b]}]}});
+(function(){'use strict';function ba(){return function(a){return a}}function da(){return function(){}}function d(a){return function(b){this[a]=b}}function g(a){return function(){return this[a]}}function k(a){return function(){return a}}var m,ea="object"===typeof __ScalaJSEnv&&__ScalaJSEnv?__ScalaJSEnv:{},n="object"===typeof ea.global&&ea.global?ea.global:"object"===typeof global&&global&&global.Object===Object?global:this;ea.global=n;var p="object"===typeof ea.exportsNamespace&&ea.exportsNamespace?ea.exportsNamespace:n;
+ea.exportsNamespace=p;n.Object.freeze(ea);var fa=0;function ga(a){return function(b,c){return!(!b||!b.a||b.a.ui!==c||b.a.si!==a)}}function ia(a){var b,c;for(c in a)b=c;return b}function s(a,b){return ja(a,b,0)}function ja(a,b,c){var e=new a.Uk(b[c]);if(c<b.length-1){a=a.Ai;c+=1;for(var f=e.d,h=0;h<f.length;h++)f[h]=ja(a,b,c)}return e}function ka(a){return void 0===a?"undefined":a.toString()}
+function la(a){switch(typeof a){case "string":return t(ma);case "number":var b=a|0;return b===a?b<<24>>24===b&&1/b!==1/-0?t(na):b<<16>>16===b&&1/b!==1/-0?t(oa):t(qa):a!==a||ta(a)===a?t(ua):t(va);case "boolean":return t(wa);case "undefined":return t(xa);default:if(null===a)throw(new ya).b();return za(a)?t(Aa):a&&a.a?t(a.a):null}}function Ba(a,b){return a&&a.a||null===a?a.fa(b):"number"===typeof a?"number"===typeof b&&(a===b?0!==a||1/a===1/b:a!==a&&b!==b):a===b}
+function Ca(a){switch(typeof a){case "string":return Ea(Fa(),a);case "number":return Ga(Ha(),a);case "boolean":return a?1231:1237;case "undefined":return 0;default:return a&&a.a||null===a?a.ja():42}}function Ia(a,b,c){return"string"===typeof a?a.substring(b,c):a.Uq(b,c)}function Ja(a,b,c,e,f){a=a.d;c=c.d;if(a!==c||e<b||b+f<e)for(var h=0;h<f;h++)c[e+h]=a[b+h];else for(h=f-1;0<=h;h--)c[e+h]=a[b+h]}
+function Ka(a){if(a&&a.a){var b=a.$idHashCode$0;void 0===b&&(fa=b=fa+1|0,a.$idHashCode$0=b);return b}return null===a?0:Ca(a)}function La(a){return(a|0)===a&&1/a!==1/-0}function Ma(a){return null===a?Na().cd:a}this.__ScalaJSExportsNamespace=p;function Oa(a,b,c){this.Nj=this.Uk=void 0;this.y={};this.Ai=null;this.Fm=a;this.Lk=b;this.mi=this.ni=void 0;this.ne=k(!1);this.name=c;this.isPrimitive=!0;this.isArrayClass=this.isInterface=!1;this.isInstance=k(!1)}
+function u(a,b,c,e,f,h,l){var q=ia(a);h=h||function(a){return!!(a&&a.a&&a.a.y[q])};l=l||function(a,b){return!!(a&&a.a&&a.a.ui===b&&a.a.si.y[q])};this.Uk=void 0;this.Nj=e;this.y=f;this.Fm=this.Ai=null;this.Lk="L"+c+";";this.mi=this.ni=void 0;this.ne=l;this.name=c;this.isPrimitive=!1;this.isInterface=b;this.isArrayClass=!1;this.isInstance=h}
+function Pa(a){function b(a){if("number"===typeof a){this.d=Array(a);for(var b=0;b<a;b++)this.d[b]=c}else this.d=a}var c=a.Fm;"longZero"==c&&(c=Na().cd);b.prototype=new v;b.prototype.a=this;var e="["+a.Lk,f=a.si||a,h=(a.ui||0)+1;this.Uk=b;this.Nj=w;this.y={c:1};this.Ai=a;this.si=f;this.ui=h;this.Fm=null;this.Lk=e;this.ne=this.mi=this.ni=void 0;this.name=e;this.isInterface=this.isPrimitive=!1;this.isArrayClass=!0;this.isInstance=function(a){return f.ne(a,h)}}
+function t(a){if(!a.ni){var b=new Ra;b.Zd=a;a.ni=b}return a.ni}function x(a){a.mi||(a.mi=new Pa(a));return a.mi}u.prototype.getFakeInstance=function(){return this===ma?"some string":this===wa?!1:this===na||this===oa||this===qa||this===ua||this===va?0:this===Aa?Na().cd:this===xa?void 0:{a:this}};u.prototype.getSuperclass=function(){return this.Nj?t(this.Nj):null};u.prototype.getComponentType=function(){return this.Ai?t(this.Ai):null};
+u.prototype.newArrayOfThisClass=function(a){for(var b=this,c=0;c<a.length;c++)b=x(b);return s(b,a)};Oa.prototype=u.prototype;Pa.prototype=u.prototype;var Sa=new Oa(void 0,"V","void"),Ta=new Oa(!1,"Z","boolean"),Ua=new Oa(0,"C","char"),Va=new Oa(0,"B","byte"),Xa=new Oa(0,"S","short"),Ya=new Oa(0,"I","int"),Za=new Oa("longZero","J","long"),$a=new Oa(0,"F","float"),ab=new Oa(0,"D","double"),bb=ga(Ta);Ta.ne=bb;var cb=ga(Ua);Ua.ne=cb;var db=ga(Va);Va.ne=db;var eb=ga(Xa);Xa.ne=eb;var fb=ga(Ya);Ya.ne=fb;
+var gb=ga(Za);Za.ne=gb;var hb=ga($a);$a.ne=hb;var ib=ga(ab);ab.ne=ib;var y=n.Math.imul||function(a,b){var c=a&65535,e=b&65535;return c*e+((a>>>16&65535)*e+c*(b>>>16&65535)<<16>>>0)|0},ta=n.Math.fround||function(a){return+a};var jb=new u({Bf:0},!0,"upickle.Js$Value",void 0,{Bf:1});function kb(){}function v(){}v.prototype=kb.prototype;kb.prototype.b=function(){return this};kb.prototype.fa=function(a){return this===a};kb.prototype.r=function(){var a=lb(la(this)),b=(+(this.ja()>>>0)).toString(16);return a+"@"+b};kb.prototype.ja=function(){return Ka(this)};kb.prototype.toString=function(){return this.r()};function mb(a,b){var c=a&&a.a;if(c){var e=c.ui||0;return!(e<b)&&(e>b||!c.si.isPrimitive)}return!1}
+var w=new u({c:0},!1,"java.lang.Object",null,{c:1},function(a){return null!==a},mb);kb.prototype.a=w;var nb=new u({Dq:0},!0,"scala.collection.mutable.HashEntry",void 0,{Dq:1});function ob(){}ob.prototype=new v;ob.prototype.Ue=function(a){return this.Jl(a)};function pb(a,b){return b.width|0}
+ob.prototype.Jl=function(a){qb(0,a);var b=a.getContext("2d"),c=(new rb).Fe(0),e=sb(tb(),(new z).k([(new A).v("red",C(function(a){return+n.Math.sin(+a)})),(new A).v("green",C(function(a){a=-2+ +a%4;return-1+(0>a?-a:a)})),(new A).v("blue",C(function(a){a=+a;return+n.Math.sin(a/12)*+n.Math.sin(a)}))])),f=tb(),e=e.Af(f.ka);return n.setInterval(function(a){return function(){return a.Ed()}}(ub(a,b,c,e)),20)|0};
+function qb(a,b){b.width=b.parentElement.clientWidth|0;b.height=b.parentElement.clientHeight|0}ob.prototype.main=function(a){return this.Ue(a)};ob.prototype.a=new u({Pr:0},!1,"Splash$",w,{Pr:1,c:1});var vb=void 0;function wb(){vb||(vb=(new ob).b());return vb}p.Splash=wb;function xb(){}xb.prototype=new v;
+function yb(a){var b=zb(a),c=(new Ab).xa(0);a.onmousemove=function(a,b,c){return function(l){1===c.i&&(b.lineTo(+l.clientX-+Bb(Cb(),a).left,+l.clientY-+Bb(Cb(),a).top),b.stroke())}}(a,b,c);a.onmouseup=function(a,b){return function(){1===b.i?(a.fill(),b.i=2):2===b.i&&(a.clearRect(0,0,1E3,1E3),b.i=0)}}(b,c);a.onmousedown=function(a,b,c){return function(l){0===c.i&&(c.i=1,b.beginPath(),b.moveTo(+l.clientX-+Bb(Cb(),a).left,+l.clientY-+Bb(Cb(),a).top))}}(a,b,c)}xb.prototype.Ue=function(a){return Eb(a)};
+function Eb(a){var b=zb(a),c=(new Fb).Nf(C(function(a){return function(b){a.onmousemove=function(a){return function(b){return a.h(b)}}(b)}}(a))),e=(new Fb).Nf(C(function(a){return function(b){a.onmouseup=function(a){return function(b){return a.h(b)}}(b)}}(a))),f=(new Fb).Nf(C(function(a){return function(b){a.onmousedown=function(a){return function(b){return a.h(b)}}(b)}}(a)));a=Gb(a,b,c,e,f);Ib();b=a.wh;Jb||(Jb=(new Kb).b());Lb(a,b);return a.ag.Cj()}
+function zb(a){var b=a.getContext("2d");a.style.backgroundColor="#f8f8f8";a.height=a.parentElement.clientHeight|0;a.width=a.parentElement.clientWidth|0;b.lineWidth=5;b.strokeStyle="red";b.fillStyle="cyan";return b}function Mb(a,b){return b.getBoundingClientRect()}function Bb(a,b){return b.getBoundingClientRect()}xb.prototype.main=function(a){return this.Ue(a)};xb.prototype.main0=function(a){yb(a)};xb.prototype.a=new u({Rr:0},!1,"advanced.Async$",w,{Rr:1,c:1});var Nb=void 0;
+function Cb(){Nb||(Nb=(new xb).b());return Nb}p.advanced=p.advanced||{};p.advanced.Async=Cb;function Pb(){}Pb.prototype=new v;
+Pb.prototype.qf=function(a){Qb().ki;var b=Rb(k(""));Qb().ki;var c=(new Sb).Ng(b,"");Qb().fi;b=(new Tb).Ng(Rb(function(a){return function(){return Vb(a).length|0}}(c)),(Wb(),""));Qb().fi;var e=(new Tb).Ng((new Xb).tl(c),(Wb(),""));Qb().fi;var f=(new Tb).Ng(Yb(c,e),(Wb(),"")),h=D(E().Xq);h.onkeyup=function(a){return function(b){return a.h(b)}}(Zb(c,h));var c=E().Tb,l=E();return a.appendChild(D(F(c,(new z).k([$b(l,h),F(E().Se,(new z).k([F(E().Ic,(new z).k([(E(),(new G).f("Chars: ")),ac(b,C(function(a){a|=
+0;E();return(new G).f(""+a)}))])),F(E().Ic,(new z).k([(E(),(new G).f("Words: ")),ac(e,C(function(a){a|=0;E();return(new G).f(""+a)}))])),F(E().Ic,(new z).k([(E(),(new G).f("Word Length: ")),ac(f,C(function(a){a=+a;E();return(new G).f(""+a)}))]))]))]))))};function ac(a,b){var c=bc(0,a,b),c=(new cc).o(c);Qb().ei;var e=Rb(function(a,b,c){return function(){var e=bc(dc(),a,b);n.last=c.i;c.i.parentNode.replaceChild(e,c.i);c.i=e}}(a,b,c));Qb().ei;ec(a,e);e=E();return $b(e,c.i)}
+Pb.prototype.Il=function(a){var b=sb(tb(),(new z).k("Apple Apricot Banana Cherry Mango Mangosteen Mandarin Grape Grapefruit Guava".split(" ")));Qb().ki;var c=Rb(k(""));Qb().ki;var e=(new Sb).Ng(c,""),c=D(E().Og);c.onkeyup=function(a){return function(b){return a.h(b)}}(fc(e,c));var e=(new gc).tl(e),f=tb(),b=b.ac(e,f.ka),e=E().Tb,f=E(),c=$b(f,c),f=E().Se,h=E();return a.appendChild(D(F(e,(new z).k([c,F(f,(new z).k([hc(new ic,h,b,C(function(a){dc();var b=jc().Ne,c=bc(0,a,b),c=(new cc).o(c);Qb().ei;b=
+Rb(function(a,b,c){return function(){var e=bc(dc(),a,b);n.last=c.i;c.i.parentNode.replaceChild(e,c.i);c.i=e}}(a,b,c));Qb().ei;ec(a,b);a=E();return $b(a,c.i)}))]))]))))};function bc(a,b,c){return D(F(E().ij,(new z).k([c.h(Vb(b))])))}Pb.prototype.mk=function(a){return this.Il(a)};Pb.prototype.Lb=function(a){return this.qf(a)};Pb.prototype.main=function(a){return this.Lb(a)};Pb.prototype.main2=function(a){return this.mk(a)};Pb.prototype.a=new u({Tr:0},!1,"advanced.BasicRx$",w,{Tr:1,c:1});var kc=void 0;
+function dc(){kc||(kc=(new Pb).b());return kc}p.advanced=p.advanced||{};p.advanced.BasicRx=dc;function Fb(){this.l=null}Fb.prototype=new v;function lc(a,b){var c=(new mc).b();sb(tb(),(new z).k([nc(b),nc(a)])).A(oc(c));return c}function nc(a){a.l=(new mc).b();return a.l.Cj()}Fb.prototype.Nf=function(a){a.h(C(function(a){return function(c){null===a.l||a.l.Io()||pc(a.l,c)}}(this)));this.l=null;return this};Fb.prototype.a=new u({Zr:0},!1,"advanced.Channel",w,{Zr:1,c:1});function qc(){}qc.prototype=new v;
+function rc(a,b){var c=E().Og,e=E().l,f=E().wc,h=D(F(c,(new z).k([sc(new tc,e,"London,Singapore,Berlin,New York",f)]))),c=D(E().Tb);h.onkeyup=function(a,b,c){return function(e){e=e.keyCode|0;uc||(uc=(new vc).b());e===uc.bo&&(jc(),e=(new wc).f(b.value),e=xc(e,44),e=null===e?null:0===e.d.length?yc().Pm:zc(new Ac,e),Bc(a,e,c))}}(b,h,c);var e=E().Tb,f=F(E().Ah,(new z).k([(E(),(new G).f("Press Enter in the box to fetch temperatures "))])),l=E(),h=$b(l,h),l=E();return a.appendChild(D(F(e,(new z).k([f,h,
+$b(l,c)]))))}function Cc(a,b){return-272.15+ +n.JSON.parse(b).list.pop().main.temp}function Dc(a,b){return"http://api.openweathermap.org/data/2.5/find?mode\x3djson\x26q\x3d"+b}qc.prototype.Il=function(a){return rc(a,Fc(function(a,c){Gc(Hc(),a,c)}))};function Ic(a){return rc(a,Fc(function(a,c){Hc();Jc||(Jc=(new Kc).b());var e=(new z).b();a.A((new Lc).vl(a,c,e))}))}function Mc(a){return rc(a,Fc(function(a,c){Hc();Jc||(Jc=(new Kc).b());var e=(new z).b();a.A((new Nc).vl(a,c,e))}))}
+function Oc(a,b,c){b.innerHTML="";a=E().Se;var e=E();c=c.og(C(function(a){return null!==a}));var f=C(function(a){if(null!==a){var b=a.va;a=+a.wa;var c=E().Ic,b=F(E().td,(new z).k([(E(),(new G).f(b))]));E();var e=(new G).f(" - ");E();return F(c,(new z).k([b,e,(new G).f(""+(a|0)),(E(),(new G).f("C"))]))}throw(new H).o(a);}),h=tb();c=c.ac(f,h.ka);f=jc().Ne;return b.appendChild(D(F(a,(new z).k([hc(new ic,e,c,f)]))))}qc.prototype.mk=function(a){return this.Il(a)};
+function Gc(a,b,c){a=(new Pc).b();var e=tb();b=b.ac(a,e.ka);a=Ib();e=tb();b=Qc(a,b,e.ka);c=C(function(a){return function(b){return Oc(Hc(),a,b)}}(c));a=Rc().Nd;Sc(b,c,a)}qc.prototype.main0=function(a){return Ic(a)};qc.prototype.main1=function(a){return Mc(a)};qc.prototype.main2=function(a){return this.mk(a)};qc.prototype.a=new u({as:0},!1,"advanced.Futures$",w,{as:1,c:1});var Tc=void 0;function Hc(){Tc||(Tc=(new qc).b());return Tc}p.advanced=p.advanced||{};p.advanced.Futures=Hc;function Uc(){}
+Uc.prototype=new v;Uc.prototype.Ue=function(a){return this.Jl(a)};
+Uc.prototype.Jl=function(a){var b=a.getContext("2d");a.width=a.parentElement.clientWidth|0;a.height=a.parentElement.clientHeight|0;var c=b.createLinearGradient(-100+((a.width|0)/2|0)|0,0,100+((a.width|0)/2|0)|0,0);c.addColorStop(0,"red");c.addColorStop(0.5,"green");c.addColorStop(1,"blue");b.fillStyle=c;b.textAlign="center";b.textBaseline="middle";return n.setInterval(function(a,b){return function(){Vc();var c=new n.Date;b.clearRect(0,0,a.width|0,a.height|0);b.font="75px sans-serif";b.fillText(sb(tb(),
+(new z).k([c.getHours()|0,c.getMinutes()|0,c.getSeconds()|0])).Yf(":"),(a.width|0)/2|0,(a.height|0)/2|0)}}(a,b),1E3)|0};Uc.prototype.main=function(a){return this.Ue(a)};Uc.prototype.a=new u({es:0},!1,"canvasapp.Clock$",w,{es:1,c:1});var Wc=void 0;function Vc(){Wc||(Wc=(new Uc).b());return Wc}p.canvasapp=p.canvasapp||{};p.canvasapp.Clock=Vc;function Xc(){}Xc.prototype=new v;
+Xc.prototype.Kl=function(a){var b=a.getContext("2d");a.width=a.parentElement.clientWidth|0;a.height=400;b.font="50px sans-serif";b.textAlign="center";b.textBaseline="middle";var c=(new rb).Fe((a.height|0)/2),e=(new rb).Fe(0),f=(new Ab).xa(0),h=(new Ab).xa(-50),l=Yc().ha().oa();n.setInterval(function(a,b,c,e,f,h,l,sa,pa,Wa){return function(){Zc();b.clearRect(0,0,a.width|0,a.height|0);0<sa.i?(h.i=(a.height|0)/2|0,l.i=0,pa.i=-50,Wa.Tk(),sa.i=-1+sa.i|0,b.fillStyle="darkred",b.fillText("Game Over",(a.width|
+0)/2|0,(a.height|0)/2|0)):$c(a,b,c,e,f,h,l,sa,pa,Wa)}}(a,b,200,50,0.1,c,e,f,h,l),20);a.onclick=function(a){return function(){a.i=-5+a.i}}(e)};Xc.prototype.Ue=function(a){this.Kl(a)};
+function $c(a,b,c,e,f,h,l,q,r,B){r.i=2+r.i|0;if(0<=r.i&&0===r.i%c){var M;ad||(ad=(new bd).b());M=ad;var aa=(a.height|0)-y(2,e)|0;M=[cd(M.Sd,aa)+e|0];for(var aa=0,ca=M.length|0;aa<ca;)dd(B,M[aa]),aa=1+aa|0}7<B.Hc&&(ed(B),r.i=r.i-c|0);h.i+=l.i;l.i+=f;b.fillStyle="darkblue";f=Yc().ka;fd(B,f).og(C(function(a){return null!==a})).A(C(function(a,b,c,e,f,h,l){return function(q){if(null!==q){var r=q.va|0;q=(y(q.wa|0,c)-l.i|0)+(a.width|0)|0;b.fillRect(q,0,5,r-e|0);b.fillRect(q,r+e|0,5,((a.height|0)-r|0)-e|
+0);q=q-((a.width|0)/2|0)|0;5>(0>q?-q|0:q)?(r-=f.i,r=(0>r?-r:r)>e):r=!1;r&&(h.i=50)}else throw(new H).o(q);}}(a,b,c,e,h,q,r)));b.fillStyle="darkgreen";b.fillRect(-5+((a.width|0)/2|0)|0,-5+h.i,10,10);if(0>h.i||h.i>(a.height|0))q.i=50}Xc.prototype.main=function(a){return this.Ue(a)};Xc.prototype.a=new u({fs:0},!1,"canvasapp.FlappyLine$",w,{fs:1,c:1});var gd=void 0;function Zc(){gd||(gd=(new Xc).b());return gd}p.canvasapp=p.canvasapp||{};p.canvasapp.FlappyLine=Zc;function hd(){}hd.prototype=new v;
+hd.prototype.Kl=function(a){var b=a.getContext("2d");a.width=a.parentElement.clientWidth|0;a.height=a.parentElement.clientHeight|0;b.fillStyle="#f8f8f8";b.fillRect(0,0,a.width|0,a.height|0);b.fillStyle="black";var c=id(!1);a.onmousedown=function(a){return function(){a.i=!0}}(c);a.onmouseup=function(a){return function(){a.i=!1}}(c);a.onmousemove=function(a,b,c){return function(l){var q=a.getBoundingClientRect();c.i&&b.fillRect(+l.clientX-+q.left,+l.clientY-+q.top,10,10)}}(a,b,c)};hd.prototype.Ue=function(a){this.Kl(a)};
+hd.prototype.main=function(a){return this.Ue(a)};hd.prototype.a=new u({gs:0},!1,"canvasapp.ScratchPad$",w,{gs:1,c:1});var jd=void 0;p.canvasapp=p.canvasapp||{};p.canvasapp.ScratchPad=function(){jd||(jd=(new hd).b());return jd};function kd(){}kd.prototype=new v;
+function ld(a,b){var c=new n.XMLHttpRequest,e=(new mc).b();c.onreadystatechange=function(a,b){return function(){if(4===(a.readyState|0)){if(200<=(a.status|0)&&300>(a.status|0)||304===(a.status|0))return pc(b,a);var c=new md;c.lk=a;nd.prototype.b.call(c);return od(b,pd(new qd,c))}}}(c,e);c.open("GET",a);c.responseType="";c.timeout=0;c.withCredentials=!1;b.A(C(function(a){return function(b){a.setRequestHeader(b.va,b.wa)}}(c)));c.send("");return e}
+kd.prototype.a=new u({js:0},!1,"org.scalajs.dom.ext.Ajax$",w,{js:1,c:1});var rd=void 0;function sd(){rd||(rd=(new kd).b())}
+function vc(){this.LH=this.KH=this.IH=this.CH=this.Na=this.Dm=this.RG=this.Fb=this.EB=this.DB=this.Ld=this.Uz=this.Hz=this.pz=this.az=this.$y=this.$x=this.Ah=this.kx=this.hx=this.Lw=this.uh=this.dw=this.Mv=this.td=this.Yd=this.Tz=this.Sz=this.Rz=this.Qz=this.Pz=this.Oz=this.Nz=this.Mz=this.Lz=this.Kz=this.kw=this.Ux=this.tw=this.Sj=this.zH=this.Gl=this.wx=this.ke=this.xB=this.yB=this.wG=this.Jw=this.Ov=this.BB=this.Ck=this.cw=this.ZF=this.bo=this.SG=this.$u=0}vc.prototype=new v;
+vc.prototype.b=function(){uc=this;this.$u=8;this.SG=9;this.bo=13;this.ZF=16;this.cw=17;this.Ck=18;this.BB=19;this.Ov=20;this.Jw=27;this.wG=32;this.yB=33;this.xB=34;this.ke=35;this.wx=36;this.Gl=37;this.zH=38;this.Sj=39;this.tw=40;this.Ux=45;this.kw=46;this.Kz=48;this.Lz=49;this.Mz=50;this.Nz=51;this.Oz=52;this.Pz=53;this.Qz=54;this.Rz=55;this.Sz=56;this.Tz=57;this.Yd=65;this.td=66;this.Mv=67;this.dw=68;this.uh=69;this.Lw=70;this.hx=71;this.kx=72;this.Ah=73;this.$x=74;this.$y=75;this.az=76;this.pz=
+77;this.Hz=78;this.Uz=79;this.Ld=80;this.DB=81;this.EB=82;this.Fb=83;this.RG=84;this.Dm=85;this.Na=86;this.CH=87;this.IH=88;this.KH=89;this.LH=90;return this};vc.prototype.a=new u({ls:0},!1,"org.scalajs.dom.ext.KeyCode$",w,{ls:1,c:1});var uc=void 0;function td(){this.Fi=null}td.prototype=new v;td.prototype.b=function(){ud=this;this.Fi=(new vd).o(wd());return this};td.prototype.a=new u({os:0},!1,"rx.core.Dynamic$",w,{os:1,c:1});var ud=void 0;function Wb(){ud||(ud=(new td).b());return ud}
+function xd(a,b){var c=a.bj;a:b:for(;;){var e=c.l,f=e.Lf(C(function(a){a=yd(zd(),a.lh.Wg);var b=wd();return!(null===a?null===b:a.fa(b))})),h=(new Bd).o(b),f=f.Gi(C(function(a){return function(b){b=yd(zd(),b.lh.Wg);return null===b?null===a:b.fa(a)}}(h)))?f:f.Xd((new Cd).o(b));if(!Dd(c,e,f))continue b;break a}}function Ed(a){var b=a.bj.l,c=C(function(a){return yd(zd(),a.lh.Wg).lj()}),e=Fd();return b.Lg(c,Gd(e)).Lf(C(function(a){return function(b){return b.Xi().pb(a)}}(a)))}
+function Hd(){this.Bm=Id();this.G=this.l=null}Hd.prototype=new v;function Jd(){}Jd.prototype=Hd.prototype;Hd.prototype.Gx=function(a,b,c){this.Bm=b;this.l=c;if(null===a)throw I(J(),null);this.G=a;return this};var Kd=new u({Wm:0},!1,"rx.core.Incrementing$SpinState",w,{Wm:1,c:1});Hd.prototype.a=Kd;function Ld(){}Ld.prototype=new v;Ld.prototype.a=new u({ss:0},!1,"rx.core.Obs$",w,{ss:1,c:1});var Md=void 0;function Nd(){}Nd.prototype=new v;Nd.prototype.a=new u({xs:0},!1,"rx.core.Rx$",w,{xs:1,c:1});
+var Od=void 0;function Pd(a){var b=Ed(a);a=C(function(a){return function(b){return(new A).v(a,b)}}(a));var c=Fd(),c=Gd(c),b=Qd(b,a,c);Rd(b)}function Vb(a){var b=Wb().Fi,c=Wb().Fi.qd.La();a:{var e;if(Sd(c)&&(e=c.zc,null!==e)){c=e.va;e=e.wa;xd(a,c);e=(new Bd).o((new A).v(c,Td(new Ud,a,e)));break a}if(wd()===c)e=wd();else throw(new H).o(c);}Vd(b.qd,e);return a.cr().La()}function Wd(){}Wd.prototype=new v;Wd.prototype.a=new u({zs:0},!1,"rx.core.Var$",w,{zs:1,c:1});var Xd=void 0;
+function Yd(){this.ki=this.ei=this.fi=null}Yd.prototype=new v;Yd.prototype.b=function(){Zd=this;Od||(Od=(new Nd).b());this.fi=Od;Md||(Md=(new Ld).b());this.ei=Md;Xd||(Xd=(new Wd).b());this.ki=Xd;return this};Yd.prototype.a=new u({As:0},!1,"rx.package$",w,{As:1,c:1});var Zd=void 0;function Qb(){Zd||(Zd=(new Yd).b());return Zd}function $d(){this.Mk=this.ym=null}$d.prototype=new v;
+$d.prototype.b=function(){ae=this;var a=(new wc).f("^[a-z][\\w0-9-]*$"),b=K();this.ym=be(a.Ma,b);a=(new wc).f("^[a-zA-Z_:][-a-zA-Z0-9_:.]*$");b=K();this.Mk=be(a.Ma,b);return this};$d.prototype.a=new u({Bs:0},!1,"scalatags.Escaping$",w,{Bs:1,c:1});var ae=void 0;function ce(){ae||(ae=(new $d).b());return ae}function de(){this.QG=this.ol=null}de.prototype=new v;de.prototype.b=function(){ee=this;this.ol=(new fe).b();this.QG=(new ge).b();return this};
+de.prototype.a=new u({Ps:0},!1,"scalatags.generic.Namespace$",w,{Ps:1,c:1});var ee=void 0;function he(){ee||(ee=(new de).b());return ee}function ie(a){var b=(new je).me((new L).b());a.dm(b.ye(a.Ke,"auto"))}function ke(a){var b=(new L).b();a.pq(N(new O,a,"start",b));b=(new L).b();a.lq(N(new O,a,"end",b));b=(new L).b();a.nq(N(new O,a,"left",b));b=(new L).b();a.oq(N(new O,a,"right",b));b=(new L).b();a.kq(N(new O,a,"center",b));b=(new L).b();a.mq(N(new O,a,"justify",b))}
+function le(){this.G=this.Fb=null}le.prototype=new v;function me(a){var b=he().ol,c=ce();if(!ne(oe(c.ym,a.Fb)))throw(new pe).f(qe((new re).jb((new z).k(["Illegal tag name: "," is not a valid XML tag name"])),(new z).k([a.Fb])));a.G;return se(new te,a.Fb,K(),!0,b)}function P(a){var b=he().ol,c=ce();if(!ne(oe(c.ym,a.Fb)))throw(new pe).f(qe((new re).jb((new z).k(["Illegal tag name: "," is not a valid XML tag name"])),(new z).k([a.Fb])));a.G;return se(new te,a.Fb,K(),!1,b)}
+function Q(a,b){var c=new le;c.Fb=b;if(null===a)throw I(J(),null);c.G=a;return c}function R(a){var b=ce();if(!ne(oe(b.Mk,a.Fb)))throw(new pe).f(qe((new re).jb((new z).k(["Illegal attribute name: "," is not a valid XML attribute name"])),(new z).k([a.Fb])));return(new ue).f(a.Fb)}le.prototype.a=new u({jt:0},!1,"scalatags.generic.Util$ExtendedString",w,{jt:1,c:1});function ve(){}ve.prototype=new v;
+function we(a){xe();a=ye(ze(),a);Ae();var b=(new Be).Ge(null),c=Ae(),e=Fc(function(a,b){return Ce(new De,a,b)}),f=Ee(Fe(),(new z).k(["value","children"]),Ge(Ie(),t(ma))),h=Ee(Fe(),(new z).k([null,null]),Ge(Ie(),t(jb))),l=xe().ii,q=xe();Je();var r=Ke().ef,q=Le(q,b,r),c=Me(c,e,f,h,l,q);b.qk=Ne(c);b=Oe(c);e=Ne(b).h(a);a=sb(tb(),(new z).k(["main","menu","layout","menuLink"]));b=C(function(a){return n.document.getElementById(a)});c=tb();a=a.ac(b,c.ka);tb();c=(new Bd).o(a);if(null!==c.zc&&0===c.zc.$b(4))f=
+c.zc.pa(0),a=c.zc.pa(1),b=c.zc.pa(2),c=c.zc.pa(3);else throw(new H).o(a);h=n.document.getElementsByClassName("highlight-me");h=Pe(h);for(h=Qe(h);h.qa();)l=h.ia(),n.hljs.highlightBlock(l);var f=Re(e,f),e=E().Se,h=E().Bg,l=E().wc,e=F(e,(new z).k([sc(new tc,h,"menu-item-list collapsed",l)])),h=E(),l=Se(f).l.Tc,e=D(F(e,(new z).k([$b(h,l)]))),h=E().Ah,l=E().Bg,q=E().wc,l=D(F(h,(new z).k([sc(new tc,l,"fa fa-caret-down",q)]))),h=E().Yd,q=E(),q=$b(q,l),r=E().nl,B=E().wc,r=sc(new tc,r,"javascript:",B),B=E().fp,
+B=E().kg.ye(B.Ke,"0px"),M=E().Rl,M=E().kg.ye(M.Ke,"15px"),aa=E().zp,aa=E().kg.ye(aa.Ke,"15px"),ca=Te().xn,ra=E().dr,ra=E().kg.ye(ra.Ke,"0px"),sa=E().Sj,sa=E().kg.ye(sa.Ke,"0px"),pa=E().Bg,Wa=E().wc,pa=sc(new tc,pa,"pure-menu-selected",Wa),Wa=E().qp,f=C(function(a,b,c){return function(){c.classList.toggle("fa-caret-down");c.classList.toggle("fa-caret-up");b.classList.toggle("collapsed");b.classList.toggle("expanded");return Ue(a)}}(f,e,l));E();f=D(F(h,(new z).k([q,r,B,M,aa,ca,ra,sa,pa,sc(new tc,Wa,
+f,Ve(new We,C(function(a){return function(a){return function(b){return a.h(b)}}(a)})))])));h=E().Tb;l=E().Bg;q=E().wc;h=F(h,(new z).k([sc(new tc,l,"pure-menu pure-menu-open",q)]));l=E().Yd;q=E().Bg;r=E().wc;l=F(l,(new z).k([sc(new tc,q,"pure-menu-heading",r)]));E();q=(new G).f("Contents");r=E();f=F(l,(new z).k([q,$b(r,f)]));l=E();a.appendChild(D(F(h,(new z).k([f,$b(l,e)]))));c.onclick=function(a,b,c){return function(){b.classList.toggle("active");a.classList.toggle("active");return!!c.classList.toggle("active")}}(a,
+b,c)}ve.prototype.main=function(a){we(a)};ve.prototype.a=new u({mt:0},!1,"scrollmenu.Controller$",w,{mt:1,c:1});var Xe=void 0;p.scrollmenu=p.scrollmenu||{};p.scrollmenu.Controller=function(){Xe||(Xe=(new ve).b());return Xe};function Ye(){this.ll=this.Yn=this.qm=this.wm=null;this.VF=this.Hh=!1;this.UF=0;this.Tl=null;this.Mb=0}Ye.prototype=new v;
+function Ue(a){a.Hh=!a.Hh;return a.Hh?(Ze(a,Se(a),C(function(){return function(a){a.Tc.children[1].style.maxHeight=y(44,1+(a.ke-a.Qe|0)|0)+"px"}}(a))),void 0):$e(a)}function af(a,b,c){return S(T(),b,c)?0:+b.offsetTop+af(a,b.offsetParent,c)}function bf(a,b){var c=b.l,e=b.Ae;Je();Ke().ef;Je();for(var f=(new cf).b(),e=df(e);e.ge;){var h=e.ia(),h=bf(a,h).Aa();ef(f,h)}f=ff(f);e=(Je(),Ke().ef);e===(gf(),Ke().ef)?c=jf(f,c):(e=e.Pc(f.pe()),e.za(c),e.hb(f.pd()),c=e.oa());return c}
+function Se(a){if(0===(1&a.Mb)&&0===(1&a.Mb)){var b=(new Ab).xa(-1);a.Yn=kf(a,a.wm,0,b);a.Mb|=1}return a.Yn}function lf(a,b,c){var e=b.l.Tc;e.children[0].classList.remove("pure-menu-selected");e.classList.add("hide");e.children[1].style.maxHeight=a.Hh?"none":"0px";b.l.Qe<c.Qe?e.classList.add("selected"):e.classList.remove("selected");for(b=df(b.Ae);b.ge;)e=b.ia(),lf(a,e,c)}
+function mf(a){if(0===(2&a.Mb)){var b=bf(a,a.wm).u(),c=J(),e=C(function(a){return n.document.getElementById(a.split(" ").join(""))}),f=tb(),b=b.ac(e,f.ka),e=nf(a),f=tb();(b=b.ac(e,f.ka))&&b.a&&b.a.y.dL?c=b.SK:b&&b.a&&b.a.y.Nq?c=b.q:(e=[],b.A(C(function(a,b){return function(a){return b.push(a)|0}}(c,e))),c=e);a.ll=c;a.Mb|=2}return a.ll}function of(a){return 0===(2&a.Mb)?mf(a):a.ll}
+function pf(a,b,c){if(null!==b)var e=b.l,f=b.Ae;else throw(new H).o(b);var h=e,e=f;-1===h.Qe?f=!0:(f=of(a)[h.Qe].qh()<=c,h=h.ke>=(of(a).length|0)||of(a)[h.ke].qh()>c,f=f&&h);Je();h=Ke().ef;h=qf(e,h);for(e=df(e);e.ge;){var l=e.ia();h.za(pf(a,l,c))}a=h.oa();a:{c=0;e=df(a);for(h=0;0>h&&e.qa();)e.ia(),h=1+h|0;for(;e.qa();)if(null!==e.ia())break a;else c=1+c|0;c=-1}return-1!==c?(a=a.pa(c),Td(new Ud,b,a)):f?(rf(),b=(new z).k([b]),a=rf().ka,sf(b,a)):null}
+function Ze(a,b,c){c.h(b.l);for(b=df(b.Ae);b.ge;){var e=b.ia();Ze(a,e,c)}}function Re(a,b){var c=new Ye;c.wm=a;c.qm=b;c.Hh=!1;c.VF=!1;c.UF=-1;c.Tl=null;return c}function $e(a){var b=+a.qm.scrollTop,b=pf(a,Se(a),b),c=tf(b).l,e=a.Tl;null===c||c.fa(e);var e=c.Tc.children[0],f=e.getBoundingClientRect();0>=+f.top?e.scrollIntoView(!0):+f.top>(n.innerHeight|0)&&e.scrollIntoView(!1);n.history.replaceState(null,null,"#"+c.Mf);a.Tl=c;return uf(a,b,c)}
+function uf(a,b,c){var e=K();if(null===e?null===b:e.fa(b))return 0;if(vf(b)){var f=b.mf,h=b.rd;if(null!==f)return e=f.l,f=f.Ae,e.Tc.classList.remove("hide"),e.Tc.classList.remove("selected"),e.Tc.children[0].classList.add("pure-menu-selected"),(new wf).Pf(f,xf(b)).A(C(function(a,b){return function(c){lf(a,c,b)}}(a,c))),b=uf(a,h,c)+f.ba()|0,e.Tc.children[1].style.maxHeight=a.Hh?"none":y(44,b)+"px",b}throw(new H).o(b);}
+function kf(a,b,c,e){var f=E().Ic,h=E().Yd;E();var l=(new G).f(b.l),q=yf(),r=-1===e.i?"none":"block",B=E().Vd,q=N(new O,q,r,B),r=E().nl,B="#"+b.l.split(" ").join(""),M=E().wc,r=sc(new tc,r,B,M),B=E().Bg,M=E().wc,h=F(f,(new z).k([F(h,(new z).k([l,q,r,sc(new tc,B,"menu-item",M)]))])),f=e.i;e.i=1+e.i|0;q=b.Ae;Je();l=Ke().ef;l=qf(q,l);for(q=df(q);q.ge;)r=q.ia(),l.za(kf(a,r,1+c|0,e));a=l.oa();c=E().Se;e=E().Rl;e=E().kg.ye(e.Ke,"15px");l=E();Je();q=Ke().ef;q=qf(a,q);for(r=df(a);r.ge;)B=r.ia(),q.za(B.l.Tc);
+q=q.oa();c=D(F(h,(new z).k([F(c,(new z).k([e,hc(new ic,l,q,C(function(a){var b=E();return $b(b,a)}))]))])));b=b.l.split(" ").join("");if(0<a.ba()){Je();e=Ke().ef;e=qf(a,e);for(h=df(a);h.ge;)l=h.ia(),e.za(l.l.ke);e=e.oa().Wf(zf())|0}else e=1+f|0;return Ce(new De,Af(c,b,f,e),a)}Ye.prototype.a=new u({nt:0},!1,"scrollmenu.ScrollSpy",w,{nt:1,c:1});function Bf(){this.zg=this.li=this.yg=null}Bf.prototype=new v;
+Bf.prototype.b=function(){Cf=this;Df||(Df=(new Ef).b());this.yg=Df;Ff||(Ff=(new Gf).b());this.li=Ff;Hf||(Hf=(new If).b());this.zg=Hf;return this};Bf.prototype.a=new u({qt:0},!1,"upickle.Aliases$",w,{qt:1,c:1});var Cf=void 0;function Jf(){Cf||(Cf=(new Bf).b());return Cf}function Me(a,b,c,e,f,h){var l=new Kf;if(null===a)throw I(J(),null);l.sa=a;l.mo=b;l.ho=f;l.io=h;a=a.we("Object",Lf(a,c,e,l));return(new Mf).Ge(a)}
+function Nf(a,b,c){for(var e=s(x(jb),[b.d.length]),f=a.Re(jc().Ne),h=0,l=b.d.length;h<l;){if(f.pb(b.d[h]))e.d[h]=f.h(b.d[h]);else if(null!==c.d[h])e.d[h]=c.d[h];else throw Of(new Pf,(new Qf).jb(a),"Key Missing: "+b.d[h]);h=1+h|0}jc();return null===e?null:Rf(yc(),e)}function Sf(a,b,c){Jf().zg;c=C(function(a){return function(b){return S(T(),Infinity,b)?(new Tf).f("Infinity"):S(T(),-Infinity,b)?(new Tf).f("-Infinity"):(new Uf).Fe(a.kj(b))}}(c));a=Ae().we("Number",Vf(a,b));return Wf(new Xf,c,a)}
+function Yf(a){Jf().yg;a.tu=(new Mf).Ge((new Zf).Id(a));Jf().li;a.uu=(new $f).Nf(C(da()));a.ir=Ae().we("Boolean",(new ag).Id(a));Jf().zg;a.wr=Wf(new Xf,C(function(a){return a?bg():cg()}),a.ir);Jf().zg;a.Mu=Wf(new Xf,C(function(){return(new Qf).jb(K())}),(new dg).Id(a));a.jr=Ae().we("String",(new eg).Id(a));Jf().zg;var b=fg();a.ii=Wf(new Xf,b,a.jr);a.kr=Ae().we("Symbol",(new gg).Id(a));Jf().zg;a.Iu=Wf(new Xf,C(function(a){a=a.r();return(new Tf).f(a.substring(1))}),a.kr);a.yr=hg(C(function(a){a=65535&
+(a.charCodeAt(0)|0);return(new ig).rb(a)}));var b=C(function(a){return+a<<24>>24}),c=C(function(a){a=(new wc).f(a);jg||(jg=(new kg).b());a=a.Ma;var b=lg(mg(),a,10);if(-128>b||127<b)throw(new ng).f(qe((new re).jb((new z).k(['For input string: "','"'])),(new z).k([a])));return b<<24>>24});og||(og=(new pg).b());a.xr=Sf(b,c,og);b=C(function(a){return+a<<16>>16});c=C(function(a){a=(new wc).f(a);qg||(qg=(new rg).b());a=a.Ma;var b=lg(mg(),a,10);if(-32768>b||32767<b)throw(new ng).f(qe((new re).jb((new z).k(['For input string: "',
+'"'])),(new z).k([a])));return b<<16>>16});tg||(tg=(new ug).b());a.Cu=Sf(b,c,tg);b=C(function(a){return+a|0});c=C(function(a){a=(new wc).f(a);return lg(mg(),a.Ma,10)});vg||(vg=(new wg).b());a.Lr=Sf(b,c,vg);a.Tm=hg(C(function(a){a=(new wc).f(a);return xg(yg(),a.Ma,10)}));b=C(function(a){return ta(+a)});c=C(function(a){a=(new wc).f(a).Ma;return ta(zg(Ag(),a))});Bg||(Bg=(new Cg).b());a.Gr=Sf(b,c,Bg);b=C(function(a){return+a});c=C(function(a){a=(new wc).f(a);return zg(Ag(),a.Ma)});Dg||(Dg=(new Eg).b());
+a.Ar=Sf(b,c,Dg);Jf().li;a.rk=(new $f).Nf(C(function(a){return function(b){var c=Fg().sk;if(null===c?null===b:c.fa(b))return Gg(a.ii).h("inf");c=Fg().zk;if(null===c?null===b:c.fa(b))return Gg(a.ii).h("-inf");if(b===Fg().Bk)return Gg(a.ii).h("undef");b=b.$q();return Gg(a.Tm).h(b)}}(a)));Jf().li;b=Gg(a.rk);a.Kr=(new $f).Nf(b);Jf().yg;a.Rm=(new Mf).Ge((new Hg).Id(a));Jf().li;b=Gg(a.rk);a.Fr=(new $f).Nf(b);Jf().yg;a.Qm=(new Mf).Ge((new Ig).Id(a));Jf().yg;b=Ae();c=Ne(a.Qm);b=b.we("DurationString",c.sf(Ne(a.Rm)));
+a.Br=(new Mf).Ge(b)}function hg(a){Jf().zg;var b=C(function(a){return(new Tf).f(ka(a))});a=Ae().we("Number",Jg(a));return Wf(new Xf,b,a)}function Le(a,b,c){Jf().yg;a=Ae().we("Array(n)",Kg(a,b,c));return(new Mf).Ge(a)}function If(){}If.prototype=new v;If.prototype.a=new u({Rt:0},!1,"upickle.ReadWriter$",w,{Rt:1,c:1});var Hf=void 0;function Ef(){}Ef.prototype=new v;Ef.prototype.a=new u({Tt:0},!1,"upickle.Reader$",w,{Tt:1,c:1});var Df=void 0;function Ne(a){return Lg(new Mg,new Ng,a.Wl())}
+function Gf(){}Gf.prototype=new v;Gf.prototype.a=new u({Yt:0},!1,"upickle.Writer$",w,{Yt:1,c:1});var Ff=void 0;function Gg(a){return C(function(a){return function(c){return null===c?Og():a.nr().h(c)}}(a))}function Pg(){}Pg.prototype=new v;
+function ye(a,b){if(Qg(b))return(new Tf).f(b);if("number"===typeof b)return(new Uf).Fe(+b);if(S(T(),!0,b))return bg();if(S(T(),!1,b))return cg();if(null===b)return Og();if(b instanceof n.Array){var c=[];b.length|0;for(var e=0,f=b.length|0;e<f;){var h=b[e],h=ye(ze(),h);c.push(h);e=1+e|0}return(new Rg).jb((new z).k(c))}if(b instanceof n.Object)return c=(new Sg).Dh(b),c=(new Tg).Do(c,C(function(a){return ye(ze(),a)})),(new Qf).jb(Ug(c));throw(new H).o(b);}
+Pg.prototype.a=new u({$t:0},!1,"upickle.json.package$",w,{$t:1,c:1});var Vg=void 0;function ze(){Vg||(Vg=(new Pg).b());return Vg}function Wg(){}Wg.prototype=new v;Wg.prototype.oe=function(a){a.innerHTML=qe((new re).jb((new z).k(["\n \x3cdiv\x3e\n \x3ch1\x3eHello World!\x3c/h1\x3e\n \x3cp\x3e\n The quick brown \x3cb\x3e","\x3c/b\x3e\n jumps over the lazy \x3ci\x3e","\x3c/b\x3e\n \x3c/p\x3e\n \x3c/div\x3e\n "])),(new z).k(["fox","dog"]))};Wg.prototype.Lb=function(a){this.oe(a)};
+Wg.prototype.main=function(a){return this.Lb(a)};Wg.prototype.a=new u({bu:0},!1,"webpage.HelloWorld0$",w,{bu:1,c:1});var Xg=void 0;p.webpage=p.webpage||{};p.webpage.HelloWorld0=function(){Xg||(Xg=(new Wg).b());return Xg};function Yg(){}Yg.prototype=new v;
+Yg.prototype.qf=function(a){return a.appendChild(D(F(E().Tb,(new z).k([F(E().yh,(new z).k([(E(),(new G).f("Hello World!"))])),F(E().Ld,(new z).k([(E(),(new G).f("The quick brown ")),F(E().td,(new z).k([(E(),(new G).f("fox"))])),(E(),(new G).f(" jumps over the lazy ")),F(E().Ah,(new z).k([(E(),(new G).f("dog"))])),(E(),(new G).f("."))]))]))))};Yg.prototype.Lb=function(a){return this.qf(a)};Yg.prototype.main=function(a){return this.Lb(a)};
+Yg.prototype.a=new u({cu:0},!1,"webpage.HelloWorld1$",w,{cu:1,c:1});var Zg=void 0;p.webpage=p.webpage||{};p.webpage.HelloWorld1=function(){Zg||(Zg=(new Yg).b());return Zg};function $g(){}$g.prototype=new v;
+$g.prototype.qf=function(a){var b=E().Og,c=E().Sh,e=E().wc,c=sc(new tc,c,"text",e),e=E().Zi,f=E().wc,h=D(F(b,(new z).k([c,sc(new tc,e,"Type here!",f)]))),b=D(E().ij);h.onkeyup=function(a,b){return function(){b.textContent=a.value.toUpperCase()}}(h,b);var c=E().Tb,e=F(E().yh,(new z).k([(E(),(new G).f("Capital Box!"))])),f=F(E().Ld,(new z).k([(E(),(new G).f("Type here and have it capitalized!"))])),l=E().Tb,q=E(),h=F(l,(new z).k([$b(q,h)])),l=E().Tb,q=E();return a.appendChild(D(F(c,(new z).k([e,f,h,
+F(l,(new z).k([$b(q,b)]))]))))};$g.prototype.Lb=function(a){return this.qf(a)};$g.prototype.main=function(a){return this.Lb(a)};$g.prototype.a=new u({du:0},!1,"webpage.Inputs$",w,{du:1,c:1});var ah=void 0;p.webpage=p.webpage||{};p.webpage.Inputs=function(){ah||(ah=(new $g).b());return ah};function bh(){}bh.prototype=new v;
+bh.prototype.qf=function(a){var b=(new cc).o(null),c=ch(),e=sb(tb(),(new z).k("Apple Apricot Banana Cherry Mango Mangosteen Mandarin Grape Grapefruit Guava".split(" "))),f=E().Tb,h=E(),l=dh(0,e,b,c),f=D(F(f,(new z).k([$b(h,l)])));eh(this,b,c).onkeyup=function(a,b,c,e){return function(){c.innerHTML="";return c.appendChild(dh(fh(),a,b,e))}}(e,b,f,c);var e=E().Tb,h=F(E().yh,(new z).k([(E(),(new G).f("Search Box!"))])),l=F(E().Ld,(new z).k([(E(),(new G).f("Type here to filter the list of things below!"))])),
+q=E().Tb,r=E(),b=eh(this,b,c),b=F(q,(new z).k([$b(r,b)])),c=E();return a.appendChild(D(F(e,(new z).k([h,l,b,$b(c,f)]))))};function eh(a,b,c){return 0===(1&c.i)?a.wi(b,c):b.i}
+function dh(a,b,c,e){a=E().Se;var f=E();b=b.og(C(function(a,b){return function(c){c=c.toLowerCase();var e=eh(fh(),a,b).value.toLowerCase();return c.substring(0,e.length|0)===e}}(c,e)));c=C(function(a){return F(E().Ic,(new z).k([(E(),(new G).f(a))]))});e=tb();b=b.ac(c,e.ka);c=jc().Ne;return D(F(a,(new z).k([hc(new ic,f,b,c)])))}
+bh.prototype.wi=function(a,b){if(0===(1&b.i)){var c=E().Og,e=E().Sh,f=E().wc,e=sc(new tc,e,"text",f),f=E().Zi,h=E().wc;a.i=D(F(c,(new z).k([e,sc(new tc,f,"Type here!",h)])));b.i|=1}return a.i};bh.prototype.Lb=function(a){return this.qf(a)};bh.prototype.main=function(a){return this.Lb(a)};bh.prototype.a=new u({eu:0},!1,"webpage.Search0$",w,{eu:1,c:1});var gh=void 0;function fh(){gh||(gh=(new bh).b());return gh}p.webpage=p.webpage||{};p.webpage.Search0=fh;function hh(){}hh.prototype=new v;
+hh.prototype.qf=function(a){var b=(new cc).o(null),c=ch(),e=sb(tb(),(new z).k("Apple Apricot Banana Cherry Mango Mangosteen Mandarin Grape Grapefruit Guava".split(" "))),f=E().Tb,h=E(),l=ih(0,e,b,c),f=D(F(f,(new z).k([$b(h,l)])));jh(this,b,c).onkeyup=function(a,b,c,e){return function(){c.innerHTML="";return c.appendChild(ih(kh(),a,b,e))}}(e,b,f,c);var e=E().Tb,h=F(E().yh,(new z).k([(E(),(new G).f("Search Box!"))])),l=F(E().Ld,(new z).k([(E(),(new G).f("Type here to filter the list of things below!"))])),
+q=E().Tb,r=E(),b=jh(this,b,c),b=F(q,(new z).k([$b(r,b)])),c=E();return a.appendChild(D(F(e,(new z).k([h,l,b,$b(c,f)]))))};
+function ih(a,b,c,e){a=E().Se;var f=E();b=b.og(C(function(a,b){return function(c){c=c.toLowerCase();var e=jh(kh(),a,b).value.toLowerCase();return c.substring(0,e.length|0)===e}}(c,e)));c=C(function(a,b){return function(c){c=(new wc).f(c);var e=jh(kh(),a,b).value.length|0,e=(new A).v(c.Pe(0,e),c.Pe(e,c.ba()));if(null!==e)c=e.va,e=e.wa;else throw(new H).o(e);var f=E().Ic,M=E().ij,aa=E().Nk,ca=E().Vd;return F(f,(new z).k([F(M,(new z).k([N(new O,aa,"yellow",ca),(E(),(new G).f(c))])),(E(),(new G).f(e))]))}}(c,
+e));e=tb();c=b.ac(c,e.ka);e=jc().Ne;return D(F(a,(new z).k([hc(new ic,f,c,e)])))}function jh(a,b,c){return 0===(1&c.i)?a.wi(b,c):b.i}hh.prototype.wi=function(a,b){if(0===(1&b.i)){var c=E().Og,e=E().Sh,f=E().wc,e=sc(new tc,e,"text",f),f=E().Zi,h=E().wc;a.i=D(F(c,(new z).k([e,sc(new tc,f,"Type here!",h)])));b.i|=1}return a.i};hh.prototype.Lb=function(a){return this.qf(a)};hh.prototype.main=function(a){return this.Lb(a)};hh.prototype.a=new u({fu:0},!1,"webpage.Search1$",w,{fu:1,c:1});var lh=void 0;
+function kh(){lh||(lh=(new hh).b());return lh}p.webpage=p.webpage||{};p.webpage.Search1=kh;function mh(){}mh.prototype=new v;mh.prototype.oe=function(a){var b=new n.XMLHttpRequest;b.open("GET","http://api.openweathermap.org/data/2.5/weather?q\x3dSingapore");b.onload=function(a,b){return function(){if(200===(b.status|0)){var f=E().Pj;E();return a.appendChild(D(F(f,(new z).k([(new G).f(b.responseText)]))))}}}(a,b);b.send()};mh.prototype.Lb=function(a){this.oe(a)};mh.prototype.main=function(a){return this.Lb(a)};
+mh.prototype.a=new u({gu:0},!1,"webpage.Weather0$",w,{gu:1,c:1});var nh=void 0;p.webpage=p.webpage||{};p.webpage.Weather0=function(){nh||(nh=(new mh).b());return nh};function oh(){}oh.prototype=new v;oh.prototype.oe=function(a){sd();var b=ph(),b=ld("http://api.openweathermap.org/data/2.5/weather?q\x3dSingapore",b);a=(new qh).Ni(a);var c=Rc().Nd;rh(b,a,c)};oh.prototype.Lb=function(a){this.oe(a)};oh.prototype.main=function(a){return this.Lb(a)};
+oh.prototype.a=new u({hu:0},!1,"webpage.Weather1$",w,{hu:1,c:1});var sh=void 0;p.webpage=p.webpage||{};p.webpage.Weather1=function(){sh||(sh=(new oh).b());return sh};function th(){}th.prototype=new v;th.prototype.oe=function(a){sd();var b=ph(),b=ld("http://api.openweathermap.org/data/2.5/weather?q\x3dSingapore",b);a=(new uh).Ni(a);var c=Rc().Nd;rh(b,a,c)};th.prototype.Lb=function(a){this.oe(a)};th.prototype.main=function(a){return this.Lb(a)};
+th.prototype.a=new u({ju:0},!1,"webpage.Weather2$",w,{ju:1,c:1});var vh=void 0;p.webpage=p.webpage||{};p.webpage.Weather2=function(){vh||(vh=(new th).b());return vh};function wh(){}wh.prototype=new v;wh.prototype.oe=function(a){sd();var b=ph(),b=ld("http://api.openweathermap.org/data/2.5/weather?q\x3dSingapore",b);a=(new xh).Ni(a);var c=Rc().Nd;rh(b,a,c)};wh.prototype.Lb=function(a){this.oe(a)};wh.prototype.main=function(a){return this.Lb(a)};
+wh.prototype.a=new u({lu:0},!1,"webpage.Weather3$",w,{lu:1,c:1});var yh=void 0;p.webpage=p.webpage||{};p.webpage.Weather3=function(){yh||(yh=(new wh).b());return yh};function zh(){}zh.prototype=new v;
+zh.prototype.oe=function(a){var b=(new cc).o(null),c=(new cc).o(null),e=ch();Ah(this,b,e).onkeyup=function(a,b,c){return function(){Bh(Ch(),b,c).innerHTML="Loading...";Dh(Ch(),Ah(Ch(),a,c).value,a,b,c)}}(b,c,e);var f=E().Tb,h=F(E().yh,(new z).k([(E(),(new G).f("Weather Search"))])),l=F(E().Ld,(new z).k([(E(),(new G).f("Enter the name of a city to pull the ")),(E(),(new G).f("latest weather data from api.openweathermap.com!"))])),q=E().Ld,r=E(),b=Ah(this,b,e),q=F(q,(new z).k([$b(r,b)])),r=E().ml,b=
+E(),c=Bh(0,c,e);a.appendChild(D(F(f,(new z).k([h,l,q,r,$b(b,c),E().ml]))))};
+function Dh(a,b,c,e,f){a="http://api.openweathermap.org/data/2.5/find?type\x3dlike\x26mode\x3djson\x26q\x3d"+b;sd();var h=ph();a=ld(a,h);c=C(function(a,b,c){return function(){return b===Ah(Ch(),a,c).value}}(c,b,f));h=Rc().Nd;c=Eh(a,c,h);b=C(function(a,b,c){return function(e){e=n.JSON.parse(e.responseText).list;if(e instanceof n.Array){Bh(Ch(),a,c).innerHTML="";Ch();for(var f=0,h=e.length|0;f<h;){var ca=e[f],ra=ka(ca.name),sa=ka(ca.sys.country),pa=ka(ca.weather.pop().main),Wa=-273.15+ +ca.main.temp_min|
+0,hf=-273.15+ +ca.main.temp_max|0,ca=ka(ca.main.humidity),ra=(new wc).f(ra),Ob=(new A).v(ra.Pe(0,b.length|0),ra.Pe(b.length|0,ra.ba()));if(null!==Ob)ra=Ob.va,Ob=Ob.wa;else throw(new H).o(Ob);var Ec=ra,Da=Ob,ra=Bh(Ch(),a,c),Ob=E().Tb,Ad=E().td,Hb=E().ij;E();var Ec=(new G).f(Ec),lk=E().Nk,mk=E().Vd,sa=F(Ad,(new z).k([F(Hb,(new z).k([Ec,N(new O,lk,"yellow",mk)])),(E(),(new G).f(Da)),(E(),(new G).f(", ")),(E(),(new G).f(sa))])),Da=E().Se,pa=F(E().Ic,(new z).k([F(E().td,(new z).k([(E(),(new G).f("Weather "))])),
+(E(),(new G).f(pa))])),Ad=E().Ic,Hb=F(E().td,(new z).k([(E(),(new G).f("Temp "))]));E();Wa=(new G).f(""+Wa);E();Ec=(new G).f(" - ");E();ra.appendChild(D(F(Ob,(new z).k([sa,F(Da,(new z).k([pa,F(Ad,(new z).k([Hb,Wa,Ec,(new G).f(""+hf)])),F(E().Ic,(new z).k([F(E().td,(new z).k([(E(),(new G).f("Humidity "))])),(E(),(new G).f(ca)),(E(),(new G).f("%"))]))]))]))));f=1+f|0}}else Bh(Ch(),a,c).innerHTML="No Results"}}(e,b,f));e=Rc().Nd;Sc(c,b,e)}
+function Bh(a,b,c){if(0===(2&c.i)&&0===(2&c.i)){a=E().Tb;var e=E().zo,e=E().kg.ye(e.Ke,"400px"),f=E().wp,h=E().Vd;b.i=D(F(a,(new z).k([e,N(new O,f,"scroll",h)])));c.i|=2}return b.i}function Ah(a,b,c){return 0===(1&c.i)?a.wi(b,c):b.i}zh.prototype.wi=function(a,b){if(0===(1&b.i)){var c=E().Og,e=E().Sh,f=E().wc,e=sc(new tc,e,"text",f),f=E().Zi,h=E().wc;a.i=D(F(c,(new z).k([e,sc(new tc,f,"Type here!",h)])));b.i|=1}return a.i};zh.prototype.Lb=function(a){this.oe(a)};zh.prototype.main=function(a){return this.Lb(a)};
+zh.prototype.a=new u({nu:0},!1,"webpage.WeatherSearch$",w,{nu:1,c:1});var Fh=void 0;function Ch(){Fh||(Fh=(new zh).b());return Fh}p.webpage=p.webpage||{};p.webpage.WeatherSearch=Ch;function kg(){this.ji=null;this.hi=0}kg.prototype=new v;kg.prototype.a=new u({fy:0},!1,"java.lang.Byte$",w,{fy:1,c:1});var jg=void 0;
+function Gh(){this.ji=null;this.iJ=this.gI=this.hI=this.cI=this.dI=this.aJ=this.QI=this.WI=this.VI=this.bJ=this.TI=this.ZI=this.SI=this.YI=this.UI=this.$I=this.hi=this.wk=this.xk=0;this.pK=this.qK=this.rK=null;this.Mb=0}Gh.prototype=new v;function Hh(a){a=(new ig).rb(a).l;return 65535&(n.String.fromCharCode(a).toUpperCase().charCodeAt(0)|0)}Gh.prototype.a=new u({gy:0},!1,"java.lang.Character$",w,{gy:1,c:1});var Ih=void 0;function Jh(){Ih||(Ih=(new Gh).b())}function Ra(){this.Zd=null}
+Ra.prototype=new v;function lb(a){return a.Zd.name}Ra.prototype.r=function(){return(this.Zd.isInterface?"interface ":this.Zd.isPrimitive?"":"class ")+lb(this)};Ra.prototype.a=new u({To:0},!1,"java.lang.Class",w,{To:1,c:1});function Kh(){this.ji=null;this.hi=this.XI=this.RI=this.xk=this.wk=this.eJ=this.dJ=this.fJ=0;this.Xk=null;this.Mb=!1}Kh.prototype=new v;
+function Lh(a){a.Mb||(a.Xk=new n.RegExp("^[\\x00-\\x20]*[+-]?(NaN|Infinity|(\\d+\\.?\\d*|\\.\\d+)([eE][+-]?\\d+)?)[fFdD]?[\\x00-\\x20]*$"),a.Mb=!0);return a.Xk}function Mh(a,b,c){return b!==b?c!==c?0:1:c!==c?-1:b===c?0===b?(a=1/b,a===1/c?0:0>a?-1:1):0:b<c?-1:1}function zg(a,b){if((a.Mb?a.Xk:Lh(a)).test(b))return+n.parseFloat(b);throw(new ng).f(qe((new re).jb((new z).k(['For input string: "','"'])),(new z).k([b])));}Kh.prototype.a=new u({jy:0},!1,"java.lang.Double$",w,{jy:1,c:1});var Nh=void 0;
+function Ag(){Nh||(Nh=(new Kh).b());return Nh}function Oh(){this.ji=null;this.hi=this.wk=this.xk=0}Oh.prototype=new v;Oh.prototype.Jg=function(a){throw(new ng).f(qe((new re).jb((new z).k(['For input string: "','"'])),(new z).k([a])));};
+function lg(a,b,c){if(null===b||0===((new wc).f(b).Ma.length|0)||2>c||36<c)a.Jg(b);else{var e=45===(65535&(b.charCodeAt(0)|0))||43===(65535&(b.charCodeAt(0)|0))?1:0;if(((new wc).f(b).Ma.length|0)<=e)a.Jg(b);else{for(;;){var f=e,h=(new wc).f(b).Ma;if(f<(h.length|0))Jh(),f=65535&(b.charCodeAt(e)|0),0>(36<c||2>c?-1:48<=f&&57>=f&&(-48+f|0)<c?-48+f|0:65<=f&&90>=f&&(-65+f|0)<(-10+c|0)?-55+f|0:97<=f&&122>=f&&(-97+f|0)<(-10+c|0)?-87+f|0:65313<=f&&65338>=f&&(-65313+f|0)<(-10+c|0)?-65303+f|0:65345<=f&&65370>=
+f&&(-65345+f|0)<(-10+c|0)?-65303+f|0:-1)&&a.Jg(b),e=1+e|0;else break}c=+n.parseInt(b,c);return c!==c||2147483647<c||-2147483648>c?a.Jg(b):c|0}}}function Ph(a,b,c){return b<<c|b>>>(-c|0)|0}function Qh(a,b){var c=b-(1431655765&b>>1)|0,c=(858993459&c)+(858993459&c>>2)|0;return y(16843009,252645135&(c+(c>>4)|0))>>24}function Rh(a,b){var c=b,c=c|c>>>1|0,c=c|c>>>2|0,c=c|c>>>4|0,c=c|c>>>8|0;return 32-Qh(0,c|c>>>16|0)|0}function Sh(a,b){return Qh(0,-1+(b&(-b|0))|0)}
+Oh.prototype.a=new u({ny:0},!1,"java.lang.Integer$",w,{ny:1,c:1});var Th=void 0;function mg(){Th||(Th=(new Oh).b());return Th}function Uh(){this.ji=null;this.xk=Id();this.wk=Id();this.hi=0}Uh.prototype=new v;
+function xg(a,b,c){if(null===b)throw(new ya).b();if(""===b)a.Jg(b);else{if(45===(65535&(b.charCodeAt(0)|0)))return Vh(xg(a,b.substring(1),c));try{var e=b,f=Id();for(;;)if(0<(e.length|0)){var h=e.substring(0,9),l=f,q=c,r=h.length|0,B=1;b:{var M;for(;;)if(0===r){M=B;break b}else if(0===r%2)var aa=y(q,q),ca=r/2|0,q=aa,r=ca;else var ca=-1+r|0,ra=y(B,q),r=ca,B=ra}var sa=Wh(l,(new U).xa(M)),pa=lg(mg(),h,c),Wa=(new U).xa(pa),hf=e.substring(9),Ob=Xh(sa,Wa),e=hf,f=Ob}else return f}catch(Ec){if(Yh(Ec))a.Jg(b);
+else throw Ec;}}}Uh.prototype.Jg=function(a){throw(new ng).f(qe((new re).jb((new z).k(['For input string: "','"'])),(new z).k([a])));};Uh.prototype.a=new u({sy:0},!1,"java.lang.Long$",w,{sy:1,c:1});var Zh=void 0;function yg(){Zh||(Zh=(new Uh).b());return Zh}function $h(){}$h.prototype=new v;function ai(){}ai.prototype=$h.prototype;function bi(a){return!!(a&&a.a&&a.a.y.He||"number"===typeof a)}var ci=new u({He:0},!1,"java.lang.Number",w,{He:1,c:1},bi);$h.prototype.a=ci;
+function rg(){this.ji=null;this.hi=0}rg.prototype=new v;rg.prototype.a=new u({vy:0},!1,"java.lang.Short$",w,{vy:1,c:1});var qg=void 0;function di(){this.ix=this.Bx=this.co=this.rp=null}di.prototype=new v;
+di.prototype.b=function(){ei=this;this.rp=fi(!1);this.co=fi(!0);this.Bx=null;this.ix=n.performance?n.performance.now?function(){return function(){return+n.performance.now()}}(this):n.performance.webkitNow?function(){return function(){return+n.performance.webkitNow()}}(this):function(){return function(){return+(new n.Date).getTime()}}(this):function(){return function(){return+(new n.Date).getTime()}}(this);return this};di.prototype.a=new u({xy:0},!1,"java.lang.System$",w,{xy:1,c:1});var ei=void 0;
+function gi(){ei||(ei=(new di).b());return ei}function hi(){this.un=null}hi.prototype=new v;hi.prototype.b=function(){ii=this;this.un=new ji;return this};hi.prototype.a=new u({zy:0},!1,"java.lang.Thread$",w,{zy:1,c:1});var ii=void 0;function ki(){this.Na=this.Dj=null}ki.prototype=new v;function li(){}li.prototype=ki.prototype;ki.prototype.b=function(){this.Dj=!1;return this};ki.prototype.La=function(){this.Dj||Vd(this,this.Go());return this.Na};function Vd(a,b){a.Na=b;a.Dj=!0}ki.prototype.Go=k(null);
+var mi=new u({Al:0},!1,"java.lang.ThreadLocal",w,{Al:1,c:1});ki.prototype.a=mi;function ni(){this.Wg=null}ni.prototype=new v;function oi(){}oi.prototype=ni.prototype;ni.prototype.o=function(a){this.Wg=a;return this};var vi=new u({Bl:0},!1,"java.lang.ref.Reference",w,{Bl:1,c:1});ni.prototype.a=vi;function wi(){}wi.prototype=new v;wi.prototype.a=new u({By:0},!1,"java.lang.reflect.Array$",w,{By:1,c:1});var xi=void 0;function yi(){}yi.prototype=new v;
+function zi(a,b){for(var c=0;c!==b.d.length;)b.d[c]=0,c=1+c|0}yi.prototype.a=new u({Cy:0},!1,"java.util.Arrays$",w,{Cy:1,c:1});var Ai=void 0;function Bi(){Ai||(Ai=(new yi).b());return Ai}function Ci(){this.Mo=this.Lo=this.Ko=this.No=null}Ci.prototype=new v;
+Ci.prototype.b=function(){Di=this;this.No=Ei(new Fi,new n.RegExp("^[^\\x25]+"));this.Ko=Ei(new Fi,new n.RegExp("^\\x25{2}"));this.Lo=Ei(new Fi,new n.RegExp("^\\x25n"));this.Mo=Ei(new Fi,new n.RegExp("^\\x25(?:([1-9]\\d*)\\$)?([-#+ 0,\\(\x3c]*)(\\d*)(?:\\.(\\d+))?([A-Za-z])"));return this};Ci.prototype.a=new u({Fy:0},!1,"java.util.Formatter$",w,{Fy:1,c:1});var Di=void 0;function Gi(){Di||(Di=(new Ci).b());return Di}function Fi(){this.Xg=null}Fi.prototype=new v;
+function Hi(a,b){return yd(zd(),a.Xg.exec(b))}function Ei(a,b){a.Xg=b;return a}Fi.prototype.a=new u({Gy:0},!1,"java.util.Formatter$RegExpExtractor",w,{Gy:1,c:1});function Ii(){}Ii.prototype=new v;function Ji(){}Ji.prototype=Ii.prototype;var Ki=new u({Lp:0},!1,"scala.DeprecatedConsole",w,{Lp:1,c:1});Ii.prototype.a=Ki;function Li(){}Li.prototype=new v;function Mi(){}Mi.prototype=Li.prototype;var Ni=new u({Mp:0},!1,"scala.FallbackArrayBuilding",w,{Mp:1,c:1});Li.prototype.a=Ni;
+function Oi(a){return C(function(a){return function(c){if(null!==c)return Bc(a,c.va,c.wa);throw(new H).o(c);}}(a))}function Pi(){this.Rk=null}Pi.prototype=new v;function Qi(){}Qi.prototype=Pi.prototype;Pi.prototype.b=function(){this.Rk=Ri();return this};Pi.prototype.Ik=function(a){var b=this.Rk,c=Si().$g.call(b,a)?(new Bd).o(b[a]):wd();if(Sd(c))return c.zc;if(wd()===c)return c=(new Ti).f(a),b[a]=c;throw(new H).o(c);};var Ui=new u({Op:0},!1,"scala.JSUniquenessCache",w,{Op:1,c:1});Pi.prototype.a=Ui;
+function Vi(){}Vi.prototype=new v;function Wi(){}Wi.prototype=Vi.prototype;var Xi=new u({Pp:0},!1,"scala.LowPriorityImplicits",w,{Pp:1,c:1});Vi.prototype.a=Xi;function Yi(){this.Zk=this.SD=this.Xj=null}Yi.prototype=new v;Yi.prototype.b=function(){Zi=this;this.Xj=(new $i).b();this.SD=C(function(){return k(!1)}(this));this.Zk=(new aj).b();return this};Yi.prototype.a=new u({VB:0},!1,"scala.PartialFunction$",w,{VB:1,c:1});var Zi=void 0;function bj(){Zi||(Zi=(new Yi).b());return Zi}
+function cj(a,b,c){return a.Ha(b)?a.h(b):c.h(b)}function dj(){}dj.prototype=new v;dj.prototype.a=new u({cC:0},!1,"scala.Predef$any2stringadd$",w,{cC:1,c:1});var ej=void 0;function fj(a,b){return null!==b&&(b===a||b===a.hj()||Ba(b,a.hj()))}function gj(){this.Bi=null}gj.prototype=new v;gj.prototype.b=function(){hj=this;this.Bi=(new ki).b();return this};gj.prototype.a=new u({kC:0},!1,"scala.concurrent.BlockContext$",w,{kC:1,c:1});var hj=void 0;function ij(){hj||(hj=(new gj).b());return hj}
+function jj(){this.tH=null}jj.prototype=new v;jj.prototype.b=function(){kj=this;var a=[(new A).v(t(Ta),t(wa)),(new A).v(t(Va),t(na)),(new A).v(t(Ua),t(lj)),(new A).v(t(Xa),t(oa)),(new A).v(t(Ya),t(qa)),(new A).v(t(Za),t(Aa)),(new A).v(t($a),t(ua)),(new A).v(t(ab),t(va)),(new A).v(t(Sa),t(xa))],b=mj(new nj,ph());for(var c=0,e=a.length|0;c<e;)oj(b,a[c]),c=1+c|0;this.tH=b.Ua;return this};
+function Qc(a,b,c){var e=Rc().Nd;b=b.Ec(pj(c.Pc(b)),Fc(function(a,b){return function(c,e){return qj(c,C(function(a,b,c){return function(e){return rj(c,C(function(a,b){return function(a){return b.za(a)}}(a,e)),b)}}(a,b,e)),b)}}(a,e)));return rj(b,C(function(){return function(a){return a.oa()}}(a)),e)}function pj(a){sj||(sj=(new tj).b());a=(new uj).o(a);var b=new vj;b.l=(new Bd).o(wj(xj(),a));return b.Cj()}jj.prototype.a=new u({oC:0},!1,"scala.concurrent.Future$",w,{oC:1,c:1});var kj=void 0;
+function Ib(){kj||(kj=(new jj).b());return kj}function qj(a,b,c){var e=(new mc).b();a.Je(C(function(a,b,c){return function(e){if(yj(e))return od(b,e);if(zj(e)){e=e.zf;try{var r=c.h(e);Aj(r)?Bj(r,Cj(b)):r.Je(C(function(a,b){return function(a){return od(b,a)}}(a,b)),Dj())}catch(B){r=Ej(J(),B);if(null!==r){e=Fj(Gj(),r);if(!e.m())return r=e.La(),od(b,pd(new qd,r));throw I(J(),r);}throw B;}}else throw(new H).o(e);}}(a,e,b)),c);return e}
+function Sc(a,b,c){a.Je(C(function(a,b){return function(a){a.A(b)}}(a,b)),c)}function rj(a,b,c){var e=(new mc).b();a.Je(C(function(a,b,c){return function(a){a=a.ep(c);return od(b,a)}}(a,e,b)),c);return e}function Eh(a,b,c){return rj(a,C(function(a,b){return function(a){if(b.h(a))return a;throw(new V).f("Future.filter predicate is not satisfied");}}(a,b)),c)}function rh(a,b,c){a.Je(C(function(a,b){return function(a){if(zj(a)){a=a.zf;var c=jc();return b.cb(a,c.Ne)}}}(a,b)),c)}function tj(){}
+tj.prototype=new v;tj.prototype.a=new u({sC:0},!1,"scala.concurrent.Promise$",w,{sC:1,c:1});var sj=void 0;function pc(a,b){var c=(new uj).o(b);return od(a,c)}function od(a,b){if(a.kk(b))return a;throw(new Hj).f("Promise already completed.");}function Ij(){this.Fa=null}Ij.prototype=new v;function Jj(){}Jj.prototype=Ij.prototype;function Kj(a,b,c){return a.Fa===b?(a.Fa=c,!0):!1}var Lj=new u({Xp:0},!1,"scala.concurrent.impl.AbstractPromise",w,{Xp:1,c:1});Ij.prototype.a=Lj;function Kb(){}
+Kb.prototype=new v;function Lb(a,b){var c=(new Mj).Fj(a);b.xj(c)}Kb.prototype.a=new u({yC:0},!1,"scala.concurrent.impl.Future$",w,{yC:1,c:1});var Jb=void 0;function Nj(){}Nj.prototype=new v;
+function wj(a,b){return yj(b)?b.Ib&&b.Ib.a&&b.Ib.a.y.eL?(new uj).o(b.Ib.Uh()):b.Ib&&b.Ib.a&&b.Ib.a.y.cq?pd(new qd,(new Oj).hd("Boxed ControlThrowable",b.Ib)):b.Ib&&b.Ib.a&&b.Ib.a.y.oy?pd(new qd,(new Oj).hd("Boxed InterruptedException",b.Ib)):b.Ib&&b.Ib.a&&b.Ib.a.y.Hj?pd(new qd,(new Oj).hd("Boxed Error",b.Ib)):pd(new qd,b.Ib):b}Nj.prototype.a=new u({BC:0},!1,"scala.concurrent.impl.Promise$",w,{BC:1,c:1});var Pj=void 0;function xj(){Pj||(Pj=(new Nj).b());return Pj}function Qj(){}Qj.prototype=new v;
+Qj.prototype.a=new u({NC:0},!1,"scala.math.Ordered$",w,{NC:1,c:1});var Rj=void 0;function Sj(){this.Au=this.hs=this.Cr=this.xu=this.wu=this.vu=this.Mr=this.Hr=this.Dr=this.RH=this.QH=this.yu=this.Eu=this.Nu=this.sr=this.Du=this.rr=this.tr=this.qr=this.ru=this.is=this.Or=this.Jr=this.Bu=this.Nr=this.Lu=this.ug=null;this.Mb=0}Sj.prototype=new v;
+Sj.prototype.b=function(){Tj=this;this.ug=(new Uj).b();Vj||(Vj=(new Wj).b());this.Lu=Vj;this.Nr=Xj();this.Bu=tb();this.Jr=Ke();this.Or=Yj();this.is=rf();this.ru=K();Zj||(Zj=(new ak).b());this.qr=Zj;bk||(bk=(new ck).b());this.tr=bk;dk||(dk=(new ek).b());this.rr=dk;this.Du=fk();gk||(gk=(new hk).b());this.sr=gk;this.Nu=Je();ik||(ik=(new jk).b());this.Eu=ik;this.yu=kk();nk||(nk=(new ok).b());this.Dr=nk;pk||(pk=(new qk).b());this.Hr=pk;rk||(rk=(new sk).b());this.Mr=rk;tk||(tk=(new uk).b());this.vu=tk;
+Rj||(Rj=(new Qj).b());this.wu=Rj;vk||(vk=(new wk).b());this.xu=vk;xk||(xk=(new yk).b());this.Cr=xk;zk||(zk=(new Ak).b());this.hs=zk;Bk||(Bk=(new Ck).b());this.Au=Bk;return this};Sj.prototype.a=new u({SC:0},!1,"scala.package$",w,{SC:1,c:1});var Tj=void 0;function Dk(a){a=a.lh.Wg;if(null===a)throw(new V).b();return a}function Ek(){this.Df=this.Cf=this.vg=this.df=this.tg=this.gf=this.We=this.Ze=this.af=this.cf=this.bf=this.Ye=this.ff=this.Xe=null}Ek.prototype=new v;
+Ek.prototype.b=function(){Fk=this;this.Xe=Gk().Xe;this.ff=Gk().ff;this.Ye=Gk().Ye;this.bf=Gk().bf;this.cf=Gk().cf;this.af=Gk().af;this.Ze=Gk().Ze;this.We=Gk().We;this.gf=Gk().gf;this.tg=Gk().tg;this.df=Gk().df;this.vg=Gk().vg;this.Cf=Gk().Cf;this.Df=Gk().Df;return this};Ek.prototype.a=new u({WC:0},!1,"scala.reflect.ClassManifestFactory$",w,{WC:1,c:1});var Fk=void 0;function Hk(a,b){return b.Zd.isArrayClass?qe((new re).jb((new z).k(["Array[","]"])),(new z).k([Hk(a,Ik(W(),b))])):lb(b)}
+function Jk(){this.Cf=this.Df=this.vg=this.ug=this.df=this.tg=this.hq=this.gq=this.Zj=this.gf=this.We=this.Ze=this.af=this.cf=this.bf=this.Ye=this.ff=this.Xe=null}Jk.prototype=new v;
+Jk.prototype.b=function(){Kk=this;this.Xe=(new Lk).b();this.ff=(new Mk).b();this.Ye=(new Nk).b();this.bf=(new Ok).b();this.cf=(new Pk).b();this.af=(new Qk).b();this.Ze=(new Rk).b();this.We=(new Sk).b();this.gf=(new Tk).b();this.Zj=t(w);this.gq=t(Uk);this.hq=t(Vk);this.tg=(new Wk).b();this.ug=this.df=(new Xk).b();this.vg=(new Yk).b();this.Df=(new Zk).b();this.Cf=(new $k).b();return this};Jk.prototype.a=new u({ZC:0},!1,"scala.reflect.ManifestFactory$",w,{ZC:1,c:1});var Kk=void 0;
+function Gk(){Kk||(Kk=(new Jk).b());return Kk}function al(){this.Ac=this.Om=null}al.prototype=new v;al.prototype.b=function(){bl=this;Fk||(Fk=(new Ek).b());this.Om=Fk;this.Ac=Gk();return this};al.prototype.a=new u({oD:0},!1,"scala.reflect.package$",w,{oD:1,c:1});var bl=void 0;function cl(){bl||(bl=(new al).b());return bl}function dl(){}dl.prototype=new v;dl.prototype.a=new u({pD:0},!1,"scala.sys.package$",w,{pD:1,c:1});var el=void 0;function vd(){this.qd=this.iq=null}vd.prototype=new v;
+vd.prototype.r=function(){return"DynamicVariable("+this.qd.La()+")"};vd.prototype.o=function(a){this.iq=a;a=new fl;if(null===this)throw I(J(),null);a.Gm=this;gl.prototype.b.call(a);this.qd=a;return this};vd.prototype.a=new u({qD:0},!1,"scala.util.DynamicVariable",w,{qD:1,c:1});function yk(){}yk.prototype=new v;yk.prototype.a=new u({sD:0},!1,"scala.util.Either$",w,{sD:1,c:1});var xk=void 0;function hl(){}hl.prototype=new v;function il(){}il.prototype=hl.prototype;
+function jl(a){return!!(a&&a.a&&a.a.y.Wj)}var kl=new u({Wj:0},!1,"scala.util.Try",w,{Wj:1,c:1});hl.prototype.a=kl;function ll(){}ll.prototype=new v;function ml(a,b){try{return(new uj).o(b.Ed())}catch(c){var e=Ej(J(),c);if(null!==e){var f=Fj(Gj(),e);if(!f.m())return e=f.La(),pd(new qd,e);throw I(J(),e);}throw c;}}ll.prototype.a=new u({wD:0},!1,"scala.util.Try$",w,{wD:1,c:1});var nl=void 0;function ol(){nl||(nl=(new ll).b());return nl}function pl(){this.UD=null}pl.prototype=new v;
+pl.prototype.b=function(){this.UD=(new ql).b();return this};pl.prototype.a=new u({yD:0},!1,"scala.util.control.Breaks",w,{yD:1,c:1});function rl(){}rl.prototype=new v;function sl(a,b){return!(b&&b.a&&b.a.y.YJ||b&&b.a&&b.a.y.XJ||b&&b.a&&b.a.y.oy||b&&b.a&&b.a.y.WJ||b&&b.a&&b.a.y.cq)}function Fj(a,b){return sl(0,b)?(new Bd).o(b):wd()}rl.prototype.a=new u({AD:0},!1,"scala.util.control.NonFatal$",w,{AD:1,c:1});var tl=void 0;function Gj(){tl||(tl=(new rl).b());return tl}function ul(){}ul.prototype=new v;
+function vl(){}vl.prototype=ul.prototype;ul.prototype.Jj=function(a,b){var c;c=y(-862048943,b);c=Ph(mg(),c,15);c=y(461845907,c);return a^c};ul.prototype.zd=function(a,b){var c=this.Jj(a,b),c=Ph(mg(),c,13);return-430675100+y(5,c)|0};
+function wl(a,b,c){var e=(new Ab).xa(0),f=(new Ab).xa(0),h=(new Ab).xa(0),l=(new Ab).xa(1);b.A(C(function(a,b,c,e,f){return function(a){a=xl(W(),a);b.i=b.i+a|0;c.i^=a;0!==a&&(f.i=y(f.i,a));e.i=1+e.i|0}}(a,e,f,h,l)));b=a.zd(c,e.i);b=a.zd(b,f.i);b=a.Jj(b,l.i);return a.Kg(b,h.i)}function yl(a){var b=zl(),c=a.eb();if(0===c)return a=a.gb(),Ea(Fa(),a);for(var e=-889275714,f=0;f<c;)e=b.zd(e,xl(W(),a.fb(f))),f=1+f|0;return b.Kg(e,c)}
+ul.prototype.Kg=function(a,b){var c=a^b,c=y(-2048144789,c^(c>>>16|0)),c=c^(c>>>13|0),c=y(-1028477387,c);return c^=c>>>16|0};function Al(a,b,c){var e=(new Ab).xa(0);c=(new Ab).xa(c);b.A(C(function(a,b,c){return function(e){c.i=a.zd(c.i,xl(W(),e));b.i=1+b.i|0}}(a,e,c)));return a.Kg(c.i,e.i)}var Bl=new u({dq:0},!1,"scala.util.hashing.MurmurHash3",w,{dq:1,c:1});ul.prototype.a=Bl;function Cl(){}Cl.prototype=new v;
+function Dl(a,b){var c=y(-1640532531,b);mg();return y(-1640532531,c<<24|16711680&c<<8|65280&(c>>>8|0)|c>>>24|0)}Cl.prototype.a=new u({CD:0},!1,"scala.util.hashing.package$",w,{CD:1,c:1});var El=void 0;function Fl(){El||(El=(new Cl).b());return El}function ek(){}ek.prototype=new v;ek.prototype.a=new u({ED:0},!1,"scala.collection.$colon$plus$",w,{ED:1,c:1});var dk=void 0;function ck(){}ck.prototype=new v;ck.prototype.a=new u({FD:0},!1,"scala.collection.$plus$colon$",w,{FD:1,c:1});var bk=void 0;
+function Gl(a,b){var c=mj(new nj,a.lf()),e=Hl(a,C(function(a,b){return function(a){return!S(T(),b,a.va)}}(a,b)),!1);ef(c,e);return c.Ua}function Il(a,b){return 0<=b&&b<a.ba()}function Jl(a,b){var c;if(b&&b.a&&b.a.y.Kc){if(!(c=a===b)&&(c=a.z()===b.z()))try{c=a.xm(b)}catch(e){if(e&&e.a&&e.a.y.hy)c=!1;else throw e;}}else c=!1;return c}function Kl(a,b){return 0<a.ba()?Ll(a,1,a.ba(),a.pa(0),b):Ml(a,b)}
+function Nl(a,b,c){b=0<b?b:0;c=0<c?c:0;var e=a.ba();c=c<e?c:e;var e=c-b|0,f=0<e?e:0,e=a.ha();for(e.vb(f);b<c;)e.za(a.pa(b)),b=1+b|0;return e.oa()}function Ll(a,b,c,e,f){for(;;){if(b===c)return e;var h=1+b|0;e=Bc(f,e,a.pa(b));b=h}}function Ol(a,b,c,e){var f=0,h=c,l=a.ba();e=l<e?l:e;c=Pl(W(),b)-c|0;for(c=e<c?e:c;f<c;)Ql(W(),b,h,a.pa(f)),f=1+f|0,h=1+h|0}function Rl(a,b){var c=b.Pc(a.pe()),e=a.ba();c.vb(e);for(var f=0;f<e;)c.za((new A).v(a.pa(f),f)),f=1+f|0;return c.oa()}
+function Sl(a,b){if(b&&b.a&&b.a.y.sc){var c=a.ba();if(c===b.ba()){for(var e=0;e<c&&S(T(),a.pa(e),b.pa(e));)e=1+e|0;return e===c}return!1}return Tl(a,b)}function Ul(a,b){for(var c=0,e=a.ba();c<e;)b.h(a.pa(c)),c=1+c|0}function Vl(a){var b=a.ha();b.vb(a.ba());for(var c=a.ba();0<c;)c=-1+c|0,b.za(a.pa(c));return b.oa()}function Wl(a){return Xl(a)?Yl(a):a.Pe(1,a.ba())}function Xl(a){return 0===a.ba()}function Zl(a){return Xl(a)?$l(new am,a,a.ba()).ia():a.pa(0)}
+function bm(a,b){var c=a.ha(),e=-(0>b?0:b)|0;cm(a)&&c.vb(a.z()+e|0);for(var e=0,f=a.ga();e<b&&f.qa();)f.ia(),e=1+e|0;return c.hb(f).oa()}function dm(a,b,c){c=c.Pc(a.pe());a=a.ga();for(b=b.ga();a.qa()&&b.qa();)c.za((new A).v(a.ia(),b.ia()));return c.oa()}function Tl(a,b){for(var c=a.ga(),e=b.ga();c.qa()&&e.qa();)if(!S(T(),c.ia(),e.ia()))return!1;return!c.qa()&&!e.qa()}
+function fd(a,b){var c=b.Pc(a.pe()),e=(new Ab).xa(0);a.A(C(function(a,b,c){return function(a){b.za((new A).v(a,c.i));c.i=1+c.i|0}}(a,c,e)));return c.oa()}function em(){this.Dc=null}em.prototype=new v;em.prototype.b=function(){fm=this;this.Dc=(new gm).b();return this};em.prototype.a=new u({LD:0},!1,"scala.collection.Iterator$",w,{LD:1,c:1});var fm=void 0;function Yj(){fm||(fm=(new em).b());return fm}
+function hm(a){if(a.qa()){var b=a.ia();return im(new jm,b,Rb(function(a){return function(){return a.kc()}}(a)))}fk();return km()}function lm(a){return(a.qa()?"non-empty":"empty")+" iterator"}function mm(a,b){for(;a.qa();)b.h(a.ia())}function nm(a,b){for(var c=!0;c&&a.qa();)c=!!b.h(a.ia());return c}function om(a,b,c){for(;!a.m();)b=Bc(c,b,a.x()),a=a.u();return b}
+function pm(a,b){var c;if(0>b)c=1;else a:{c=a;var e=0;for(;;){if(e===b){c=c.m()?0:1;break a}if(c.m()){c=-1;break a}e=1+e|0;c=c.u()}c=void 0}return c}function qm(a,b){var c=a.Yk(b);if(0>b||c.m())throw(new X).f(""+b);return c.x()}function rm(a){for(var b=0;!a.m();)b=1+b|0,a=a.u();return b}function tf(a){if(a.m())throw(new V).b();for(var b=a.u();!b.m();)a=b,b=b.u();return a.x()}
+function sm(a,b){if(b&&b.a&&b.a.y.Me){if(a===b)return!0;for(var c=a,e=b;!c.m()&&!e.m()&&S(T(),c.x(),e.x());)c=c.u(),e=e.u();return c.m()&&e.m()}return Tl(a,b)}function tm(a,b){for(var c=a,e=b;!c.m()&&0<e;)c=c.u(),e=-1+e|0;return c}function um(a,b){if(a.m())throw(new vm).f("empty.reduceLeft");return a.u().Ec(a.x(),b)}function wm(a,b){var c=(new cc).o(a);a.A(C(function(a,b,c){return function(a){c.h(a)&&(b.i=b.i.Wd(a.va))}}(a,c,b)));return c.i}
+function xm(a,b,c,e,f){var h=a.ga();a=(new ym).Qi(h,C(function(){return function(a){if(null!==a){var b=a.va;a=a.wa;ej||(ej=(new dj).b());return""+(""+zm(Fa(),b)+" -\x3e ")+a}throw(new H).o(a);}}(a)));return Am(a,b,c,e,f)}function Ug(a){var b=(new Bm).xa(a.z());a=a.Aa();Cm(b,a);return b}function Dm(a){throw(new V).f("key not found: "+a);}
+function Em(a){var b=K(),c=(new cc).o(b);a.A(C(function(a,b){return function(a){b.i=Td(new Ud,a,b.i)}}(a,c)));b=a.ha();cm(a)&&b.vb(a.z());for(a=c.i;!a.m();)c=a.x(),b.za(c),a=a.u();return b.oa()}function Fm(a,b){if(0>b)return 1;for(var c=0,e=a.ga();e.qa();){if(c===b)return e.qa()?1:0;e.ia();c=1+c|0}return c-b|0}function Gm(a,b){return b.Aa().pg(a,Fc(function(){return function(a,b){return a.Xd(b)}}(a)))}function sf(a,b){var c=b.Ff();cm(a)&&c.vb(a.z());c.hb(a.bb());return c.oa()}
+function Hm(a){return a.Ug(a.Ud()+"(",", ",")")}function Im(a,b,c){c=c.Pc(a.pe());a.A(C(function(a,b,c){return function(a){return b.hb(c.h(a).Aa())}}(a,c,b)));return c.oa()}function Qd(a,b,c){c=qf(a,c);a.A(C(function(a,b,c){return function(a){return b.za(c.h(a))}}(a,c,b)));return c.oa()}function Hl(a,b,c){var e=a.ha();a.A(C(function(a,b,c,e){return function(a){return!!b.h(a)!==c?e.za(a):void 0}}(a,b,c,e)));return e.oa()}function Yl(a){if(a.m())throw(new vm).f("empty.tail");return a.fd(1)}
+function qf(a,b){var c=b.Pc(a.pe());cm(a)&&c.vb(a.z());return c}function Jm(a){a=lb(la(a.pe()));var b;Fa();b=a;var c=Km(46);b=b.lastIndexOf(c)|0;-1!==b&&(a=a.substring(1+b|0));b=Lm(Fa(),a,36);-1!==b&&(a=a.substring(0,b));return a}function Mm(a,b){var c=a.ha(),e=a.ha();a.A(C(function(a,b,c,e){return function(a){return(e.h(a)?b:c).za(a)}}(a,c,e,b)));return(new A).v(c.oa(),e.oa())}
+function Pm(a,b){var c=(new Qm).b();a.A(C(function(a,b,c){return function(e){var r=c.h(e),B=b.Fc(r);if(Sd(B))r=B.zc;else if(wd()===B)B=a.ha(),b.hr(r,B),r=B;else throw(new H).o(B);return r.za(e)}}(a,c,b)));var e=mj(new nj,ph());(new wf).Pf(c,C(function(){return function(a){return null!==a}}(a))).A(C(function(a,b){return function(a){if(null!==a)return b.za((new A).v(a.va,a.wa.oa()));throw(new H).o(a);}}(a,e)));return e.Ua}
+function Rm(a,b){if(a.m())throw(new vm).f("empty.min");return a.Uc(Fc(function(a,b){return function(a,c){return b.Tg(a,c)?a:c}}(a,b)))}function Sm(a,b){var c=b.Ff();c.hb(a.Aa());return c.oa()}function Tm(a,b){var c=mj(new nj,ph());a.A(C(function(a,b){return function(a){return b.za(a)}}(a,c,b)));return c.Ua}function Am(a,b,c,e,f){var h=id(!0);Um(b,c);a.A(C(function(a,b,c,e){return function(a){if(b.i)Vm(c,a),b.i=!1;else return Um(c,e),Vm(c,a)}}(a,h,b,e)));Um(b,f);return b}
+function Ml(a,b){if(a.m())throw(new vm).f("empty.reduceLeft");var c=id(!0),e=(new cc).o(0);a.A(C(function(a,b,c,e){return function(a){b.i?(c.i=a,b.i=!1):c.i=Bc(e,c.i,a)}}(a,c,e,b)));return e.i}function Wm(a,b,c){b=(new cc).o(b);a.A(C(function(a,b,c){return function(a){b.i=Bc(c,b.i,a)}}(a,b,c)));return b.i}function Xm(a,b){if(a.m())throw(new vm).f("empty.max");return a.Uc(Fc(function(a,b){return function(a,c){return b.Mg(a,c)?a:c}}(a,b)))}
+function Ym(a,b,c,e){return a.hf((new Zm).b(),b,c,e).ad.Gb}function $m(a){var b=(new Ab).xa(0);a.A(C(function(a,b){return function(){b.i=1+b.i|0}}(a,b)));return b.i}function an(){}an.prototype=new v;function bn(){}bn.prototype=an.prototype;an.prototype.ha=function(){return mj(new nj,this.ao())};var cn=new u({ej:0},!1,"scala.collection.generic.GenMapFactory",w,{ej:1,c:1});an.prototype.a=cn;function dn(){}dn.prototype=new v;function en(){}en.prototype=dn.prototype;
+function sb(a,b){if(b.m())return a.kf();var c=a.ha();c.hb(b);return c.oa()}dn.prototype.kf=function(){return this.ha().oa()};var fn=new u({Xa:0},!1,"scala.collection.generic.GenericCompanion",w,{Xa:1,c:1});dn.prototype.a=fn;function gn(a,b){var c=a.ib().ha();a.Aa().A(C(function(a,b,c){return function(a){return b.hb(c.h(a).Aa())}}(a,c,b)));return c.oa()}function hn(a,b){a:b:for(;;){if(!b.m()){a.Sb(b.x());b=b.u();continue b}break a}}
+function ef(a,b){b&&b.a&&b.a.y.Me?hn(a,b):b.A(C(function(a){return function(b){return a.Sb(b)}}(a)));return a}function jn(a,b){var c=mj(new nj,ph());ef(c,a);oj(c,(new A).v(b.va,b.wa));return c.Ua}function kn(a,b){var c=mj(new nj,ph());(new wf).Pf(a,C(function(a,b){return function(a){return!S(T(),a.va,b)}}(a,b))).A(C(function(a,b){return function(a){return b.za(a)}}(a,c)));return c.Ua}function ln(){}ln.prototype=new v;function mn(){}mn.prototype=ln.prototype;
+var nn=new u({fm:0},!1,"scala.collection.immutable.HashMap$Merger",w,{fm:1,c:1});ln.prototype.a=nn;function hk(){}hk.prototype=new v;hk.prototype.a=new u({NE:0},!1,"scala.collection.immutable.Stream$$hash$colon$colon$",w,{NE:1,c:1});var gk=void 0;function on(){this.qd=null}on.prototype=new v;on.prototype.Fj=function(a){this.qd=a;return this};function pn(a,b){return im(new jm,b,a.qd)}function qn(a,b){return rn(b,a.qd)}
+on.prototype.a=new u({PE:0},!1,"scala.collection.immutable.Stream$ConsWrapper",w,{PE:1,c:1});function sn(){this.G=this.Na=this.um=null;this.Mb=!1}sn.prototype=new v;function tn(a,b,c){a.um=c;if(null===b)throw I(J(),null);a.G=b;return a}function un(a){a.Mb||(a.Na=a.um.Ed(),a.Mb=!0);a.um=null;return a.Na}sn.prototype.a=new u({UE:0},!1,"scala.collection.immutable.StreamIterator$LazyCell",w,{UE:1,c:1});function xc(a,b){var c=a.r(),e="\\Q"+(new ig).rb(b)+"\\E";return vn(Fa(),c,e)}
+function wn(a,b,c){b=0<b?b:0;var e=a.ba(),e=c<e?c:e;if(b>=e)return a.ha().oa();c=a.ha();a=a.r().substring(b,e);return c.hb((new wc).f(a)).oa()}function xn(){}xn.prototype=new v;xn.prototype.cl=function(a,b){return b&&b.a&&b.a.y.yq?a===(null===b?null:b.Ma):!1};function yn(a,b,c,e){a=0>c?0:c;return e<=a||a>=(b.length|0)?"":b.substring(a,e>(b.length|0)?b.length|0:e)}xn.prototype.a=new u({VE:0},!1,"scala.collection.immutable.StringOps$",w,{VE:1,c:1});var zn=void 0;
+function An(){zn||(zn=(new xn).b());return zn}function Bn(a,b,c){if(32>c)return a.mb().d[31&b];if(1024>c)return a.P().d[31&b>>5].d[31&b];if(32768>c)return a.ea().d[31&b>>10].d[31&b>>5].d[31&b];if(1048576>c)return a.ra().d[31&b>>15].d[31&b>>10].d[31&b>>5].d[31&b];if(33554432>c)return a.Pa().d[31&b>>20].d[31&b>>15].d[31&b>>10].d[31&b>>5].d[31&b];if(1073741824>c)return a.Bc().d[31&b>>25].d[31&b>>20].d[31&b>>15].d[31&b>>10].d[31&b>>5].d[31&b];throw(new pe).b();}
+function Cn(a,b){var c=-1+a.zb()|0;switch(c){case 5:a.If(Y(a.Bc()));a.Zb(Y(a.Pa()));a.db(Y(a.ra()));a.Ba(Y(a.ea()));a.na(Y(a.P()));a.Bc().d[31&b>>25]=a.Pa();a.Pa().d[31&b>>20]=a.ra();a.ra().d[31&b>>15]=a.ea();a.ea().d[31&b>>10]=a.P();a.P().d[31&b>>5]=a.mb();break;case 4:a.Zb(Y(a.Pa()));a.db(Y(a.ra()));a.Ba(Y(a.ea()));a.na(Y(a.P()));a.Pa().d[31&b>>20]=a.ra();a.ra().d[31&b>>15]=a.ea();a.ea().d[31&b>>10]=a.P();a.P().d[31&b>>5]=a.mb();break;case 3:a.db(Y(a.ra()));a.Ba(Y(a.ea()));a.na(Y(a.P()));a.ra().d[31&
+b>>15]=a.ea();a.ea().d[31&b>>10]=a.P();a.P().d[31&b>>5]=a.mb();break;case 2:a.Ba(Y(a.ea()));a.na(Y(a.P()));a.ea().d[31&b>>10]=a.P();a.P().d[31&b>>5]=a.mb();break;case 1:a.na(Y(a.P()));a.P().d[31&b>>5]=a.mb();break;case 0:break;default:throw(new H).o(c);}}function Dn(a,b){var c=a.d[b];a.d[b]=null;return Y(c)}
+function En(a,b,c){a.Fd(c);c=-1+c|0;switch(c){case -1:break;case 0:a.Ca(b.mb());break;case 1:a.na(b.P());a.Ca(b.mb());break;case 2:a.Ba(b.ea());a.na(b.P());a.Ca(b.mb());break;case 3:a.db(b.ra());a.Ba(b.ea());a.na(b.P());a.Ca(b.mb());break;case 4:a.Zb(b.Pa());a.db(b.ra());a.Ba(b.ea());a.na(b.P());a.Ca(b.mb());break;case 5:a.If(b.Bc());a.Zb(b.Pa());a.db(b.ra());a.Ba(b.ea());a.na(b.P());a.Ca(b.mb());break;default:throw(new H).o(c);}}
+function Fn(a,b,c){if(32<=c)if(1024>c)a.Ca(a.P().d[31&b>>5]);else if(32768>c)a.na(a.ea().d[31&b>>10]),a.Ca(a.P().d[31&b>>5]);else if(1048576>c)a.Ba(a.ra().d[31&b>>15]),a.na(a.ea().d[31&b>>10]),a.Ca(a.P().d[31&b>>5]);else if(33554432>c)a.db(a.Pa().d[31&b>>20]),a.Ba(a.ra().d[31&b>>15]),a.na(a.ea().d[31&b>>10]),a.Ca(a.P().d[31&b>>5]);else if(1073741824>c)a.Zb(a.Bc().d[31&b>>25]),a.db(a.Pa().d[31&b>>20]),a.Ba(a.ra().d[31&b>>15]),a.na(a.ea().d[31&b>>10]),a.Ca(a.P().d[31&b>>5]);else throw(new pe).b();}
+function Y(a){null===a&&Gn("NULL");var b=s(x(w),[a.d.length]);Ja(a,0,b,0,a.d.length);return b}function Hn(a,b){var c=s(x(w),[32]);Ja(a,0,c,b,32-(0<b?b:0)|0);return c}
+function In(a,b,c,e){if(32<=e)if(1024>e)1===a.zb()&&(a.na(s(x(w),[32])),a.P().d[31&b>>5]=a.mb(),a.Fd(1+a.zb()|0)),a.Ca(s(x(w),[32]));else if(32768>e)2===a.zb()&&(a.Ba(s(x(w),[32])),a.ea().d[31&b>>10]=a.P(),a.Fd(1+a.zb()|0)),a.na(a.ea().d[31&c>>10]),null===a.P()&&a.na(s(x(w),[32])),a.Ca(s(x(w),[32]));else if(1048576>e)3===a.zb()&&(a.db(s(x(w),[32])),a.ra().d[31&b>>15]=a.ea(),a.Ba(s(x(w),[32])),a.na(s(x(w),[32])),a.Fd(1+a.zb()|0)),a.Ba(a.ra().d[31&c>>15]),null===a.ea()&&a.Ba(s(x(w),[32])),a.na(a.ea().d[31&
+c>>10]),null===a.P()&&a.na(s(x(w),[32])),a.Ca(s(x(w),[32]));else if(33554432>e)4===a.zb()&&(a.Zb(s(x(w),[32])),a.Pa().d[31&b>>20]=a.ra(),a.db(s(x(w),[32])),a.Ba(s(x(w),[32])),a.na(s(x(w),[32])),a.Fd(1+a.zb()|0)),a.db(a.Pa().d[31&c>>20]),null===a.ra()&&a.db(s(x(w),[32])),a.Ba(a.ra().d[31&c>>15]),null===a.ea()&&a.Ba(s(x(w),[32])),a.na(a.ea().d[31&c>>10]),null===a.P()&&a.na(s(x(w),[32])),a.Ca(s(x(w),[32]));else if(1073741824>e)5===a.zb()&&(a.If(s(x(w),[32])),a.Bc().d[31&b>>25]=a.Pa(),a.Zb(s(x(w),[32])),
+a.db(s(x(w),[32])),a.Ba(s(x(w),[32])),a.na(s(x(w),[32])),a.Fd(1+a.zb()|0)),a.Zb(a.Bc().d[31&c>>20]),null===a.Pa()&&a.Zb(s(x(w),[32])),a.db(a.Pa().d[31&c>>20]),null===a.ra()&&a.db(s(x(w),[32])),a.Ba(a.ra().d[31&c>>15]),null===a.ea()&&a.Ba(s(x(w),[32])),a.na(a.ea().d[31&c>>10]),null===a.P()&&a.na(s(x(w),[32])),a.Ca(s(x(w),[32]));else throw(new pe).b();}function Jn(){}Jn.prototype=new v;Jn.prototype.ha=function(){var a=(new Zm).b();return Kn(new Ln,a,C(function(){return function(a){return(new Mn).f(a)}}(this)))};
+Jn.prototype.a=new u({bF:0},!1,"scala.collection.immutable.WrappedString$",w,{bF:1,c:1});var Nn=void 0;function On(){}On.prototype=new v;On.prototype.a=new u({eF:0},!1,"scala.collection.mutable.ArrayOps$ofRef$",w,{eF:1,c:1});var Pn=void 0;function Qn(a,b,c){cm(c)&&(c=c.z(),a.vb(b<c?b:c))}function Rn(){}Rn.prototype=new v;
+Rn.prototype.Vi=function(a,b){if(!(500>a))throw(new Sn).o("assertion failed: loadFactor too large; must be \x3c 0.5");return Tn(Un(Wh((new U).xa(b),(new U).xa(a)),(new U).j(1E3,0,0)))};Rn.prototype.a=new u({iF:0},!1,"scala.collection.mutable.FlatHashTable$",w,{iF:1,c:1});var Vn=void 0;function Wn(){Vn||(Vn=(new Rn).b());return Vn}function Xn(){}Xn.prototype=new v;Xn.prototype.r=k("NullSentinel");Xn.prototype.ja=k(0);
+Xn.prototype.a=new u({kF:0},!1,"scala.collection.mutable.FlatHashTable$NullSentinel$",w,{kF:1,c:1});var Yn=void 0;function Zn(){Yn||(Yn=(new Xn).b());return Yn}function $n(a,b){for(var c=null===b?Zn():b,e=Ca(c),e=ao(a,e),f=a.ya.d[e];null!==f&&!S(T(),f,c);)e=(1+e|0)%a.ya.d.length,f=a.ya.d[e];return f}
+function bo(a,b){for(var c=Ca(b),c=ao(a,c),e=a.ya.d[c];null!==e;){if(S(T(),e,b))return;c=(1+c|0)%a.ya.d.length;e=a.ya.d[c]}a.ya.d[c]=b;a.xc=1+a.xc|0;null!==a.jc&&(c>>=5,e=a.jc,e.d[c]=1+e.d[c]|0);if(a.xc>=a.yf)for(c=a.ya,a.ya=s(x(w),[y(2,a.ya.d.length)]),a.xc=0,null!==a.jc&&(e=1+(a.ya.d.length>>5)|0,a.jc.d.length!==e?a.jc=s(x(Ya),[e]):zi(Bi(),a.jc)),a.hg=Qh(mg(),-1+a.ya.d.length|0),a.yf=Wn().Vi(a.Ve,a.ya.d.length),e=0;e<c.d.length;){var f=c.d[e];null!==f&&bo(a,f);e=1+e|0}}
+function ao(a,b){var c=a.hg,e=Dl(Fl(),b),c=c%32,f=-1+a.ya.d.length|0;return((e>>>c|0|e<<(32-c|0))>>>(32-Qh(mg(),f)|0)|0)&f}function co(){}co.prototype=new v;function eo(){fo();return go(0,16)}co.prototype.Vi=function(a,b){return Tn(Un(Wh((new U).xa(b),(new U).xa(a)),(new U).j(1E3,0,0)))};function go(a,b){var c=-1+b|0,c=c|c>>>1|0,c=c|c>>>2|0,c=c|c>>>4|0,c=c|c>>>8|0;return 1+(c|c>>>16|0)|0}co.prototype.a=new u({pF:0},!1,"scala.collection.mutable.HashTable$",w,{pF:1,c:1});var ho=void 0;
+function fo(){ho||(ho=(new co).b());return ho}function io(a){for(var b=-1+a.ya.d.length|0;null===a.ya.d[b]&&0<b;)b=-1+b|0;return b}function jo(a,b){var c=xl(W(),b);return ko(a,b,lo(a,c))}function ko(a,b,c){for(a=a.ya.d[c];;)if(null!==a?(c=a.Tf,c=!S(T(),c,b)):c=!1,c)a=a.Kd;else break;return a}function mo(a,b){if(null!==a.jc){var c=a.jc,e=b>>5;c.d[e]=1+c.d[e]|0}}function no(a,b){if(null!==a.jc){var c=a.jc,e=b>>5;c.d[e]=-1+c.d[e]|0}}
+function lo(a,b){var c=-1+a.ya.d.length|0,e=a.hg,f=Dl(Fl(),b),e=e%32;return(f>>>e|0|f<<(32-e|0))>>(32-Qh(mg(),c)|0)&c}
+function oo(a,b,c){var e=xl(W(),b),e=lo(a,e),f=ko(a,b,e);if(null!==f)a=f;else{b=(new po).v(b,c);b.Kd=a.ya.d[e];a.ya.d[e]=b;a.xc=1+a.xc|0;mo(a,e);if(a.xc>a.yf){b=y(2,a.ya.d.length);c=a.ya;a.ya=s(x(nb),[b]);null!==a.jc&&(e=1+(a.ya.d.length>>5)|0,a.jc.d.length!==e?a.jc=s(x(Ya),[e]):zi(Bi(),a.jc));for(e=-1+c.d.length|0;0<=e;){for(f=c.d[e];null!==f;){var h=f.Tf,h=xl(W(),h),h=lo(a,h),l=f.Kd;f.Kd=a.ya.d[h];a.ya.d[h]=f;f=l;mo(a,h)}e=-1+e|0}a.yf=fo().Vi(a.Ve,b)}a=null}return a}
+function qo(a,b){var c=ro(a,b);if(c.mp())return c.vh;throw(new X).f(""+b);}function so(a){if(a.m())throw(new pe).f("requirement failed: tail of empty list");return a.kd}function ro(a,b){for(var c=0,e=a;;)if(c<b&&e.kd!==e)e=e.kd,c=1+c|0;else break;return e}function to(a){if(a.kd===a)throw(new V).b();return a.vh}
+function uo(a,b){var c=(new U).xa(a.q.d.length);if(vo((new U).xa(b),c)){for(c=Wh((new U).j(2,0,0),c);vo((new U).xa(b),c);)c=Wh((new U).j(2,0,0),c);vo(c,(new U).j(4194303,511,0))&&(c=(new U).j(4194303,511,0));c=s(x(w),[Tn(c)]);Ja(a.q,0,c,0,a.ub);a.q=c}}function wo(a,b){if(b>=a.ub)throw(new X).f(""+b);return a.q.d[b]}function xo(){this.Pm=null}xo.prototype=new v;xo.prototype.b=function(){yo=this;this.Pm=zc(new Ac,s(x(w),[0]));return this};
+function Rf(a,b){if(null===b)return null;if(mb(b,1))return zc(new Ac,b);if(fb(b,1)){var c=new zo;c.q=b;return c}if(ib(b,1))return c=new Ao,c.q=b,c;if(gb(b,1))return c=new Bo,c.q=b,c;if(hb(b,1))return c=new Co,c.q=b,c;if(cb(b,1))return c=new Do,c.q=b,c;if(db(b,1))return c=new Eo,c.q=b,c;if(eb(b,1))return c=new Fo,c.q=b,c;if(bb(b,1))return c=new Go,c.q=b,c;if(Ho(b))return c=new Io,c.q=b,c;throw(new H).o(b);}xo.prototype.a=new u({HF:0},!1,"scala.collection.mutable.WrappedArray$",w,{HF:1,c:1});
+var yo=void 0;function yc(){yo||(yo=(new xo).b());return yo}function Jo(){this.Ih=this.Nd=null}Jo.prototype=new v;Jo.prototype.b=function(){Ko=this;Lo||(Lo=(new Mo).b());this.Nd=Lo;No||(No=(new Oo).b());this.Ih=No;return this};Jo.prototype.a=new u({dG:0},!1,"scala.scalajs.concurrent.JSExecutionContext$",w,{dG:1,c:1});var Ko=void 0;function Po(){Ko||(Ko=(new Jo).b());return Ko}function Qo(){this.Ih=this.Nd=null}Qo.prototype=new v;Qo.prototype.b=function(){Ro=this;this.Nd=Po().Nd;this.Ih=Po().Ih;return this};
+Qo.prototype.a=new u({eG:0},!1,"scala.scalajs.concurrent.JSExecutionContext$Implicits$",w,{eG:1,c:1});var Ro=void 0;function Rc(){Ro||(Ro=(new Qo).b());return Ro}function So(){}So.prototype=new v;function Ri(){To||(To=(new So).b());return{}}So.prototype.a=new u({hG:0},!1,"scala.scalajs.js.Dictionary$",w,{hG:1,c:1});var To=void 0;function Uo(){this.$g=null}Uo.prototype=new v;Uo.prototype.b=function(){Vo=this;this.$g=n.Object.prototype.hasOwnProperty;return this};
+Uo.prototype.a=new u({kG:0},!1,"scala.scalajs.js.WrappedDictionary$Cache$",w,{kG:1,c:1});var Vo=void 0;function Si(){Vo||(Vo=(new Uo).b());return Vo}function Wo(){this.Ag=!1;this.po=this.Rw=this.Gj=this.ti=null;this.Kk=!1;this.cp=this.Ao=0}Wo.prototype=new v;
+Wo.prototype.b=function(){Xo=this;this.ti=(this.Ag=!!(n.ArrayBuffer&&n.Int32Array&&n.Float32Array&&n.Float64Array))?new n.ArrayBuffer(8):null;this.Gj=this.Ag?new n.Int32Array(this.ti,0,2):null;this.Rw=this.Ag?new n.Float32Array(this.ti,0,2):null;this.po=this.Ag?new n.Float64Array(this.ti,0,1):null;if(this.Ag)this.Gj[0]=16909060,a=1===((new n.Int8Array(this.ti,0,8))[0]|0);else var a=!0;this.Ao=(this.Kk=a)?0:1;this.cp=this.Kk?1:0;return this};
+function Ga(a,b){var c=b|0;if(c===b&&-Infinity!==1/b)return c;if(a.Ag)a.po[0]=b,c=Yo(Zo((new U).xa(a.Gj[a.Ao]|0),32),$o((new U).j(4194303,1023,0),(new U).xa(a.Gj[a.cp]|0)));else{if(b!==b)var c=!1,e=2047,f=+n.Math.pow(2,51);else if(Infinity===b||-Infinity===b)c=0>b,e=2047,f=0;else if(0===b)c=-Infinity===1/b,f=e=0;else{var h=(c=0>b)?-b:b;if(h>=+n.Math.pow(2,-1022)){var e=+n.Math.pow(2,52),f=+n.Math.log(h)/0.6931471805599453,f=+n.Math.floor(f)|0,f=1023>f?f:1023,l=h/+n.Math.pow(2,f)*e,h=+n.Math.floor(l),
+l=l-h,h=0.5>l?h:0.5<l?1+h:0!==h%2?1+h:h;2<=h/e&&(f=1+f|0,h=1);1023<f?(f=2047,h=0):(f=1023+f|0,h-=e);e=f;f=h}else e=h/+n.Math.pow(2,-1074),f=+n.Math.floor(e),h=e-f,e=0,f=0.5>h?f:0.5<h?1+f:0!==f%2?1+f:f}f=+ +f;h=f|0;c=Yo(Zo((new U).xa((c?-2147483648:0)|(e|0)<<20|f/4294967296|0),32),$o((new U).j(4194303,1023,0),(new U).xa(h)))}return Tn(ap(c,bp(c,32)))}Wo.prototype.a=new u({pG:0},!1,"scala.scalajs.runtime.Bits$",w,{pG:1,c:1});var Xo=void 0;function Ha(){Xo||(Xo=(new Wo).b());return Xo}
+function cp(){}cp.prototype=new v;
+function vn(a,b,c){if(null===b)throw(new ya).b();c=(dp(),(new ep).Oi(c,0));a=[];b=ka(b);c=fp(new gp,c,b,b.length|0);for(var e=0;2147483646>(a.length|0)&&hp(c);){var f=ip(c).index|0;a.push(b.substring(e,f));e=jp(c)}a.push(b.substring(e));if(0===e&&2===(a.length|0))a=Ee(Fe(),(new z).k([b]),Ge(Ie(),t(ma)));else{for(b=a.length|0;;){if(1<b){c=a[-1+b|0];if(null===c)throw(new ya).b();c=""===c}else c=!1;if(c)b=-1+b|0;else break}b=s(x(ma),[b]);for(var f=Pl(W(),b),e=c=0,h=a.length|0,f=h<f?h:f,h=Pl(W(),b),f=
+f<h?f:h;c<f;)Ql(W(),b,e,a[c]),c=1+c|0,e=1+e|0;a=b}return a}function zm(a,b){return null===b?"null":ka(b)}function Lm(a,b,c){a=Km(c);return b.indexOf(a)|0}function Km(a){if(0===(-65536&a)){var b=n.String,c=b.fromCharCode;a=[a];a=[].concat(a);return c.apply(b,a)}if(0>a||1114111<a)throw(new pe).b();a=-65536+a|0;b=n.String;c=b.fromCharCode;a=[55296|a>>10,56320|1023&a];a=[].concat(a);return c.apply(b,a)}
+function Ea(a,b){for(var c=0,e=1,f=-1+(b.length|0)|0;0<=f;)c=c+y(65535&(b.charCodeAt(f)|0),e)|0,e=y(31,e),f=-1+f|0;return c}cp.prototype.a=new u({rG:0},!1,"scala.scalajs.runtime.RuntimeString$",w,{rG:1,c:1});var kp=void 0;function Fa(){kp||(kp=(new cp).b());return kp}function lp(){this.VJ=!1;this.$v=this.Ln=this.hw=null;this.Mb=!1}lp.prototype=new v;
+lp.prototype.b=function(){mp=this;for(var a={O:"java_lang_Object",T:"java_lang_String",V:"scala_Unit",Z:"scala_Boolean",C:"scala_Char",B:"scala_Byte",S:"scala_Short",I:"scala_Int",J:"scala_Long",F:"scala_Float",D:"scala_Double"},b=0;22>=b;)2<=b&&(a["T"+b]="scala_Tuple"+b),a["F"+b]="scala_Function"+b,b=1+b|0;this.hw=a;this.Ln={sjsr_:"scala_scalajs_runtime_",sjs_:"scala_scalajs_",sci_:"scala_collection_immutable_",scm_:"scala_collection_mutable_",scg_:"scala_collection_generic_",sc_:"scala_collection_",
+sr_:"scala_runtime_",s_:"scala_",jl_:"java_lang_",ju_:"java_util_"};this.$v=n.Object.keys(this.Ln);return this};lp.prototype.a=new u({sG:0},!1,"scala.scalajs.runtime.StackTrace$",w,{sG:1,c:1});var mp=void 0;function np(){mp||(mp=(new lp).b());return mp}function op(){}op.prototype=new v;function I(a,b){return pp(b)?b.Jf:b}function Ej(a,b){return b&&b.a&&b.a.y.nb?b:(new qp).o(b)}op.prototype.a=new u({tG:0},!1,"scala.scalajs.runtime.package$",w,{tG:1,c:1});var rp=void 0;
+function J(){rp||(rp=(new op).b());return rp}function Ho(a){return!!(a&&a.a&&1===a.a.ui&&a.a.si.y.Tq)}var xa=new u({Tq:0},!1,"scala.runtime.BoxedUnit",w,{Tq:1,c:1},function(a){return void 0===a});function sp(){}sp.prototype=new v;
+function S(a,b,c){return b===c?!0:bi(b)?bi(c)?tp(b,c):up(c)?"number"===typeof b?+b===c.l:za(b)?vp(Ma(b),(new U).xa(c.l)):null===b?null===c:Ba(b,c):null===b?null===c:Ba(b,c):up(b)?up(c)?b.l===c.l:bi(c)?"number"===typeof c?+c===b.l:za(c)?vp(Ma(c),(new U).xa(b.l)):null===c?null===b:Ba(c,b):null===b&&null===c:null===b?null===c:Ba(b,c)}
+function tp(a,b){if("number"===typeof a){var c=+a;if("number"===typeof b)return c===+b;if(za(b)){var e=Ma(b);return c===wp(e)}return xp(b)?b.fa(c):!1}return za(a)?(c=Ma(a),za(b)?(e=Ma(b),vp(c,e)):"number"===typeof b?(e=+b,wp(c)===e):xp(b)?b.fa(c):!1):null===a?null===b:Ba(a,b)}function yp(a,b){return null===b?0:b.l}sp.prototype.a=new u({zG:0},!1,"scala.runtime.BoxesRunTime$",w,{zG:1,c:1});var zp=void 0;function T(){zp||(zp=(new sp).b());return zp}
+var Vk=new u({DG:0},!1,"scala.runtime.Null$",w,{DG:1,c:1});function Ap(){}Ap.prototype=new v;function Pl(a,b){if(mb(b,1)||fb(b,1)||ib(b,1)||gb(b,1)||hb(b,1)||cb(b,1)||db(b,1)||eb(b,1)||bb(b,1)||Ho(b))return b.d.length;if(null===b)throw(new ya).b();throw(new H).o(b);}
+function xl(a,b){var c;if(null===b)c=0;else if(bi(b))if(T(),La(b))c=b|0;else if(za(b))c=Tn(Ma(b)),c=vp((new U).xa(c),Ma(b))?c:Tn(ap(Ma(b),bp(Ma(b),32)));else if("number"===typeof b){var e=+b|0;c=+b;e===c?c=e:(e=Bp(Na(),+b),c=wp(e)===c?Tn(ap(e,bp(e,32))):Ga(Ha(),+b))}else c=Ca(b);else c=Ca(b);return c}
+function Ql(a,b,c,e){if(mb(b,1))b.d[c]=e;else if(fb(b,1))b.d[c]=e|0;else if(ib(b,1))b.d[c]=+e;else if(gb(b,1))b.d[c]=Ma(e);else if(hb(b,1))b.d[c]=ta(e);else if(cb(b,1))b.d[c]=yp(T(),e);else if(db(b,1))b.d[c]=e|0;else if(eb(b,1))b.d[c]=e|0;else if(bb(b,1))b.d[c]=!!e;else if(Ho(b))b.d[c]=e;else{if(null===b)throw(new ya).b();throw(new H).o(b);}}
+function Ik(a,b){if(b&&b.a&&b.a.y.To)return b.Zd.getComponentType();if(b&&b.a&&b.a.y.bc)return b.ld();throw(new vm).f(qe((new re).jb((new z).k(["unsupported schematic "," (",")"])),(new z).k([b,la(b)])));}function Cp(a,b){var c=b.kb(),e=b.gb()+"(";return Ym(c,e,",",")")}Ap.prototype.a=new u({FG:0},!1,"scala.runtime.ScalaRunTime$",w,{FG:1,c:1});var Dp=void 0;function W(){Dp||(Dp=(new Ap).b());return Dp}function Ep(){}Ep.prototype=new v;
+Ep.prototype.Jj=function(a,b){var c;c=y(-862048943,b);c=Ph(mg(),c,15);c=y(461845907,c);return a^c};function Fp(a,b){if(null===b)return 0;if(za(b)){var c=Ma(b);return Tn(c)}return"number"===typeof b?+b|0:b!==b||ta(b)===b?ta(b)|0:Ca(b)}Ep.prototype.zd=function(a,b){var c=this.Jj(a,b),c=Ph(mg(),c,13);return-430675100+y(5,c)|0};Ep.prototype.Kg=function(a,b){var c=a^b,c=y(-2048144789,c^(c>>>16|0)),c=c^(c>>>13|0),c=y(-1028477387,c);return c^=c>>>16|0};
+Ep.prototype.a=new u({HG:0},!1,"scala.runtime.Statics$",w,{HG:1,c:1});var Gp=void 0;function Hp(){Gp||(Gp=(new Ep).b());return Gp}function Ip(){Hd.call(this);this.Bp=null;this.bp=Id()}Ip.prototype=new Jd;Ip.prototype.a=new u({ps:0},!1,"rx.core.Dynamic$State",Kd,{ps:1,Wm:1,c:1});function Jp(){}Jp.prototype=new v;
+function Rd(a){a:b:for(;;){if(0!==a.z()){var b=a,c=C(function(a){return a.wa.Rg()}),e=Fd(),e=Gd(e),b=Ma(Qd(b,c,e).Xf(Kp()));a=Mm(a,C(function(a){return function(b){return vp(b.wa.Rg(),a)}}(b)));if(null!==a)b=a.va,a=a.wa;else throw(new H).o(a);b=Pm(b,C(function(a){return a.wa}));c=(new Lp).b();b=Mp(new Np,b,c);c=(new Op).b();e=Pp().ka;a=Qd(b,c,e).oo(jc().Ne).sd().Hm(a);continue b}break a}}Jp.prototype.a=new u({ts:0},!1,"rx.core.Propagator$Immediate$",w,{ts:1,c:1,jI:1});var Qp=void 0;
+function Rp(){Qp||(Qp=(new Jp).b());return Qp}function Sp(){}Sp.prototype=new v;Sp.prototype.zn=function(a,b,c){this.Fk(a,b,c)};Sp.prototype.Fk=function(a,b,c){a.setAttribute(b.oc,ka(c))};Sp.prototype.a=new u({Ds:0},!1,"scalatags.JsDom$GenericAttr",w,{Ds:1,c:1,Ns:1});function je(){this.Sc=null}je.prototype=new v;je.prototype.ye=function(a,b){return N(new O,a,b,this.Sc)};je.prototype.me=function(a){this.Sc=a;return this};
+je.prototype.a=new u({Es:0},!1,"scalatags.JsDom$GenericPixelStyle",w,{Es:1,c:1,Ss:1});function Tp(){this.Sc=null}Tp.prototype=new v;Tp.prototype.ye=function(a,b){var c=new O,e;ej||(ej=(new dj).b());e=""+zm(Fa(),b)+"px";return N(c,a,e,this.Sc)};Tp.prototype.me=function(a){this.Sc=a;return this};Tp.prototype.a=new u({Fs:0},!1,"scalatags.JsDom$GenericPixelStylePx",w,{Fs:1,c:1,Ss:1});function L(){}L.prototype=new v;L.prototype.a=new u({Gs:0},!1,"scalatags.JsDom$GenericStyle",w,{Gs:1,c:1,DI:1});
+function We(){this.eo=null}We.prototype=new v;function Ve(a,b){a.eo=b;return a}We.prototype.zn=function(a,b,c){this.Fk(a,b,c)};We.prototype.Fk=function(a,b,c){a[b.oc]=this.eo.h(c)};We.prototype.a=new u({Ls:0},!1,"scalatags.LowPriorityImplicits$$anon$1",w,{Ls:1,c:1,Ns:1});function fe(){}fe.prototype=new v;fe.prototype.lr=k("http://www.w3.org/1999/xhtml");fe.prototype.a=new u({Qs:0},!1,"scalatags.generic.Namespace$$anon$1",w,{Qs:1,c:1,Os:1});function ge(){}ge.prototype=new v;ge.prototype.lr=k("http://www.w3.org/2000/svg");
+ge.prototype.a=new u({Rs:0},!1,"scalatags.generic.Namespace$$anon$2",w,{Rs:1,c:1,Os:1});function Be(){this.qk=null}Be.prototype=new v;Be.prototype.Wl=g("qk");Be.prototype.Ge=function(a){this.qk=a;return this};Be.prototype.a=new u({Qt:0},!1,"upickle.Knot$R",w,{Qt:1,c:1,pn:1});function Mf(){this.Lm=null}Mf.prototype=new v;Mf.prototype.Wl=g("Lm");Mf.prototype.Ge=function(a){this.Lm=a;return this};Mf.prototype.a=new u({Ut:0},!1,"upickle.Reader$$anon$3",w,{Ut:1,c:1,pn:1});function $f(){this.mr=null}
+$f.prototype=new v;$f.prototype.Nf=function(a){this.mr=a;return this};$f.prototype.nr=g("mr");$f.prototype.a=new u({Zt:0},!1,"upickle.Writer$$anon$2",w,{Zt:1,c:1,Xt:1});var wa=new u({dy:0},!1,"java.lang.Boolean",w,{dy:1,c:1,nc:1},function(a){return"boolean"===typeof a});function ig(){this.l=0}ig.prototype=new v;ig.prototype.fa=function(a){return up(a)?this.l===a.l:!1};ig.prototype.r=function(){return n.String.fromCharCode(this.l)};ig.prototype.rb=function(a){this.l=a;return this};
+ig.prototype.ja=g("l");function up(a){return!!(a&&a.a&&a.a.y.So)}var lj=new u({So:0},!1,"java.lang.Character",w,{So:1,c:1,nc:1});ig.prototype.a=lj;function gl(){ki.call(this)}gl.prototype=new li;function Up(){}Up.prototype=gl.prototype;var Vp=new u({Vo:0},!1,"java.lang.InheritableThreadLocal",mi,{Vo:1,Al:1,c:1});gl.prototype.a=Vp;function ji(){}ji.prototype=new v;ji.prototype.uf=da();ji.prototype.a=new u({yy:0},!1,"java.lang.Thread",w,{yy:1,c:1,zl:1});function Wp(){this.fL=this.uh=this.Fb=null}
+Wp.prototype=new v;function Xp(){}m=Xp.prototype=Wp.prototype;m.b=function(){Wp.prototype.hd.call(this,null,null);return this};m.Bj=function(){var a=np(),b;a:try{b=a.undef()}catch(c){a=Ej(J(),c);if(null!==a){if(pp(a)){b=a.Jf;break a}throw I(J(),a);}throw c;}this.stackdata=b;return this};m.Mi=g("Fb");m.r=function(){var a=lb(la(this)),b=this.Mi();return null===b?a:a+": "+b};m.hd=function(a,b){this.Fb=a;this.uh=b;this.Bj();return this};var Yp=new u({nb:0},!1,"java.lang.Throwable",w,{nb:1,c:1,e:1});
+Wp.prototype.a=Yp;function Zp(){this.Wg=null}Zp.prototype=new oi;function $p(){}$p.prototype=Zp.prototype;Zp.prototype.Hx=function(a){ni.prototype.o.call(this,a);return this};var aq=new u({Xo:0},!1,"java.lang.ref.WeakReference",vi,{Xo:1,Bl:1,c:1});Zp.prototype.a=aq;function bq(){this.gk=Id();this.iK=0;this.xo=!1}bq.prototype=new v;bq.prototype.b=function(){bq.prototype.rl.call(this,cq());return this};
+bq.prototype.rl=function(a){this.xo=!1;this.gk=$o((new U).j(4194303,4194303,15),ap((new U).j(2942573,6011,0),a));this.xo=!1;return this};function cd(a,b){if(0>=b)throw(new pe).f("n must be positive");var c;if((b&(-b|0))===b)c=Tn(dq(Wh((new U).xa(b),(new U).xa(eq(a))),31));else a:{for(;;){c=eq(a);var e=c%b;if(!(0>((c-e|0)+(-1+b|0)|0))){c=e;break a}}c=void 0}return c}
+function eq(a){a.gk=$o((new U).j(4194303,4194303,15),Xh((new U).j(11,0,0),Wh((new U).j(2942573,6011,0),a.gk)));return Tn(bp(a.gk,17))}bq.prototype.a=new u({Ly:0},!1,"java.util.Random",w,{Ly:1,c:1,e:1});function fq(){this.ur=0;this.Jm=null}fq.prototype=new v;function gq(){}gq.prototype=fq.prototype;fq.prototype.r=g("Jm");fq.prototype.nf=function(a,b){this.ur=a;this.Jm=b;return this};var hq=new u({Sf:0},!1,"java.util.concurrent.TimeUnit",w,{Sf:1,c:1,e:1});fq.prototype.a=hq;
+function gp(){this.Ho=this.tf=null;this.Gp=this.Hp=0;this.Ie=this.wl=this.Xg=null;this.sj=this.Fl=!1;this.yn=0}gp.prototype=new v;function hp(a){if(a.sj){a.Fl=!0;a.Ie=a.Xg.exec(a.wl);if(null!==a.Ie){var b=a.Ie[0];if(void 0===b)throw(new V).f("undefined.get");if(null===b)throw(new ya).b();""===b&&(b=a.Xg,b.lastIndex=1+(b.lastIndex|0)|0)}else a.sj=!1;return null!==a.Ie}return!1}function ip(a){if(null===a.Ie)throw(new Hj).f("No match available");return a.Ie}
+function iq(a){jq(a);hp(a);null===a.Ie||0===(ip(a).index|0)&&jp(a)===(a.wl.length|0)||jq(a);return null!==a.Ie}function jp(a){var b=ip(a).index|0;a=ip(a)[0];if(void 0===a)throw(new V).f("undefined.get");return b+(a.length|0)|0}function fp(a,b,c,e){a.tf=b;a.Ho=c;a.Hp=0;a.Gp=e;a.Xg=new n.RegExp(a.tf.Zo,a.tf.Yo);a.wl=ka(Ia(a.Ho,a.Hp,a.Gp));a.Ie=null;a.Fl=!1;a.sj=!0;a.yn=0;return a}function jq(a){a.Xg.lastIndex=0;a.Ie=null;a.Fl=!1;a.sj=!0;a.yn=0}
+gp.prototype.a=new u({Xy:0},!1,"java.util.regex.Matcher",w,{Xy:1,c:1,$J:1});function kq(){}kq.prototype=new v;kq.prototype.Ff=function(){return(new Zm).b()};kq.prototype.Pc=function(){return(new Zm).b()};kq.prototype.a=new u({bC:0},!1,"scala.Predef$$anon$3",w,{bC:1,c:1,Qh:1});function lq(){}lq.prototype=new v;lq.prototype.a=new u({lC:0},!1,"scala.concurrent.BlockContext$DefaultBlockContext$",w,{lC:1,c:1,Up:1});var mq=void 0;function Mj(){this.Cp=this.rj=null}Mj.prototype=new v;
+Mj.prototype.Fj=function(a){this.rj=a;this.Cp=(new mc).b();return this};Mj.prototype.uf=function(){var a=this.Cp,b;a:try{b=(new uj).o(this.rj.Ed())}catch(c){b=Ej(J(),c);if(null!==b){var e=Fj(Gj(),b);if(!e.m()){b=e.La();b=pd(new qd,b);break a}throw I(J(),b);}throw c;}od(a,b)};Mj.prototype.a=new u({zC:0},!1,"scala.concurrent.impl.Future$PromiseCompletingRunnable",w,{zC:1,c:1,zl:1});function xp(a){return!!(a&&a.a&&a.a.y.MK)}function Uj(){}Uj.prototype=new v;Uj.prototype.r=k("object AnyRef");
+Uj.prototype.a=new u({TC:0},!1,"scala.package$$anon$1",w,{TC:1,c:1,vK:1});function nq(){this.tm=this.dp=this.sm=this.pL=this.hL=this.nK=this.gL=this.vJ=0}nq.prototype=new vl;nq.prototype.b=function(){oq=this;this.sm=Ea(Fa(),"Seq");this.dp=Ea(Fa(),"Map");this.tm=Ea(Fa(),"Set");return this};function pq(a,b){var c;if(qq(b)){c=0;for(var e=a.sm,f=b;!f.m();){var h=f.x(),f=f.u(),e=a.zd(e,xl(W(),h));c=1+c|0}c=a.Kg(e,c)}else c=Al(a,b,a.sm);return c}
+nq.prototype.a=new u({BD:0},!1,"scala.util.hashing.MurmurHash3$",Bl,{BD:1,dq:1,c:1});var oq=void 0;function zl(){oq||(oq=(new nq).b());return oq}function wf(){this.G=this.Ld=null}wf.prototype=new v;function rq(){}rq.prototype=wf.prototype;wf.prototype.A=function(a){this.G.A(C(function(a,c){return function(e){return a.Ld.h(e)?c.h(e):void 0}}(this,a)))};
+wf.prototype.ac=function(a,b){var c=b.Pc(this.G.pe());this.G.A(C(function(a,b,c){return function(l){return a.Ld.h(l)?c.za(b.h(l)):void 0}}(this,a,c)));return c.oa()};wf.prototype.Pf=function(a,b){this.Ld=b;if(null===a)throw I(J(),null);this.G=a;return this};var sq=new u({fq:0},!1,"scala.collection.TraversableLike$WithFilter",w,{fq:1,c:1,E:1});wf.prototype.a=sq;function tq(){this.G=null}tq.prototype=new v;tq.prototype.Ff=function(){return this.G.ha()};tq.prototype.Pc=function(){return this.G.ha()};
+tq.prototype.a=new u({WD:0},!1,"scala.collection.generic.GenMapFactory$MapCanBuildFrom",w,{WD:1,c:1,Qh:1});function uq(){}uq.prototype=new en;function vq(){}vq.prototype=uq.prototype;var wq=new u({eg:0},!1,"scala.collection.generic.GenSetFactory",fn,{eg:1,Xa:1,c:1});uq.prototype.a=wq;function xq(){this.rg=null}xq.prototype=new v;xq.prototype.Ff=function(){return this.rg.ha()};xq.prototype.Pc=function(){return this.rg.ha()};
+function Gd(a){var b=new xq;if(null===a)throw I(J(),null);b.rg=a;return b}xq.prototype.a=new u({XD:0},!1,"scala.collection.generic.GenSetFactory$$anon$1",w,{XD:1,c:1,Qh:1});function yq(){this.ka=null}yq.prototype=new en;function zq(){}zq.prototype=yq.prototype;yq.prototype.b=function(){this.ka=(new Aq).Ri(this);return this};var Bq=new u({Cb:0},!1,"scala.collection.generic.GenTraversableFactory",fn,{Cb:1,Xa:1,c:1});yq.prototype.a=Bq;function Cq(){this.G=null}Cq.prototype=new v;function Dq(){}
+Dq.prototype=Cq.prototype;Cq.prototype.Ff=function(){return this.G.ha()};Cq.prototype.Pc=function(a){return a.ib().ha()};Cq.prototype.Ri=function(a){if(null===a)throw I(J(),null);this.G=a;return this};var Eq=new u({$j:0},!1,"scala.collection.generic.GenTraversableFactory$GenericCanBuildFrom",w,{$j:1,c:1,Qh:1});Cq.prototype.a=Eq;function Fq(){}Fq.prototype=new bn;function Gq(){}Gq.prototype=Fq.prototype;var Hq=new u({ck:0},!1,"scala.collection.generic.MapFactory",cn,{ck:1,ej:1,c:1});
+Fq.prototype.a=Hq;function Iq(){this.Ll=this.Zx=null}Iq.prototype=new mn;function Jq(a,b){a.Ll=b;var c=new Kq;if(null===a)throw I(J(),null);c.sa=a;a.Zx=c;return a}Iq.prototype.Hk=function(a,b){return Bc(this.Ll,a,b)};Iq.prototype.a=new u({aE:0},!1,"scala.collection.immutable.HashMap$$anon$2",nn,{aE:1,fm:1,c:1});function Kq(){this.sa=null}Kq.prototype=new mn;Kq.prototype.Hk=function(a,b){return Bc(this.sa.Ll,b,a)};
+Kq.prototype.a=new u({bE:0},!1,"scala.collection.immutable.HashMap$$anon$2$$anon$3",nn,{bE:1,fm:1,c:1});function Lq(){}Lq.prototype=new v;m=Lq.prototype;m.b=function(){return this};m.h=function(){return this};m.dd=function(){return+this};m.r=k("\x3cfunction1\x3e");m.a=new u({mE:0},!1,"scala.collection.immutable.List$$anon$1",w,{mE:1,c:1,p:1});function Mq(){}Mq.prototype=new v;function Nq(){}Nq.prototype=Mq.prototype;Mq.prototype.qh=function(){return+this.Ed()};Mq.prototype.r=k("\x3cfunction0\x3e");
+Mq.prototype.pi=function(){this.Ed()};var Oq=new u({jg:0},!1,"scala.runtime.AbstractFunction0",w,{jg:1,c:1,$e:1});Mq.prototype.a=Oq;function Pq(){}Pq.prototype=new v;function Qq(){}Qq.prototype=Pq.prototype;Pq.prototype.b=function(){return this};Pq.prototype.dd=function(a){return+this.h(a)};Pq.prototype.r=k("\x3cfunction1\x3e");var Rq=new u({Nc:0},!1,"scala.runtime.AbstractFunction1",w,{Nc:1,c:1,p:1});Pq.prototype.a=Rq;function Sq(){}Sq.prototype=new v;function Tq(){}Tq.prototype=Sq.prototype;
+Sq.prototype.r=k("\x3cfunction2\x3e");var Uq=new u({Sq:0},!1,"scala.runtime.AbstractFunction2",w,{Sq:1,c:1,Er:1});Sq.prototype.a=Uq;function Vq(){this.i=!1}Vq.prototype=new v;Vq.prototype.r=function(){return""+this.i};function id(a){var b=new Vq;b.i=a;return b}Vq.prototype.a=new u({yG:0},!1,"scala.runtime.BooleanRef",w,{yG:1,c:1,e:1});function rb(){this.i=0}rb.prototype=new v;rb.prototype.Fe=function(a){this.i=a;return this};rb.prototype.r=function(){return""+this.i};
+rb.prototype.a=new u({AG:0},!1,"scala.runtime.DoubleRef",w,{AG:1,c:1,e:1});function Ab(){this.i=0}Ab.prototype=new v;Ab.prototype.r=function(){return""+this.i};Ab.prototype.xa=function(a){this.i=a;return this};Ab.prototype.a=new u({BG:0},!1,"scala.runtime.IntRef",w,{BG:1,c:1,e:1});function cc(){this.i=null}cc.prototype=new v;cc.prototype.r=function(){return zm(Fa(),this.i)};cc.prototype.o=function(a){this.i=a;return this};cc.prototype.a=new u({EG:0},!1,"scala.runtime.ObjectRef",w,{EG:1,c:1,e:1});
+function Wq(){this.i=0}Wq.prototype=new v;Wq.prototype.r=function(){return""+this.i};function ch(){var a=new Wq;a.i=0;return a}Wq.prototype.a=new u({IG:0},!1,"scala.runtime.VolatileByteRef",w,{IG:1,c:1,e:1});function Xq(){}Xq.prototype=new v;function Yq(){}Yq.prototype=Xq.prototype;Xq.prototype.tj=da();var Zq=new u({$h:0},!1,"java.io.OutputStream",w,{$h:1,c:1,nh:1,Zh:1});Xq.prototype.a=Zq;function $q(){this.oc=this.Gn=this.hk=null;this.cj=!1}$q.prototype=new v;
+$q.prototype.Rg=function(){return(new U).j(4194303,4194303,524287)};$q.prototype.Xi=function(){var a=[this.hk];if(0===(a.length|0))return ar();var b=br(new cr,ar());for(var c=0,e=a.length|0;c<e;)dr(b,a[c]),c=1+c|0;return b.Ua};function ec(a,b){var c=new $q;c.hk=a;c.Gn=b;c.oc="";c.cj=!0;xd(a,c)}$q.prototype.Sl=function(a){this.Xi().xl(a).m()||this.Gn.pi();return ar()};$q.prototype.a=new u({rs:0},!1,"rx.core.Obs",w,{rs:1,c:1,Ym:1,Xm:1});function ic(){this.G=this.jq=this.pr=null}ic.prototype=new v;
+ic.prototype.ri=function(a){this.pr.A(C(function(a,c){return function(e){a.jq.h(e).Ef(c)}}(this,a)))};ic.prototype.Ef=function(a){this.ri(a)};function hc(a,b,c,e){a.pr=c;a.jq=e;if(null===b)throw I(J(),null);a.G=b;return a}ic.prototype.a=new u({Cs:0},!1,"scalatags.JsDom$Cap$SeqFrag",w,{Cs:1,c:1,uk:1,oh:1});function er(){}er.prototype=new v;er.prototype.r=k("TypedTag");er.prototype.a=new u({Js:0},!1,"scalatags.JsDom$TypedTag$",w,{Js:1,c:1,g:1,e:1});var fr=void 0;
+function gr(){fr||(fr=(new er).b());return fr}function hr(){this.G=this.uh=null}hr.prototype=new v;hr.prototype.ri=function(a){a.appendChild(this.uh)};hr.prototype.Ef=function(a){this.ri(a)};function $b(a,b){var c=new hr;c.uh=b;if(null===a)throw I(J(),null);c.G=a;return c}hr.prototype.a=new u({Ms:0},!1,"scalatags.LowPriorityImplicits$bindNode",w,{Ms:1,c:1,uk:1,oh:1});function Xf(){this.Mm=this.Nm=null}Xf.prototype=new v;function Wf(a,b,c){a.Nm=b;a.Mm=c;return a}Xf.prototype.Wl=g("Mm");
+Xf.prototype.nr=g("Nm");Xf.prototype.a=new u({St:0},!1,"upickle.ReadWriter$$anon$1",w,{St:1,c:1,Xt:1,pn:1});var na=new u({ey:0},!1,"java.lang.Byte",ci,{ey:1,He:1,c:1,nc:1},function(a){return a<<24>>24===a&&1/a!==1/-0}),va=new u({iy:0},!1,"java.lang.Double",ci,{iy:1,He:1,c:1,nc:1},function(a){return"number"===typeof a});function ir(){Wp.call(this)}ir.prototype=new Xp;function jr(){}jr.prototype=ir.prototype;ir.prototype.f=function(a){ir.prototype.hd.call(this,a,null);return this};
+var kr=new u({Hj:0},!1,"java.lang.Error",Yp,{Hj:1,nb:1,c:1,e:1});ir.prototype.a=kr;function nd(){Wp.call(this)}nd.prototype=new Xp;function lr(){}lr.prototype=nd.prototype;nd.prototype.b=function(){nd.prototype.hd.call(this,null,null);return this};nd.prototype.f=function(a){nd.prototype.hd.call(this,a,null);return this};var mr=new u({Nb:0},!1,"java.lang.Exception",Yp,{Nb:1,nb:1,c:1,e:1});nd.prototype.a=mr;
+var ua=new u({ky:0},!1,"java.lang.Float",ci,{ky:1,He:1,c:1,nc:1},function(a){return a!==a||ta(a)===a}),qa=new u({my:0},!1,"java.lang.Integer",ci,{my:1,He:1,c:1,nc:1},function(a){return La(a)}),Aa=new u({ry:0},!1,"java.lang.Long",ci,{ry:1,He:1,c:1,nc:1},function(a){return za(a)}),oa=new u({uy:0},!1,"java.lang.Short",ci,{uy:1,He:1,c:1,nc:1},function(a){return a<<16>>16===a&&1/a!==1/-0});function nr(){this.Hf=null;this.sh=!1}nr.prototype=new v;m=nr.prototype;
+m.b=function(){nr.prototype.Jx.call(this,(new or).b());return this};function pr(a,b,c,e,f,h,l){var q=(b.length|0)+(c.length|0)|0;if(h<=q)b=""+c+b;else{var r=qr("-",f);e=qr("0",f)&&!e;var B="";for(h=h-q|0;0<h;)B=""+B+(e?"0":" "),h=-1+h|0;h=B;if(e&&r)throw(new rr).f(f);b=r?""+c+b+h:e?""+c+h+b:""+h+c+b}Jh();l=Hh(l)===l?b.toUpperCase():b;a.Hf.Ek(l)}m.r=function(){return(this.sh?sr():this.Hf).r()};m.Jx=function(a){this.Hf=a;this.sh=!1;return this};
+function tr(a,b,c,e,f,h){var l=65535&(b.charCodeAt(0)|0);43===l||45===l?pr(a,b.substring(1),""+(new ig).rb(l)+c,!1,e,f,h):pr(a,b,c,!1,e,f,h)}function qr(a,b){return 0<=(b.indexOf(a)|0)}function ur(a,b,c,e,f,h){var l=vr(e).toExponential(b);101===(65535&(l.charCodeAt(-3+(l.length|0)|0)|0))?(b=l.substring(0,-1+(l.length|0)|0),l=65535&(l.charCodeAt(-1+(l.length|0)|0)|0),b=b+"0"+(new ig).rb(l)):b=l;l=vr(e);l!==l?e=!0:(e=vr(e),e=Infinity===e||-Infinity===e);wr(a,b,e,c,f,h)}
+function sr(){throw(new xr).b();}m.tj=function(){if(!this.sh){var a=this.Hf;a&&a.a&&a.a.y.nh&&a.tj()}this.sh=!0};function wr(a,b,c,e,f,h){45!==(65535&(b.charCodeAt(0)|0))?qr("+",e)?pr(a,b,"+",c,e,f,h):qr(" ",e)?pr(a,b," ",c,e,f,h):pr(a,b,"",c,e,f,h):qr("(",e)?pr(a,b.substring(1)+")","(",c,e,f,h):pr(a,b.substring(1),"-",c,e,f,h)}function vr(a){if(bi(a))return"number"===typeof a?a:a.Zn();if(up(a))return yp(T(),a);throw(new H).o(a);}m.a=new u({Ey:0},!1,"java.util.Formatter",w,{Ey:1,c:1,nh:1,Zh:1});
+function yr(){}yr.prototype=new v;function cq(){zr||(zr=(new yr).b());return Yo(Zo((new U).xa(Ar()),32),$o((new U).j(4194303,1023,0),(new U).xa(Ar())))}function Ar(){var a=4294967296*+n.Math.random();return-2147483648+ +n.Math.floor(a)|0}yr.prototype.a=new u({My:0},!1,"java.util.Random$",w,{My:1,c:1,g:1,e:1});var zr=void 0;
+function Br(){this.vr=this.wg=this.Yh=this.ci=this.gi=this.bi=this.ai=this.di=null;this.SH=Id();this.TH=Id();this.UH=Id();this.VH=Id();this.WH=Id();this.XH=Id();this.YH=Id();this.PI=Id()}Br.prototype=new v;Br.prototype.b=function(){Cr=this;this.di=(new Dr).b();this.ai=(new Er).b();this.bi=(new Fr).b();this.gi=(new Gr).b();this.ci=(new Hr).b();this.Yh=(new Ir).b();this.wg=(new Jr).b();this.vr=Ee(Fe(),(new z).k([this.di,this.ai,this.bi,this.gi,this.ci,this.Yh,this.wg]),Ge(Ie(),t(hq)));return this};
+function Kr(a,b,c,e){vo(b,e)?b=(new U).j(4194303,4194303,524287):(a=Vh(e),b=vo(a,b)?(new U).j(1,0,524288):Wh(b,c));return b}Br.prototype.a=new u({Oy:0},!1,"java.util.concurrent.TimeUnit$",w,{Oy:1,c:1,g:1,e:1});var Cr=void 0;function Z(){Cr||(Cr=(new Br).b());return Cr}function Dr(){fq.call(this)}Dr.prototype=new gq;m=Dr.prototype;m.b=function(){fq.prototype.nf.call(this,0,"NANOSECONDS");return this};m.jh=function(a){return Un(a,(new U).j(481280,14305,0))};
+m.gh=function(a){return Un(a,(new U).j(3710976,858306,0))};m.kh=function(a){return Un(a,(new U).j(1755648,238,0))};m.hh=function(a){return Un(a,(new U).j(1E3,0,0))};m.fh=function(a){return Un(a,(new U).j(983040,3822149,4))};m.ih=function(a){return Un(a,(new U).j(1E6,0,0))};m.Cg=function(a,b){return b.ve(a)};m.ve=ba();m.a=new u({Py:0},!1,"java.util.concurrent.TimeUnit$$anon$1",hq,{Py:1,Sf:1,c:1,e:1});function Er(){fq.call(this)}Er.prototype=new gq;m=Er.prototype;
+m.b=function(){fq.prototype.nf.call(this,1,"MICROSECONDS");return this};m.jh=function(a){return Un(a,(new U).j(1279744,14,0))};m.gh=function(a){return Un(a,(new U).j(1287168,858,0))};m.kh=function(a){return Un(a,(new U).j(1E6,0,0))};m.hh=ba();m.fh=function(a){return Un(a,(new U).j(1531904,20599,0))};m.ih=function(a){return Un(a,(new U).j(1E3,0,0))};m.Cg=function(a,b){return b.hh(a)};m.ve=function(a){return Kr(Z(),a,(new U).j(1E3,0,0),(new U).j(2315255,1207959,524))};
+m.a=new u({Qy:0},!1,"java.util.concurrent.TimeUnit$$anon$2",hq,{Qy:1,Sf:1,c:1,e:1});function Fr(){fq.call(this)}Fr.prototype=new gq;m=Fr.prototype;m.b=function(){fq.prototype.nf.call(this,2,"MILLISECONDS");return this};m.jh=function(a){return Un(a,(new U).j(6E4,0,0))};m.gh=function(a){return Un(a,(new U).j(36E5,0,0))};m.kh=function(a){return Un(a,(new U).j(1E3,0,0))};m.hh=function(a){return Kr(Z(),a,(new U).j(1E3,0,0),(new U).j(2315255,1207959,524))};
+m.fh=function(a){return Un(a,(new U).j(2513920,20,0))};m.ih=ba();m.Cg=function(a,b){return b.ih(a)};m.ve=function(a){return Kr(Z(),a,(new U).j(1E6,0,0),(new U).j(1071862,2199023,0))};m.a=new u({Ry:0},!1,"java.util.concurrent.TimeUnit$$anon$3",hq,{Ry:1,Sf:1,c:1,e:1});function Gr(){fq.call(this)}Gr.prototype=new gq;m=Gr.prototype;m.b=function(){fq.prototype.nf.call(this,3,"SECONDS");return this};m.jh=function(a){return Un(a,(new U).j(60,0,0))};m.gh=function(a){return Un(a,(new U).j(3600,0,0))};
+m.kh=ba();m.hh=function(a){return Kr(Z(),a,(new U).j(1E6,0,0),(new U).j(1071862,2199023,0))};m.fh=function(a){return Un(a,(new U).j(86400,0,0))};m.ih=function(a){return Kr(Z(),a,(new U).j(1E3,0,0),(new U).j(2315255,1207959,524))};m.Cg=function(a,b){return b.kh(a)};m.ve=function(a){return Kr(Z(),a,(new U).j(1755648,238,0),(new U).j(97540,2199,0))};m.a=new u({Sy:0},!1,"java.util.concurrent.TimeUnit$$anon$4",hq,{Sy:1,Sf:1,c:1,e:1});function Hr(){fq.call(this)}Hr.prototype=new gq;m=Hr.prototype;
+m.b=function(){fq.prototype.nf.call(this,4,"MINUTES");return this};m.jh=ba();m.gh=function(a){return Un(a,(new U).j(60,0,0))};m.kh=function(a){return Kr(Z(),a,(new U).j(60,0,0),(new U).j(2236962,559240,8738))};m.hh=function(a){return Kr(Z(),a,(new U).j(1279744,14,0),(new U).j(1625680,36650,0))};m.fh=function(a){return Un(a,(new U).j(1440,0,0))};m.ih=function(a){return Kr(Z(),a,(new U).j(6E4,0,0),(new U).j(2485264,3095955,8))};m.Cg=function(a,b){return b.jh(a)};
+m.ve=function(a){return Kr(Z(),a,(new U).j(481280,14305,0),(new U).j(2727923,36,0))};m.a=new u({Ty:0},!1,"java.util.concurrent.TimeUnit$$anon$5",hq,{Ty:1,Sf:1,c:1,e:1});function Ir(){fq.call(this)}Ir.prototype=new gq;m=Ir.prototype;m.b=function(){fq.prototype.nf.call(this,5,"HOURS");return this};m.jh=function(a){return Kr(Z(),a,(new U).j(60,0,0),(new U).j(2236962,559240,8738))};m.gh=ba();m.kh=function(a){return Kr(Z(),a,(new U).j(3600,0,0),(new U).j(876143,2665713,145))};
+m.hh=function(a){return Kr(Z(),a,(new U).j(1287168,858,0),(new U).j(3522348,610,0))};m.fh=function(a){return Un(a,(new U).j(24,0,0))};m.ih=function(a){return Kr(Z(),a,(new U).j(36E5,0,0),(new U).j(3326959,610839,0))};m.Cg=function(a,b){return b.gh(a)};m.ve=function(a){return Kr(Z(),a,(new U).j(3710976,858306,0),(new U).j(2562047,0,0))};m.a=new u({Uy:0},!1,"java.util.concurrent.TimeUnit$$anon$6",hq,{Uy:1,Sf:1,c:1,e:1});function Jr(){fq.call(this)}Jr.prototype=new gq;m=Jr.prototype;
+m.b=function(){fq.prototype.nf.call(this,6,"DAYS");return this};m.jh=function(a){return Kr(Z(),a,(new U).j(1440,0,0),(new U).j(93206,372827,364))};m.gh=function(a){return Kr(Z(),a,(new U).j(24,0,0),(new U).j(1398101,1398101,21845))};m.kh=function(a){return Kr(Z(),a,(new U).j(86400,0,0),(new U).j(211268,285834,6))};m.hh=function(a){return Kr(Z(),a,(new U).j(1531904,20599,0),(new U).j(1894391,25,0))};m.fh=ba();m.ih=function(a){return Kr(Z(),a,(new U).j(2513920,20,0),(new U).j(2760063,25451,0))};
+m.Cg=function(a,b){return b.fh(a)};m.ve=function(a){return Kr(Z(),a,(new U).j(983040,3822149,4),(new U).j(106751,0,0))};m.a=new u({Vy:0},!1,"java.util.concurrent.TimeUnit$$anon$7",hq,{Vy:1,Sf:1,c:1,e:1});function Lr(){this.l=null}Lr.prototype=new v;function Mr(){}Mr.prototype=Lr.prototype;function Dd(a,b,c){return b===a.l?(a.l=c,!0):!1}Lr.prototype.r=function(){return zm(Fa(),this.l)};Lr.prototype.o=function(a){this.l=a;return this};
+var Nr=new u({ap:0},!1,"java.util.concurrent.atomic.AtomicReference",w,{ap:1,c:1,g:1,e:1});Lr.prototype.a=Nr;function ep(){this.tf=null;this.hl=0;this.Zo=this.Em=null;this.il=0;this.Yo=null}ep.prototype=new v;ep.prototype.r=g("tf");
+ep.prototype.Oi=function(a,b){this.tf=a;this.hl=b;if(0!==(16&b))var c=(new A).v(Or(dp(),a),b);else{var e=dp().Po.exec(a);if(null!==e){e=e[1];if(void 0===e)throw(new V).f("undefined.get");e=(new Bd).o((new A).v(Or(0,e),b))}else e=wd();if(e.m()){var f=dp(),e=this.tf,h=this.hl,f=f.Oo.exec(e);if(null!==f){var l=f[0];if(void 0===l)throw(new V).f("undefined.get");e=e.substring(l.length|0);l=f[1];if(void 0===l)l=h;else{var l=(new wc).f(l),q=0,r=l.Ma.length|0,B=h;a:{var M;for(;;)if(q===r){M=B;break a}else h=
+1+q|0,q=l.pa(q),B|=0,q=yp(T(),q),B|=Pr(q),q=h}l=M|0}M=f[2];if(void 0===M)c=l;else{M=(new wc).f(M);r=0;f=M.Ma.length|0;h=l;a:for(;;)if(r===f){c=h;break a}else l=1+r|0,r=M.pa(r),h|=0,r=yp(T(),r),h&=~Pr(r),r=l;c|=0}c=(new Bd).o((new A).v(e,c))}else c=wd()}else c=e;c=c.m()?(new A).v(this.tf,this.hl):c.La()}if(null!==c)c=(new A).v(c.va,c.wa|0);else throw(new H).o(c);this.Em=c;this.Zo=this.Em.va;this.il=this.Em.wa|0;c="g";0!==(2&this.il)&&(c+="i");0!==(8&this.il)&&(c+="m");this.Yo=c;return this};
+ep.prototype.a=new u({Yy:0},!1,"java.util.regex.Pattern",w,{Yy:1,c:1,g:1,e:1});function Qr(){this.sJ=this.ZH=this.rJ=this.bI=this.eI=this.cJ=this.aI=this.$H=this.tJ=0;this.Oo=this.Po=null}Qr.prototype=new v;Qr.prototype.b=function(){Rr=this;this.Po=new n.RegExp("^\\\\Q(.|\\n|\\r)\\\\E$");this.Oo=new n.RegExp("^\\(\\?([idmsuxU]*)(?:-([idmsuxU]*))?\\)");return this};
+function Or(a,b){for(var c="",e=0;e<(b.length|0);){var f=65535&(b.charCodeAt(e)|0);switch(f){case 92:case 46:case 40:case 41:case 91:case 93:case 123:case 125:case 124:case 63:case 42:case 43:case 94:case 36:f="\\"+(new ig).rb(f);break;default:f=(new ig).rb(f)}c=""+c+f;e=1+e|0}return c}
+function Pr(a){switch(a){case 105:return 2;case 100:return 1;case 109:return 8;case 115:return 32;case 117:return 64;case 120:return 4;case 85:return 256;default:throw el||(el=(new dl).b()),I(J(),(new Sr).f("bad in-pattern flag"));}}Qr.prototype.a=new u({Zy:0},!1,"java.util.regex.Pattern$",w,{Zy:1,c:1,g:1,e:1});var Rr=void 0;function dp(){Rr||(Rr=(new Qr).b());return Rr}function Tr(){this.Cx=this.el=this.tp=null}Tr.prototype=new Ji;
+Tr.prototype.b=function(){Ur=this;this.tp=(new vd).o(gi().rp);this.el=(new vd).o(gi().co);this.Cx=(new vd).o(null);return this};Tr.prototype.a=new u({OB:0},!1,"scala.Console$",Ki,{OB:1,Lp:1,c:1,xK:1});var Ur=void 0;function Vr(){Ur||(Ur=(new Tr).b());return Ur}function Wr(){}Wr.prototype=new v;function yd(a,b){return null===b?wd():(new Bd).o(b)}Wr.prototype.a=new u({UB:0},!1,"scala.Option$",w,{UB:1,c:1,g:1,e:1});var Xr=void 0;function zd(){Xr||(Xr=(new Wr).b());return Xr}
+function aj(){this.fz=null}aj.prototype=new v;m=aj.prototype;m.b=function(){this.fz=C(function(){return function(){return wd()}}(this));return this};m.h=function(a){throw(new H).o(a);};m.dd=function(a){throw(new H).o(a);};m.r=k("\x3cfunction1\x3e");m.sf=ba();m.Ha=k(!1);m.cb=function(a,b){return cj(this,a,b)};m.a=new u({WB:0},!1,"scala.PartialFunction$$anon$1",w,{WB:1,c:1,H:1,p:1});function Mg(){this.Ii=this.Hi=null}Mg.prototype=new v;m=Mg.prototype;m.h=function(a){return this.Hi.cb(a,this.Ii)};
+m.dd=function(a){return+this.h(a)};m.r=k("\x3cfunction1\x3e");m.sf=function(a){return Lg(new Mg,this.Hi,this.Ii.sf(a))};m.Ha=function(a){return this.Hi.Ha(a)||this.Ii.Ha(a)};m.cb=function(a,b){var c=this.Hi.cb(a,bj().Xj);return bj().Xj===c?this.Ii.cb(a,b):c};function Lg(a,b,c){a.Hi=b;a.Ii=c;return a}m.a=new u({YB:0},!1,"scala.PartialFunction$OrElse",w,{YB:1,c:1,H:1,p:1});function Yr(){this.TD=this.Ne=this.Fu=this.su=this.ou=this.zr=this.tn=this.pu=null}Yr.prototype=new Wi;
+Yr.prototype.b=function(){Zr=this;Tj||(Tj=(new Sj).b());rf();$r||($r=(new as).b());this.pu=$r;this.tn=Fd();this.zr=cl().Om;this.ou=cl().Ac;bs||(bs=(new cs).b());this.su=bs;this.Fu=(new kq).b();this.Ne=(new ds).b();this.TD=(new es).b();return this};function fs(a,b){if(!b)throw(new pe).f("requirement failed");}Yr.prototype.a=new u({ZB:0},!1,"scala.Predef$",Xi,{ZB:1,Pp:1,c:1,tK:1});var Zr=void 0;function jc(){Zr||(Zr=(new Yr).b());return Zr}function gs(){}gs.prototype=new v;
+gs.prototype.a=new u({eC:0},!1,"scala.StringContext$",w,{eC:1,c:1,g:1,e:1});var hs=void 0;function Ti(){this.oc=null}Ti.prototype=new v;m=Ti.prototype;m.fa=function(a){return this===a};m.r=function(){return"'"+this.oc};m.f=function(a){this.oc=a;return this};m.ja=function(){var a=this.oc;return Ea(Fa(),a)};m.a=new u({gC:0},!1,"scala.Symbol",w,{gC:1,c:1,g:1,e:1});function is(){this.G=this.Ap=this.Eo=null}is.prototype=new v;function js(a,b,c){a.Eo=c;if(null===b)throw I(J(),null);a.G=b;return a}
+is.prototype.uf=function(){fs(jc(),null===this.G.vf.La());var a;var b=ij().Bi.La();null===b&&(ii||(ii=(new hi).b()),b=ii.un,b&&b.a&&b.a.y.Up||(mq||(mq=(new lq).b()),b=mq));a=b;var b=ij(),c=b.Bi.La();try{Vd(b.Bi,this);try{this.Ap=a;var e=this.Eo;a:b:for(;;){a=e;var f=K();if(null===f?null!==a:!f.fa(a))if(vf(a)){var h=a.mf;Vd(this.G.vf,a.rd);try{h.uf()}catch(l){var q=Ej(J(),l);if(null!==q){var r=this.G.vf.La();Vd(this.G.vf,K());this.G;js(new is,this.G,r).uf();throw I(J(),q);}throw l;}e=this.G.vf.La();
+continue b}else throw(new H).o(a);break a}}finally{var B=this.G.vf;B.Dj=!1;this.Ap=B.Na=null}}finally{Vd(b.Bi,c)}};is.prototype.a=new u({jC:0},!1,"scala.concurrent.BatchingExecutor$Batch",w,{jC:1,c:1,zl:1,Up:1});function ks(){this.fK=0;this.rH=this.Yq=this.Am=null;this.wL=Id();this.hK=Id();this.sK=Id();this.gK=Id();this.UJ=Id();this.KJ=Id();this.zk=this.sk=this.Bk=this.cd=null}ks.prototype=new v;
+ks.prototype.b=function(){ls=this;rf();var a=Z().wg,a=(new A).v(a,"d day"),b=Z().Yh,b=(new A).v(b,"h hour"),c=Z().ci,c=(new A).v(c,"min minute"),e=Z().gi,e=(new A).v(e,"s sec second"),f=Z().bi,f=(new A).v(f,"ms milli millisecond"),h=Z().ai,h=(new A).v(h,"\u00b5s micro microsecond"),l=Z().di,a=(new z).k([a,b,c,e,f,h,(new A).v(l,"ns nano nanosecond")]),b=rf().ka,a=this.Am=sf(a,b),b=jc().Ne,a=Tm(a,b);this.Yq=Mp(new Np,a,C(function(){return function(a){a=ms(a);return tf(a)}}(this)));b=this.Am;a=function(a){return function(b){if(null!==
+b){var c=b.va;b=ns(a,b.wa);var c=function(a,b){return function(a){return(new A).v(a,b)}}(a,c),e=rf().ka;if(e===rf().ka){if(b===K())return K();var e=b.x(),f=e=Td(new Ud,c(e),K());for(b=b.u();b!==K();){var h=b.x(),h=Td(new Ud,c(h),K()),f=f.rd=h;b=b.u()}return e}for(e=qf(b,e);!b.m();)f=b.x(),e.za(c(f)),b=b.u();return e.oa()}throw(new H).o(b);}}(this);if(rf().ka===rf().ka)if(b===K())a=K();else{c=b;e=id(!1);f=(new cc).o(null);for(h=(new cc).o(null);c!==K();)l=c.x(),a(l).A(C(function(a,b,c,e){return function(a){b.i?
+(a=Td(new Ud,a,K()),e.i.rd=a,e.i=a):(c.i=Td(new Ud,a,K()),e.i=c.i,b.i=!0)}}(b,e,f,h))),c=c.u();a=e.i?f.i:K()}else{rf();for(c=(new os).b();!b.m();)e=b.x(),e=a(e).Aa(),ps(c,e),b=b.u();a=c.lj()}this.rH=a.Re(jc().Ne);this.cd=qs(new rs,Id(),Z().wg);this.Bk=(new ss).b();this.sk=(new ts).b();this.zk=(new us).b();return this};
+function vs(a){if(vp(ws(a,(new U).j(983040,3822149,4)),Id())){Fg();a=Un(a,(new U).j(983040,3822149,4));var b=Z().wg;return qs(new rs,a,b)}if(vp(ws(a,(new U).j(3710976,858306,0)),Id()))return Fg(),a=Un(a,(new U).j(3710976,858306,0)),b=Z().Yh,qs(new rs,a,b);if(vp(ws(a,(new U).j(481280,14305,0)),Id()))return Fg(),a=Un(a,(new U).j(481280,14305,0)),b=Z().ci,qs(new rs,a,b);if(vp(ws(a,(new U).j(1755648,238,0)),Id()))return Fg(),a=Un(a,(new U).j(1755648,238,0)),b=Z().gi,qs(new rs,a,b);if(vp(ws(a,(new U).j(1E6,
+0,0)),Id()))return Fg(),a=Un(a,(new U).j(1E6,0,0)),b=Z().bi,qs(new rs,a,b);if(vp(ws(a,(new U).j(1E3,0,0)),Id()))return Fg(),a=Un(a,(new U).j(1E3,0,0)),b=Z().ai,qs(new rs,a,b);Fg();b=Z().di;return qs(new rs,a,b)}function ms(a){a=a.trim();a=vn(Fa(),a,"\\s+");var b=rf().ka.Ff();b.vb(a.d.length);b.hb(zc(new Ac,a));return b.oa()}
+function ns(a,b){var c=ms(b);if(vf(c))var e=c.mf,c=c.rd;else throw(new H).o(c);var f=c,c=function(){return function(a){rf();a=(new z).k([a,a+"s"]);var b=rf().ka;return sf(a,b)}}(a);if(rf().ka===rf().ka)if(f===K())c=K();else{for(var h=f,l=id(!1),q=(new cc).o(null),r=(new cc).o(null);h!==K();){var B=h.x();c(B).A(C(function(a,b,c,e){return function(a){b.i?(a=Td(new Ud,a,K()),e.i.rd=a,e.i=a):(c.i=Td(new Ud,a,K()),e.i=c.i,b.i=!0)}}(f,l,q,r)));h=h.u()}c=l.i?q.i:K()}else{rf();for(h=(new os).b();!f.m();)l=
+f.x(),l=c(l).Aa(),ps(h,l),f=f.u();c=h.lj()}return Td(new Ud,e,c)}ks.prototype.a=new u({tC:0},!1,"scala.concurrent.duration.Duration$",w,{tC:1,c:1,g:1,e:1});var ls=void 0;function Fg(){ls||(ls=(new ks).b());return ls}function xs(){this.l=this.pp=this.yj=null}xs.prototype=new v;xs.prototype.uf=function(){fs(jc(),null!==this.l);try{this.pp.h(this.l)}catch(a){var b=Ej(J(),a);if(null!==b){var c=Fj(Gj(),b);if(c.m())throw I(J(),b);b=c.La();this.yj.Jh(b)}else throw a;}};
+function ys(a,b){var c=new xs;c.yj=a;c.pp=b;c.l=null;return c}function zs(a,b){fs(jc(),null===a.l);a.l=b;try{a.yj.xj(a)}catch(c){var e=Ej(J(),c);if(null!==e){var f=Fj(Gj(),e);if(f.m())throw I(J(),e);e=f.La();a.yj.Jh(e)}else throw c;}}xs.prototype.a=new u({xC:0},!1,"scala.concurrent.impl.CallbackRunnable",w,{xC:1,c:1,zl:1,qC:1});function qk(){}qk.prototype=new v;qk.prototype.a=new u({FC:0},!1,"scala.math.Fractional$",w,{FC:1,c:1,g:1,e:1});var pk=void 0;function sk(){}sk.prototype=new v;
+sk.prototype.a=new u({GC:0},!1,"scala.math.Integral$",w,{GC:1,c:1,g:1,e:1});var rk=void 0;function uk(){}uk.prototype=new v;uk.prototype.a=new u({HC:0},!1,"scala.math.Numeric$",w,{HC:1,c:1,g:1,e:1});var tk=void 0;function As(){this.Df=this.Cf=this.ug=this.vg=this.df=this.tg=this.gf=this.We=this.Ze=this.af=this.cf=this.bf=this.Ye=this.ff=this.Xe=this.rn=this.qn=this.sn=null}As.prototype=new v;
+As.prototype.b=function(){Bs=this;this.sn=t(w);this.qn=t(Uk);this.rn=t(Vk);this.Xe=cl().Ac.Xe;this.ff=cl().Ac.ff;this.Ye=cl().Ac.Ye;this.bf=cl().Ac.bf;this.cf=cl().Ac.cf;this.af=cl().Ac.af;this.Ze=cl().Ac.Ze;this.We=cl().Ac.We;this.gf=cl().Ac.gf;this.tg=cl().Ac.tg;this.df=cl().Ac.df;this.vg=cl().Ac.vg;this.ug=cl().Ac.ug;this.Cf=cl().Ac.Cf;this.Df=cl().Ac.Df;return this};
+function Ge(a,b){var c;b===t(Va)?c=Ie().Xe:b===t(Xa)?c=Ie().ff:b===t(Ua)?c=Ie().Ye:b===t(Ya)?c=Ie().bf:b===t(Za)?c=Ie().cf:b===t($a)?c=Ie().af:b===t(ab)?c=Ie().Ze:b===t(Ta)?c=Ie().We:b===t(Sa)?c=Ie().gf:a.sn===b?c=Ie().df:a.qn===b?c=Ie().Cf:a.rn===b?c=Ie().Df:(c=new Cs,c.Tj=b);return c}As.prototype.a=new u({XC:0},!1,"scala.reflect.ClassTag$",w,{XC:1,c:1,g:1,e:1});var Bs=void 0;function Ie(){Bs||(Bs=(new As).b());return Bs}function fl(){ki.call(this);this.Gm=null}fl.prototype=new Up;
+fl.prototype.Go=function(){return this.Gm.iq};fl.prototype.a=new u({rD:0},!1,"scala.util.DynamicVariable$$anon$1",Vp,{rD:1,Vo:1,Al:1,c:1});function Ak(){}Ak.prototype=new v;Ak.prototype.r=k("Left");Ak.prototype.a=new u({tD:0},!1,"scala.util.Left$",w,{tD:1,c:1,g:1,e:1});var zk=void 0;function Ds(){this.Sd=null}Ds.prototype=new v;function Es(){}Es.prototype=Ds.prototype;Ds.prototype.b=function(){Ds.prototype.Kx.call(this,(new bq).b());return this};Ds.prototype.Kx=function(a){this.Sd=a;return this};
+var Fs=new u({aq:0},!1,"scala.util.Random",w,{aq:1,c:1,g:1,e:1});Ds.prototype.a=Fs;function Ck(){}Ck.prototype=new v;Ck.prototype.r=k("Right");Ck.prototype.a=new u({vD:0},!1,"scala.util.Right$",w,{vD:1,c:1,g:1,e:1});var Bk=void 0;function Gs(){this.Km=!1}Gs.prototype=new v;Gs.prototype.b=function(){Hs=this;this.Km=!1;return this};Gs.prototype.a=new u({zD:0},!1,"scala.util.control.NoStackTrace$",w,{zD:1,c:1,g:1,e:1});var Hs=void 0;function Is(){this.VD=this.Yi=null}Is.prototype=new v;
+function be(a,b){var c=new Is;Is.prototype.Lx.call(c,(dp(),(new ep).Oi(a,0)),b);return c}Is.prototype.Lx=function(a,b){this.Yi=a;this.VD=b;return this};Is.prototype.r=function(){return this.Yi.tf};
+function oe(a,b){if(null===b)return wd();var c=fp(new gp,a.Yi,b,"string"===typeof b?b.length|0:b.ba());if(iq(c)){var e=-1+(ip(c).length|0)|0,e=(new Js).j(1,e,1),f=rf().ka,e=sf(e,f),c=function(a,b){return function(a){a|=0;a=ip(b)[a];return void 0===a?null:a}}(a,c),f=rf().ka;if(f===rf().ka)if(e===K())c=K();else{for(var f=e.x(),h=f=Td(new Ud,c(f),K()),e=e.u();e!==K();)var l=e.x(),l=Td(new Ud,c(l),K()),h=h.rd=l,e=e.u();c=f}else{for(f=qf(e,f);!e.m();)h=e.x(),f.za(c(h)),e=e.u();c=f.oa()}return(new Bd).o(c)}return wd()}
+Is.prototype.a=new u({DD:0},!1,"scala.util.matching.Regex",w,{DD:1,c:1,g:1,e:1});function Ks(){this.G=null}Ks.prototype=new Dq;Ks.prototype.b=function(){Cq.prototype.Ri.call(this,Ke());return this};Ks.prototype.Ff=function(){Ke();gf();Je();return(new cf).b()};Ks.prototype.a=new u({ID:0},!1,"scala.collection.IndexedSeq$$anon$1",Eq,{ID:1,$j:1,c:1,Qh:1});function Ls(){this.ka=null}Ls.prototype=new zq;function Ms(){}Ms.prototype=Ls.prototype;
+var Ns=new u({tc:0},!1,"scala.collection.generic.GenSeqFactory",Bq,{tc:1,Cb:1,Xa:1,c:1});Ls.prototype.a=Ns;function Aq(){this.sa=this.G=null}Aq.prototype=new Dq;Aq.prototype.Ff=function(){return this.sa.ha()};Aq.prototype.Ri=function(a){if(null===a)throw I(J(),null);this.sa=a;Cq.prototype.Ri.call(this,a);return this};Aq.prototype.a=new u({YD:0},!1,"scala.collection.generic.GenTraversableFactory$$anon$1",Eq,{YD:1,$j:1,c:1,Qh:1});function $s(){}$s.prototype=new Gq;function at(){}at.prototype=$s.prototype;
+var bt=new u({em:0},!1,"scala.collection.generic.ImmutableMapFactory",Hq,{em:1,ck:1,ej:1,c:1});$s.prototype.a=bt;function ak(){}ak.prototype=new v;ak.prototype.r=k("::");ak.prototype.a=new u({ZD:0},!1,"scala.collection.immutable.$colon$colon$",w,{ZD:1,c:1,g:1,e:1});var Zj=void 0;function ct(){this.vk=0}ct.prototype=new v;ct.prototype.b=function(){dt=this;this.vk=512;return this};
+function et(a,b,c,e){var f=(new wc).f("%d %s %d by %s"),h=[a,e?"to":"until",b,c];Fa();var l=f.Ma,q=tb();q.ka;ft();var r=[];h.length|0;for(var B=0,M=h.length|0;B<M;){var aa=xp(h[B])?h[B].qL():h[B];r.push(aa);B=1+B|0}for(var ca=Ie().ug.pc(r.length|0),ra=Pl(W(),ca),sa=0,pa=0,Wa=r.length|0,hf=Wa<ra?Wa:ra,Ob=Pl(W(),ca),Ec=hf<Ob?hf:Ob;sa<Ec;)Ql(W(),ca,pa,r[sa]),sa=1+sa|0,pa=1+pa|0;var Da=(new nr).b(),Ad;if(Da.sh)sr(),Ad=void 0;else{for(var Hb=l,lk=0,mk=0;;){var Dy=Hb;if(null===Dy){var Ey;throw(new ya).b();
+}Ey=Dy;if(""!==Ey){var pi=Hb;var Fy=Hi(Gi().No,pi);if(Fy.m())if(Hi(Gi().Ko,pi).m())if(Hi(Gi().Lo,pi).m()){var Gy=Hi(Gi().Mo,pi);if(Gy.m())throw(new H).o(pi);var He=Gy.La(),bC=Hb,Hy=He[0];if(void 0===Hy){var Iy;throw(new V).f("undefined.get");}Iy=Hy;var Hb=bC.substring(Iy.length|0),Jy=He[2];if(void 0===Jy){var Qa;throw(new V).f("undefined.get");}Qa=Jy;var Ky=He[1],Os=void 0===Ky?"":Ky;if(null===Os){var Ly;throw(new ya).b();}Ly=Os;var sg=""!==Ly?lg(mg(),Os,10):qr("\x3c",Qa)?mk:lk=1+lk|0;mk=sg;if(0>=
+sg||sg>ca.d.length){var My=He[5];if(void 0===My){var Ny;throw(new V).f("undefined.get");}Ny=My;throw(new gt).f(Ny);}var ha=ca.d[-1+sg|0],Oy=He[3],Ps=void 0===Oy?"":Oy;if(null===Ps){var Py;throw(new ya).b();}Py=Ps;var Qy=""!==Py,Ub=Qy?lg(mg(),Ps,10):0,Ry=He[4],Qs=void 0===Ry?"":Ry;if(null===Qs){var Sy;throw(new ya).b();}Sy=Qs;var qi=""!==Sy,ri=qi?lg(mg(),Qs,10):0,Ty=He[5];if(void 0===Ty){var Uy;throw(new V).f("undefined.get");}Uy=Ty;var Db=65535&(Uy.charCodeAt(0)|0);switch(Db){case 98:case 66:if(null===
+ha)var Rs="false";else if("boolean"===typeof ha)var cC=ha,Rs=zm(Fa(),cC);else Rs="true";pr(Da,Rs,"",!1,Qa,Ub,Db);break;case 104:case 72:var dC=null===ha?"null":(+(Ca(ha)>>>0)).toString(16);pr(Da,dC,"",!1,Qa,Ub,Db);break;case 115:case 83:if(null!==ha||qr("#",Qa))if(ha&&ha.a&&ha.a.y.ZJ){var eC=ha,fC=(qr("-",Qa)?1:0)|(qr("#",Qa)?4:0),Vy;Jh();var Wy=Db;Vy=Hh(Wy)===Wy;eC.TJ(Da,fC|(Vy?2:0),Qy?Ub:-1,qi?ri:-1);wd()}else{if(null===ha||qr("#",Qa))throw ht();pr(Da,ka(ha),"",!1,Qa,Ub,Db)}else pr(Da,"null","",
+!1,Qa,Ub,Db);break;case 99:case 67:var Ss;var si=ha;if(La(si))Ss=si|0;else if(up(si))Ss=yp(T(),si);else throw(new H).o(si);var hC=(new ig).rb(65535&Ss).l;pr(Da,n.String.fromCharCode(hC),"",!1,Qa,Ub,Db);break;case 100:var iC=vr(ha);wr(Da,""+iC,!1,Qa,Ub,Db);break;case 111:if(La(ha))var Nm=(+((ha|0)>>>0)).toString(8);else if(za(ha)){var ti=Ma(ha),Ts=2097151&ti.la,Us=(1048575&ti.da)<<1|ti.la>>21,Xy=ti.w<<2|ti.da>>20;if(0!==Xy)var jC=(+(Xy>>>0)).toString(8),Yy=(+(Us>>>0)).toString(8),kC="0000000".substring(Yy.length|
+0),Zy=(+(Ts>>>0)).toString(8),Nm=jC+(""+kC+Yy)+(""+"0000000".substring(Zy.length|0)+Zy);else if(0!==Us)var lC=(+(Us>>>0)).toString(8),$y=(+(Ts>>>0)).toString(8),Nm=lC+(""+"0000000".substring($y.length|0)+$y);else Nm=(+(Ts>>>0)).toString(8)}else throw(new H).o(ha);tr(Da,Nm,qr("#",Qa)?"0":"",Qa,Ub,Db);break;case 120:case 88:if(La(ha))var Om=(+((ha|0)>>>0)).toString(16);else if(za(ha)){var ui=Ma(ha),Vs=ui.da>>2,Ws=ui.la|(3&ui.da)<<22;if(0!==ui.w)var mC=(+(ui.w>>>0)).toString(16),az=(+(Vs>>>0)).toString(16),
+nC="000000".substring(1+(az.length|0)|0),bz=(+(Ws>>>0)).toString(16),Om=mC+(""+nC+az)+(""+"000000".substring(bz.length|0)+bz);else if(0!==Vs)var oC=(+(Vs>>>0)).toString(16),cz=(+(Ws>>>0)).toString(16),Om=oC+(""+"000000".substring(cz.length|0)+cz);else Om=(+(Ws>>>0)).toString(16)}else throw(new H).o(ha);tr(Da,Om,qr("#",Qa)?"0x":"",Qa,Ub,Db);break;case 101:case 69:ur(Da,qi?ri:6,Qa,ha,Ub,Db);break;case 103:case 71:var Xs=vr(ha),Ys=0>Xs?-Xs:Xs,Zs=qi?0===ri?1:ri:6;if(1E-4<=Ys&&Ys<+n.Math.pow(10,Zs)){var pC=
++n.Math.log(Ys)/2.302585092994046,qC=+n.Math.ceil(pC)|0,rC=vr(ha),dz=Zs-qC|0,sC=rC.toFixed(0<dz?dz:0);wr(Da,sC,!1,Qa,Ub,Db)}else ur(Da,-1+Zs|0,Qa,ha,Ub,Db);break;case 102:var tC=vr(ha).toFixed(qi?ri:6),ez=vr(ha);if(ez!==ez)var fz=!0;else var gz=vr(ha),fz=Infinity===gz||-Infinity===gz;wr(Da,tC,fz,Qa,Ub,Db);break;default:throw(new H).o((new ig).rb(Db));}}else Hb=Hb.substring(2),Da.Hf.Dk(10);else Hb=Hb.substring(2),Da.Hf.Dk(37);else{var hz=Fy.La(),uC=Hb,iz=hz[0];if(void 0===iz){var jz;throw(new V).f("undefined.get");
+}jz=iz;var Hb=uC.substring(jz.length|0),vC=Da.Hf,kz=hz[0];if(void 0===kz){var lz;throw(new V).f("undefined.get");}lz=kz;vC.Ek(lz)}}else break}Ad=Da}var wC=(Ad.sh?sr():Ad.Hf).r();Da.tj();return wC}function it(a,b,c,e,f){throw(new pe).f(et(b,c,e,f)+": seqs cannot contain more than Int.MaxValue elements.");}ct.prototype.a=new u({DE:0},!1,"scala.collection.immutable.Range$",w,{DE:1,c:1,g:1,e:1});var dt=void 0;function kk(){dt||(dt=(new ct).b());return dt}function jt(){this.G=null}jt.prototype=new Dq;
+jt.prototype.b=function(){Cq.prototype.Ri.call(this,fk());return this};jt.prototype.a=new u({RE:0},!1,"scala.collection.immutable.Stream$StreamCanBuildFrom",Eq,{RE:1,$j:1,c:1,Qh:1});function kt(){wf.call(this);this.Ql=null}kt.prototype=new rq;kt.prototype.A=function(a){var b=this.G;a:b:for(;;){if(!b.m()){var c=b.x();this.Ql.h(c)&&a.h(c);b=b.u();continue b}break a}};
+function lt(a,b,c){var e=null;for(b=(new cc).o(b);;){if(b.i.m())return km();e=b.i.x();b.i=b.i.u();if(a.Ql.h(e))return e=c.h(e),im(new jm,e,Rb(function(a,b,c){return function(){return lt(a,c.i,b)}}(a,c,b)))}}kt.prototype.ac=function(a,b){return mt(b.Pc(this.G))?(this.G,lt(this,this.G,a)):wf.prototype.ac.call(this,a,b)};kt.prototype.a=new u({SE:0},!1,"scala.collection.immutable.Stream$StreamWithFilter",sq,{SE:1,fq:1,c:1,E:1});function jk(){}jk.prototype=new v;
+jk.prototype.a=new u({GF:0},!1,"scala.collection.mutable.StringBuilder$",w,{GF:1,c:1,g:1,e:1});var ik=void 0;function nt(){this.Kf=null}nt.prototype=new Nq;nt.prototype.Ed=function(){return(0,this.Kf)()};function Rb(a){var b=new nt;b.Kf=a;return b}nt.prototype.a=new u({mG:0},!1,"scala.scalajs.runtime.AnonFunction0",Oq,{mG:1,jg:1,c:1,$e:1});function ot(){this.Kf=null}ot.prototype=new Qq;ot.prototype.h=function(a){return(0,this.Kf)(a)};function C(a){var b=new ot;b.Kf=a;return b}
+ot.prototype.a=new u({nG:0},!1,"scala.scalajs.runtime.AnonFunction1",Rq,{nG:1,Nc:1,c:1,p:1});function pt(){this.Kf=null}pt.prototype=new Tq;function Fc(a){var b=new pt;b.Kf=a;return b}function Bc(a,b,c){return(0,a.Kf)(b,c)}pt.prototype.a=new u({oG:0},!1,"scala.scalajs.runtime.AnonFunction2",Uq,{oG:1,Sq:1,c:1,Er:1});function U(){this.w=this.da=this.la=0}U.prototype=new ai;function Yo(a,b){return(new U).j(a.la|b.la,a.da|b.da,a.w|b.w)}
+function qt(a,b){return 0===(524288&a.w)?0!==(524288&b.w)||a.w>b.w||a.w===b.w&&a.da>b.da||a.w===b.w&&a.da===b.da&&a.la>=b.la:!(0===(524288&b.w)||a.w<b.w||a.w===b.w&&a.da<b.da||a.w===b.w&&a.da===b.da&&a.la<b.la)}m=U.prototype;m.fa=function(a){return za(a)?vp(this,a):!1};
+function Wh(a,b){var c=8191&a.la,e=a.la>>13|(15&a.da)<<9,f=8191&a.da>>4,h=a.da>>17|(255&a.w)<<5,l=(1048320&a.w)>>8;c|=0;e|=0;f|=0;h|=0;l|=0;var q=8191&b.la,r=b.la>>13|(15&b.da)<<9,B=8191&b.da>>4,M=b.da>>17|(255&b.w)<<5,aa=(1048320&b.w)>>8;var q=q|0,r=r|0,B=B|0,ca=M|0,ra=aa|0,sa=y(c,q),pa=y(e,q),aa=y(f,q),M=y(h,q),l=y(l,q);0!==r&&(pa=pa+y(c,r)|0,aa=aa+y(e,r)|0,M=M+y(f,r)|0,l=l+y(h,r)|0);0!==B&&(aa=aa+y(c,B)|0,M=M+y(e,B)|0,l=l+y(f,B)|0);0!==ca&&(M=M+y(c,ca)|0,l=l+y(e,ca)|0);0!==ra&&(l=l+y(c,ra)|0);
+c=(4194303&sa)+((511&pa)<<13)|0;e=((((sa>>22)+(pa>>9)|0)+((262143&aa)<<4)|0)+((31&M)<<17)|0)+(c>>22)|0;return(new U).j(4194303&c,4194303&e,1048575&((((aa>>18)+(M>>5)|0)+((4095&l)<<8)|0)+(e>>22)|0))}m.j=function(a,b,c){this.la=a;this.da=b;this.w=c;return this};function ws(a,b){return rt(a,b)[1]}
+m.r=function(){if(0===this.la&&0===this.da&&0===this.w)return"0";if(vp(this,Na().xg))return"-9223372036854775808";if(0!==(524288&this.w))return"-"+Vh(this).r();var a=Na().wn,b=this,c="";for(;;){var e=b;if(0===e.la&&0===e.da&&0===e.w)return c;e=rt(b,a);b=e[0];e=""+Tn(e[1]);c=(0===b.la&&0===b.da&&0===b.w?"":"000000000".substring(e.length|0))+e+c}};
+function rt(a,b){if(0===b.la&&0===b.da&&0===b.w)throw(new st).f("/ by zero");if(0===a.la&&0===a.da&&0===a.w)return[Na().cd,Na().cd];if(vp(b,Na().xg))return vp(a,Na().xg)?[Na().Ak,Na().cd]:[Na().cd,a];var c=0!==(524288&a.w),e=0!==(524288&b.w),f=vp(a,Na().xg),h=0===b.w&&0===b.da&&0!==b.la&&0===(b.la&(-1+b.la|0))?Sh(mg(),b.la):0===b.w&&0!==b.da&&0===b.la&&0===(b.da&(-1+b.da|0))?22+Sh(mg(),b.da)|0:0!==b.w&&0===b.da&&0===b.la&&0===(b.w&(-1+b.w|0))?44+Sh(mg(),b.w)|0:-1;if(0<=h){if(f)return c=dq(a,h),[e?
+Vh(c):c,Na().cd];var f=0!==(524288&a.w)?Vh(a):a,l=dq(f,h),e=c!==e?Vh(l):l,f=22>=h?(new U).j(f.la&(-1+(1<<h)|0),0,0):44>=h?(new U).j(f.la,f.da&(-1+(1<<(-22+h|0))|0),0):(new U).j(f.la,f.da,f.w&(-1+(1<<(-44+h|0))|0)),c=c?Vh(f):f;return[e,c]}h=0!==(524288&b.w)?Vh(b):b;if(f)var q=Na().yk;else{var r=0!==(524288&a.w)?Vh(a):a;if(vo(h,r))return[Na().cd,a];q=r}var r=tt(h)-tt(q)|0,B=Zo(h,r),h=r,r=B,B=q,q=Na().cd;a:for(;;){if(0>h)var M=!0;else M=B,M=0===M.la&&0===M.da&&0===M.w;if(M){var aa=q,l=B;break a}else M=
+Xh(B,Vh(r)),0===(524288&M.w)?(B=-1+h|0,r=dq(r,1),q=22>h?(new U).j(q.la|1<<h,q.da,q.w):44>h?(new U).j(q.la,q.da|1<<(-22+h|0),q.w):(new U).j(q.la,q.da,q.w|1<<(-44+h|0)),h=B,B=M):(h=-1+h|0,r=dq(r,1))}e=c!==e?Vh(aa):aa;c&&f?(c=Vh(l),f=Na().Ak,c=Xh(c,Vh(f))):c=c?Vh(l):l;return[e,c]}function $o(a,b){return(new U).j(a.la&b.la,a.da&b.da,a.w&b.w)}
+function bp(a,b){var c=63&b;if(22>c){var e=22-c|0;return(new U).j(4194303&(a.la>>c|a.da<<e),4194303&(a.da>>c|a.w<<e),1048575&(a.w>>>c|0))}return 44>c?(e=-22+c|0,(new U).j(4194303&(a.da>>e|a.w<<(44-c|0)),4194303&(a.w>>>e|0),0)):(new U).j(4194303&(a.w>>>(-44+c|0)|0),0,0)}function vo(a,b){return 0===(524288&a.w)?0!==(524288&b.w)||a.w>b.w||a.w===b.w&&a.da>b.da||a.w===b.w&&a.da===b.da&&a.la>b.la:!(0===(524288&b.w)||a.w<b.w||a.w===b.w&&a.da<b.da||a.w===b.w&&a.da===b.da&&a.la<=b.la)}
+function Zo(a,b){var c=63&b;if(22>c){var e=22-c|0;return(new U).j(4194303&a.la<<c,4194303&(a.da<<c|a.la>>e),1048575&(a.w<<c|a.da>>e))}return 44>c?(e=-22+c|0,(new U).j(0,4194303&a.la<<e,1048575&(a.da<<e|a.la>>(44-c|0)))):(new U).j(0,0,1048575&a.la<<(-44+c|0))}function Tn(a){return a.la|a.da<<22}m.xa=function(a){U.prototype.j.call(this,4194303&a,4194303&a>>22,0>a?1048575:0);return this};
+function Vh(a){var b=4194303&(1+~a.la|0),c=4194303&(~a.da+(0===b?1:0)|0);return(new U).j(b,c,1048575&(~a.w+(0===b&&0===c?1:0)|0))}function Xh(a,b){var c=a.la+b.la|0,e=(a.da+b.da|0)+(c>>22)|0;return(new U).j(4194303&c,4194303&e,1048575&((a.w+b.w|0)+(e>>22)|0))}
+function dq(a,b){var c=63&b,e=0!==(524288&a.w),f=e?-1048576|a.w:a.w;if(22>c)return e=22-c|0,(new U).j(4194303&(a.la>>c|a.da<<e),4194303&(a.da>>c|f<<e),1048575&f>>c);if(44>c){var h=-22+c|0;return(new U).j(4194303&(a.da>>h|f<<(44-c|0)),4194303&f>>h,1048575&(e?1048575:0))}return(new U).j(4194303&f>>(-44+c|0),4194303&(e?4194303:0),1048575&(e?1048575:0))}function wp(a){return vp(a,Na().xg)?-9223372036854775E3:0!==(524288&a.w)?-wp(Vh(a)):a.la+4194304*a.da+17592186044416*a.w}
+function Un(a,b){return rt(a,b)[0]}function tt(a){return 0!==a.w?-12+Rh(mg(),a.w)|0:0!==a.da?10+Rh(mg(),a.da)|0:32+Rh(mg(),a.la)|0}m.Zn=function(){return wp(this)};m.ja=function(){return Tn(ap(this,bp(this,32)))};function ap(a,b){return(new U).j(a.la^b.la,a.da^b.da,a.w^b.w)}function vp(a,b){return a.la===b.la&&a.da===b.da&&a.w===b.w}function za(a){return!!(a&&a.a&&a.a.y.Oq)}m.a=new u({Oq:0},!1,"scala.scalajs.runtime.RuntimeLong",ci,{Oq:1,He:1,c:1,nc:1});
+function ut(){this.pJ=this.oJ=this.nJ=this.mJ=this.lJ=this.kJ=this.jJ=this.hJ=this.gJ=this.OI=this.NI=this.PH=this.OH=this.NH=0;this.wn=this.yk=this.xg=this.qu=this.Ak=this.cd=null}ut.prototype=new v;ut.prototype.b=function(){vt=this;this.cd=(new U).j(0,0,0);this.Ak=(new U).j(1,0,0);this.qu=(new U).j(4194303,4194303,1048575);this.xg=(new U).j(0,0,524288);this.yk=(new U).j(4194303,4194303,524287);this.wn=(new U).j(1755648,238,0);return this};function Id(){return Na().cd}
+function Bp(a,b){if(b!==b)return a.cd;if(-9223372036854775E3>b)return a.xg;if(9223372036854775E3<=b)return a.yk;if(0>b)return Vh(Bp(a,-b));var c=b,e=17592186044416<=c?c/17592186044416|0:0,c=c-17592186044416*e,f=4194304<=c?c/4194304|0:0;return(new U).j(c-4194304*f|0,f,e)}ut.prototype.a=new u({qG:0},!1,"scala.scalajs.runtime.RuntimeLong$",w,{qG:1,c:1,g:1,e:1});var vt=void 0;function Na(){vt||(vt=(new ut).b());return vt}function wt(){}wt.prototype=new v;function xt(){}m=xt.prototype=wt.prototype;
+m.b=function(){return this};m.h=function(a){return this.cb(a,bj().Zk)};m.dd=function(a){return+this.cb(a,bj().Zk)};m.r=k("\x3cfunction1\x3e");m.sf=function(a){return Lg(new Mg,this,a)};var yt=new u({Qb:0},!1,"scala.runtime.AbstractPartialFunction",w,{Qb:1,c:1,p:1,H:1});wt.prototype.a=yt;var Uk=new u({CG:0},!1,"scala.runtime.Nothing$",Yp,{CG:1,nb:1,c:1,e:1});function zt(){this.Fa=0;this.gp=this.Kj=this.Ml=this.Yg=this.zi=this.Bn=this.Dn=this.aj=this.An=this.Cn=this.Kw=this.wh=this.ag=null}
+zt.prototype=new v;m=zt.prototype;m.qh=function(){return+(At(this),NaN)};m.h=function(a){Bt(this,a)};m.dd=function(a){return+(Bt(this,a),NaN)};m.r=k("\x3cfunction0\x3e");function Bt(a,b){var c=a.Fa;switch(c){case 3:b.Si()?od(a.ag,b):(a.An=b.La(),a.Fa=6,At(a));break;case 6:b.Si()?od(a.ag,b):(a.Bn=b.La(),a.Fa=7,At(a));break;case 10:b.Si()?od(a.ag,b):(a.Cn=b.La(),a.Fa=13,At(a));break;case 9:b.Si()?od(a.ag,b):(a.Dn=b.La(),a.Fa=14,At(a));break;default:throw(new H).o(c);}}m.pi=function(){At(this)};
+function Gb(a,b,c,e,f){var h=new zt;h.zi=a;h.Yg=b;h.Ml=c;h.Kj=e;h.gp=f;h.Fa=0;h.ag=(new mc).b();h.wh=Rc().Ih;h.Kw=void 0;return h}m.Ed=function(){At(this)};
+function At(a){try{var b=a.Fa;switch(b){case 0:a.Fa=1;At(a);break;case 1:a.Fa=3;At(a);break;case 3:nc(a.gp).Je(a,a.wh);break;case 6:var c=a.An;a.Yg.beginPath();a.Yg.moveTo(+c.clientX-+Mb(Cb(),a.zi).left,+c.clientY-+Mb(Cb(),a.zi).top);lc(a.Ml,a.Kj).Je(a,a.wh);break;case 7:a.aj=a.Bn;a.Fa=8;At(a);break;case 8:a.Fa="mousemove"===a.aj.type?10:11;At(a);break;case 10:a.Yg.lineTo(+a.aj.clientX-+Mb(Cb(),a.zi).left,+a.aj.clientY-+Mb(Cb(),a.zi).top);a.Yg.stroke();lc(a.Ml,a.Kj).Je(a,a.wh);break;case 13:a.aj=
+a.Cn;a.Fa=8;At(a);break;case 11:a.Fa=12;At(a);break;case 12:a.Fa=9;At(a);break;case 9:a.Yg.fill();nc(a.Kj).Je(a,a.wh);break;case 14:a.Dn;a.Yg.clearRect(0,0,1E3,1E3);a.Fa=1;At(a);break;case 4:a.Fa=5;At(a);break;case 5:a.Fa=2;At(a);break;case 2:var e=a.ag,f=(new uj).o(void 0);od(e,f);break;default:throw(new H).o(b);}}catch(h){if(b=Ej(J(),h),null!==b)if(sl(Gj(),b))od(a.ag,pd(new qd,b));else throw I(J(),b);else throw h;}}
+m.a=new u({Sr:0},!1,"advanced.Async$stateMachine$macro$1$1",w,{Sr:1,c:1,p:1,Np:1,$e:1});function Ct(){this.sp=null}Ct.prototype=new Yq;function Dt(){}Dt.prototype=Ct.prototype;Ct.prototype.sl=function(a){this.sp=a;return this};var Et=new u({tk:0},!1,"java.io.FilterOutputStream",Zq,{tk:1,$h:1,c:1,nh:1,Zh:1});Ct.prototype.a=Et;function Ft(){this.le=0;this.rg=null}Ft.prototype=new v;m=Ft.prototype;m.Aa=function(){return this};m.ia=function(){var a=this.rg.Pl.h(this.le);this.le=1+this.le|0;return a};
+m.m=function(){return!this.qa()};function Qe(a){var b=new Ft;if(null===a)throw I(J(),null);b.rg=a;b.le=0;return b}m.Yf=function(a){return Ym(this,"",a,"")};m.r=function(){return lm(this)};m.A=function(a){mm(this,a)};m.Ec=function(a,b){return Wm(this,a,b)};m.z=function(){return $m(this)};m.qa=function(){return this.le<this.rg.Mj};m.Xf=function(a){return Rm(this,a)};m.kc=function(){return hm(this)};m.hf=function(a,b,c,e){return Am(this,a,b,c,e)};m.Wf=function(a){return Xm(this,a)};
+m.pg=function(a,b){return Wm(this,a,b)};m.sd=function(){var a=Fd(),a=Gd(a);return Sm(this,a)};m.Re=function(a){return Tm(this,a)};m.Uc=function(a){return Ml(this,a)};m.a=new u({ks:0},!1,"org.scalajs.dom.ext.EasySeq$$anon$1",w,{ks:1,c:1,ec:1,t:1,s:1});function Qg(a){return"string"===typeof a}var ma=new u({Ju:0},!1,"java.lang.String",w,{Ju:1,c:1,e:1,Ro:1,nc:1},Qg);function Sn(){Wp.call(this)}Sn.prototype=new jr;Sn.prototype.o=function(a){Sn.prototype.f.call(this,ka(a));return this};
+Sn.prototype.a=new u({cy:0},!1,"java.lang.AssertionError",kr,{cy:1,Hj:1,nb:1,c:1,e:1});function Gt(){}Gt.prototype=new Yq;Gt.prototype.a=new u({qy:0},!1,"java.lang.JSConsoleBasedPrintStream$DummyOutputStream",Zq,{qy:1,$h:1,c:1,nh:1,Zh:1});function Sr(){Wp.call(this)}Sr.prototype=new lr;function Ht(){}Ht.prototype=Sr.prototype;Sr.prototype.b=function(){Sr.prototype.hd.call(this,null,null);return this};Sr.prototype.f=function(a){Sr.prototype.hd.call(this,a,null);return this};
+var It=new u({Gc:0},!1,"java.lang.RuntimeException",mr,{Gc:1,Nb:1,nb:1,c:1,e:1});Sr.prototype.a=It;function or(){this.Gb=null}or.prototype=new v;m=or.prototype;m.b=function(){or.prototype.f.call(this,"");return this};function Jt(a,b){a.Gb=""+a.Gb+(null===b?"null":b);return a}m.Uq=function(a,b){return this.Gb.substring(a,b)};m.r=g("Gb");function Kt(a){var b=new or;or.prototype.f.call(b,ka(a));return b}m.Ek=function(a){return Lt(this,a)};function Lt(a,b){return null===b?Jt(a,null):Jt(a,ka(b))}
+m.xa=function(){or.prototype.f.call(this,"");return this};function Mt(a,b,c,e){return null===b?Mt(a,"null",c,e):Jt(a,ka(Ia(b,c,e)))}m.ba=function(){return this.Gb.length|0};function Nt(a,b){var c=(new ig).rb(b).l;return Jt(a,n.String.fromCharCode(c))}m.f=function(a){this.Gb=a;return this};m.Dk=function(a){return Nt(this,a)};
+function Ot(a){for(var b=a.Gb,c="",e=0;e<(b.length|0);){var f=65535&(b.charCodeAt(e)|0);if(55296===(64512&f)&&(1+e|0)<(b.length|0)){var h=65535&(b.charCodeAt(1+e|0)|0);56320===(64512&h)?(f=(new ig).rb(f).l,f=n.String.fromCharCode(f),h=(new ig).rb(h).l,c=""+f+n.String.fromCharCode(h)+c,e=2+e|0):(h=(new ig).rb(f).l,c=""+n.String.fromCharCode(h)+c,e=1+e|0)}else h=(new ig).rb(f).l,c=""+n.String.fromCharCode(h)+c,e=1+e|0}a.Gb=c;return a}
+m.a=new u({wy:0},!1,"java.lang.StringBuilder",w,{wy:1,c:1,Ro:1,Qo:1,e:1});function Oj(){Wp.call(this)}Oj.prototype=new lr;Oj.prototype.a=new u({Ny:0},!1,"java.util.concurrent.ExecutionException",mr,{Ny:1,Nb:1,nb:1,c:1,e:1});function Pt(){this.Ti=Id()}Pt.prototype=new ai;Pt.prototype.rl=function(a){this.Ti=a;return this};Pt.prototype.r=function(){return this.Ti.r()};Pt.prototype.Zn=function(){return wp(this.Ti)};
+Pt.prototype.a=new u({Wy:0},!1,"java.util.concurrent.atomic.AtomicLong",ci,{Wy:1,He:1,c:1,g:1,e:1});function Qt(){this.Gw=this.Hw=this.Fw=this.Ew=this.Dw=this.Cw=this.Bw=this.Aw=this.zw=null}Qt.prototype=new Mi;Qt.prototype.b=function(){Rt=this;this.zw=s(x(Ta),[0]);this.Aw=s(x(Va),[0]);this.Bw=s(x(Ua),[0]);this.Cw=s(x(ab),[0]);this.Dw=s(x($a),[0]);this.Ew=s(x(Ya),[0]);this.Fw=s(x(Za),[0]);this.Hw=s(x(Xa),[0]);this.Gw=s(x(w),[0]);return this};
+function Ee(a,b,c){a=c.pc(b.ba());c=c=0;for(b=b.ga();b.qa();){var e=b.ia();Ql(W(),a,c,e);c=1+c|0}return a}
+function St(a,b,c,e,f,h){a=la(b);var l;if(l=!!a.Zd.isArrayClass)l=la(e),l.Zd.isPrimitive||a.Zd.isPrimitive?a=l===a||(l===t(Xa)?a===t(Va):l===t(Ya)?a===t(Va)||a===t(Xa):l===t($a)?a===t(Va)||a===t(Xa)||a===t(Ya):l===t(ab)&&(a===t(Va)||a===t(Xa)||a===t(Ya)||a===t($a))):(a=a.Zd.getFakeInstance(),a=!!l.Zd.isInstance(a)),l=a;if(l)Ja(b,c,e,f,h);else for(a=c,c=c+h|0;a<c;){W();h=e;l=f;var q;W();q=b;var r=a;if(mb(q,1)||fb(q,1)||ib(q,1)||gb(q,1)||hb(q,1))q=q.d[r];else if(cb(q,1))q=(new ig).rb(q.d[r]);else if(db(q,
+1)||eb(q,1)||bb(q,1)||Ho(q))q=q.d[r];else{if(null===q)throw(new ya).b();throw(new H).o(q);}Ql(0,h,l,q);a=1+a|0;f=1+f|0}}Qt.prototype.a=new u({NB:0},!1,"scala.Array$",Ni,{NB:1,Mp:1,c:1,g:1,e:1});var Rt=void 0;function Fe(){Rt||(Rt=(new Qt).b());return Rt}function Tt(){Wp.call(this)}Tt.prototype=new jr;Tt.prototype.b=function(){Tt.prototype.f.call(this,"an implementation is missing");return this};Tt.prototype.a=new u({TB:0},!1,"scala.NotImplementedError",kr,{TB:1,Hj:1,nb:1,c:1,e:1});
+function Ut(){}Ut.prototype=new v;function Vt(){}Vt.prototype=Ut.prototype;Ut.prototype.b=function(){return this};Ut.prototype.dd=ba();Ut.prototype.r=k("\x3cfunction1\x3e");var Wt=new u({Qp:0},!1,"scala.Predef$$eq$colon$eq",w,{Qp:1,c:1,p:1,g:1,e:1});Ut.prototype.a=Wt;function Xt(){}Xt.prototype=new v;function Yt(){}Yt.prototype=Xt.prototype;Xt.prototype.b=function(){return this};Xt.prototype.dd=ba();Xt.prototype.r=k("\x3cfunction1\x3e");
+var Zt=new u({Rp:0},!1,"scala.Predef$$less$colon$less",w,{Rp:1,c:1,p:1,g:1,e:1});Xt.prototype.a=Zt;function $t(){this.Rk=null}$t.prototype=new Qi;$t.prototype.a=new u({hC:0},!1,"scala.Symbol$",Ui,{hC:1,Op:1,c:1,g:1,e:1});var au=void 0;function bu(){this.vf=null}bu.prototype=new v;bu.prototype.b=function(){cu=this;this.vf=(new ki).b();return this};bu.prototype.Jh=function(a){throw(new Hj).hd("problem in scala.concurrent internal callback",a);};
+bu.prototype.xj=function(a){if(a&&a.a&&a.a.y.qC){var b=this.vf.La();null===b?(rf(),a=(new z).k([a]),b=rf().ka,js(new is,this,sf(a,b)).uf()):Vd(this.vf,Td(new Ud,a,b))}else a.uf()};bu.prototype.a=new u({pC:0},!1,"scala.concurrent.Future$InternalCallbackExecutor$",w,{pC:1,c:1,Vp:1,wK:1,$o:1});var cu=void 0;function Dj(){cu||(cu=(new bu).b());return cu}function ok(){}ok.prototype=new v;ok.prototype.b=function(){nk=this;return this};
+ok.prototype.a=new u({DC:0},!1,"scala.math.Equiv$",w,{DC:1,c:1,yK:1,g:1,e:1});var nk=void 0;function wk(){}wk.prototype=new v;wk.prototype.b=function(){vk=this;return this};wk.prototype.a=new u({OC:0},!1,"scala.math.Ordering$",w,{OC:1,c:1,zK:1,g:1,e:1});var vk=void 0;function du(){this.HH=this.Wg=null}du.prototype=new $p;du.prototype.a=new u({VC:0},!1,"scala.ref.WeakReferenceWithWrapper",aq,{VC:1,Xo:1,Bl:1,c:1,OK:1});function cs(){}cs.prototype=new v;cs.prototype.r=k("\x3c?\x3e");
+cs.prototype.a=new u({nD:0},!1,"scala.reflect.NoManifest$",w,{nD:1,c:1,qc:1,g:1,e:1});var bs=void 0;function bd(){this.Sd=null}bd.prototype=new Es;bd.prototype.a=new u({uD:0},!1,"scala.util.Random$",Fs,{uD:1,aq:1,c:1,g:1,e:1});var ad=void 0;function eu(){}eu.prototype=new v;function fu(){}m=fu.prototype=eu.prototype;m.Aa=function(){return this};m.b=function(){return this};m.m=function(){return!this.qa()};m.Yf=function(a){return Ym(this,"",a,"")};m.r=function(){return lm(this)};
+m.A=function(a){mm(this,a)};m.Ec=function(a,b){return Wm(this,a,b)};m.z=function(){return $m(this)};m.Xf=function(a){return Rm(this,a)};m.kc=function(){return hm(this)};m.hf=function(a,b,c,e){return Am(this,a,b,c,e)};m.Wf=function(a){return Xm(this,a)};m.pg=function(a,b){return Wm(this,a,b)};m.sd=function(){var a=Fd(),a=Gd(a);return Sm(this,a)};m.Re=function(a){return Tm(this,a)};m.Uc=function(a){return Ml(this,a)};var gu=new u({rc:0},!1,"scala.collection.AbstractIterator",w,{rc:1,c:1,ec:1,t:1,s:1});
+eu.prototype.a=gu;function hu(){}hu.prototype=new vq;function iu(){}iu.prototype=hu.prototype;var ju=new u({ch:0},!1,"scala.collection.generic.SetFactory",wq,{ch:1,eg:1,Xa:1,c:1,ob:1});hu.prototype.a=ju;function ku(){this.rm=this.Ua=null}ku.prototype=new v;function lu(a){a=a.Ua;var b=mu();for(a=a.Wa;!a.m();){var c=a.x(),b=nu(b,c);a=a.u()}return b}m=ku.prototype;m.b=function(){ku.prototype.Qf.call(this,mu());return this};m.Sb=function(a){return ou(this,a)};
+m.Qf=function(a){var b=ps((new os).b(),a);this.Ua=Em(b);b=(new pu).b();this.rm=ef(b,a);return this};m.oa=function(){return lu(this)};m.Mc=function(a,b){Qn(this,a,b)};m.za=function(a){return ou(this,a)};m.vb=da();function ou(a,b){null===$n(a.rm,b)&&(qu(a.Ua,b),ru(a.rm,b));return a}m.hb=function(a){return ef(this,a)};m.a=new u({tE:0},!1,"scala.collection.immutable.ListSet$ListSetBuilder",w,{tE:1,c:1,Pb:1,Kb:1,Jb:1});function as(){}as.prototype=new at;as.prototype.ao=function(){return ph()};
+as.prototype.a=new u({vE:0},!1,"scala.collection.immutable.Map$",bt,{vE:1,em:1,ck:1,ej:1,c:1});var $r=void 0;function po(){this.Kd=this.l=this.Tf=null}po.prototype=new v;function su(a){return"(kv: "+a.Tf+", "+a.l+")"+(null!==a.Kd?" -\x3e "+su(a.Kd):"")}po.prototype.v=function(a,b){this.Tf=a;this.l=b;return this};po.prototype.r=function(){return su(this)};po.prototype.a=new u({hF:0},!1,"scala.collection.mutable.DefaultEntry",w,{hF:1,c:1,Dq:1,g:1,e:1});function tu(){this.Ua=this.Dc=null}
+tu.prototype=new v;function uu(a,b){a.Dc=b;a.Ua=b;return a}m=tu.prototype;m.Sb=function(a){this.Ua.Sb(a);return this};m.oa=g("Ua");m.Mc=function(a,b){Qn(this,a,b)};m.za=function(a){this.Ua.Sb(a);return this};m.vb=da();m.hb=function(a){return ef(this,a)};m.a=new u({lF:0},!1,"scala.collection.mutable.GrowingBuilder",w,{lF:1,c:1,Pb:1,Kb:1,Jb:1});function vu(){this.Md=null}vu.prototype=new v;function wu(){}m=wu.prototype=vu.prototype;m.b=function(){this.Md=(new os).b();return this};
+m.Sb=function(a){return xu(this,a)};function xu(a,b){var c=a.Md;rf();var e=(new z).k([b]),f=rf().ka;qu(c,sf(e,f));return a}m.Mc=function(a,b){Qn(this,a,b)};m.za=function(a){return xu(this,a)};m.vb=da();m.hb=function(a){qu(this.Md,a);return this};var yu=new u({Eq:0},!1,"scala.collection.mutable.LazyBuilder",w,{Eq:1,c:1,Pb:1,Kb:1,Jb:1});vu.prototype.a=yu;function nj(){this.Ua=this.Dc=null}nj.prototype=new v;function oj(a,b){a.Ua=a.Ua.fe(b);return a}m=nj.prototype;m.Sb=function(a){return oj(this,a)};
+m.oa=g("Ua");m.Mc=function(a,b){Qn(this,a,b)};function mj(a,b){a.Dc=b;a.Ua=b;return a}m.za=function(a){return oj(this,a)};m.vb=da();m.hb=function(a){return ef(this,a)};m.a=new u({yF:0},!1,"scala.collection.mutable.MapBuilder",w,{yF:1,c:1,Pb:1,Kb:1,Jb:1});function cr(){this.Ua=this.Dc=null}cr.prototype=new v;m=cr.prototype;m.Sb=function(a){return dr(this,a)};m.oa=g("Ua");m.Mc=function(a,b){Qn(this,a,b)};function dr(a,b){a.Ua=a.Ua.Xd(b);return a}function br(a,b){a.Dc=b;a.Ua=b;return a}
+m.za=function(a){return dr(this,a)};m.vb=da();m.hb=function(a){return ef(this,a)};m.a=new u({DF:0},!1,"scala.collection.mutable.SetBuilder",w,{DF:1,c:1,Pb:1,Kb:1,Jb:1});function zu(){this.Ua=this.qz=this.ue=null;this.te=this.jf=0}zu.prototype=new v;m=zu.prototype;m.ul=function(a){this.qz=this.ue=a;this.te=this.jf=0;return this};m.Sb=function(a){return Au(this,a)};
+function Au(a,b){var c=1+a.te|0;if(a.jf<c){for(var e=0===a.jf?16:y(2,a.jf);e<c;)e=y(2,e);c=e;a.Ua=Bu(a,c);a.jf=c}a.Ua.Te(a.te,b);a.te=1+a.te|0;return a}
+function Bu(a,b){var c=Ik(W(),a.ue);if(c===t(Va)){var c=new Eo,e=s(x(Va),[b]);c.q=e}else c===t(Xa)?(c=new Fo,e=s(x(Xa),[b]),c.q=e):c===t(Ua)?(c=new Do,e=s(x(Ua),[b]),c.q=e):c===t(Ya)?(c=new zo,e=s(x(Ya),[b]),c.q=e):c===t(Za)?(c=new Bo,e=s(x(Za),[b]),c.q=e):c===t($a)?(c=new Co,e=s(x($a),[b]),c.q=e):c===t(ab)?(c=new Ao,e=s(x(ab),[b]),c.q=e):c===t(Ta)?(c=new Go,e=s(x(Ta),[b]),c.q=e):c===t(Sa)?(c=new Io,e=s(x(xa),[b]),c.q=e):c=zc(new Ac,a.ue.pc(b));0<a.te&&St(Fe(),a.Ua.q,0,c.q,0,a.te);return c}
+m.oa=function(){return 0!==this.jf&&this.jf===this.te?this.Ua:Bu(this,this.te)};m.Mc=function(a,b){Qn(this,a,b)};m.za=function(a){return Au(this,a)};m.vb=function(a){this.jf<a&&(this.Ua=Bu(this,a),this.jf=a)};m.hb=function(a){return ef(this,a)};m.a=new u({RF:0},!1,"scala.collection.mutable.WrappedArrayBuilder",w,{RF:1,c:1,Pb:1,Kb:1,Jb:1});function Oo(){}Oo.prototype=new v;Oo.prototype.b=function(){No=this;return this};
+Oo.prototype.Jh=function(a){var b=Vr().el.qd.La();a="Failure in async execution: "+a;Cu(b,null===a?"null":a);Cu(b,"\n")};Oo.prototype.xj=function(a){n.setTimeout(function(a,c){return function(){try{c.uf()}catch(e){var f=Ej(J(),e);if(null!==f)a.Jh(f);else throw e;}}}(this,a),0)};Oo.prototype.a=new u({fG:0},!1,"scala.scalajs.concurrent.QueueExecutionContext$",w,{fG:1,c:1,mC:1,Vp:1,$o:1});var No=void 0;function Mo(){}Mo.prototype=new v;Mo.prototype.b=function(){Lo=this;return this};
+Mo.prototype.Jh=function(a){var b=Vr().el.qd.La();a="Failure in async execution: "+a;Cu(b,null===a?"null":a);Cu(b,"\n")};Mo.prototype.xj=function(a){try{a.uf()}catch(b){if(a=Ej(J(),b),null!==a)this.Jh(a);else throw b;}};Mo.prototype.a=new u({gG:0},!1,"scala.scalajs.concurrent.RunNowExecutionContext$",w,{gG:1,c:1,mC:1,Vp:1,$o:1});var Lo=void 0;function Du(){this.Dl=this.Nn=null;this.le=0}Du.prototype=new v;m=Du.prototype;m.ia=function(){return this.Nl()};m.Aa=function(){return this};m.m=function(){return!this.qa()};
+m.Dh=function(a){this.Nn=a;this.Dl=n.Object.keys(a);this.le=0;return this};m.Yf=function(a){return Ym(this,"",a,"")};m.r=function(){return lm(this)};m.A=function(a){mm(this,a)};m.Ec=function(a,b){return Wm(this,a,b)};m.z=function(){return $m(this)};m.Nl=function(){var a=this.Dl[this.le];this.le=1+this.le|0;var b=this.Nn;if(Si().$g.call(b,a))b=b[a];else throw(new V).f("key not found: "+a);return(new A).v(a,b)};m.qa=function(){return this.le<(this.Dl.length|0)};m.Xf=function(a){return Rm(this,a)};
+m.kc=function(){return hm(this)};m.hf=function(a,b,c,e){return Am(this,a,b,c,e)};m.Wf=function(a){return Xm(this,a)};m.pg=function(a,b){return Wm(this,a,b)};m.sd=function(){var a=Fd(),a=Gd(a);return Sm(this,a)};m.Re=function(a){return Tm(this,a)};m.Uc=function(a){return Ml(this,a)};m.a=new u({lG:0},!1,"scala.scalajs.js.WrappedDictionary$DictionaryIterator",w,{lG:1,c:1,ec:1,t:1,s:1});function Eu(){}Eu.prototype=new Nq;function Fu(){}Fu.prototype=Eu.prototype;
+var Gu=new u({Pq:0},!1,"scala.runtime.AbstractFunction0$mcD$sp",Oq,{Pq:1,jg:1,c:1,$e:1,PB:1});Eu.prototype.a=Gu;function Hu(){}Hu.prototype=new Nq;function Iu(){}Iu.prototype=Hu.prototype;var Ju=new u({Qq:0},!1,"scala.runtime.AbstractFunction0$mcI$sp",Oq,{Qq:1,jg:1,c:1,$e:1,QB:1});Hu.prototype.a=Ju;function Ku(){}Ku.prototype=new Nq;function Lu(){}Lu.prototype=Ku.prototype;var Mu=new u({Rq:0},!1,"scala.runtime.AbstractFunction0$mcV$sp",Oq,{Rq:1,jg:1,c:1,$e:1,Np:1});Ku.prototype.a=Mu;
+function gc(){this.Ep=null}gc.prototype=new Qq;gc.prototype.h=function(a){return Nu(this,a)};gc.prototype.tl=function(a){this.Ep=a;return this};function Nu(a,b){Qb().fi;return(new Tb).Ng(Rb(function(a,b){return function(){var f=b.toLowerCase(),h=Vb(a.Ep);if(f.substring(0,h.length|0)===h)return F(E().Ic,(new z).k([(E(),(new G).f(b))]));var f=E().Ic,h=yf(),l=E().Vd;return F(f,(new z).k([N(new O,h,"none",l)]))}}(a,b)),(Wb(),""))}
+gc.prototype.a=new u({Wr:0},!1,"advanced.BasicRx$$anonfun$6",Rq,{Wr:1,Nc:1,c:1,p:1,g:1,e:1});function Ou(){this.fr=this.er=null}Ou.prototype=new Qq;Ou.prototype.h=function(a){this.Gk(a)};function Zb(a,b){var c=new Ou;c.er=a;c.fr=b;return c}Ou.prototype.Gk=function(){var a=this.er;Rp();var b=a.Fa;try{var c=(new uj).o(this.fr.value)}catch(e){if(c=Ej(J(),e),null!==c){var f=Fj(Gj(),c);if(f.m())throw I(J(),c);c=f.La();c=pd(new qd,c)}else throw e;}b.l=c;Pd(a)};
+Ou.prototype.a=new u({Xr:0},!1,"advanced.BasicRx$$anonfun$main$1",Rq,{Xr:1,Nc:1,c:1,p:1,g:1,e:1});function Pu(){this.gr=this.Dp=null}Pu.prototype=new Qq;function fc(a,b){var c=new Pu;c.Dp=a;c.gr=b;return c}Pu.prototype.h=function(a){this.Gk(a)};Pu.prototype.Gk=function(){var a=this.Dp;Rp();var b=a.Fa;try{var c=(new uj).o(this.gr.value)}catch(e){if(c=Ej(J(),e),null!==c){var f=Fj(Gj(),c);if(f.m())throw I(J(),c);c=f.La();c=pd(new qd,c)}else throw e;}b.l=c;Pd(a)};
+Pu.prototype.a=new u({Yr:0},!1,"advanced.BasicRx$$anonfun$main2$1",Rq,{Yr:1,Nc:1,c:1,p:1,g:1,e:1});function Qu(){this.yp=null}Qu.prototype=new Qq;Qu.prototype.h=function(a){Ru(this,a)};function oc(a){var b=new Qu;b.yp=a;return b}function Ru(a,b){var c=C(function(a){return function(b){return a.yp.kk((new uj).o(b))}}(a)),e=Rc().Ih;Sc(b,c,e)}Qu.prototype.a=new u({$r:0},!1,"advanced.Channel$$anonfun$$bar$1",Rq,{$r:1,Nc:1,c:1,p:1,g:1,e:1});function Pc(){}Pc.prototype=new Qq;Pc.prototype.h=function(a){return Su(a)};
+function Su(a){sd();var b=Dc(Hc(),a),c=ph(),b=ld(b,c);a=C(function(a){return function(b){return(new A).v(a,Cc(Hc(),b.responseText))}}(a));c=Rc().Nd;return rj(b,a,c)}Pc.prototype.a=new u({bs:0},!1,"advanced.Futures$$anonfun$1",Rq,{bs:1,Nc:1,c:1,p:1,g:1,e:1});function Lc(){this.Qj=this.up=this.kp=null}Lc.prototype=new Qq;Lc.prototype.h=function(a){this.Jk(a)};
+Lc.prototype.Jk=function(a){var b=new n.XMLHttpRequest;b.open("GET",Dc(Hc(),a));b.onload=function(a,b,f){return function(){var h=Cc(Hc(),b.responseText);a.Qj.hb((new z).k([(new A).v(f,h)]));return a.Qj.ba()===a.kp.ba()?Oc(Hc(),a.up,a.Qj):void 0}}(this,b,a);b.send()};Lc.prototype.vl=function(a,b,c){this.kp=a;this.up=b;this.Qj=c;return this};Lc.prototype.a=new u({cs:0},!1,"advanced.Futures$$anonfun$advanced$Futures$$handle0$1$1",Rq,{cs:1,Nc:1,c:1,p:1,g:1,e:1});
+function Nc(){this.Rj=this.vp=this.lp=null}Nc.prototype=new Qq;Nc.prototype.h=function(a){this.Jk(a)};Nc.prototype.Jk=function(a){sd();var b=Dc(Hc(),a),c=ph(),b=ld(b,c);a=C(function(a,b){return function(c){c=Cc(Hc(),c.responseText);a.Rj.hb((new z).k([(new A).v(b,c)]));return a.Rj.ba()===a.lp.ba()?Oc(Hc(),a.vp,a.Rj):void 0}}(this,a));c=Rc().Nd;Sc(b,a,c)};Nc.prototype.vl=function(a,b,c){this.lp=a;this.vp=b;this.Rj=c;return this};
+Nc.prototype.a=new u({ds:0},!1,"advanced.Futures$$anonfun$advanced$Futures$$handle1$1$1",Rq,{ds:1,Nc:1,c:1,p:1,g:1,e:1});function Op(){}Op.prototype=new Qq;Op.prototype.h=function(a){return Tu(a)};function Tu(a){if(null!==a){var b=a.va;a=b.Sl(a.wa,Rp());var b=C(function(a){return function(b){return(new A).v(a,b)}}(b)),c=Fd(),c=Gd(c);return Qd(a,b,c)}throw(new H).o(a);}Op.prototype.a=new u({us:0},!1,"rx.core.Propagator$Immediate$$anonfun$10",Rq,{us:1,Nc:1,c:1,p:1,g:1,e:1});function Lp(){}
+Lp.prototype=new Qq;Lp.prototype.h=function(a){return Uu(a)};function Uu(a){var b=C(function(a){return a.va}),c=Fd(),c=Gd(c);return Qd(a,b,c)}Lp.prototype.a=new u({vs:0},!1,"rx.core.Propagator$Immediate$$anonfun$9",Rq,{vs:1,Nc:1,c:1,p:1,g:1,e:1});function Sb(){this.Fa=this.oc=null;this.cj=!1;this.bj=null}Sb.prototype=new v;m=Sb.prototype;m.Xi=function(){return ar()};m.Rg=function(){return Id()};m.Zl=d("bj");
+m.Ng=function(a,b){this.oc=b;this.Zl((new Vu).o(ar()));this.cj=!0;this.Fa=(new Lr).o(ml(ol(),a));return this};m.cr=function(){return this.Fa.l};m.Sl=function(){return Ed(this)};m.a=new u({ys:0},!1,"rx.core.Var",w,{ys:1,c:1,ws:1,qs:1,Xm:1,Ym:1});function Wu(){}Wu.prototype=new v;m=Wu.prototype;m.b=function(){Xu=this;return this};m.h=function(a){return(new Yu).f(a)};m.dd=function(a){return+(new Yu).f(a)};m.r=k("\x3cfunction1\x3e");
+m.a=new u({Hs:0},!1,"scalatags.JsDom$RawFrag$",w,{Hs:1,c:1,lt:1,p:1,g:1,e:1});var Xu=void 0;function Zu(){}Zu.prototype=new v;m=Zu.prototype;m.b=function(){$u=this;return this};m.h=function(a){return(new G).f(a)};m.dd=function(a){return+(new G).f(a)};m.r=k("\x3cfunction1\x3e");m.a=new u({Is:0},!1,"scalatags.JsDom$StringFrag$",w,{Is:1,c:1,lt:1,p:1,g:1,e:1});var $u=void 0;function ue(){this.oc=null}ue.prototype=new v;m=ue.prototype;m.gb=k("Attr");m.eb=k(1);
+m.fa=function(a){return this===a?!0:a&&a.a&&a.a.y.cn?this.oc===a.oc:!1};m.fb=function(a){switch(a){case 0:return this.oc;default:throw(new X).f(""+a);}};m.r=function(){return Cp(W(),this)};m.f=function(a){this.oc=a;var b=ce();if(!ne(oe(b.Mk,a)))throw(new pe).f(qe((new re).jb((new z).k(["Illegal attribute name: "," is not a valid XML attribute name"])),(new z).k([a])));return this};m.ja=function(){return yl(this)};m.kb=function(){return av(this)};
+m.a=new u({cn:0},!1,"scalatags.generic.Attr",w,{cn:1,c:1,ua:1,n:1,g:1,e:1});function bv(){this.Ke=this.Be=this.of=null}bv.prototype=new v;function cv(){}m=cv.prototype=bv.prototype;m.gb=k("PixelStyle");m.ma=function(a,b){this.of=a;this.Be=b;this.Ke=(new $).ma(a,b);return this};m.eb=k(2);m.fa=function(a){return this===a?!0:a&&a.a&&a.a.y.ph?this.of===a.of&&this.Be===a.Be:!1};m.fb=function(a){switch(a){case 0:return this.of;case 1:return this.Be;default:throw(new X).f(""+a);}};
+m.r=function(){return Cp(W(),this)};m.ja=function(){return yl(this)};m.kb=function(){return av(this)};var dv=new u({ph:0},!1,"scalatags.generic.PixelStyle",w,{ph:1,c:1,ua:1,n:1,g:1,e:1});bv.prototype.a=dv;function $(){this.Be=this.of=null}$.prototype=new v;function ev(){}m=ev.prototype=$.prototype;m.ma=function(a,b){this.of=a;this.Be=b;return this};m.gb=k("Style");m.eb=k(2);m.fa=function(a){return this===a?!0:a&&a.a&&a.a.y.bd?this.of===a.of&&this.Be===a.Be:!1};
+m.fb=function(a){switch(a){case 0:return this.of;case 1:return this.Be;default:throw(new X).f(""+a);}};m.r=function(){return Cp(W(),this)};m.ja=function(){return yl(this)};m.kb=function(){return av(this)};var fv=new u({bd:0},!1,"scalatags.generic.Style",w,{bd:1,c:1,ua:1,n:1,g:1,e:1});$.prototype.a=fv;function gv(){this.Mf=this.Tc=null;this.ke=this.Qe=0}gv.prototype=new v;m=gv.prototype;m.gb=k("MenuNode");m.eb=k(4);
+m.fa=function(a){return this===a?!0:a&&a.a&&a.a.y.hn?S(T(),this.Tc,a.Tc)&&this.Mf===a.Mf&&this.Qe===a.Qe&&this.ke===a.ke:!1};m.fb=function(a){switch(a){case 0:return this.Tc;case 1:return this.Mf;case 2:return this.Qe;case 3:return this.ke;default:throw(new X).f(""+a);}};m.r=function(){return Cp(W(),this)};function Af(a,b,c,e){var f=new gv;f.Tc=a;f.Mf=b;f.Qe=c;f.ke=e;return f}
+m.ja=function(){var a=-889275714,a=Hp().zd(a,Fp(Hp(),this.Tc)),a=Hp().zd(a,Fp(Hp(),this.Mf)),a=Hp().zd(a,this.Qe),a=Hp().zd(a,this.ke);return Hp().Kg(a,4)};m.kb=function(){return av(this)};m.a=new u({hn:0},!1,"scrollmenu.MenuNode",w,{hn:1,c:1,ua:1,n:1,g:1,e:1});function hv(){this.sa=null}hv.prototype=new Qq;hv.prototype.h=function(a){return iv(this,a)};function nf(a){var b=new hv;if(null===a)throw I(J(),null);b.sa=a;return b}
+function iv(a,b){return Rb(function(a,b){return function(){return af(a.sa,b,a.sa.qm)}}(a,b))}hv.prototype.a=new u({ot:0},!1,"scrollmenu.ScrollSpy$$anonfun$headers$2",Rq,{ot:1,Nc:1,c:1,p:1,g:1,e:1});function jv(){this.ql=null}jv.prototype=new Qq;jv.prototype.h=function(a){var b=this.ql.m()?wd():(new Bd).o(this.ql.x());b.m()?a=!1:(b=b.La(),a=S(T(),b.l.Tc,a.l.Tc));return!a};function xf(a){var b=new jv;b.ql=a;return b}
+jv.prototype.a=new u({pt:0},!1,"scrollmenu.ScrollSpy$$anonfun$walkTree$1$1",Rq,{pt:1,Nc:1,c:1,p:1,g:1,e:1});function De(){this.Ae=this.l=null}De.prototype=new v;m=De.prototype;m.gb=k("Tree");m.eb=k(2);m.fa=function(a){if(this===a)return!0;if(a&&a.a&&a.a.y.jn&&S(T(),this.l,a.l)){var b=this.Ae;a=a.Ae;return null===b?null===a:kv(a)?b.Wc(a):!1}return!1};m.fb=function(a){switch(a){case 0:return this.l;case 1:return this.Ae;default:throw(new X).f(""+a);}};m.r=function(){return Cp(W(),this)};m.ja=function(){return yl(this)};
+m.kb=function(){return av(this)};function Ce(a,b,c){a.l=b;a.Ae=c;return a}m.a=new u({jn:0},!1,"scrollmenu.Tree",w,{jn:1,c:1,ua:1,n:1,g:1,e:1});function lv(){}lv.prototype=new v;lv.prototype.b=function(){mv=this;return this};lv.prototype.we=function(a,b){return b.sf((new nv).f(a))};function Oe(a){a=Ne(a).sf((new ov).f("Tagged Object scrollmenu.Tree"));return(new Mf).Ge(a)}lv.prototype.a=new u({Gt:0},!1,"upickle.Internal$",w,{Gt:1,c:1,KI:1,rt:1,Wt:1,ut:1});var mv=void 0;
+function Ae(){mv||(mv=(new lv).b());return mv}function pv(){}pv.prototype=new Qq;m=pv.prototype;m.h=function(a){return(new Rg).jb(a)};m.Cm=function(a){return Cp(W(),(new Rg).jb(a))};m.Vl=function(a){return av((new Rg).jb(a))};m.r=k("Arr");m.Ul=function(a,b){switch(b){case 0:return a;default:throw(new X).f(""+b);}};m.dl=function(a,b){if(qv(b)){var c=null===b?null:b.l;return null===a?null===c:a.fa(c)}return!1};m.a=new u({Jt:0},!1,"upickle.Js$Arr$",Rq,{Jt:1,Nc:1,c:1,p:1,g:1,e:1});var rv=void 0;
+function sv(){rv||(rv=(new pv).b());return rv}function tv(){}tv.prototype=new Qq;tv.prototype.h=function(a){return(new Uf).Fe(+a)};tv.prototype.r=k("Num");tv.prototype.a=new u({Mt:0},!1,"upickle.Js$Num$",Rq,{Mt:1,Nc:1,c:1,p:1,g:1,e:1});var uv=void 0;function vv(){uv||(uv=(new tv).b())}function wv(){}wv.prototype=new Qq;m=wv.prototype;m.h=function(a){return(new Qf).jb(a)};m.Cm=function(a){return Cp(W(),(new Qf).jb(a))};m.Vl=function(a){return av((new Qf).jb(a))};m.r=k("Obj");
+m.Ul=function(a,b){switch(b){case 0:return a;default:throw(new X).f(""+b);}};m.dl=function(a,b){if(xv(b)){var c=null===b?null:b.l;return null===a?null===c:a.fa(c)}return!1};m.a=new u({Nt:0},!1,"upickle.Js$Obj$",Rq,{Nt:1,Nc:1,c:1,p:1,g:1,e:1});var yv=void 0;function zv(){yv||(yv=(new wv).b());return yv}function Av(){}Av.prototype=new Qq;Av.prototype.h=function(a){return(new Tf).f(a)};Av.prototype.cl=function(a,b){return Bv(b)?a===(null===b?null:b.l):!1};Av.prototype.r=k("Str");
+Av.prototype.a=new u({Ot:0},!1,"upickle.Js$Str$",Rq,{Ot:1,Nc:1,c:1,p:1,g:1,e:1});var Cv=void 0;function fg(){Cv||(Cv=(new Av).b());return Cv}function Dv(){this.kr=this.jr=this.ir=this.Br=this.Qm=this.Fr=this.Rm=this.Kr=this.rk=this.Ar=this.Gr=this.Tm=this.Lr=this.Cu=this.xr=this.yr=this.Iu=this.ii=this.Mu=this.wr=this.uu=this.tu=null}Dv.prototype=new v;Dv.prototype.b=function(){Ev=this;Yf(this);return this};Dv.prototype.we=function(a,b){return Ae().we(a,b)};
+Dv.prototype.a=new u({au:0},!1,"upickle.package$",w,{au:1,c:1,Wt:1,LI:1,rt:1,ut:1});var Ev=void 0;function xe(){Ev||(Ev=(new Dv).b());return Ev}function st(){Wp.call(this)}st.prototype=new Ht;st.prototype.a=new u({by:0},!1,"java.lang.ArithmeticException",It,{by:1,Gc:1,Nb:1,nb:1,c:1,e:1});function pe(){Wp.call(this)}pe.prototype=new Ht;function Fv(){}Fv.prototype=pe.prototype;pe.prototype.b=function(){pe.prototype.hd.call(this,null,null);return this};
+pe.prototype.f=function(a){pe.prototype.hd.call(this,a,null);return this};var Gv=new u({Pg:0},!1,"java.lang.IllegalArgumentException",It,{Pg:1,Gc:1,Nb:1,nb:1,c:1,e:1});pe.prototype.a=Gv;function Hj(){Wp.call(this)}Hj.prototype=new Ht;function Hv(){}Hv.prototype=Hj.prototype;Hj.prototype.b=function(){Hj.prototype.hd.call(this,null,null);return this};Hj.prototype.f=function(a){Hj.prototype.hd.call(this,a,null);return this};
+var Iv=new u({Uo:0},!1,"java.lang.IllegalStateException",It,{Uo:1,Gc:1,Nb:1,nb:1,c:1,e:1});Hj.prototype.a=Iv;function X(){Wp.call(this)}X.prototype=new Ht;X.prototype.a=new u({ly:0},!1,"java.lang.IndexOutOfBoundsException",It,{ly:1,Gc:1,Nb:1,nb:1,c:1,e:1});function ya(){Wp.call(this)}ya.prototype=new Ht;ya.prototype.b=function(){ya.prototype.f.call(this,null);return this};ya.prototype.a=new u({ty:0},!1,"java.lang.NullPointerException",It,{ty:1,Gc:1,Nb:1,nb:1,c:1,e:1});
+function vm(){Wp.call(this)}vm.prototype=new Ht;vm.prototype.f=function(a){vm.prototype.hd.call(this,a,null);return this};vm.prototype.a=new u({Ay:0},!1,"java.lang.UnsupportedOperationException",It,{Ay:1,Gc:1,Nb:1,nb:1,c:1,e:1});function V(){Wp.call(this)}V.prototype=new Ht;V.prototype.b=function(){V.prototype.f.call(this,null);return this};V.prototype.a=new u({Ky:0},!1,"java.util.NoSuchElementException",It,{Ky:1,Gc:1,Nb:1,nb:1,c:1,e:1});
+function H(){Wp.call(this);this.op=this.Wi=null;this.Ok=!1}H.prototype=new Ht;H.prototype.Mi=function(){if(!this.Ok&&!this.Ok){var a;if(null===this.Wi)a="null";else try{a=ka(this.Wi)+" ("+("of class "+lb(la(this.Wi)))+")"}catch(b){if(null!==Ej(J(),b))a="an instance of class "+lb(la(this.Wi));else throw b;}this.op=a;this.Ok=!0}return this.op};H.prototype.o=function(a){this.Wi=a;Sr.prototype.b.call(this);return this};H.prototype.a=new u({RB:0},!1,"scala.MatchError",It,{RB:1,Gc:1,Nb:1,nb:1,c:1,e:1});
+function Jv(){}Jv.prototype=new v;function Kv(){}Kv.prototype=Jv.prototype;Jv.prototype.b=function(){return this};Jv.prototype.lj=function(){return this.m()?K():Td(new Ud,this.La(),K())};function ne(a){return!a.m()}var Lv=new u({am:0},!1,"scala.Option",w,{am:1,c:1,ua:1,n:1,g:1,e:1});Jv.prototype.a=Lv;function ds(){}ds.prototype=new Yt;ds.prototype.h=ba();ds.prototype.a=new u({$B:0},!1,"scala.Predef$$anon$1",Zt,{$B:1,Rp:1,c:1,p:1,g:1,e:1});function es(){}es.prototype=new Vt;es.prototype.h=ba();
+es.prototype.a=new u({aC:0},!1,"scala.Predef$$anon$2",Wt,{aC:1,Qp:1,c:1,p:1,g:1,e:1});function re(){this.Md=null}re.prototype=new v;m=re.prototype;m.gb=k("StringContext");m.eb=k(1);m.fa=function(a){if(this===a)return!0;if(a&&a.a&&a.a.y.Tp){var b=this.Md;a=a.Md;return null===b?null===a:b.fa(a)}return!1};m.fb=function(a){switch(a){case 0:return this.Md;default:throw(new X).f(""+a);}};m.r=function(){return Cp(W(),this)};
+function Mv(a,b){if(a.Md.ba()!==(1+b.ba()|0))throw(new pe).f("wrong number of arguments ("+b.ba()+") for interpolated string with "+a.Md.ba()+" parts");}
+function qe(a,b){var c=function(){return function(a){hs||(hs=(new gs).b());a:{var b=a.length|0,c=Lm(Fa(),a,92);switch(c){case -1:break a;default:var e=(new or).b();b:{var f=c,c=0;for(;;)if(0<=f){f>c&&Mt(e,a,c,f);c=1+f|0;if(c>=b)throw(new Nv).Oi(a,f);var h=65535&(a.charCodeAt(c)|0);switch(h){case 98:f=8;break;case 116:f=9;break;case 110:f=10;break;case 102:f=12;break;case 114:f=13;break;case 34:f=34;break;case 39:f=39;break;case 92:f=92;break;default:if(48<=h&&55>=h){h=65535&(a.charCodeAt(c)|0);f=
+-48+h|0;c=1+c|0;if(c<b&&48<=(65535&(a.charCodeAt(c)|0))&&55>=(65535&(a.charCodeAt(c)|0))){var l=c,f=-48+(y(8,f)+(65535&(a.charCodeAt(l)|0))|0)|0,c=1+c|0;c<b&&51>=h&&48<=(65535&(a.charCodeAt(c)|0))&&55>=(65535&(a.charCodeAt(c)|0))&&(h=c,f=-48+(y(8,f)+(65535&(a.charCodeAt(h)|0))|0)|0,c=1+c|0)}c=-1+c|0;f&=65535}else throw(new Nv).Oi(a,f);}c=1+c|0;Nt(e,f);f=c;Fa();h=a;l=Km(92);h=h.indexOf(l,c)|0;c=f;f=h}else{c<b&&Mt(e,a,c,b);a=e.Gb;break b}a=void 0}}}return a}}(a);Mv(a,b);for(var e=a.Md.ga(),f=b.ga(),
+h=e.ia(),h=(new or).f(c(h));f.qa();){Lt(h,f.ia());var l=e.ia();Jt(h,c(l))}return h.Gb}m.jb=function(a){this.Md=a;return this};m.ja=function(){return yl(this)};m.kb=function(){return av(this)};m.a=new u({Tp:0},!1,"scala.StringContext",w,{Tp:1,c:1,ua:1,n:1,g:1,e:1});function Ov(){}Ov.prototype=new v;function Pv(){}Pv.prototype=Ov.prototype;Ov.prototype.b=function(){return this};var Qv=new u({Kh:0},!1,"scala.concurrent.duration.Duration",w,{Kh:1,c:1,g:1,e:1,bg:1,nc:1});Ov.prototype.a=Qv;
+function vj(){this.l=null}vj.prototype=new v;m=vj.prototype;m.kk=k(!1);m.Je=function(a,b){zs(ys(b,a),this.l.zc)};m.Cj=function(){return this};m.Io=k(!0);m.a=new u({CC:0},!1,"scala.concurrent.impl.Promise$KeptPromise",w,{CC:1,c:1,AC:1,rC:1,nC:1,iC:1});function Cd(){this.lh=null}Cd.prototype=new v;m=Cd.prototype;m.qh=function(){return+Dk(this)};m.fa=function(a){return fj(this,a)};m.r=function(){return""+this.hj()};
+m.Ix=function(a,b){var c=new du;c.HH=this;Zp.prototype.Hx.call(c,a,null===b?null:b.rL());this.lh=c;return this};m.o=function(a){Cd.prototype.Ix.call(this,a,null);return this};m.hj=g("lh");m.pi=function(){Dk(this)};m.Ed=function(){return Dk(this)};m.ja=function(){return Ka(this.lh)};m.a=new u({UC:0},!1,"scala.ref.WeakReference",w,{UC:1,c:1,PK:1,NK:1,$e:1,dC:1});function ql(){Wp.call(this)}ql.prototype=new Xp;ql.prototype.b=function(){Wp.prototype.b.call(this);return this};
+ql.prototype.Bj=function(){Hs||(Hs=(new Gs).b());return Hs.Km?Wp.prototype.Bj.call(this):this};ql.prototype.a=new u({xD:0},!1,"scala.util.control.BreakControl",Yp,{xD:1,nb:1,c:1,e:1,cq:1,QK:1});function Rv(){this.ka=null}Rv.prototype=new zq;Rv.prototype.ha=function(){Pp();return(new os).b()};Rv.prototype.a=new u({KD:0},!1,"scala.collection.Iterable$",Bq,{KD:1,Cb:1,Xa:1,c:1,Ob:1,ob:1});var Sv=void 0;function Xj(){Sv||(Sv=(new Rv).b());return Sv}function ym(){this.no=this.sa=null}ym.prototype=new fu;
+ym.prototype.ia=function(){return this.no.h(this.sa.ia())};ym.prototype.Qi=function(a,b){if(null===a)throw I(J(),null);this.sa=a;this.no=b;return this};ym.prototype.qa=function(){return this.sa.qa()};ym.prototype.a=new u({MD:0},!1,"scala.collection.Iterator$$anon$11",gu,{MD:1,rc:1,c:1,ec:1,t:1,s:1});function Tv(){this.kl=null;this.Ej=!1;this.xp=this.sa=null}Tv.prototype=new fu;Tv.prototype.ia=function(){return this.qa()?(this.Ej=!1,this.kl):Yj().Dc.ia()};
+Tv.prototype.Qi=function(a,b){if(null===a)throw I(J(),null);this.sa=a;this.xp=b;this.Ej=!1;return this};Tv.prototype.qa=function(){if(!this.Ej){do{if(!this.sa.qa())return!1;this.kl=this.sa.ia()}while(!this.xp.h(this.kl));this.Ej=!0}return!0};Tv.prototype.a=new u({ND:0},!1,"scala.collection.Iterator$$anon$13",gu,{ND:1,rc:1,c:1,ec:1,t:1,s:1});function gm(){}gm.prototype=new fu;gm.prototype.ia=function(){throw(new V).f("next on empty iterator");};gm.prototype.qa=k(!1);
+gm.prototype.a=new u({OD:0},!1,"scala.collection.Iterator$$anon$2",gu,{OD:1,rc:1,c:1,ec:1,t:1,s:1});function Uv(){this.yc=null}Uv.prototype=new fu;Uv.prototype.ia=function(){if(this.qa()){var a=this.yc.x();this.yc=this.yc.u();return a}return Yj().Dc.ia()};Uv.prototype.qa=function(){return!this.yc.m()};Uv.prototype.a=new u({PD:0},!1,"scala.collection.LinearSeqLike$$anon$1",gu,{PD:1,rc:1,c:1,ec:1,t:1,s:1});function Wj(){this.Hv=this.ka=null}Wj.prototype=new zq;
+Wj.prototype.b=function(){yq.prototype.b.call(this);Vj=this;this.Hv=(new pl).b();return this};Wj.prototype.ha=function(){Vv||(Vv=(new Wv).b());return(new os).b()};Wj.prototype.a=new u({RD:0},!1,"scala.collection.Traversable$",Bq,{RD:1,Cb:1,Xa:1,c:1,Ob:1,ob:1});var Vj=void 0;function Xv(){}Xv.prototype=new iu;function Yv(){}Yv.prototype=Xv.prototype;Xv.prototype.kf=function(){return this.wj()};Xv.prototype.ha=function(){return br(new cr,this.wj())};
+var Zv=new u({ak:0},!1,"scala.collection.generic.ImmutableSetFactory",ju,{ak:1,ch:1,eg:1,Xa:1,c:1,ob:1});Xv.prototype.a=Zv;function $v(){}$v.prototype=new iu;function aw(){}aw.prototype=$v.prototype;$v.prototype.ha=function(){return uu(new tu,this.kf())};var bw=new u({qq:0},!1,"scala.collection.generic.MutableSetFactory",ju,{qq:1,ch:1,eg:1,Xa:1,c:1,ob:1});$v.prototype.a=bw;function cw(){this.ka=null}cw.prototype=new zq;cw.prototype.ha=function(){return(new os).b()};
+cw.prototype.a=new u({kE:0},!1,"scala.collection.immutable.Iterable$",Bq,{kE:1,Cb:1,Xa:1,c:1,Ob:1,ob:1});var dw=void 0;function Pp(){dw||(dw=(new cw).b());return dw}function ew(){this.Rh=null}ew.prototype=new fu;ew.prototype.ia=function(){return this.Nl()};ew.prototype.Nl=function(){if(this.qa()){var a=(new A).v(this.Rh.Gh(),this.Rh.Uh());this.Rh=this.Rh.$f();return a}throw(new V).f("next on empty iterator");};ew.prototype.qa=function(){return!this.Rh.m()};
+ew.prototype.a=new u({nE:0},!1,"scala.collection.immutable.ListMap$$anon$1",gu,{nE:1,rc:1,c:1,ec:1,t:1,s:1});function fw(){this.mg=null}fw.prototype=new fu;fw.prototype.ia=function(){if(!this.mg.m()){var a=this.mg.x();this.mg=this.mg.zm();return a}return Yj().Dc.ia()};fw.prototype.Qf=function(a){this.mg=a;return this};fw.prototype.qa=function(){return!this.mg.m()};fw.prototype.a=new u({rE:0},!1,"scala.collection.immutable.ListSet$$anon$1",gu,{rE:1,rc:1,c:1,ec:1,t:1,s:1});
+function gw(){this.Md=null}gw.prototype=new wu;gw.prototype.oa=function(){return hw(this)};function hw(a){return a.Md.Wa.kc().Lg(C(function(){return function(a){return a.kc()}}(a)),(fk(),(new jt).b()))}function mt(a){return!!(a&&a.a&&a.a.y.wq)}gw.prototype.a=new u({wq:0},!1,"scala.collection.immutable.Stream$StreamBuilder",yu,{wq:1,Eq:1,c:1,Pb:1,Kb:1,Jb:1});function iw(){this.yc=null}iw.prototype=new fu;
+iw.prototype.ia=function(){if(!this.qa())return Yj().Dc.ia();var a=this.yc.Mb?this.yc.Na:un(this.yc),b=a.x();this.yc=tn(new sn,this,Rb(function(a,b){return function(){return b.u()}}(this,a)));return b};function jw(a){var b=new iw;b.yc=tn(new sn,b,Rb(function(a,b){return function(){return b}}(b,a)));return b}iw.prototype.qa=function(){return!(this.yc.Mb?this.yc.Na:un(this.yc)).m()};
+iw.prototype.kc=function(){var a=this.yc.Mb?this.yc.Na:un(this.yc);this.yc=tn(new sn,this,Rb(function(){return function(){fk();return km()}}(this)));return a};iw.prototype.a=new u({TE:0},!1,"scala.collection.immutable.StreamIterator",gu,{TE:1,rc:1,c:1,ec:1,t:1,s:1});function Wv(){this.ka=null}Wv.prototype=new zq;Wv.prototype.ha=function(){return(new os).b()};Wv.prototype.a=new u({WE:0},!1,"scala.collection.immutable.Traversable$",Bq,{WE:1,Cb:1,Xa:1,c:1,Ob:1,ob:1});var Vv=void 0;
+function kw(){this.Cc=null;this.Od=0;this.Ph=this.cm=this.Yj=null;this.dg=0;this.bh=null}kw.prototype=new fu;function lw(){}lw.prototype=kw.prototype;
+kw.prototype.ia=function(){if(null!==this.bh){var a=this.bh.ia();this.bh.qa()||(this.bh=null);return a}a:{var a=this.Ph,b=this.dg;for(;;){b===(-1+a.d.length|0)?(this.Od=-1+this.Od|0,0<=this.Od?(this.Ph=this.Yj.d[this.Od],this.dg=this.cm.d[this.Od],this.Yj.d[this.Od]=null):(this.Ph=null,this.dg=0)):this.dg=1+this.dg|0;if((a=a.d[b])&&a.a&&a.a.y.sq||a&&a.a&&a.a.y.uq){a=this.to(a);break a}if(mw(a)||nw(a))0<=this.Od&&(this.Yj.d[this.Od]=this.Ph,this.cm.d[this.Od]=this.dg),this.Od=1+this.Od|0,this.Ph=ow(a),
+this.dg=0,a=ow(a),b=0;else{this.bh=a.ga();a=this.ia();break a}}a=void 0}return a};kw.prototype.qa=function(){return null!==this.bh||0<=this.Od};function ow(a){if(mw(a))return a.qb;if(nw(a))return a.Hb;throw(new H).o(a);}kw.prototype.Bo=function(a){this.Cc=a;this.Od=0;this.Yj=s(x(x(pw)),[6]);this.cm=s(x(Ya),[6]);this.Ph=this.Cc;this.dg=0;this.bh=null;return this};var qw=new u({lm:0},!1,"scala.collection.immutable.TrieIterator",gu,{lm:1,rc:1,c:1,ec:1,t:1,s:1});kw.prototype.a=qw;
+function cf(){this.Di=this.Sg=this.vi=0;this.Wn=this.Un=this.Sn=this.Qn=this.On=this.Ei=null}cf.prototype=new v;m=cf.prototype;m.ra=g("Sn");m.b=function(){this.Ei=s(x(w),[32]);this.Di=1;this.Sg=this.vi=0;return this};m.zb=g("Di");m.Sb=function(a){return rw(this,a)};m.If=d("Wn");m.mb=g("Ei");m.Pa=g("Un");m.Ba=d("Qn");
+function rw(a,b){if(a.Sg>=a.Ei.d.length){var c=32+a.vi|0,e=a.vi^c;if(1024>e)1===a.zb()&&(a.na(s(x(w),[32])),a.P().d[0]=a.mb(),a.Fd(1+a.zb()|0)),a.Ca(s(x(w),[32])),a.P().d[31&c>>5]=a.mb();else if(32768>e)2===a.zb()&&(a.Ba(s(x(w),[32])),a.ea().d[0]=a.P(),a.Fd(1+a.zb()|0)),a.Ca(s(x(w),[32])),a.na(s(x(w),[32])),a.P().d[31&c>>5]=a.mb(),a.ea().d[31&c>>10]=a.P();else if(1048576>e)3===a.zb()&&(a.db(s(x(w),[32])),a.ra().d[0]=a.ea(),a.Fd(1+a.zb()|0)),a.Ca(s(x(w),[32])),a.na(s(x(w),[32])),a.Ba(s(x(w),[32])),
+a.P().d[31&c>>5]=a.mb(),a.ea().d[31&c>>10]=a.P(),a.ra().d[31&c>>15]=a.ea();else if(33554432>e)4===a.zb()&&(a.Zb(s(x(w),[32])),a.Pa().d[0]=a.ra(),a.Fd(1+a.zb()|0)),a.Ca(s(x(w),[32])),a.na(s(x(w),[32])),a.Ba(s(x(w),[32])),a.db(s(x(w),[32])),a.P().d[31&c>>5]=a.mb(),a.ea().d[31&c>>10]=a.P(),a.ra().d[31&c>>15]=a.ea(),a.Pa().d[31&c>>20]=a.ra();else if(1073741824>e)5===a.zb()&&(a.If(s(x(w),[32])),a.Bc().d[0]=a.Pa(),a.Fd(1+a.zb()|0)),a.Ca(s(x(w),[32])),a.na(s(x(w),[32])),a.Ba(s(x(w),[32])),a.db(s(x(w),[32])),
+a.Zb(s(x(w),[32])),a.P().d[31&c>>5]=a.mb(),a.ea().d[31&c>>10]=a.P(),a.ra().d[31&c>>15]=a.ea(),a.Pa().d[31&c>>20]=a.ra(),a.Bc().d[31&c>>25]=a.Pa();else throw(new pe).b();a.vi=c;a.Sg=0}a.Ei.d[a.Sg]=b;a.Sg=1+a.Sg|0;return a}m.oa=function(){return ff(this)};m.na=d("On");m.Mc=function(a,b){Qn(this,a,b)};m.Zb=d("Un");m.P=g("On");m.Bc=g("Wn");function ff(a){var b=a.vi+a.Sg|0;if(0===b)return Je().qj;var c=(new sw).j(0,b,0);En(c,a,a.Di);1<a.Di&&Fn(c,0,-1+b|0);return c}m.za=function(a){return rw(this,a)};
+m.vb=da();m.Fd=d("Di");m.ea=g("Qn");m.Ca=d("Ei");m.hb=function(a){return ef(this,a)};m.db=d("Sn");m.a=new u({ZE:0},!1,"scala.collection.immutable.VectorBuilder",w,{ZE:1,c:1,Pb:1,Kb:1,Jb:1,zq:1});function Ln(){this.lo=this.Sd=null}Ln.prototype=new v;function Kn(a,b,c){a.lo=c;a.Sd=b;return a}m=Ln.prototype;m.fa=function(a){return fj(this,a)};m.Sb=function(a){this.Sd.za(a);return this};m.r=function(){return""+this.hj()};m.oa=function(){return this.lo.h(this.Sd.oa())};m.hj=g("Sd");
+m.Mc=function(a,b){this.Sd.Mc(a,b)};m.za=function(a){this.Sd.za(a);return this};m.ja=function(){return this.Sd.ja()};m.vb=function(a){this.Sd.vb(a)};m.hb=function(a){this.Sd.hb(a);return this};m.a=new u({gF:0},!1,"scala.collection.mutable.Builder$$anon$1",w,{gF:1,c:1,Pb:1,Kb:1,Jb:1,dC:1});function tw(){this.Ee=0;this.sa=null}tw.prototype=new fu;tw.prototype.ia=function(){return this.qa()?(this.Ee=1+this.Ee|0,this.sa.ya.d[-1+this.Ee|0]===Zn()?null:this.sa.ya.d[-1+this.Ee|0]):Yj().Dc.ia()};
+function uw(a){var b=new tw;if(null===a)throw I(J(),null);b.sa=a;b.Ee=0;return b}tw.prototype.qa=function(){for(;this.Ee<this.sa.ya.d.length&&null===this.sa.ya.d[this.Ee];)this.Ee=1+this.Ee|0;return this.Ee<this.sa.ya.d.length};tw.prototype.a=new u({jF:0},!1,"scala.collection.mutable.FlatHashTable$$anon$1",gu,{jF:1,rc:1,c:1,ec:1,t:1,s:1});function vw(){this.yl=null;this.Bh=0;this.Ig=null}vw.prototype=new fu;function ww(a){var b=new vw;b.yl=a.ya;b.Bh=io(a);b.Ig=b.yl.d[b.Bh];return b}
+vw.prototype.ia=function(){var a=this.Ig;for(this.Ig=this.Ig.Kd;null===this.Ig&&0<this.Bh;)this.Bh=-1+this.Bh|0,this.Ig=this.yl.d[this.Bh];return a};vw.prototype.qa=function(){return null!==this.Ig};vw.prototype.a=new u({qF:0},!1,"scala.collection.mutable.HashTable$$anon$1",gu,{qF:1,rc:1,c:1,ec:1,t:1,s:1});function xw(){this.ka=null}xw.prototype=new zq;xw.prototype.ha=function(){return(new Bm).b()};xw.prototype.a=new u({sF:0},!1,"scala.collection.mutable.Iterable$",Bq,{sF:1,Cb:1,Xa:1,c:1,Ob:1,ob:1});
+var yw=void 0;function zw(){this.Cc=null}zw.prototype=new fu;zw.prototype.ia=function(){var a=this.Cc.vh;this.Cc=this.Cc.kd;return a};zw.prototype.qa=function(){return!this.Cc.m()};function Aw(a){var b=new zw;b.Cc=a;return b}zw.prototype.a=new u({vF:0},!1,"scala.collection.mutable.LinkedListLike$$anon$1",gu,{vF:1,rc:1,c:1,ec:1,t:1,s:1});function Bw(){this.Ci=null}Bw.prototype=new fu;
+Bw.prototype.ia=function(){if(this.qa()){var a=this.Ci.x();this.Ci=this.Ci.u();return a}throw(new V).f("next on empty Iterator");};Bw.prototype.qa=function(){return this.Ci!==K()};Bw.prototype.a=new u({xF:0},!1,"scala.collection.mutable.ListBuffer$$anon$1",gu,{xF:1,rc:1,c:1,ec:1,t:1,s:1});function Cw(){this.Jn=this.yi=0;this.or=null}Cw.prototype=new fu;Cw.prototype.ia=function(){var a=this.or.fb(this.yi);this.yi=1+this.yi|0;return a};
+function av(a){var b=new Cw;b.or=a;b.yi=0;b.Jn=a.eb();return b}Cw.prototype.qa=function(){return this.yi<this.Jn};Cw.prototype.a=new u({GG:0},!1,"scala.runtime.ScalaRunTime$$anon$1",gu,{GG:1,rc:1,c:1,ec:1,t:1,s:1});function Dw(){this.sp=null;this.Tu=!1;this.OJ=this.Rv=null;this.BJ=this.Iw=this.ay=this.Uv=!1}Dw.prototype=new Dt;function Ew(){}Ew.prototype=Dw.prototype;Dw.prototype.Ek=function(a){a=null===a?"null":ka(a);Cu(this,null===a?"null":a);return this};
+function Gn(a){var b=Vr().tp.qd.La();Cu(b,zm(Fa(),a));Cu(b,"\n")}Dw.prototype.Fx=function(a,b,c){this.Tu=b;this.Rv=c;Ct.prototype.sl.call(this,a);this.Iw=this.ay=this.Uv=!1;return this};Dw.prototype.Dk=function(a){Fa();a=(new ig).rb(a).l;a=n.String.fromCharCode(a);Cu(this,a);return this};Dw.prototype.sl=function(a){Dw.prototype.Fx.call(this,a,!1,null);return this};var Fw=new u({Sm:0},!1,"java.io.PrintStream",Et,{Sm:1,tk:1,$h:1,c:1,nh:1,Zh:1,Qo:1});Dw.prototype.a=Fw;
+function Vu(){this.ik=this.l=null}Vu.prototype=new Mr;m=Vu.prototype;m.gb=k("SpinSet");m.eb=k(1);m.fa=function(a){return this===a?!0:a&&a.a&&a.a.y.Zm?S(T(),this.ik,a.ik):!1};m.fb=function(a){switch(a){case 0:return this.ik;default:throw(new X).f(""+a);}};m.o=function(a){this.ik=a;Lr.prototype.o.call(this,a);return this};m.ja=function(){return yl(this)};m.kb=function(){return av(this)};m.a=new u({Zm:0},!1,"rx.core.SpinSet",Nr,{Zm:1,ap:1,c:1,g:1,e:1,ua:1,n:1});function Yu(){this.Na=null}
+Yu.prototype=new v;m=Yu.prototype;m.gb=k("RawFrag");m.eb=k(1);m.fa=function(a){return this===a?!0:a&&a.a&&a.a.y.$m?this.Na===a.Na:!1};m.fb=function(a){switch(a){case 0:return this.Na;default:throw(new X).f(""+a);}};m.r=function(){return Cp(W(),this)};m.ri=function(a){a.insertAdjacentHTML("beforeend",this.Na)};m.Ef=function(a){this.ri(a)};m.f=function(a){this.Na=a;return this};m.ja=function(){return yl(this)};m.kb=function(){return av(this)};
+m.a=new u({$m:0},!1,"scalatags.JsDom$RawFrag",w,{$m:1,c:1,oh:1,ua:1,n:1,g:1,e:1});function tc(){this.Sc=this.Na=this.Yd=null}tc.prototype=new v;m=tc.prototype;m.gb=k("AttrPair");m.eb=k(3);m.fa=function(a){if(this===a)return!0;if(a&&a.a&&a.a.y.dn){var b=this.Yd,c=a.Yd;return(null===b?null===c:b.fa(c))&&S(T(),this.Na,a.Na)?this.Sc===a.Sc:!1}return!1};m.fb=function(a){switch(a){case 0:return this.Yd;case 1:return this.Na;case 2:return this.Sc;default:throw(new X).f(""+a);}};
+function sc(a,b,c,e){a.Yd=b;a.Na=c;a.Sc=e;return a}m.r=function(){return Cp(W(),this)};m.Ef=function(a){this.Sc.zn(a,this.Yd,this.Na)};m.ja=function(){return yl(this)};m.kb=function(){return av(this)};m.a=new u({dn:0},!1,"scalatags.generic.AttrPair",w,{dn:1,c:1,oh:1,ua:1,n:1,g:1,e:1});function Gw(){$.call(this);this.G=this.he=null}Gw.prototype=new ev;Gw.prototype.Ga=function(a,b,c){if(null===a)throw I(J(),null);this.G=a;$.prototype.ma.call(this,b,c);a=(new L).b();this.he=N(new O,this,"auto",a);return this};
+Gw.prototype.a=new u({Ts:0},!1,"scalatags.generic.StyleMisc$AutoStyle",fv,{Ts:1,bd:1,c:1,ua:1,n:1,g:1,e:1});function Hw(){$.call(this);this.G=null}Hw.prototype=new ev;Hw.prototype.Ga=function(a,b,c){if(null===a)throw I(J(),null);this.G=a;$.prototype.ma.call(this,b,c);return this};Hw.prototype.a=new u({Us:0},!1,"scalatags.generic.StyleMisc$BorderRadius",fv,{Us:1,bd:1,c:1,ua:1,n:1,g:1,e:1});function Iw(){$.call(this);this.G=this.oH=this.Az=this.pH=null}Iw.prototype=new ev;
+Iw.prototype.Ga=function(a,b,c){if(null===a)throw I(J(),null);this.G=a;$.prototype.ma.call(this,b,c);a=(new L).b();this.pH=N(new O,this,"thin",a);a=(new L).b();this.Az=N(new O,this,"medium",a);a=(new L).b();this.oH=N(new O,this,"thick",a);return this};Iw.prototype.a=new u({Ws:0},!1,"scalatags.generic.StyleMisc$BorderWidth",fv,{Ws:1,bd:1,c:1,ua:1,n:1,g:1,e:1});function Jw(){$.call(this);this.G=null}Jw.prototype=new ev;
+Jw.prototype.Ga=function(a,b,c){if(null===a)throw I(J(),null);this.G=a;$.prototype.ma.call(this,b,c);return this};Jw.prototype.a=new u({Xs:0},!1,"scalatags.generic.StyleMisc$MultiImageStyle",fv,{Xs:1,bd:1,c:1,ua:1,n:1,g:1,e:1});function Kw(){$.call(this);this.G=this.Ol=null}Kw.prototype=new ev;Kw.prototype.Ga=function(a,b,c){if(null===a)throw I(J(),null);this.G=a;$.prototype.ma.call(this,b,c);a=(new L).b();this.Ol=N(new O,this,"none",a);return this};
+Kw.prototype.a=new u({Ys:0},!1,"scalatags.generic.StyleMisc$NoneOpenStyle",fv,{Ys:1,bd:1,c:1,ua:1,n:1,g:1,e:1});function Lw(){$.call(this);this.G=this.Jz=null}Lw.prototype=new ev;Lw.prototype.Ga=function(a,b,c){if(null===a)throw I(J(),null);this.G=a;$.prototype.ma.call(this,b,c);a=(new L).b();this.Jz=N(new O,this,"normal",a);return this};Lw.prototype.a=new u({Zs:0},!1,"scalatags.generic.StyleMisc$NormalOpenStyle",fv,{Zs:1,bd:1,c:1,ua:1,n:1,g:1,e:1});
+function Mw(){$.call(this);this.G=this.sB=this.Vx=this.JB=this.jx=this.pw=this.vG=this.ew=this.ow=null}Mw.prototype=new ev;function Nw(){}Nw.prototype=Mw.prototype;
+Mw.prototype.Ga=function(a,b,c){if(null===a)throw I(J(),null);this.G=a;$.prototype.ma.call(this,b,c);a=(new L).b();this.ow=N(new O,this,"dotted",a);a=(new L).b();this.ew=N(new O,this,"dashed",a);a=(new L).b();this.vG=N(new O,this,"solid",a);a=(new L).b();this.pw=N(new O,this,"double",a);a=(new L).b();this.jx=N(new O,this,"groove",a);a=(new L).b();this.JB=N(new O,this,"ridge",a);a=(new L).b();this.Vx=N(new O,this,"inset",a);a=(new L).b();this.sB=N(new O,this,"outset",a);return this};
+var Ow=new u({fn:0},!1,"scalatags.generic.StyleMisc$OutlineStyle",fv,{fn:1,bd:1,c:1,ua:1,n:1,g:1,e:1});Mw.prototype.a=Ow;function Pw(){$.call(this);this.G=this.he=this.TF=this.ux=this.BH=null}Pw.prototype=new ev;Pw.prototype.Ga=function(a,b,c){if(null===a)throw I(J(),null);this.G=a;$.prototype.ma.call(this,b,c);a=(new L).b();this.BH=N(new O,this,"visible",a);a=(new L).b();this.ux=N(new O,this,"hidden",a);a=(new L).b();this.TF=N(new O,this,"scroll",a);a=(new L).b();this.he=N(new O,this,"auto",a);return this};
+Pw.prototype.a=new u({$s:0},!1,"scalatags.generic.StyleMisc$Overflow",fv,{$s:1,bd:1,c:1,ua:1,n:1,g:1,e:1});function Qw(){bv.call(this);this.G=this.he=null}Qw.prototype=new cv;Qw.prototype.Ga=function(a,b,c){if(null===a)throw I(J(),null);this.G=a;bv.prototype.ma.call(this,b,c);this.he=(new je).me((new L).b()).ye(this.Ke,"auto");return this};Qw.prototype.a=new u({at:0},!1,"scalatags.generic.StyleMisc$PixelAutoStyle",dv,{at:1,ph:1,c:1,ua:1,n:1,g:1,e:1});function O(){this.Sc=this.Na=this.Fb=null}
+O.prototype=new v;m=O.prototype;m.gb=k("StylePair");m.eb=k(3);m.fa=function(a){if(this===a)return!0;if(a&&a.a&&a.a.y.gn){var b=this.Fb,c=a.Fb;return(null===b?null===c:b.fa(c))&&S(T(),this.Na,a.Na)?this.Sc===a.Sc:!1}return!1};m.fb=function(a){switch(a){case 0:return this.Fb;case 1:return this.Na;case 2:return this.Sc;default:throw(new X).f(""+a);}};m.r=function(){return Cp(W(),this)};m.Ef=function(a){a.style.setProperty(this.Fb.Be,ka(this.Na))};m.ja=function(){return yl(this)};m.kb=function(){return av(this)};
+function N(a,b,c,e){a.Fb=b;a.Na=c;a.Sc=e;return a}m.a=new u({gn:0},!1,"scalatags.generic.StylePair",w,{gn:1,c:1,oh:1,ua:1,n:1,g:1,e:1});function Rw(){$.call(this);this.sa=this.Rx=this.Qw=this.cH=this.bH=this.aH=this.$G=this.ZG=this.YG=this.XG=this.WG=this.VG=this.Sx=this.Qx=this.jz=this.bv=this.Px=this.Ol=null}Rw.prototype=new ev;
+Rw.prototype.Hd=function(a){if(null===a)throw I(J(),null);this.sa=a;$.prototype.ma.call(this,"display","display");a=(new L).b();this.Ol=N(new O,this,"none",a);a=(new L).b();this.Px=N(new O,this,"inline",a);a=(new L).b();this.bv=N(new O,this,"block",a);a=(new L).b();this.jz=N(new O,this,"list-item",a);a=(new L).b();this.Qx=N(new O,this,"inline-block",a);a=(new L).b();this.Sx=N(new O,this,"inline-table",a);a=(new L).b();this.VG=N(new O,this,"table",a);a=(new L).b();this.WG=N(new O,this,"table-caption",
+a);a=(new L).b();this.XG=N(new O,this,"table-cell",a);a=(new L).b();this.YG=N(new O,this,"table-column",a);a=(new L).b();this.ZG=N(new O,this,"table-column-group",a);a=(new L).b();this.$G=N(new O,this,"table-footer-group",a);a=(new L).b();this.aH=N(new O,this,"table-header-group",a);a=(new L).b();this.bH=N(new O,this,"table-row",a);a=(new L).b();this.cH=N(new O,this,"table-row-group",a);a=(new L).b();this.Qw=N(new O,this,"flex",a);a=(new L).b();this.Rx=N(new O,this,"inline-flex",a);return this};
+Rw.prototype.a=new u({ht:0},!1,"scalatags.generic.Styles$display$",fv,{ht:1,bd:1,c:1,ua:1,n:1,g:1,e:1});function Sw(){$.call(this);this.sa=this.Pw=this.xn=this.HB=this.KG=null}Sw.prototype=new ev;
+Sw.prototype.Hd=function(a){if(null===a)throw I(J(),null);this.sa=a;$.prototype.ma.call(this,"position","position");a=(new L).b();this.KG=N(new O,this,"static",a);a=(new L).b();this.HB=N(new O,this,"relative",a);a=(new L).b();this.xn=N(new O,this,"absolute",a);a=(new L).b();this.Pw=N(new O,this,"fixed",a);return this};Sw.prototype.a=new u({it:0},!1,"scalatags.generic.Styles$position$",fv,{it:1,bd:1,c:1,ua:1,n:1,g:1,e:1});function Tw(){this.jo=this.go=this.sa=null}Tw.prototype=new xt;m=Tw.prototype;
+m.Ya=function(a,b){if(qv(a)){var c=null===a?null:a.l;if(null!==c&&0===c.$b(2)){var e=c.pa(0),c=c.pa(1),e=Ne(this.go).h(e);return(new A).v(e,Ne(this.jo).h(c))}}return b.h(a)};m.Ha=function(a){return this.$a(a)};m.cb=function(a,b){return this.Ya(a,b)};m.$a=function(a){return qv(a)&&(a=null===a?null:a.l,null!==a&&0===a.$b(2))?!0:!1};function Uw(a,b,c){var e=new Tw;if(null===a)throw I(J(),null);e.sa=a;e.go=b;e.jo=c;return e}
+m.a=new u({st:0},!1,"upickle.Generated$$anonfun$Tuple2R$1",yt,{st:1,Qb:1,c:1,p:1,H:1,g:1,e:1});function Kf(){this.io=this.ho=this.mo=this.sa=null}Kf.prototype=new xt;m=Kf.prototype;m.Ya=function(a){var b=Oi(this.mo),c=this.sa,e=this.ho,f=this.io;Jf().yg;c=c.we("Array(2)",Uw(c,e,f));return b.h(Ne((new Mf).Ge(c)).h(a))};m.Ha=function(a){return this.$a(a)};m.cb=function(a,b){return this.Ya(a,b)};m.$a=k(!0);
+m.a=new u({tt:0},!1,"upickle.GeneratedInternal$$anonfun$Case2R$1",yt,{tt:1,Qb:1,c:1,p:1,H:1,g:1,e:1});function Vw(){this.Fp=this.Mn=this.jp=this.sa=null}Vw.prototype=new xt;function Lf(a,b,c,e){var f=new Vw;if(null===a)throw I(J(),null);f.sa=a;f.jp=b;f.Mn=c;f.Fp=e;return f}m=Vw.prototype;m.Ya=function(a,b){return xv(a)?this.Fp.h((new Rg).jb(Nf(null===a?null:a.l,this.jp,this.Mn))):b.h(a)};m.Ha=function(a){return this.$a(a)};m.cb=function(a,b){return this.Ya(a,b)};m.$a=function(a){return xv(a)};
+m.a=new u({vt:0},!1,"upickle.GeneratedUtil$$anonfun$readerCaseFunction$1",yt,{vt:1,Qb:1,c:1,p:1,H:1,g:1,e:1});function gg(){}gg.prototype=new xt;m=gg.prototype;m.Ya=function(a,b){if(Bv(a)){var c=null===a?null:a.l;au||(au=(new $t).b());return Pi.prototype.Ik.call(au,c)}return b.h(a)};m.Id=function(){return this};m.Ha=function(a){return this.$a(a)};m.cb=function(a,b){return this.Ya(a,b)};m.$a=function(a){return Bv(a)};
+m.a=new u({wt:0},!1,"upickle.Implicits$$anonfun$10",yt,{wt:1,Qb:1,c:1,p:1,H:1,g:1,e:1});function Ig(){}Ig.prototype=new xt;m=Ig.prototype;m.Ya=function(a,b){if(Bv(a)){var c=null===a?null:a.l;Fg();var c=(new wc).f(c),e=yg();return vs(xg(e,c.Ma,10))}return b.h(a)};m.Id=function(){return this};m.Ha=function(a){return this.$a(a)};m.cb=function(a,b){return this.Ya(a,b)};m.$a=function(a){return Bv(a)};m.a=new u({xt:0},!1,"upickle.Implicits$$anonfun$4",yt,{xt:1,Qb:1,c:1,p:1,H:1,g:1,e:1});
+function Zf(){}Zf.prototype=new xt;m=Zf.prototype;m.Ya=function(){jc();throw(new Tt).b();};m.Id=function(){return this};m.Ha=function(a){return this.$a(a)};m.cb=function(a,b){return this.Ya(a,b)};m.$a=k(!0);m.a=new u({yt:0},!1,"upickle.Implicits$$anonfun$5",yt,{yt:1,Qb:1,c:1,p:1,H:1,g:1,e:1});function dg(){}dg.prototype=new xt;m=dg.prototype;m.Ya=da();m.Id=function(){return this};m.Ha=function(a){return this.$a(a)};m.cb=function(a,b){return this.Ya(a,b)};m.$a=k(!0);
+m.a=new u({zt:0},!1,"upickle.Implicits$$anonfun$6",yt,{zt:1,Qb:1,c:1,p:1,H:1,g:1,e:1});function Hg(){}Hg.prototype=new xt;m=Hg.prototype;m.Ya=function(a,b){var c=!1,e=null;return Bv(a)&&(c=!0,e=null===a?null:a.l,"inf"===e)?Fg().sk:c&&"-inf"===e?Fg().zk:c&&"undef"===e?Fg().Bk:b.h(a)};m.Id=function(){return this};m.Ha=function(a){return this.$a(a)};m.cb=function(a,b){return this.Ya(a,b)};
+m.$a=function(a){var b=!1,c=null;return Bv(a)&&(b=!0,c=null===a?null:a.l,"inf"===c)?!0:b&&"-inf"===c||b&&"undef"===c?!0:!1};m.a=new u({At:0},!1,"upickle.Implicits$$anonfun$7",yt,{At:1,Qb:1,c:1,p:1,H:1,g:1,e:1});function ag(){}ag.prototype=new xt;m=ag.prototype;m.Ya=function(a,b){return bg()===a?!0:cg()===a?!1:b.h(a)};m.Id=function(){return this};m.Ha=function(a){return this.$a(a)};m.cb=function(a,b){return this.Ya(a,b)};m.$a=function(a){return bg()===a?!0:cg()===a};
+m.a=new u({Bt:0},!1,"upickle.Implicits$$anonfun$8",yt,{Bt:1,Qb:1,c:1,p:1,H:1,g:1,e:1});function eg(){}eg.prototype=new xt;m=eg.prototype;m.Ya=function(a,b){return Bv(a)?null===a?null:a.l:b.h(a)};m.Id=function(){return this};m.Ha=function(a){return this.$a(a)};m.cb=function(a,b){return this.Ya(a,b)};m.$a=function(a){return Bv(a)};m.a=new u({Ct:0},!1,"upickle.Implicits$$anonfun$9",yt,{Ct:1,Qb:1,c:1,p:1,H:1,g:1,e:1});function Ww(){this.Hn=this.ko=this.sa=null}Ww.prototype=new xt;m=Ww.prototype;
+m.Ya=function(a,b){if(qv(a)){var c=null===a?null:a.l,e=C(function(a){return function(b){return Ne(a.ko).h(b)}}(this)),f=tb(),c=c.ac(e,f.ka);return sf(c,this.Hn)}return b.h(a)};function Kg(a,b,c){var e=new Ww;if(null===a)throw I(J(),null);e.sa=a;e.ko=b;e.Hn=c;return e}m.Ha=function(a){return this.$a(a)};m.cb=function(a,b){return this.Ya(a,b)};m.$a=function(a){return qv(a)};m.a=new u({Dt:0},!1,"upickle.Implicits$$anonfun$SeqishR$1",yt,{Dt:1,Qb:1,c:1,p:1,H:1,g:1,e:1});
+function Xw(){this.so=this.ro=null}Xw.prototype=new xt;m=Xw.prototype;m.Ya=function(a,b){if(Yw(a)){var c=a.l;try{return this.ro.h(c)}catch(e){if(Yh(e))throw Of(new Pf,(new Uf).Fe(c),"Number");throw e;}}else if(Bv(a)){c=null===a?null:a.l;try{return this.so.h(c)}catch(f){if(Yh(f))throw Of(new Pf,(new Tf).f(c),"Number");throw f;}}else return b.h(a)};function Vf(a,b){var c=new Xw;c.ro=a;c.so=b;return c}m.Ha=function(a){return this.$a(a)};m.cb=function(a,b){return this.Ya(a,b)};
+m.$a=function(a){return Yw(a)||Bv(a)};m.a=new u({Et:0},!1,"upickle.Implicits$$anonfun$upickle$Implicits$$numericReaderFunc$1",yt,{Et:1,Qb:1,c:1,p:1,H:1,g:1,e:1});function Zw(){this.qo=null}Zw.prototype=new xt;m=Zw.prototype;m.Ya=function(a,b){return Bv(a)?this.qo.h(null===a?null:a.l):b.h(a)};m.Ha=function(a){return this.$a(a)};m.cb=function(a,b){return this.Ya(a,b)};function Jg(a){var b=new Zw;b.qo=a;return b}m.$a=function(a){return Bv(a)};
+m.a=new u({Ft:0},!1,"upickle.Implicits$$anonfun$upickle$Implicits$$numericStringReaderFunc$1",yt,{Ft:1,Qb:1,c:1,p:1,H:1,g:1,e:1});function nv(){this.hp=null}nv.prototype=new xt;m=nv.prototype;m.Ya=function(a){throw Of(new Pf,a,this.hp);};m.Ha=function(a){return this.$a(a)};m.f=function(a){this.hp=a;return this};m.cb=function(a,b){return this.Ya(a,b)};m.$a=k(!0);m.a=new u({Ht:0},!1,"upickle.Internal$$anonfun$validate$1",yt,{Ht:1,Qb:1,c:1,p:1,H:1,g:1,e:1});function ov(){this.ip=null}ov.prototype=new xt;
+m=ov.prototype;m.Ya=function(a){throw Of(new Pf,a,this.ip);};m.Ha=function(a){return this.$a(a)};m.f=function(a){this.ip=a;return this};m.cb=function(a,b){return this.Ya(a,b)};m.$a=k(!0);m.a=new u({It:0},!1,"upickle.Internal$$anonfun$validateReader$1",yt,{It:1,Qb:1,c:1,p:1,H:1,g:1,e:1});function Rg(){this.l=null}Rg.prototype=new v;m=Rg.prototype;m.gb=function(){this.l;return"Arr"};m.eb=function(){this.l;return 1};m.fa=function(a){return sv().dl(this.l,a)};m.fb=function(a){return sv().Ul(this.l,a)};
+m.r=function(){return sv().Cm(this.l)};m.jb=function(a){this.l=a;return this};m.ja=function(){return this.l.ja()};m.kb=function(){return sv().Vl(this.l)};function qv(a){return!!(a&&a.a&&a.a.y.ln)}m.a=new u({ln:0},!1,"upickle.Js$Arr",w,{ln:1,c:1,Bf:1,ua:1,n:1,g:1,e:1});function $w(){}$w.prototype=new v;m=$w.prototype;m.b=function(){ax=this;return this};m.gb=k("False");m.eb=k(0);m.fb=function(a){throw(new X).f(""+a);};m.r=k("False");m.ja=k(67643651);m.kb=function(){return av(this)};
+m.a=new u({Kt:0},!1,"upickle.Js$False$",w,{Kt:1,c:1,Bf:1,ua:1,n:1,g:1,e:1});var ax=void 0;function cg(){ax||(ax=(new $w).b());return ax}function bx(){}bx.prototype=new v;m=bx.prototype;m.b=function(){cx=this;return this};m.gb=k("Null");m.eb=k(0);m.fb=function(a){throw(new X).f(""+a);};m.r=k("Null");m.ja=k(2439591);m.kb=function(){return av(this)};m.a=new u({Lt:0},!1,"upickle.Js$Null$",w,{Lt:1,c:1,Bf:1,ua:1,n:1,g:1,e:1});var cx=void 0;function Og(){cx||(cx=(new bx).b());return cx}
+function Uf(){this.l=0}Uf.prototype=new v;m=Uf.prototype;m.gb=function(){this.l;return"Num"};m.eb=function(){this.l;return 1};m.fa=function(a){vv();return Yw(a)?this.l===a.l:!1};m.Fe=function(a){this.l=a;return this};m.fb=function(a){a:switch(vv(),a){case 0:a=this.l;break a;default:throw(new X).f(""+a);}return a};m.r=function(){vv();var a=this.l;return Cp(W(),(new Uf).Fe(a))};m.ja=function(){var a=this.l;return Ga(Ha(),a)};m.kb=function(){vv();return av((new Uf).Fe(this.l))};
+function Yw(a){return!!(a&&a.a&&a.a.y.mn)}m.a=new u({mn:0},!1,"upickle.Js$Num",w,{mn:1,c:1,Bf:1,ua:1,n:1,g:1,e:1});function Qf(){this.l=null}Qf.prototype=new v;m=Qf.prototype;m.gb=function(){this.l;return"Obj"};m.eb=function(){this.l;return 1};m.fa=function(a){return zv().dl(this.l,a)};m.fb=function(a){return zv().Ul(this.l,a)};m.r=function(){return zv().Cm(this.l)};m.jb=function(a){this.l=a;return this};m.ja=function(){return this.l.ja()};m.kb=function(){return zv().Vl(this.l)};
+function xv(a){return!!(a&&a.a&&a.a.y.nn)}m.a=new u({nn:0},!1,"upickle.Js$Obj",w,{nn:1,c:1,Bf:1,ua:1,n:1,g:1,e:1});function Tf(){this.l=null}Tf.prototype=new v;m=Tf.prototype;m.gb=function(){this.l;return"Str"};m.eb=function(){this.l;return 1};m.fa=function(a){return fg().cl(this.l,a)};m.fb=function(a){a:switch(fg(),a){case 0:a=this.l;break a;default:throw(new X).f(""+a);}return a};m.r=function(){fg();var a=this.l;return Cp(W(),(new Tf).f(a))};m.f=function(a){this.l=a;return this};
+m.ja=function(){var a=this.l;return Ea(Fa(),a)};m.kb=function(){fg();var a=(new Tf).f(this.l);return av(a)};function Bv(a){return!!(a&&a.a&&a.a.y.on)}m.a=new u({on:0},!1,"upickle.Js$Str",w,{on:1,c:1,Bf:1,ua:1,n:1,g:1,e:1});function dx(){}dx.prototype=new v;m=dx.prototype;m.b=function(){ex=this;return this};m.gb=k("True");m.eb=k(0);m.fb=function(a){throw(new X).f(""+a);};m.r=k("True");m.ja=k(2615726);m.kb=function(){return av(this)};
+m.a=new u({Pt:0},!1,"upickle.Js$True$",w,{Pt:1,c:1,Bf:1,ua:1,n:1,g:1,e:1});var ex=void 0;function bg(){ex||(ex=(new dx).b());return ex}function Ng(){}Ng.prototype=new xt;m=Ng.prototype;m.Ya=function(a,b){return Og()===a?null:b.h(a)};m.Ha=function(a){return this.$a(a)};m.cb=function(a,b){return this.Ya(a,b)};m.$a=function(a){return Og()===a};m.a=new u({Vt:0},!1,"upickle.Reader$$anonfun$read$1",yt,{Vt:1,Qb:1,c:1,p:1,H:1,g:1,e:1});function qh(){this.lg=null}qh.prototype=new xt;m=qh.prototype;
+m.Ni=function(a){this.lg=a;return this};m.qi=function(a){var b=this.lg,c=E().Pj;E();return b.appendChild(D(F(c,(new z).k([(new G).f(a.responseText)]))))};m.Ha=k(!0);m.cb=function(a,b){return this.qi(a,b)};m.a=new u({iu:0},!1,"webpage.Weather1$$anonfun$main$1",yt,{iu:1,Qb:1,c:1,p:1,H:1,g:1,e:1});function uh(){this.lg=null}uh.prototype=new xt;m=uh.prototype;m.Ni=function(a){this.lg=a;return this};
+m.qi=function(a){var b=this.lg,c=E().Pj;E();a=n.JSON.parse(a.responseText);a=n.JSON.stringify(a,void 0,4);return b.appendChild(D(F(c,(new z).k([(new G).f(a)]))))};m.Ha=k(!0);m.cb=function(a,b){return this.qi(a,b)};m.a=new u({ku:0},!1,"webpage.Weather2$$anonfun$main$1",yt,{ku:1,Qb:1,c:1,p:1,H:1,g:1,e:1});function xh(){this.lg=null}xh.prototype=new xt;m=xh.prototype;m.Ni=function(a){this.lg=a;return this};
+m.qi=function(a){if(200===(a.status|0)){var b=n.JSON.parse(a.responseText),c=ka(b.name),e=ka(b.weather.pop().main),f=-273.15+ +b.main.temp_min|0;a=-273.15+ +b.main.temp_max|0;var b=ka(b.main.humidity),h=this.lg,l=E().Tb,q=F(E().td,(new z).k([(E(),(new G).f("Weather in Singapore:"))])),r=E().Se,c=F(E().Ic,(new z).k([F(E().td,(new z).k([(E(),(new G).f("Country "))])),(E(),(new G).f(c))])),e=F(E().Ic,(new z).k([F(E().td,(new z).k([(E(),(new G).f("Weather "))])),(E(),(new G).f(e))])),B=E().Ic,M=F(E().td,
+(new z).k([(E(),(new G).f("Temp "))]));E();f=(new G).f(""+f);E();var aa=(new G).f(" - ");E();return h.appendChild(D(F(l,(new z).k([q,F(r,(new z).k([c,e,F(B,(new z).k([M,f,aa,(new G).f(""+a)])),F(E().Ic,(new z).k([F(E().td,(new z).k([(E(),(new G).f("Humidity "))])),(E(),(new G).f(b)),(E(),(new G).f("%"))]))]))]))))}};m.Ha=k(!0);m.cb=function(a,b){return this.qi(a,b)};m.a=new u({mu:0},!1,"webpage.Weather3$$anonfun$main$1",yt,{mu:1,Qb:1,c:1,p:1,H:1,g:1,e:1});function A(){this.wa=this.va=null}
+A.prototype=new v;m=A.prototype;m.gb=k("Tuple2");m.eb=k(2);m.fa=function(a){return this===a?!0:a&&a.a&&a.a.y.vn?S(T(),this.va,a.va)&&S(T(),this.wa,a.wa):!1};m.fb=function(a){a:switch(a){case 0:a=this.va;break a;case 1:a=this.wa;break a;default:throw(new X).f(""+a);}return a};m.v=function(a,b){this.va=a;this.wa=b;return this};m.r=function(){return"("+this.va+","+this.wa+")"};m.ja=function(){return yl(this)};m.kb=function(){return av(this)};
+m.a=new u({vn:0},!1,"scala.Tuple2",w,{vn:1,c:1,uK:1,ua:1,n:1,g:1,e:1});function ng(){Wp.call(this)}ng.prototype=new Fv;function Yh(a){return!!(a&&a.a&&a.a.y.Wo)}ng.prototype.a=new u({Wo:0},!1,"java.lang.NumberFormatException",Gv,{Wo:1,Pg:1,Gc:1,Nb:1,nb:1,c:1,e:1});function xr(){Wp.call(this)}xr.prototype=new Hv;xr.prototype.a=new u({Hy:0},!1,"java.util.FormatterClosedException",Iv,{Hy:1,Uo:1,Gc:1,Nb:1,nb:1,c:1,e:1});function fx(){Wp.call(this)}fx.prototype=new Fv;function gx(){}gx.prototype=fx.prototype;
+var hx=new u({Ij:0},!1,"java.util.IllegalFormatException",Gv,{Ij:1,Pg:1,Gc:1,Nb:1,nb:1,c:1,e:1});fx.prototype.a=hx;function ix(){}ix.prototype=new Kv;m=ix.prototype;m.gb=k("None");m.eb=k(0);m.m=k(!0);m.La=function(){throw(new V).f("None.get");};m.fb=function(a){throw(new X).f(""+a);};m.r=k("None");m.ja=k(2433880);m.kb=function(){return av(this)};m.a=new u({SB:0},!1,"scala.None$",Lv,{SB:1,am:1,c:1,ua:1,n:1,g:1,e:1});var jx=void 0;function wd(){jx||(jx=(new ix).b());return jx}function $i(){}
+$i.prototype=new xt;$i.prototype.Ha=k(!0);$i.prototype.cb=function(){return bj().Xj};$i.prototype.a=new u({XB:0},!1,"scala.PartialFunction$$anonfun$4",yt,{XB:1,Qb:1,c:1,p:1,H:1,g:1,e:1});function Bd(){this.zc=null}Bd.prototype=new Kv;m=Bd.prototype;m.gb=k("Some");m.eb=k(1);m.fa=function(a){return this===a?!0:Sd(a)?S(T(),this.zc,a.zc):!1};m.m=k(!1);m.fb=function(a){switch(a){case 0:return this.zc;default:throw(new X).f(""+a);}};m.La=g("zc");m.r=function(){return Cp(W(),this)};
+m.o=function(a){this.zc=a;return this};m.ja=function(){return yl(this)};m.kb=function(){return av(this)};function Sd(a){return!!(a&&a.a&&a.a.y.Sp)}m.a=new u({Sp:0},!1,"scala.Some",Lv,{Sp:1,am:1,c:1,ua:1,n:1,g:1,e:1});function Nv(){Wp.call(this);this.Dx=0}Nv.prototype=new Fv;
+Nv.prototype.Oi=function(a,b){this.Dx=b;var c=(new re).jb((new z).k(["invalid escape "," index ",' in "','". Use \\\\\\\\ for literal \\\\.']));fs(jc(),0<=b&&b<(a.length|0));if(b===(-1+(a.length|0)|0))var e="at terminal";else var e=(new re).jb((new z).k(["'\\\\","' not one of "," at"])),f=65535&(a.charCodeAt(1+b|0)|0),e=qe(e,(new z).k([(new ig).rb(f),"[\\b, \\t, \\n, \\f, \\r, \\\\, \\\", \\']"]));pe.prototype.f.call(this,qe(c,(new z).k([e,b,a])));return this};
+Nv.prototype.a=new u({fC:0},!1,"scala.StringContext$InvalidEscapeException",Gv,{fC:1,Pg:1,Gc:1,Nb:1,nb:1,c:1,e:1});function kx(){}kx.prototype=new Pv;function lx(){}lx.prototype=kx.prototype;kx.prototype.$q=function(){throw(new pe).f(qe((new re).jb((new z).k([""," not allowed on infinite Durations"])),(new z).k(["toNanos"])));};var mx=new u({Uj:0},!1,"scala.concurrent.duration.Duration$Infinite",Qv,{Uj:1,Kh:1,c:1,g:1,e:1,bg:1,nc:1});kx.prototype.a=mx;function rs(){this.pf=Id();this.Th=null}
+rs.prototype=new Pv;m=rs.prototype;m.fa=function(a){return a&&a.a&&a.a.y.Wp?vp(this.Th.ve(this.pf),a.Th.ve(a.pf)):this===a};m.r=function(){return""+this.pf+" "+(Fg().Yq.h(this.Th)+(vp(this.pf,(new U).j(1,0,0))?"":"s"))};
+function qs(a,b,c){a.pf=b;a.Th=c;if(Z().di===c)b=nx(a,(new U).j(4194303,4194303,524287));else if(Z().ai===c)b=nx(a,(new U).j(2315255,1207959,524));else if(Z().bi===c)b=nx(a,(new U).j(1071862,2199023,0));else if(Z().gi===c)b=nx(a,(new U).j(97540,2199,0));else if(Z().ci===c)b=nx(a,(new U).j(2727923,36,0));else if(Z().Yh===c)b=nx(a,(new U).j(2562047,0,0));else if(Z().wg===c)b=nx(a,(new U).j(106751,0,0));else{b=Z().wg.Cg(b,c);if(c=qt(b,(new U).j(4087553,4194303,1048575)))c=(new U).j(106751,0,0),c=qt(c,
+b);b=c}if(!b)throw(new pe).f("requirement failed: Duration is limited to +-(2^63-1)ns (ca. 292 years)");return a}function nx(a,b){var c=Vh(b);return qt(a.pf,c)&&qt(b,a.pf)}m.ja=function(){return Tn(this.Th.ve(this.pf))};m.$q=function(){return this.Th.ve(this.pf)};m.a=new u({Wp:0},!1,"scala.concurrent.duration.FiniteDuration",Qv,{Wp:1,Kh:1,c:1,g:1,e:1,bg:1,nc:1});function mc(){this.Fa=null}mc.prototype=new Jj;m=mc.prototype;m.b=function(){Kj(this,null,K());return this};
+function ox(a,b){var c=a;a:b:for(;;){var e=c.Fa;if(jl(e))zs(b,e);else if(Aj(e)){c=Cj(c);continue b}else if(qq(e)){if(!Kj(c,e,Td(new Ud,b,e)))continue b}else throw(new H).o(e);break a}}m.kk=function(a){a=wj(xj(),a);var b;a:{b=this;for(;;){var c=b.Fa;if(qq(c)){if(Kj(b,c,a)){b=c;break a}}else if(Aj(c))b=Cj(b);else{b=null;break a}}b=void 0}if(null!==b){if(!b.m())for(;!b.m();)zs(b.x(),a),b=b.u();return!0}return!1};
+function Bj(a,b){var c=a;a:b:for(;;){if(c!==b){var e=c.Fa;if(jl(e)){if(!b.kk(e))throw(new Hj).f("Cannot link completed promises together");}else if(Aj(e)){c=Cj(c);continue b}else if(qq(e))if(Kj(c,e,b)){if(!e.m())for(c=e;!c.m();)e=c.x(),ox(b,e),c=c.u()}else continue b;else throw(new H).o(e);}break a}}function Cj(a){for(;;){var b=a.Fa;if(Aj(b)){var c;b:{c=b;for(;;){var e=c.Fa;if(Aj(e))c=e;else break b}c=void 0}if(b===c||Kj(a,b,c))return c}else return a}}m.Je=function(a,b){ox(this,ys(b,a))};m.Cj=function(){return this};
+m.Io=function(){var a;a:{a=this;for(;;){var b=a.Fa;if(jl(b)){a=!0;break a}if(Aj(b))a=Cj(a);else{a=!1;break a}}a=void 0}return a};function Aj(a){return!!(a&&a.a&&a.a.y.Yp)}m.a=new u({Yp:0},!1,"scala.concurrent.impl.Promise$DefaultPromise",Lj,{Yp:1,Xp:1,c:1,AC:1,rC:1,nC:1,iC:1});function qd(){this.Ib=null}qd.prototype=new il;m=qd.prototype;m.gb=k("Failure");m.eb=k(1);m.ep=function(){return this};m.fa=function(a){if(this===a)return!0;if(yj(a)){var b=this.Ib;a=a.Ib;return null===b?null===a:b.fa(a)}return!1};
+m.La=function(){throw I(J(),this.Ib);};m.fb=function(a){switch(a){case 0:return this.Ib;default:throw(new X).f(""+a);}};m.r=function(){return Cp(W(),this)};m.A=da();function pd(a,b){a.Ib=b;return a}m.ja=function(){return yl(this)};m.kb=function(){return av(this)};m.Si=k(!0);function yj(a){return!!(a&&a.a&&a.a.y.$p)}m.a=new u({$p:0},!1,"scala.util.Failure",kl,{$p:1,Wj:1,c:1,ua:1,n:1,g:1,e:1});function uj(){this.zf=null}uj.prototype=new il;m=uj.prototype;m.gb=k("Success");m.eb=k(1);
+m.ep=function(a){try{return(new uj).o(a.h(this.zf))}catch(b){a=Ej(J(),b);if(null!==a){var c=Fj(Gj(),a);if(!c.m())return a=c.La(),pd(new qd,a);throw I(J(),a);}throw b;}};m.fa=function(a){return this===a?!0:zj(a)?S(T(),this.zf,a.zf):!1};m.La=g("zf");m.fb=function(a){switch(a){case 0:return this.zf;default:throw(new X).f(""+a);}};m.r=function(){return Cp(W(),this)};m.A=function(a){a.h(this.zf)};m.o=function(a){this.zf=a;return this};m.ja=function(){return yl(this)};m.kb=function(){return av(this)};
+m.Si=k(!1);function zj(a){return!!(a&&a.a&&a.a.y.bq)}m.a=new u({bq:0},!1,"scala.util.Success",kl,{bq:1,Wj:1,c:1,ua:1,n:1,g:1,e:1});function px(){this.ka=null}px.prototype=new Ms;function qx(){}qx.prototype=px.prototype;var rx=new u({Lc:0},!1,"scala.collection.generic.SeqFactory",Ns,{Lc:1,tc:1,Cb:1,Xa:1,c:1,Ob:1,ob:1});px.prototype.a=rx;function sx(){kw.call(this)}sx.prototype=new lw;sx.prototype.to=function(a){return tx(a)};
+sx.prototype.a=new u({eE:0},!1,"scala.collection.immutable.HashMap$HashTrieMap$$anon$1",qw,{eE:1,lm:1,rc:1,c:1,ec:1,t:1,s:1});function ux(){kw.call(this)}ux.prototype=new lw;ux.prototype.to=function(a){return a.Vb};ux.prototype.a=new u({iE:0},!1,"scala.collection.immutable.HashSet$HashTrieSet$$anon$1",qw,{iE:1,lm:1,rc:1,c:1,ec:1,t:1,s:1});function vx(){}vx.prototype=new Yv;vx.prototype.wj=function(){return ar()};
+vx.prototype.a=new u({GE:0},!1,"scala.collection.immutable.Set$",Zv,{GE:1,ak:1,ch:1,eg:1,Xa:1,c:1,ob:1});var wx=void 0;function Fd(){wx||(wx=(new vx).b());return wx}function xx(){this.bl=this.Vf=this.Gf=this.al=0;this.ge=!1;this.Vk=0;this.Xn=this.Vn=this.Tn=this.Rn=this.Pn=this.Wk=null}xx.prototype=new fu;m=xx.prototype;
+m.ia=function(){if(!this.ge)throw(new V).f("reached iterator end");var a=this.Wk.d[this.Vf];this.Vf=1+this.Vf|0;if(this.Vf===this.bl)if((this.Gf+this.Vf|0)<this.al){var b=32+this.Gf|0,c=this.Gf^b;if(1024>c)this.Ca(this.P().d[31&b>>5]);else if(32768>c)this.na(this.ea().d[31&b>>10]),this.Ca(this.P().d[0]);else if(1048576>c)this.Ba(this.ra().d[31&b>>15]),this.na(this.ea().d[0]),this.Ca(this.P().d[0]);else if(33554432>c)this.db(this.Pa().d[31&b>>20]),this.Ba(this.ra().d[0]),this.na(this.ea().d[0]),this.Ca(this.P().d[0]);
+else if(1073741824>c)this.Zb(this.Bc().d[31&b>>25]),this.db(this.Pa().d[0]),this.Ba(this.ra().d[0]),this.na(this.ea().d[0]),this.Ca(this.P().d[0]);else throw(new pe).b();this.Gf=b;b=this.al-this.Gf|0;this.bl=32>b?b:32;this.Vf=0}else this.ge=!1;return a};m.ra=g("Tn");m.zb=g("Vk");m.If=d("Xn");m.mb=g("Wk");m.Pa=g("Vn");m.Ba=d("Rn");m.na=d("Pn");m.qa=g("ge");m.Zb=d("Vn");m.P=g("Pn");m.Bc=g("Xn");m.Fd=d("Vk");m.ea=g("Rn");m.Ca=d("Wk");m.db=d("Tn");
+m.a=new u({$E:0},!1,"scala.collection.immutable.VectorIterator",gu,{$E:1,rc:1,c:1,ec:1,t:1,s:1,zq:1});function yx(){}yx.prototype=new v;function zx(){}zx.prototype=yx.prototype;yx.prototype.Mc=function(a,b){Qn(this,a,b)};var Ax=new u({Bq:0},!1,"scala.collection.mutable.ArrayBuilder",w,{Bq:1,c:1,Pb:1,Kb:1,Jb:1,g:1,e:1});yx.prototype.a=Ax;function Bx(){this.uo=this.Wh=this.Qk=this.rh=null}Bx.prototype=new Lu;function ub(a,b,c,e){var f=new Bx;f.rh=a;f.Qk=b;f.Wh=c;f.uo=e;return f}
+Bx.prototype.pi=function(){this.Wh.i=(1+this.Wh.i)%pb(wb(),this.rh);0===this.Wh.i&&qb(wb(),this.rh);this.uo.og(C(function(a){return null!==a&&null!==a.va?!0:!1})).A(C(function(a){return function(b){a:{if(null!==b){var c=b.va,e=b.wa|0;if(null!==c){b=c.va;c=c.wa;wb();e=((a.rh.height|0)/3|0)*(0.5+e);c=c.dd(75*(a.Wh.i/pb(wb(),a.rh)));wb();c=c*(a.rh.height|0)/30;a.Qk.fillStyle=b;a.Qk.fillRect(a.Wh.i,c+e,3,3);break a}}throw(new H).o(b);}}}(this)))};Bx.prototype.Ed=function(){this.pi()};
+Bx.prototype.a=new u({Qr:0},!1,"Splash$$anonfun$main$1",Mu,{Qr:1,Rq:1,jg:1,c:1,$e:1,Np:1,g:1,e:1});function Xb(){this.mj=null}Xb.prototype=new Iu;Xb.prototype.tl=function(a){this.mj=a;return this};Xb.prototype.Ed=function(){var a=Vb(this.mj),a=(new wc).f(a),a=xc(a,32);Pn||(Pn=(new On).b());var b;b=(new Cx).ul(Ge(Ie(),Ik(W(),la(a))));for(var c=0,e=a.d.length;c<e;){var f=a.d[c];0<(f.length|0)&&Dx(b,f);c=1+c|0}return Ex(b).d.length};
+Xb.prototype.a=new u({Ur:0},!1,"advanced.BasicRx$$anonfun$2",Ju,{Ur:1,Qq:1,jg:1,c:1,$e:1,QB:1,g:1,e:1});function Fx(){this.np=this.mj=null}Fx.prototype=new Fu;Fx.prototype.qh=function(){for(var a=Vb(this.mj),a=(new wc).f(a),b=0,c=b=0,e=a.Ma.length|0;c<e;){var f=a.pa(c);32!==yp(T(),f)&&(b=1+b|0);c=1+c|0}return b/(Vb(this.np)|0)};Fx.prototype.Ed=function(){return this.qh()};function Yb(a,b){var c=new Fx;c.mj=a;c.np=b;return c}
+Fx.prototype.a=new u({Vr:0},!1,"advanced.BasicRx$$anonfun$3",Gu,{Vr:1,Pq:1,jg:1,c:1,$e:1,PB:1,g:1,e:1});function md(){Wp.call(this);this.lk=null}md.prototype=new lr;m=md.prototype;m.gb=k("AjaxException");m.eb=k(1);m.fa=function(a){return this===a?!0:a&&a.a&&a.a.y.Um?S(T(),this.lk,a.lk):!1};m.fb=function(a){switch(a){case 0:return this.lk;default:throw(new X).f(""+a);}};m.ja=function(){return yl(this)};m.kb=function(){return av(this)};
+m.a=new u({Um:0},!1,"org.scalajs.dom.ext.AjaxException",mr,{Um:1,Nb:1,nb:1,c:1,e:1,ua:1,n:1,g:1});function Tb(){this.Kp=this.Fa=this.oc=this.Jp=null;this.cj=!1;this.bj=null}Tb.prototype=new v;m=Tb.prototype;m.Rg=function(){return this.Fa.l.bp};m.Xi=function(){return this.Fa.l.Bp.sd()};m.Zl=d("bj");m.Ng=function(a,b){this.Jp=a;this.oc=b;this.Zl((new Vu).o(ar()));this.cj=!0;this.Kp=(new Pt).rl(Id());this.Fa=(new Vu).o(Gx(this));return this};m.cr=function(){return this.Fa.l.l};
+function Gx(a){var b=a.Kp,c=b.Ti;b.Ti=Xh((new U).j(1,0,0),c);var b=Wb().Fi,e=K(),e=(new Bd).o((new A).v(a,e)),f=b.qd.La();Vd(b.qd,e);try{var h=ml(ol(),a.Jp),l=Wb().Fi,q=(new A).v(h,l.qd.La().La().wa)}finally{Vd(b.qd,f)}if(null!==q)h=q.va,l=q.wa;else throw(new H).o(q);q=h;h=l;l=rf().ka;if(l===rf().ka)if(h===K())l=K();else for(l=h.x(),b=l=Td(new Ud,l.Rg(),K()),e=h.u();e!==K();)f=e.x(),f=Td(new Ud,f.Rg(),K()),b=b.rd=f,e=e.u();else{l=qf(h,l);for(b=h;!b.m();)e=b.x(),l.za(e.Rg()),b=b.u();l=l.oa()}b=Td(new Ud,
+Id(),l);e=Kp();l=new Ip;b=Ma(Xm(b,e));l.Bp=h;l.bp=b;Hd.prototype.Gx.call(l,a,c,q);return l}m.Sl=function(a){if(!this.Xi().xl(a).m()||a.pb(this)){var b=Gx(this);a=this.Fa.l.l;var c=this.Fa;a:for(;;){var e=c.l,f=qt(b.Bm,e.Bm)?(new Bd).o(b):wd();if(Sd(f)){if(Dd(c,e,f.zc))break a}else if(wd()===f)break a;else throw(new H).o(f);}b=this.Fa.l.l;a=(null===b?null===a:b.fa(a))?sb(jc().tn,K()):Ed(this)}else a=ar();return a};m.a=new u({ns:0},!1,"rx.core.Dynamic",w,{ns:1,c:1,ws:1,qs:1,Xm:1,Ym:1,kI:1,iI:1});
+function Hx(){Mw.call(this);this.vx=this.Iz=null}Hx.prototype=new Nw;Hx.prototype.Ga=function(a,b,c){Mw.prototype.Ga.call(this,a,b,c);a=(new L).b();this.Iz=N(new O,this,"none",a);a=(new L).b();this.vx=N(new O,this,"hidden",a);return this};Hx.prototype.a=new u({Vs:0},!1,"scalatags.generic.StyleMisc$BorderStyle",Ow,{Vs:1,fn:1,bd:1,c:1,ua:1,n:1,g:1,e:1});function Ix(){bv.call(this);this.he=this.sa=null}Ix.prototype=new cv;Ix.prototype.dm=d("he");
+Ix.prototype.Hd=function(a){if(null===a)throw I(J(),null);this.sa=a;bv.prototype.ma.call(this,"marginRight","margin-right");ie(this);return this};Ix.prototype.a=new u({bt:0},!1,"scalatags.generic.Styles$$anon$1",dv,{bt:1,ph:1,c:1,ua:1,n:1,g:1,e:1,en:1});function Jx(){bv.call(this);this.he=this.sa=null}Jx.prototype=new cv;Jx.prototype.dm=d("he");Jx.prototype.Hd=function(a){if(null===a)throw I(J(),null);this.sa=a;bv.prototype.ma.call(this,"marginTop","margin-top");ie(this);return this};
+Jx.prototype.a=new u({ct:0},!1,"scalatags.generic.Styles$$anon$2",dv,{ct:1,ph:1,c:1,ua:1,n:1,g:1,e:1,en:1});function Kx(){bv.call(this);this.he=this.sa=null}Kx.prototype=new cv;Kx.prototype.dm=d("he");Kx.prototype.Hd=function(a){if(null===a)throw I(J(),null);this.sa=a;bv.prototype.ma.call(this,"marginLeft","margin-left");ie(this);return this};Kx.prototype.a=new u({dt:0},!1,"scalatags.generic.Styles$$anon$3",dv,{dt:1,ph:1,c:1,ua:1,n:1,g:1,e:1,en:1});
+function Lx(){$.call(this);this.Cl=this.Sk=this.Yl=this.Hl=this.Gg=this.vm=this.sa=null}Lx.prototype=new ev;m=Lx.prototype;m.pq=d("vm");m.mq=d("Cl");m.kq=d("Sk");m.nq=d("Hl");m.oq=d("Yl");m.lq=d("Gg");m.Hd=function(a){if(null===a)throw I(J(),null);this.sa=a;$.prototype.ma.call(this,"textAlignLast","text-align-last");ke(this);return this};m.a=new u({et:0},!1,"scalatags.generic.Styles$$anon$4",fv,{et:1,bd:1,c:1,ua:1,n:1,g:1,e:1,gt:1});
+function Mx(){$.call(this);this.Cl=this.Sk=this.Yl=this.Hl=this.Gg=this.vm=this.sa=null}Mx.prototype=new ev;m=Mx.prototype;m.pq=d("vm");m.mq=d("Cl");m.kq=d("Sk");m.nq=d("Hl");m.oq=d("Yl");m.lq=d("Gg");m.Hd=function(a){if(null===a)throw I(J(),null);this.sa=a;$.prototype.ma.call(this,"textAlign","text-align");ke(this);return this};m.a=new u({ft:0},!1,"scalatags.generic.Styles$$anon$5",fv,{ft:1,bd:1,c:1,ua:1,n:1,g:1,e:1,gt:1});function Nx(){Dw.call(this);this.Jo=null;this.jl=!1;this.xi=null}
+Nx.prototype=new Ew;function fi(a){var b=new Nx;b.Jo=a;Dw.prototype.sl.call(b,(new Gt).b());b.jl=!0;b.xi="";return b}function Cu(a,b){for(var c=b;""!==c;){var e=c.indexOf("\n")|0;if(0>e)a.xi=""+a.xi+c,a.jl=!1,c="";else{var f=""+a.xi+c.substring(0,e);n.console&&(a.Jo&&n.console.error?n.console.error(f):n.console.log(f));a.xi="";a.jl=!0;c=c.substring(1+e|0)}}}Nx.prototype.tj=da();Nx.prototype.a=new u({py:0},!1,"java.lang.JSConsoleBasedPrintStream",Fw,{py:1,Sm:1,tk:1,$h:1,c:1,nh:1,Zh:1,Qo:1});
+function Ox(){Wp.call(this);this.Fn=0;this.fl=null}Ox.prototype=new gx;Ox.prototype.Mi=function(){return"Conversion \x3d "+(new ig).rb(this.Fn)+", Flags \x3d "+this.fl};Ox.prototype.rb=function(a){this.Fn=a;fx.prototype.b.call(this);this.fl=null;return this};function ht(){var a=new Ox;Ox.prototype.rb.call(a,115);a.fl="#";return a}Ox.prototype.a=new u({Dy:0},!1,"java.util.FormatFlagsConversionMismatchException",hx,{Dy:1,Ij:1,Pg:1,Gc:1,Nb:1,nb:1,c:1,e:1});function rr(){Wp.call(this);this.gl=null}
+rr.prototype=new gx;rr.prototype.b=function(){fx.prototype.b.call(this);this.gl=null;return this};rr.prototype.Mi=function(){return"Flags \x3d '"+this.gl+"'"};rr.prototype.f=function(a){rr.prototype.b.call(this);if(null===a)throw(new ya).b();this.gl=a;return this};rr.prototype.a=new u({Iy:0},!1,"java.util.IllegalFormatFlagsException",hx,{Iy:1,Ij:1,Pg:1,Gc:1,Nb:1,nb:1,c:1,e:1});function gt(){Wp.call(this);this.$l=null}gt.prototype=new gx;
+gt.prototype.b=function(){fx.prototype.b.call(this);this.$l=null;return this};gt.prototype.Mi=function(){return"Format specifier '"+this.$l+"'"};gt.prototype.f=function(a){gt.prototype.b.call(this);if(null===a)throw(new ya).b();this.$l=a;return this};gt.prototype.a=new u({Jy:0},!1,"java.util.MissingFormatArgumentException",hx,{Jy:1,Ij:1,Pg:1,Gc:1,Nb:1,nb:1,c:1,e:1});function ss(){}ss.prototype=new lx;ss.prototype.fa=k(!1);ss.prototype.r=k("Duration.Undefined");
+ss.prototype.a=new u({uC:0},!1,"scala.concurrent.duration.Duration$$anon$1",mx,{uC:1,Uj:1,Kh:1,c:1,g:1,e:1,bg:1,nc:1});function ts(){}ts.prototype=new lx;ts.prototype.r=k("Duration.Inf");ts.prototype.a=new u({vC:0},!1,"scala.concurrent.duration.Duration$$anon$2",mx,{vC:1,Uj:1,Kh:1,c:1,g:1,e:1,bg:1,nc:1});function us(){}us.prototype=new lx;us.prototype.r=k("Duration.MinusInf");us.prototype.a=new u({wC:0},!1,"scala.concurrent.duration.Duration$$anon$3",mx,{wC:1,Uj:1,Kh:1,c:1,g:1,e:1,bg:1,nc:1});
+function Cs(){this.Tj=null}Cs.prototype=new v;m=Cs.prototype;m.pc=function(a){var b=this.ld();b===t(Va)?a=s(x(Va),[a]):b===t(Xa)?a=s(x(Xa),[a]):b===t(Ua)?a=s(x(Ua),[a]):b===t(Ya)?a=s(x(Ya),[a]):b===t(Za)?a=s(x(Za),[a]):b===t($a)?a=s(x($a),[a]):b===t(ab)?a=s(x(ab),[a]):b===t(Ta)?a=s(x(Ta),[a]):b===t(Sa)?a=s(x(xa),[a]):(xi||(xi=(new wi).b()),a=this.ld().Zd.newArrayOfThisClass([a]));return a};m.fa=function(a){var b;a&&a.a&&a.a.y.bc?(b=this.ld(),a=a.ld(),b=b===a):b=!1;return b};
+m.r=function(){return Hk(this,this.Tj)};m.ld=g("Tj");m.ja=function(){return xl(W(),this.Tj)};m.a=new u({YC:0},!1,"scala.reflect.ClassTag$$anon$1",w,{YC:1,c:1,bc:1,Jc:1,qc:1,g:1,e:1,n:1});function Px(){this.ka=null}Px.prototype=new qx;Px.prototype.ha=function(){Qx||(Qx=(new Rx).b());return(new os).b()};Px.prototype.a=new u({QD:0},!1,"scala.collection.Seq$",rx,{QD:1,Lc:1,tc:1,Cb:1,Xa:1,c:1,Ob:1,ob:1});var Sx=void 0;function tb(){Sx||(Sx=(new Px).b());return Sx}function Tx(){this.ka=null}
+Tx.prototype=new qx;function Ux(){}Ux.prototype=Tx.prototype;var Vx=new u({bk:0},!1,"scala.collection.generic.IndexedSeqFactory",rx,{bk:1,Lc:1,tc:1,Cb:1,Xa:1,c:1,Ob:1,ob:1});Tx.prototype.a=Vx;function Wx(){this.iw=null}Wx.prototype=new at;Wx.prototype.b=function(){Xx=this;this.iw=Jq(new Iq,Fc(function(){return ba()}(this)));return this};
+function Yx(a,b,c,e,f,h,l){var q=31&(b>>>h|0),r=31&(e>>>h|0);if(q!==r)return a=1<<q|1<<r,b=s(x(Zx),[2]),q<r?(b.d[0]=c,b.d[1]=f):(b.d[0]=f,b.d[1]=c),$x(new ay,a,b,l);r=s(x(Zx),[1]);q=1<<q;r.d[0]=Yx(a,b,c,e,f,5+h|0,l);return $x(new ay,q,r,l)}Wx.prototype.ao=function(){return by()};Wx.prototype.a=new u({$D:0},!1,"scala.collection.immutable.HashMap$",bt,{$D:1,em:1,ck:1,ej:1,c:1,TK:1,g:1,e:1});var Xx=void 0;function cy(){Xx||(Xx=(new Wx).b());return Xx}function Rx(){this.ka=null}Rx.prototype=new qx;
+Rx.prototype.ha=function(){return(new os).b()};Rx.prototype.a=new u({FE:0},!1,"scala.collection.immutable.Seq$",rx,{FE:1,Lc:1,tc:1,Cb:1,Xa:1,c:1,Ob:1,ob:1});var Qx=void 0;function Cx(){this.Cc=this.fo=null;this.od=this.ze=0}Cx.prototype=new zx;m=Cx.prototype;m.ul=function(a){this.fo=a;this.od=this.ze=0;return this};m.fa=function(a){return a&&a.a&&a.a.y.Cq?this.od===a.od&&this.Cc===a.Cc:!1};m.Sb=function(a){return Dx(this,a)};m.r=k("ArrayBuilder.ofRef");m.oa=function(){return Ex(this)};
+function Dx(a,b){dy(a,1+a.od|0);a.Cc.d[a.od]=b;a.od=1+a.od|0;return a}function Ex(a){return 0!==a.ze&&a.ze===a.od?a.Cc:ey(a,a.od)}m.za=function(a){return Dx(this,a)};m.vb=function(a){this.ze<a&&(this.Cc=ey(this,a),this.ze=a)};function dy(a,b){if(a.ze<b||0===a.ze){for(var c=0===a.ze?16:y(2,a.ze);c<b;)c=y(2,c);a.Cc=ey(a,c);a.ze=c}}function ey(a,b){var c=a.fo.pc(b);0<a.od&&St(Fe(),a.Cc,0,c,0,a.od);return c}
+m.hb=function(a){a&&a.a&&a.a.y.Kq?(dy(this,this.od+a.ba()|0),St(Fe(),a.q,0,this.Cc,this.od,a.ba()),this.od=this.od+a.ba()|0,a=this):a=ef(this,a);return a};m.a=new u({Cq:0},!1,"scala.collection.mutable.ArrayBuilder$ofRef",Ax,{Cq:1,Bq:1,c:1,Pb:1,Kb:1,Jb:1,g:1,e:1});function Kc(){this.ka=null}Kc.prototype=new qx;Kc.prototype.ha=function(){return(new z).b()};Kc.prototype.a=new u({fF:0},!1,"scala.collection.mutable.Buffer$",rx,{fF:1,Lc:1,tc:1,Cb:1,Xa:1,c:1,Ob:1,ob:1});var Jc=void 0;
+function fy(){this.ka=null}fy.prototype=new qx;fy.prototype.ha=function(){return(new Bm).b()};fy.prototype.a=new u({rF:0},!1,"scala.collection.mutable.IndexedSeq$",rx,{rF:1,Lc:1,tc:1,Cb:1,Xa:1,c:1,Ob:1,ob:1});var gy=void 0;function hy(){gy||(gy=(new fy).b());return gy}function iy(){this.ka=null}iy.prototype=new qx;iy.prototype.ha=function(){return(new z).b()};iy.prototype.a=new u({iG:0},!1,"scala.scalajs.js.WrappedArray$",rx,{iG:1,Lc:1,tc:1,Cb:1,Xa:1,c:1,Ob:1,ob:1});var jy=void 0;
+function ft(){jy||(jy=(new iy).b());return jy}function G(){this.Na=null}G.prototype=new v;m=G.prototype;m.gb=k("StringFrag");m.eb=k(1);m.fa=function(a){return this===a?!0:a&&a.a&&a.a.y.an?this.Na===a.Na:!1};m.fb=function(a){switch(a){case 0:return this.Na;default:throw(new X).f(""+a);}};m.r=function(){return Cp(W(),this)};m.Ef=function(a){a.appendChild(this.Xl())};m.Xl=function(){return n.document.createTextNode(this.Na)};m.f=function(a){this.Na=a;return this};m.ja=function(){return yl(this)};
+m.kb=function(){return av(this)};m.a=new u({an:0},!1,"scalatags.JsDom$StringFrag",w,{an:1,c:1,kt:1,uk:1,oh:1,ua:1,n:1,g:1,e:1});function Pf(){Wp.call(this);this.Lj=this.uj=null}Pf.prototype=new lr;m=Pf.prototype;m.gb=k("Data");m.eb=k(2);m.fa=function(a){if(this===a)return!0;if(a&&a.a&&a.a.y.kn){var b=this.uj,c=a.uj;return(null===b?null===c:b.fa(c))?this.Lj===a.Lj:!1}return!1};m.fb=function(a){switch(a){case 0:return this.uj;case 1:return this.Lj;default:throw(new X).f(""+a);}};
+function Of(a,b,c){a.uj=b;a.Lj=c;nd.prototype.f.call(a,qe((new re).jb((new z).k(["data: "," msg: ",""])),(new z).k([b,c])));return a}m.ja=function(){return yl(this)};m.kb=function(){return av(this)};m.a=new u({kn:0},!1,"upickle.Invalid$Data",mr,{kn:1,Nb:1,nb:1,c:1,e:1,MI:1,ua:1,n:1,g:1});function ky(){}ky.prototype=new v;m=ky.prototype;m.b=function(){ly=this;return this};m.Mg=function(a,b){return 0<=this.Qc(a,b)};m.Qc=function(a,b){return(a|0)<(b|0)?-1:(a|0)===(b|0)?0:1};
+m.Tg=function(a,b){return 0>=this.Qc(a,b)};m.a=new u({PC:0},!1,"scala.math.Ordering$Int$",w,{PC:1,c:1,QC:1,Mh:1,Fh:1,Nh:1,Lh:1,g:1,e:1});var ly=void 0;function zf(){ly||(ly=(new ky).b());return ly}function my(){}my.prototype=new v;m=my.prototype;m.b=function(){ny=this;return this};m.Mg=function(a,b){return 0<=this.Qc(a,b)};m.Qc=function(a,b){var c=Ma(a),e=Ma(b);return vo(e,c)?-1:vp(c,e)?0:1};m.Tg=function(a,b){return 0>=this.Qc(a,b)};
+m.a=new u({RC:0},!1,"scala.math.Ordering$Long$",w,{RC:1,c:1,KK:1,Mh:1,Fh:1,Nh:1,Lh:1,g:1,e:1});var ny=void 0;function Kp(){ny||(ny=(new my).b());return ny}function oy(){this.ar=null;this.vo=0}oy.prototype=new v;function py(){}py.prototype=oy.prototype;oy.prototype.fa=function(a){return this===a};oy.prototype.r=g("ar");oy.prototype.f=function(a){this.ar=a;this.vo=Ka(this);return this};oy.prototype.ja=g("vo");
+var qy=new u({Le:0},!1,"scala.reflect.AnyValManifest",w,{Le:1,c:1,Vc:1,bc:1,Jc:1,qc:1,g:1,e:1,n:1});oy.prototype.a=qy;function ry(){this.yH=this.Ip=this.CB=null}ry.prototype=new v;function sy(){}sy.prototype=ry.prototype;ry.prototype.ld=g("Ip");ry.prototype.Mx=function(a,b,c){this.CB=a;this.Ip=b;this.yH=c;return this};var ty=new u({Zg:0},!1,"scala.reflect.ManifestFactory$ClassTypeManifest",w,{Zg:1,c:1,Vc:1,bc:1,Jc:1,qc:1,g:1,e:1,n:1});ry.prototype.a=ty;function uy(){this.ef=this.ka=null}
+uy.prototype=new Ux;uy.prototype.b=function(){Tx.prototype.b.call(this);vy=this;this.ef=(new Ks).b();return this};uy.prototype.ha=function(){gf();Je();return(new cf).b()};uy.prototype.a=new u({HD:0},!1,"scala.collection.IndexedSeq$",Vx,{HD:1,bk:1,Lc:1,tc:1,Cb:1,Xa:1,c:1,Ob:1,ob:1});var vy=void 0;function Ke(){vy||(vy=(new uy).b());return vy}function am(){this.Ch=this.Gg=0;this.G=null}am.prototype=new fu;
+am.prototype.ia=function(){this.Ch>=this.Gg&&Yj().Dc.ia();var a=this.G.pa(this.Ch);this.Ch=1+this.Ch|0;return a};function $l(a,b,c){a.Gg=c;if(null===b)throw I(J(),null);a.G=b;a.Ch=0;return a}am.prototype.qa=function(){return this.Ch<this.Gg};am.prototype.a=new u({JD:0},!1,"scala.collection.IndexedSeqLike$Elements",gu,{JD:1,rc:1,c:1,ec:1,t:1,s:1,RK:1,g:1,e:1});function wy(){}wy.prototype=new Yv;
+function xy(a,b,c,e,f,h){var l=31&(b>>>h|0),q=31&(e>>>h|0);if(l!==q)return a=1<<l|1<<q,b=s(x(yy),[2]),l<q?(b.d[0]=c,b.d[1]=f):(b.d[0]=f,b.d[1]=c),zy(new Ay,a,b,c.z()+f.z()|0);q=s(x(yy),[1]);l=1<<l;c=xy(a,b,c,e,f,5+h|0);q.d[0]=c;return zy(new Ay,l,q,c.Oe)}wy.prototype.wj=function(){return By()};wy.prototype.a=new u({fE:0},!1,"scala.collection.immutable.HashSet$",Zv,{fE:1,ak:1,ch:1,eg:1,Xa:1,c:1,ob:1,g:1,e:1});var Cy=void 0;function mz(){Cy||(Cy=(new wy).b());return Cy}function nz(){this.ka=null}
+nz.prototype=new Ux;nz.prototype.ha=function(){Je();return(new cf).b()};nz.prototype.a=new u({jE:0},!1,"scala.collection.immutable.IndexedSeq$",Vx,{jE:1,bk:1,Lc:1,tc:1,Cb:1,Xa:1,c:1,Ob:1,ob:1});var oz=void 0;function gf(){oz||(oz=(new nz).b());return oz}function pz(){}pz.prototype=new Yv;pz.prototype.wj=function(){return mu()};pz.prototype.ha=function(){return(new ku).b()};pz.prototype.a=new u({qE:0},!1,"scala.collection.immutable.ListSet$",Zv,{qE:1,ak:1,ch:1,eg:1,Xa:1,c:1,ob:1,g:1,e:1});var qz=void 0;
+function rz(){}rz.prototype=new aw;rz.prototype.kf=function(){return(new pu).b()};rz.prototype.a=new u({oF:0},!1,"scala.collection.mutable.HashSet$",bw,{oF:1,qq:1,ch:1,eg:1,Xa:1,c:1,ob:1,g:1,e:1});var sz=void 0;function qp(){Wp.call(this);this.Jf=null}qp.prototype=new Ht;m=qp.prototype;m.gb=k("JavaScriptException");m.eb=k(1);m.Bj=function(){np();this.stackdata=this.Jf;return this};m.fa=function(a){return this===a?!0:pp(a)?S(T(),this.Jf,a.Jf):!1};
+m.fb=function(a){switch(a){case 0:return this.Jf;default:throw(new X).f(""+a);}};m.r=function(){return ka(this.Jf)};m.o=function(a){this.Jf=a;Sr.prototype.b.call(this);return this};m.ja=function(){return yl(this)};m.kb=function(){return av(this)};function pp(a){return!!(a&&a.a&&a.a.y.Mq)}m.a=new u({Mq:0},!1,"scala.scalajs.js.JavaScriptException",It,{Mq:1,Gc:1,Nb:1,nb:1,c:1,e:1,ua:1,n:1,g:1});function te(){this.Zf=this.ue=null;this.Vh=!1;this.Vg=null}te.prototype=new v;m=te.prototype;m.gb=k("TypedTag");
+m.eb=k(4);m.fa=function(a){if(this===a)return!0;if(a&&a.a&&a.a.y.bn){if(this.ue===a.ue)var b=this.Zf,c=a.Zf,b=null===b?null===c:b.fa(c);else b=!1;return b&&this.Vh===a.Vh?this.Vg===a.Vg:!1}return!1};m.fb=function(a){switch(a){case 0:return this.ue;case 1:return this.Zf;case 2:return this.Vh;case 3:return this.Vg;default:throw(new X).f(""+a);}};m.r=function(){return D(this).outerHTML};m.Ef=function(a){a.appendChild(this.Xl())};m.Xl=function(){return D(this)};
+function F(a,b){return se(new te,a.ue,Td(new Ud,b,a.Zf),a.Vh,a.Vg)}function se(a,b,c,e,f){a.ue=b;a.Zf=c;a.Vh=e;a.Vg=f;return a}m.ja=function(){var a=-889275714,a=Hp().zd(a,Fp(Hp(),this.ue)),a=Hp().zd(a,Fp(Hp(),this.Zf)),a=Hp().zd(a,this.Vh?1231:1237),a=Hp().zd(a,Fp(Hp(),this.Vg));return Hp().Kg(a,4)};m.kb=function(){return av(this)};
+function D(a){var b=n.document.createElementNS(a.Vg.lr(),a.ue),c=a.Zf;a=a.Zf;a=s(x(tz),[rm(a)]);for(var e=0;;){var f=c,h=K();if(null===f?null===h:f.fa(h))break;else a.d[e]=c.x(),c=c.u(),e=1+e|0}for(c=a.d.length;0<c;)for(c=-1+c|0,e=a.d[c],f=0;f<e.ba();)e.pa(f).Ef(b),f=1+f|0;return b}m.a=new u({bn:0},!1,"scalatags.JsDom$TypedTag",w,{bn:1,c:1,GI:1,uk:1,oh:1,kt:1,ua:1,n:1,g:1,e:1});function Pk(){oy.call(this)}Pk.prototype=new py;Pk.prototype.b=function(){oy.prototype.f.call(this,"Long");return this};
+Pk.prototype.pc=function(a){return s(x(Za),[a])};Pk.prototype.ld=function(){return t(Za)};Pk.prototype.a=new u({aD:0},!1,"scala.reflect.ManifestFactory$$anon$10",qy,{aD:1,Le:1,c:1,Vc:1,bc:1,Jc:1,qc:1,g:1,e:1,n:1});function Qk(){oy.call(this)}Qk.prototype=new py;Qk.prototype.b=function(){oy.prototype.f.call(this,"Float");return this};Qk.prototype.pc=function(a){return s(x($a),[a])};Qk.prototype.ld=function(){return t($a)};
+Qk.prototype.a=new u({bD:0},!1,"scala.reflect.ManifestFactory$$anon$11",qy,{bD:1,Le:1,c:1,Vc:1,bc:1,Jc:1,qc:1,g:1,e:1,n:1});function Rk(){oy.call(this)}Rk.prototype=new py;Rk.prototype.b=function(){oy.prototype.f.call(this,"Double");return this};Rk.prototype.pc=function(a){return s(x(ab),[a])};Rk.prototype.ld=function(){return t(ab)};Rk.prototype.a=new u({cD:0},!1,"scala.reflect.ManifestFactory$$anon$12",qy,{cD:1,Le:1,c:1,Vc:1,bc:1,Jc:1,qc:1,g:1,e:1,n:1});function Sk(){oy.call(this)}
+Sk.prototype=new py;Sk.prototype.b=function(){oy.prototype.f.call(this,"Boolean");return this};Sk.prototype.pc=function(a){return s(x(Ta),[a])};Sk.prototype.ld=function(){return t(Ta)};Sk.prototype.a=new u({dD:0},!1,"scala.reflect.ManifestFactory$$anon$13",qy,{dD:1,Le:1,c:1,Vc:1,bc:1,Jc:1,qc:1,g:1,e:1,n:1});function Tk(){oy.call(this)}Tk.prototype=new py;Tk.prototype.b=function(){oy.prototype.f.call(this,"Unit");return this};Tk.prototype.pc=function(a){return s(x(xa),[a])};Tk.prototype.ld=function(){return t(Sa)};
+Tk.prototype.a=new u({eD:0},!1,"scala.reflect.ManifestFactory$$anon$14",qy,{eD:1,Le:1,c:1,Vc:1,bc:1,Jc:1,qc:1,g:1,e:1,n:1});function Lk(){oy.call(this)}Lk.prototype=new py;Lk.prototype.b=function(){oy.prototype.f.call(this,"Byte");return this};Lk.prototype.pc=function(a){return s(x(Va),[a])};Lk.prototype.ld=function(){return t(Va)};Lk.prototype.a=new u({jD:0},!1,"scala.reflect.ManifestFactory$$anon$6",qy,{jD:1,Le:1,c:1,Vc:1,bc:1,Jc:1,qc:1,g:1,e:1,n:1});function Mk(){oy.call(this)}Mk.prototype=new py;
+Mk.prototype.b=function(){oy.prototype.f.call(this,"Short");return this};Mk.prototype.pc=function(a){return s(x(Xa),[a])};Mk.prototype.ld=function(){return t(Xa)};Mk.prototype.a=new u({kD:0},!1,"scala.reflect.ManifestFactory$$anon$7",qy,{kD:1,Le:1,c:1,Vc:1,bc:1,Jc:1,qc:1,g:1,e:1,n:1});function Nk(){oy.call(this)}Nk.prototype=new py;Nk.prototype.b=function(){oy.prototype.f.call(this,"Char");return this};Nk.prototype.pc=function(a){return s(x(Ua),[a])};Nk.prototype.ld=function(){return t(Ua)};
+Nk.prototype.a=new u({lD:0},!1,"scala.reflect.ManifestFactory$$anon$8",qy,{lD:1,Le:1,c:1,Vc:1,bc:1,Jc:1,qc:1,g:1,e:1,n:1});function Ok(){oy.call(this)}Ok.prototype=new py;Ok.prototype.b=function(){oy.prototype.f.call(this,"Int");return this};Ok.prototype.pc=function(a){return s(x(Ya),[a])};Ok.prototype.ld=function(){return t(Ya)};Ok.prototype.a=new u({mD:0},!1,"scala.reflect.ManifestFactory$$anon$9",qy,{mD:1,Le:1,c:1,Vc:1,bc:1,Jc:1,qc:1,g:1,e:1,n:1});
+function uz(){ry.call(this);this.br=null;this.wo=0}uz.prototype=new sy;function vz(){}vz.prototype=uz.prototype;uz.prototype.fa=function(a){return this===a};uz.prototype.r=g("br");uz.prototype.ja=g("wo");uz.prototype.Pi=function(a,b){this.br=b;ry.prototype.Mx.call(this,wd(),a,K());this.wo=Ka(this);return this};var wz=new u({Oh:0},!1,"scala.reflect.ManifestFactory$PhantomManifest",ty,{Oh:1,Zg:1,c:1,Vc:1,bc:1,Jc:1,qc:1,g:1,e:1,n:1});uz.prototype.a=wz;function xz(){this.AB=this.ka=null}
+xz.prototype=new qx;xz.prototype.b=function(){px.prototype.b.call(this);yz=this;this.AB=(new Lq).b();return this};xz.prototype.kf=function(){return K()};xz.prototype.ha=function(){return(new os).b()};xz.prototype.a=new u({lE:0},!1,"scala.collection.immutable.List$",rx,{lE:1,Lc:1,tc:1,Cb:1,Xa:1,c:1,Ob:1,ob:1,g:1,e:1});var yz=void 0;function rf(){yz||(yz=(new xz).b());return yz}function zz(){this.ka=null}zz.prototype=new qx;
+function Az(a,b,c){var e=b.x();return im(new jm,e,Rb(function(a,b,c){return function(){return Bz(b.u(),c)}}(a,b,c)))}function Cz(a,b,c){return im(new jm,b,Rb(function(a,b,c){return function(){return Cz(a,b+c|0,c)}}(a,b,c)))}zz.prototype.kf=function(){return km()};zz.prototype.ha=function(){return(new gw).b()};zz.prototype.a=new u({ME:0},!1,"scala.collection.immutable.Stream$",rx,{ME:1,Lc:1,tc:1,Cb:1,Xa:1,c:1,Ob:1,ob:1,g:1,e:1});var Dz=void 0;function fk(){Dz||(Dz=(new zz).b());return Dz}
+function Ez(){this.ka=null}Ez.prototype=new qx;Ez.prototype.ha=function(){return(new Bm).b()};Ez.prototype.a=new u({dF:0},!1,"scala.collection.mutable.ArrayBuffer$",rx,{dF:1,Lc:1,tc:1,Cb:1,Xa:1,c:1,Ob:1,ob:1,g:1,e:1});var Fz=void 0;function Gz(){this.ka=null}Gz.prototype=new qx;Gz.prototype.kf=function(){return(new Hz).b()};Gz.prototype.ha=function(){var a=(new Iz).b();return Kn(new Ln,a,C(function(){return function(a){return a.Ub}}(this)))};
+Gz.prototype.a=new u({uF:0},!1,"scala.collection.mutable.LinkedList$",rx,{uF:1,Lc:1,tc:1,Cb:1,Xa:1,c:1,Ob:1,ob:1,g:1,e:1});var Jz=void 0;function Kz(){this.ka=null}Kz.prototype=new qx;Kz.prototype.ha=function(){return uu(new tu,(new os).b())};Kz.prototype.a=new u({wF:0},!1,"scala.collection.mutable.ListBuffer$",rx,{wF:1,Lc:1,tc:1,Cb:1,Xa:1,c:1,Ob:1,ob:1,g:1,e:1});var Lz=void 0;function Mz(){this.ka=null}Mz.prototype=new qx;Mz.prototype.ha=function(){return(new Iz).b()};
+Mz.prototype.a=new u({zF:0},!1,"scala.collection.mutable.MutableList$",rx,{zF:1,Lc:1,tc:1,Cb:1,Xa:1,c:1,Ob:1,ob:1,g:1,e:1});var Nz=void 0;function Oz(){this.ka=null}Oz.prototype=new qx;Oz.prototype.ha=function(){var a=(new Iz).b();return Kn(new Ln,a,C(function(){return function(a){var c=a.Ub,e=a.Jd;a=a.Hc;var f=new Pz;Pz.prototype.b.call(f);f.Ub=c;f.Jd=e;f.Hc=a;return f}}(this)))};Oz.prototype.a=new u({BF:0},!1,"scala.collection.mutable.Queue$",rx,{BF:1,Lc:1,tc:1,Cb:1,Xa:1,c:1,Ob:1,ob:1,g:1,e:1});
+var Qz=void 0;function Yc(){Qz||(Qz=(new Oz).b());return Qz}function Wk(){uz.call(this)}Wk.prototype=new vz;Wk.prototype.b=function(){uz.prototype.Pi.call(this,Gk().Zj,"Any");return this};Wk.prototype.pc=function(a){return this.rf(a)};Wk.prototype.rf=function(a){return s(x(w),[a])};Wk.prototype.a=new u({$C:0},!1,"scala.reflect.ManifestFactory$$anon$1",wz,{$C:1,Oh:1,Zg:1,c:1,Vc:1,bc:1,Jc:1,qc:1,g:1,e:1,n:1});function Xk(){uz.call(this)}Xk.prototype=new vz;
+Xk.prototype.b=function(){uz.prototype.Pi.call(this,Gk().Zj,"Object");return this};Xk.prototype.pc=function(a){return this.rf(a)};Xk.prototype.rf=function(a){return s(x(w),[a])};Xk.prototype.a=new u({fD:0},!1,"scala.reflect.ManifestFactory$$anon$2",wz,{fD:1,Oh:1,Zg:1,c:1,Vc:1,bc:1,Jc:1,qc:1,g:1,e:1,n:1});function Yk(){uz.call(this)}Yk.prototype=new vz;Yk.prototype.b=function(){uz.prototype.Pi.call(this,Gk().Zj,"AnyVal");return this};Yk.prototype.pc=function(a){return this.rf(a)};
+Yk.prototype.rf=function(a){return s(x(w),[a])};Yk.prototype.a=new u({gD:0},!1,"scala.reflect.ManifestFactory$$anon$3",wz,{gD:1,Oh:1,Zg:1,c:1,Vc:1,bc:1,Jc:1,qc:1,g:1,e:1,n:1});function Zk(){uz.call(this)}Zk.prototype=new vz;Zk.prototype.b=function(){uz.prototype.Pi.call(this,Gk().hq,"Null");return this};Zk.prototype.pc=function(a){return this.rf(a)};Zk.prototype.rf=function(a){return s(x(w),[a])};
+Zk.prototype.a=new u({hD:0},!1,"scala.reflect.ManifestFactory$$anon$4",wz,{hD:1,Oh:1,Zg:1,c:1,Vc:1,bc:1,Jc:1,qc:1,g:1,e:1,n:1});function $k(){uz.call(this)}$k.prototype=new vz;$k.prototype.b=function(){uz.prototype.Pi.call(this,Gk().gq,"Nothing");return this};$k.prototype.pc=function(a){return this.rf(a)};$k.prototype.rf=function(a){return s(x(w),[a])};$k.prototype.a=new u({iD:0},!1,"scala.reflect.ManifestFactory$$anon$5",wz,{iD:1,Oh:1,Zg:1,c:1,Vc:1,bc:1,Jc:1,qc:1,g:1,e:1,n:1});
+function kv(a){return!!(a&&a.a&&a.a.y.Qa)}function Rz(){this.qj=this.ka=null;this.qJ=this.fI=0}Rz.prototype=new Ux;Rz.prototype.b=function(){Tx.prototype.b.call(this);Sz=this;this.qj=(new sw).j(0,0,0);return this};Rz.prototype.kf=g("qj");Rz.prototype.ha=function(){return(new cf).b()};Rz.prototype.a=new u({YE:0},!1,"scala.collection.immutable.Vector$",Vx,{YE:1,bk:1,Lc:1,tc:1,Cb:1,Xa:1,c:1,Ob:1,ob:1,g:1,e:1});var Sz=void 0;function Je(){Sz||(Sz=(new Rz).b());return Sz}function pg(){}pg.prototype=new v;
+m=pg.prototype;m.b=function(){og=this;return this};m.kj=function(a){return a|0};m.Mg=function(a,b){return 0<=this.Qc(a,b)};m.Qc=function(a,b){return(a|0)-(b|0)|0};m.Tg=function(a,b){return 0>=this.Qc(a,b)};m.a=new u({IC:0},!1,"scala.math.Numeric$ByteIsIntegral$",w,{IC:1,c:1,AK:1,Zp:1,Vj:1,Mh:1,Fh:1,Nh:1,Lh:1,g:1,e:1,HK:1});var og=void 0;function wg(){}wg.prototype=new v;m=wg.prototype;m.b=function(){vg=this;return this};m.kj=function(a){return a|0};m.Mg=function(a,b){return 0<=this.Qc(a,b)};
+m.Qc=function(a,b){return(a|0)<(b|0)?-1:(a|0)===(b|0)?0:1};m.Tg=function(a,b){return 0>=this.Qc(a,b)};m.a=new u({LC:0},!1,"scala.math.Numeric$IntIsIntegral$",w,{LC:1,c:1,FK:1,Zp:1,Vj:1,Mh:1,Fh:1,Nh:1,Lh:1,g:1,e:1,QC:1});var vg=void 0;function ug(){}ug.prototype=new v;m=ug.prototype;m.b=function(){tg=this;return this};m.kj=function(a){return a|0};m.Mg=function(a,b){return 0<=this.Qc(a,b)};m.Qc=function(a,b){return(a|0)-(b|0)|0};m.Tg=function(a,b){return 0>=this.Qc(a,b)};
+m.a=new u({MC:0},!1,"scala.math.Numeric$ShortIsIntegral$",w,{MC:1,c:1,GK:1,Zp:1,Vj:1,Mh:1,Fh:1,Nh:1,Lh:1,g:1,e:1,LK:1});var tg=void 0;function Tz(){}Tz.prototype=new v;function Uz(){}m=Uz.prototype=Tz.prototype;m.oo=function(a){return gn(this,a)};m.Lg=function(a,b){return Im(this,a,b)};m.Yf=function(a){return this.Ug("",a,"")};m.Ug=function(a,b,c){return Ym(this,a,b,c)};m.og=function(a){return(new wf).Pf(this,a)};m.Ec=function(a,b){return Wm(this,a,b)};m.Lf=function(a){return Hl(this,a,!1)};m.z=function(){return $m(this)};
+m.Xf=function(a){return Rm(this,a)};m.u=function(){return Yl(this)};m.hf=function(a,b,c,e){return Am(this,a,b,c,e)};m.Wf=function(a){return Xm(this,a)};m.sd=function(){var a=Fd(),a=Gd(a);return sf(this,a)};m.pe=function(){return this};m.pg=function(a,b){return this.Ec(a,b)};m.Re=function(a){return Tm(this,a)};m.ac=function(a,b){return Qd(this,a,b)};m.mp=function(){return!this.m()};m.Uc=function(a){return Ml(this,a)};m.ha=function(){return this.ib().ha()};m.Ud=function(){return Jm(this)};
+var Vz=new u({aa:0},!1,"scala.collection.AbstractTraversable",w,{aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1});Tz.prototype.a=Vz;function Eg(){}Eg.prototype=new v;m=Eg.prototype;m.b=function(){Dg=this;return this};m.kj=function(a){return+a};m.Mg=function(a,b){return+a>=+b};m.Qc=function(a,b){var c=+a,e=+b;return Mh(Ag(),c,e)};m.Tg=function(a,b){return+a<=+b};m.a=new u({JC:0},!1,"scala.math.Numeric$DoubleIsFractional$",w,{JC:1,c:1,CK:1,BK:1,Vj:1,Mh:1,Fh:1,Nh:1,Lh:1,g:1,e:1,EC:1,IK:1});
+var Dg=void 0;function Cg(){}Cg.prototype=new v;m=Cg.prototype;m.b=function(){Bg=this;return this};m.kj=function(a){return ta(a)};m.Mg=function(a,b){var c=ta(a),e=ta(b);return c>=e};m.Qc=function(a,b){var c=ta(a),e=ta(b);return Mh(Ag(),c,e)};m.Tg=function(a,b){var c=ta(a),e=ta(b);return c<=e};m.a=new u({KC:0},!1,"scala.math.Numeric$FloatIsFractional$",w,{KC:1,c:1,EK:1,DK:1,Vj:1,Mh:1,Fh:1,Nh:1,Lh:1,g:1,e:1,EC:1,JK:1});var Bg=void 0;function cm(a){return!!(a&&a.a&&a.a.y.dc)}function Wz(){}
+Wz.prototype=new Uz;function Xz(){}m=Xz.prototype=Wz.prototype;m.x=function(){return this.ga().ia()};m.Gi=function(a){for(var b=this.ga(),c=!1;!c&&b.qa();)c=!!a.h(b.ia());return c};m.Wc=function(a){return Tl(this,a)};m.ib=function(){return Xj()};m.Li=function(a){var b=this.ga();return nm(b,a)};m.A=function(a){var b=this.ga();mm(b,a)};m.Af=function(a){return fd(this,a)};m.fd=function(a){return bm(this,a)};m.kc=function(){return this.ga().kc()};
+m.Dg=function(a,b,c){var e=b;b=b+c|0;c=Pl(W(),a);b=b<c?b:c;for(c=this.ga();e<b&&c.qa();)Ql(W(),a,e,c.ia()),e=1+e|0};var Yz=new u({ca:0},!1,"scala.collection.AbstractIterable",Vz,{ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1});Wz.prototype.a=Yz;var pw=new u({Ea:0},!0,"scala.collection.immutable.Iterable",void 0,{Ea:1,Ja:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,Ia:1,$:1,Y:1,Q:1,U:1,n:1});function wc(){this.Ma=null}wc.prototype=new v;m=wc.prototype;m.Aa=function(){return(new Mn).f(this.Ma)};
+m.x=function(){return Zl(this)};m.pa=function(a){a=65535&(this.Ma.charCodeAt(a)|0);return(new ig).rb(a)};m.$b=function(a){return this.ba()-a|0};m.Wc=function(a){return Sl(this,a)};m.m=function(){return Xl(this)};m.bb=function(){return(new Mn).f(this.Ma)};m.fa=function(a){return An().cl(this.Ma,a)};m.Lg=function(a,b){return Im(this,a,b)};m.Yf=function(a){return Ym(this,"",a,"")};m.Ug=function(a,b,c){return Ym(this,a,b,c)};m.og=function(a){return(new wf).Pf(this,a)};m.r=g("Ma");
+m.A=function(a){Ul(this,a)};m.Ec=function(a,b){return Ll(this,0,this.Ma.length|0,a,b)};m.Pe=function(a,b){return yn(An(),this.Ma,a,b)};m.Lf=function(a){return Hl(this,a,!1)};m.qe=function(){return Vl(this)};m.z=function(){return this.Ma.length|0};m.ga=function(){return $l(new am,this,this.Ma.length|0)};m.ba=function(){return this.Ma.length|0};m.Af=function(a){return Rl(this,a)};m.Xf=function(a){return Rm(this,a)};m.kc=function(){var a=$l(new am,this,this.Ma.length|0);return hm(a)};
+m.fd=function(a){var b=this.Ma.length|0;return yn(An(),this.Ma,a,b)};m.pd=function(){return(new Mn).f(this.Ma)};m.hf=function(a,b,c,e){return Am(this,a,b,c,e)};m.Wf=function(a){return Xm(this,a)};m.pe=g("Ma");m.sd=function(){var a=Fd(),a=Gd(a);return sf(this,a)};m.pg=function(a,b){return Ll(this,0,this.Ma.length|0,a,b)};m.Dg=function(a,b,c){Ol(this,a,b,c)};m.ja=function(){var a=this.Ma;return Ea(Fa(),a)};m.f=function(a){this.Ma=a;return this};m.Re=function(a){return Tm(this,a)};
+m.ac=function(a,b){return Qd(this,a,b)};m.Dd=function(a){this.Ma;return(new Mn).f(a)};m.Uc=function(a){return Kl(this,a)};m.ha=function(){this.Ma;return(new Zm).b()};m.Ud=function(){return Jm(this)};m.a=new u({yq:0},!1,"scala.collection.immutable.StringOps",w,{yq:1,c:1,xq:1,nd:1,dc:1,Ta:1,U:1,n:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,Q:1,Ra:1,bg:1,nc:1});var tz=new u({Sa:0},!0,"scala.collection.Seq",void 0,{Sa:1,H:1,p:1,$:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,Y:1,Q:1,U:1,n:1,Qa:1,Ra:1,Ta:1});
+function Zz(){}Zz.prototype=new Xz;function $z(){}$z.prototype=Zz.prototype;var aA=new u({mm:0},!1,"scala.collection.mutable.AbstractIterable",Yz,{mm:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,xb:1,yb:1,wb:1});Zz.prototype.a=aA;function bA(){this.Mj=0;this.Pl=null}bA.prototype=new v;function cA(){}m=cA.prototype=bA.prototype;m.Aa=function(){return this};m.x=function(){return Qe(this).ia()};m.Ex=function(a,b){this.Mj=a;this.Pl=b;return this};m.pa=function(a){return this.Pl.h(a)};
+m.$b=function(a){return Fm(this,a)};m.h=function(a){return this.pa(a|0)};m.Wc=function(a){return Tl(this,a)};m.dd=function(a){return+this.pa(a|0)};m.m=function(){return 0===this.$b(0)};m.bb=function(){return this};m.fa=function(a){return kv(a)?this.Wc(a):!1};m.Lg=function(a,b){return Im(this,a,b)};m.Ug=function(a,b,c){return Ym(this,a,b,c)};m.Yf=function(a){return Ym(this,"",a,"")};m.og=function(a){return(new wf).Pf(this,a)};m.ib=function(){return tb()};m.r=function(){return Hm(this)};
+m.A=function(a){var b=Qe(this);mm(b,a)};m.Ec=function(a,b){return Wm(this,a,b)};m.Lf=function(a){return Hl(this,a,!1)};m.qe=function(){return Em(this)};m.z=g("Mj");m.sf=function(a){return Lg(new Mg,this,a)};m.ga=function(){return Qe(this)};m.ba=g("Mj");m.Af=function(a){return fd(this,a)};m.Xf=function(a){return Rm(this,a)};m.kc=function(){var a=Qe(this);return hm(a)};m.fd=function(a){return bm(this,a)};m.pd=function(){return this};m.u=function(){return Yl(this)};
+m.hf=function(a,b,c,e){return Am(this,a,b,c,e)};m.Wf=function(a){return Xm(this,a)};m.Ha=function(a){return Il(this,a|0)};m.pe=function(){return this};m.sd=function(){var a=Fd(),a=Gd(a);return sf(this,a)};m.pg=function(a,b){return Wm(this,a,b)};m.cb=function(a,b){return cj(this,a,b)};m.ja=function(){return pq(zl(),this)};m.Re=function(a){return Tm(this,a)};m.ac=function(a,b){return Qd(this,a,b)};m.Dd=ba();m.Uc=function(a){return Ml(this,a)};m.ha=function(){tb();Qx||(Qx=(new Rx).b());return(new os).b()};
+m.Ud=function(){return Jm(this)};var dA=new u({Vm:0},!1,"org.scalajs.dom.ext.EasySeq",w,{Vm:1,c:1,Sa:1,H:1,p:1,$:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,Y:1,Q:1,U:1,n:1,Qa:1,Ra:1,Ta:1});bA.prototype.a=dA;function eA(){bA.call(this)}eA.prototype=new cA;function Pe(a){var b=new eA;bA.prototype.Ex.call(b,a.length|0,C(function(a){return function(b){return a[b|0]}}(a)));return b}
+eA.prototype.a=new u({ms:0},!1,"org.scalajs.dom.ext.package$PimpedNodeList",dA,{ms:1,Vm:1,c:1,Sa:1,H:1,p:1,$:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,Y:1,Q:1,U:1,n:1,Qa:1,Ra:1,Ta:1});
+function fA(){this.LJ=this.uJ=this.uL=this.tL=this.nL=this.oL=this.mL=this.lL=this.jK=this.kK=this.dK=this.GJ=this.RJ=this.SJ=this.QJ=this.iL=this.oK=this.Oj=this.FJ=this.cK=this.NJ=this.eK=this.lK=this.sL=this.vL=this.bK=this.aK=this.mK=this.vj=this.MJ=this.PJ=this.JJ=this.HJ=this.IJ=this.EJ=this.DJ=this.CJ=this.zJ=this.xJ=this.yJ=this.wJ=this.AJ=this.xH=this.sH=this.TG=this.NG=this.xG=this.cz=this.Mf=this.tx=this.vw=this.uw=this.lw=this.bw=this.aw=this.Bg=this.In=this.Pu=this.FH=this.l=this.uH=
+this.Sh=this.eH=this.LG=this.te=this.IB=this.FB=this.Zi=this.Yi=this.oc=this.Cz=this.yz=this.Gz=this.Dz=this.vz=this.iz=this.sx=this.gx=this.fx=this.ex=this.dx=this.cx=this.bx=this.Sv=this.Vu=this.Uu=this.Qu=this.PA=this.hA=this.fA=this.tA=this.lB=this.kB=this.hB=this.gB=this.dB=this.aB=this.$A=this.VA=this.UA=this.SA=this.RA=this.QA=this.EA=this.DA=this.CA=this.sA=this.rA=this.qA=this.gA=this.cA=this.bA=this.Xz=this.iB=this.cB=this.zA=this.AA=this.yA=this.mB=this.YA=this.KA=this.JA=this.IA=this.HA=
+this.GA=this.pA=this.oA=this.nA=this.mA=this.lA=this.kA=this.jA=this.iA=this.qp=this.jB=this.eB=this.XA=this.TA=this.OA=this.NA=this.MA=this.LA=this.FA=this.vA=this.$z=this.Zz=this.Yz=this.BA=this.YF=this.ZA=this.xA=this.wA=this.eA=this.WA=this.fB=this.bB=this.uA=this.dA=this.aA=this.MB=this.Zv=this.zz=this.yx=this.Gb=this.KB=this.Yv=this.LB=this.$w=this.mw=this.Qv=this.Ou=this.JH=this.JG=this.GB=this.Ck=this.nl=this.MH=this.GH=this.kH=this.jH=this.hH=this.iH=this.tB=this.rB=this.qB=this.Ez=this.Fz=
+this.wz=this.ez=this.Ev=this.EH=this.dr=this.fp=this.uz=this.tz=this.sz=this.Xw=this.Vw=this.Ww=this.Yw=this.Fv=this.wp=this.kz=this.Gl=this.gz=this.Sj=this.vB=this.uB=this.Rl=this.wB=this.zp=this.zo=this.xz=this.nB=this.mv=this.zv=this.jv=this.Dv=this.rv=this.xv=this.Cv=this.qv=this.kv=this.sv=this.pv=this.nv=this.hv=this.ov=this.lv=this.fv=this.gv=this.tv=this.iv=this.Av=this.vv=this.uv=this.Bv=this.wv=this.yv=this.Xu=this.Nk=this.Yu=this.Zu=this.Wu=this.Xq=this.pB=this.oB=this.fw=this.XF=this.Iv=
+this.Og=this.bz=this.dz=this.Mw=this.ax=this.mH=this.gH=this.vH=this.lH=this.nH=this.fH=this.Wv=this.Xv=this.Pv=this.UG=this.Ru=this.rz=this.Nv=this.wH=this.hk=this.Su=this.AH=this.zB=this.Vz=this.yw=this.zx=this.Ax=this.jw=this.Tx=this.DH=this.Gv=this.ij=this.Dm=this.td=this.Ah=this.PG=this.OG=this.Vv=this.Tv=this.Fb=this.uG=this.MG=this.xw=this.Yd=this.Tb=this.Nw=this.Ow=this.gw=this.ww=this.nw=this.Ic=this.Se=this.Wz=this.cv=this.Pj=this.ml=this.Ld=this.Zw=this.rx=this.px=this.ox=this.nx=this.mx=
+this.lx=this.yh=this.rj=this.SF=this.Bz=this.hz=this.av=this.qx=this.xx=this.rw=this.Tw=this.nz=this.Xx=this.aG=this.Kv=this.ev=this.kg=this.sw=this.Uw=this.oz=this.Yx=this.bG=this.Lv=this.En=this.Vd=this.qw=this.Sw=this.mz=this.Wx=this.$F=this.Jv=this.dv=this.wc=this.Ku=this.Hu=this.Ir=this.Gu=this.zu=null}fA.prototype=new v;
+fA.prototype.b=function(){gA=this;this.Pu=R(Q(this,"accesskey"));this.Bg=this.In=R(Q(this,"class"));this.aw=R(Q(this,"contenteditable"));this.bw=R(Q(this,"contextmenu"));this.lw=R(Q(this,"dir"));this.uw=R(Q(this,"draggable"));this.vw=R(Q(this,"dropzone"));this.tx=R(Q(this,"hidden"));this.Mf=R(Q(this,"id"));this.cz=R(Q(this,"lang"));var a=R(Q(this,"spellcheck")),b=(new Sp).b();this.xG=sc(new tc,a,"spellcheck",b);this.NG=R(Q(this,"style"));this.TG=R(Q(this,"tabindex"));this.sH=R(Q(this,"title"));this.xH=
+R(Q(this,"translate"));this.Qu=R(Q(this,"action"));this.Uu=R(Q(this,"autocomplete"));a=R(Q(this,"autofocus"));b=(new Sp).b();this.Vu=sc(new tc,a,"autofocus",b);this.Sv=R(Q(this,"checked"));this.bx=R(Q(this,"form"));this.cx=R(Q(this,"formaction"));this.dx=R(Q(this,"formenctype"));this.ex=R(Q(this,"formmethod"));this.fx=R(Q(this,"formnovalidate"));this.gx=R(Q(this,"formtarget"));this.sx=R(Q(this,"height"));this.iz=R(Q(this,"list"));this.vz=R(Q(this,"max"));this.Dz=R(Q(this,"min"));this.Gz=R(Q(this,
+"multiple"));this.yz=R(Q(this,"maxlength"));this.Cz=R(Q(this,"method"));this.oc=R(Q(this,"name"));this.Yi=R(Q(this,"pattern"));this.Zi=R(Q(this,"placeholder"));a=R(Q(this,"readonly"));b=(new Sp).b();this.FB=sc(new tc,a,"readonly",b);a=R(Q(this,"required"));b=(new Sp).b();this.IB=sc(new tc,a,"required",b);this.te=R(Q(this,"size"));this.LG=R(Q(this,"step"));this.eH=R(Q(this,"target"));this.uH=this.Sh=R(Q(this,"type"));this.l=R(Q(this,"value"));this.FH=R(Q(this,"width"));this.fA=R(Q(this,"oncopy"));
+this.hA=R(Q(this,"oncut"));this.PA=R(Q(this,"onpaste"));this.tA=R(Q(this,"onerror"));this.Xz=R(Q(this,"onabort"));this.bA=R(Q(this,"oncanplay"));this.cA=R(Q(this,"oncanplaythrough"));this.gA=R(Q(this,"oncuechange"));this.qA=R(Q(this,"ondurationchange"));this.rA=R(Q(this,"onemptied"));this.sA=R(Q(this,"onended"));this.CA=R(Q(this,"onloadeddata"));this.DA=R(Q(this,"onloadedmetadata"));this.EA=R(Q(this,"onloadstart"));this.QA=R(Q(this,"onpause"));this.RA=R(Q(this,"onplay"));this.SA=R(Q(this,"onplaying"));
+this.UA=R(Q(this,"onprogress"));this.VA=R(Q(this,"onratechange"));this.$A=R(Q(this,"onseeked"));this.aB=R(Q(this,"onseeking"));this.dB=R(Q(this,"onstalled"));this.gB=R(Q(this,"onsuspend"));this.hB=R(Q(this,"ontimeupdate"));this.kB=R(Q(this,"onvolumechange"));this.lB=R(Q(this,"onwaiting"));this.cB=R(Q(this,"onshow"));this.iB=R(Q(this,"ontoggle"));this.yA=R(Q(this,"onkeydown"));this.AA=R(Q(this,"onkeyup"));this.zA=R(Q(this,"onkeypress"));this.qp=R(Q(this,"onclick"));this.iA=R(Q(this,"ondblclick"));
+this.jA=R(Q(this,"ondrag"));this.kA=R(Q(this,"ondragend"));this.lA=R(Q(this,"ondragenter"));this.mA=R(Q(this,"ondragleave"));this.nA=R(Q(this,"ondragover"));this.oA=R(Q(this,"ondragstart"));this.pA=R(Q(this,"ondrop"));this.GA=R(Q(this,"onmousedown"));this.HA=R(Q(this,"onmousemove"));this.IA=R(Q(this,"onmouseout"));this.JA=R(Q(this,"onmouseover"));this.KA=R(Q(this,"onmouseup"));this.YA=R(Q(this,"onscroll"));this.mB=R(Q(this,"onwheel"));this.BA=R(Q(this,"onload"));this.Yz=R(Q(this,"onafterprint"));
+this.Zz=R(Q(this,"onbeforeprint"));this.$z=R(Q(this,"onbeforeunload"));this.vA=R(Q(this,"onhashchange"));this.FA=R(Q(this,"onmessage"));this.LA=R(Q(this,"onoffline"));this.MA=R(Q(this,"ononline"));this.NA=R(Q(this,"onpagehide"));this.OA=R(Q(this,"onpageshow"));this.TA=R(Q(this,"onpopstate"));this.XA=R(Q(this,"onresize"));this.eB=R(Q(this,"onstorage"));this.jB=R(Q(this,"onunload"));this.aA=R(Q(this,"onblur"));this.dA=R(Q(this,"onchange"));this.uA=R(Q(this,"onfocus"));this.bB=R(Q(this,"onselect"));
+this.fB=R(Q(this,"onsubmit"));this.WA=R(Q(this,"onreset"));this.eA=R(Q(this,"oncontextmenu"));this.wA=R(Q(this,"oninput"));this.xA=R(Q(this,"oninvalid"));this.ZA=R(Q(this,"onsearch"));this.YF=R(Q(this,"selected"));this.nl=R(Q(this,"href"));this.Ck=R(Q(this,"alt"));this.GB=R(Q(this,"rel"));this.JG=R(Q(this,"src"));this.JH=R(Q(this,"xmlns"));this.Ou=R(Q(this,"accept"));this.Qv=R(Q(this,"charset"));a=R(Q(this,"disabled"));b=(new Sp).b();this.mw=sc(new tc,a,"disabled",b);this.$w=R(Q(this,"for"));this.LB=
+R(Q(this,"rows"));this.Yv=R(Q(this,"cols"));this.KB=R(Q(this,"role"));this.Gb=R(Q(this,"content"));this.yx=R(Q(this,"http-equiv"));this.zz=R(Q(this,"media"));this.Zv=R(Q(this,"colspan"));this.MB=R(Q(this,"rowspan"));this.Wu=(new $).ma("background","background");this.Zu=(new $).ma("backgroundRepeat","background-repeat");this.Yu=(new $).ma("backgroundPosition","background-position");this.Nk=(new $).ma("backgroundColor","background-color");this.Xu=(new Jw).Ga(this,"backgroundImage","background-image");
+this.yv=(new $).ma("borderTopColor","border-top-color");this.wv=(new $).ma("borderStyle","border-style");this.Bv=(new Hx).Ga(this,"borderTopStyle","border-top-style");this.uv=(new Hx).Ga(this,"bocrderRightStyle","border-right-style");this.vv=(new Iw).Ga(this,"borderRightWidth","border-right-width");this.Av=(new Hw).Ga(this,"borderTopRightRadius","border-top-right-radius");this.iv=(new Hw).Ga(this,"borderBottomLeftRadius","border-bottom-left-radius");this.tv=(new $).ma("borderRightColor","border-right-color");
+this.gv=(new $).ma("borderBottom","border-bottom");this.fv=(new $).ma("border","border");this.lv=(new Iw).Ga(this,"borderBottomWidth","border-bottom-width");this.ov=(new $).ma("borderLeftColor","border-left-color");this.hv=(new $).ma("borderBottomColor","border-bottom-color");this.nv=(new $).ma("borderLeft","border-left");this.pv=(new Hx).Ga(this,"borderLeftStyle","border-left-style");this.sv=(new $).ma("borderRight","border-right");this.kv=(new Hx).Ga(this,"borderBottomStyle","border-bottom-style");
+this.qv=(new Iw).Ga(this,"borderLeftWidth","border-left-width");this.Cv=(new Iw).Ga(this,"borderTopWidth","border-top-width");this.xv=(new $).ma("borderTop","border-top");this.rv=(new $).ma("borderRadius","border-radius");this.Dv=(new $).ma("borderWidth","border-width");this.jv=(new Hw).Ga(this,"borderBottomRightRadius","border-bottom-right-radius");this.zv=(new Hw).Ga(this,"borderTopLeftRadius","border-top-left-radius");this.mv=(new $).ma("borderColor","border-color");this.nB=(new $).ma("opacity",
+"opacity");this.xz=(new $).ma("maxWidth","max-width");this.zo=(new Qw).Ga(this,"height","height");this.zp=(new bv).ma("paddingRight","padding-right");this.wB=(new bv).ma("paddingTop","padding-top");this.Rl=(new bv).ma("paddingLeft","padding-left");this.uB=(new bv).ma("padding","padding");this.vB=(new bv).ma("paddingBottom","padding-bottom");this.Sj=(new Qw).Ga(this,"right","right");this.gz=(new Lw).Ga(this,"lineHeight","line-height");this.Gl=(new Qw).Ga(this,"left","left");this.kz=(new $).ma("listStyle",
+"list-style");this.wp=(new Pw).Ga(this,"overflowY","overflow-y");this.Fv=(new $).ma("boxShadow","box-shadow");this.Yw=(new $).ma("fontSizeAdjust","font-size-adjust");this.Ww=(new $).ma("fontFamily","font-family");this.Vw=(new $).ma("font","font");this.Xw=(new $).ma("fontFeatureSettings","font-feature-settings");this.sz=(new Qw).Ga(this,"marginBottom","margin-bottom");this.tz=(new Ix).Hd(this);this.uz=(new Jx).Hd(this);this.fp=(new Kx).Hd(this);this.dr=(new Qw).Ga(this,"top","top");this.EH=(new Qw).Ga(this,
+"width","width");this.Ev=(new Qw).Ga(this,"bottom","bottom");this.ez=(new Lw).Ga(this,"letterSpacing","letter-spacing");this.wz=(new Kw).Ga(this,"maxHeight","max-height");this.Fz=(new $).ma("minWidth","minWidth");this.Ez=(new $).ma("minHeight","min-height");this.qB=(new $).ma("outline","outline");this.rB=(new Mw).Ga(this,"outlineStyle","outline-style");this.tB=(new Pw).Ga(this,"overflowX","overflow-x");this.iH=(new Lx).Hd(this);this.hH=(new Mx).Hd(this);this.jH=(new $).ma("textIndent","text-indent");
+this.kH=(new Kw).Ga(this,"textShadow","text-shadow");this.GH=(new Lw).Ga(this,"wordSpacing","word-spacing");this.MH=(new Gw).Ga(this,"zIndex","z-index");this.xx=P(Q(this,"html"));this.qx=P(Q(this,"head"));this.av=me(Q(this,"base"));this.hz=me(Q(this,"link"));this.Bz=me(Q(this,"meta"));this.SF=P(Q(this,"script"));this.rj=P(Q(this,"body"));this.yh=P(Q(this,"h1"));this.lx=P(Q(this,"h2"));this.mx=P(Q(this,"h3"));this.nx=P(Q(this,"h4"));this.ox=P(Q(this,"h5"));this.px=P(Q(this,"h6"));this.rx=P(Q(this,
+"header"));this.Zw=P(Q(this,"footer"));this.Ld=P(Q(this,"p"));this.ml=me(Q(this,"hr"));this.Pj=P(Q(this,"pre"));this.cv=P(Q(this,"blockquote"));this.Wz=P(Q(this,"ol"));this.Se=P(Q(this,"ul"));this.Ic=P(Q(this,"li"));this.nw=P(Q(this,"dl"));this.ww=P(Q(this,"dt"));this.gw=P(Q(this,"dd"));this.Ow=P(Q(this,"figure"));this.Nw=P(Q(this,"figcaption"));this.Tb=P(Q(this,"div"));this.Yd=P(Q(this,"a"));this.xw=P(Q(this,"em"));this.MG=P(Q(this,"strong"));this.uG=P(Q(this,"small"));this.Fb=P(Q(this,"s"));this.Tv=
+P(Q(this,"cite"));this.Vv=P(Q(this,"code"));this.OG=P(Q(this,"sub"));this.PG=P(Q(this,"sup"));this.Ah=P(Q(this,"i"));this.td=P(Q(this,"b"));this.Dm=P(Q(this,"u"));this.ij=P(Q(this,"span"));this.Gv=me(Q(this,"br"));this.DH=me(Q(this,"wbr"));this.Tx=P(Q(this,"ins"));this.jw=P(Q(this,"del"));this.Ax=me(Q(this,"img"));this.zx=P(Q(this,"iframe"));this.yw=me(Q(this,"embed"));this.Vz=P(Q(this,"object"));this.zB=me(Q(this,"param"));this.AH=P(Q(this,"video"));this.Su=P(Q(this,"audio"));this.hk=me(Q(this,"source"));
+this.wH=me(Q(this,"track"));this.Nv=P(Q(this,"canvas"));this.rz=P(Q(this,"map"));this.Ru=me(Q(this,"area"));this.UG=P(Q(this,"table"));this.Pv=P(Q(this,"caption"));this.Xv=P(Q(this,"colgroup"));this.Wv=me(Q(this,"col"));this.fH=P(Q(this,"tbody"));this.nH=P(Q(this,"thead"));this.lH=P(Q(this,"tfoot"));this.vH=P(Q(this,"tr"));this.gH=P(Q(this,"td"));this.mH=P(Q(this,"th"));this.ax=P(Q(this,"form"));this.Mw=P(Q(this,"fieldset"));this.dz=P(Q(this,"legend"));this.bz=P(Q(this,"label"));this.Og=me(Q(this,
+"input"));this.Iv=P(Q(this,"button"));this.XF=P(Q(this,"select"));this.fw=P(Q(this,"datalist"));this.oB=P(Q(this,"optgroup"));this.pB=P(Q(this,"option"));this.Xq=P(Q(this,"textarea"));this.wc=(new Sp).b();this.dv=(new Sp).b();this.Jv=(new Sp).b();this.$F=(new Sp).b();this.Wx=(new Sp).b();this.mz=(new Sp).b();this.Sw=(new Sp).b();this.qw=(new Sp).b();this.Vd=(new L).b();this.En=(new L).b();this.Lv=(new L).b();this.bG=(new L).b();this.Yx=(new L).b();this.oz=(new L).b();this.Uw=(new L).b();this.sw=(new L).b();
+this.kg=(new je).me(this.Vd);this.ev=(new je).me(this.En);this.Kv=(new Tp).me(this.Vd);this.aG=(new Tp).me(this.Vd);this.Xx=(new Tp).me(this.Vd);this.nz=(new Tp).me(this.Vd);this.Tw=(new Tp).me(this.Vd);this.rw=(new Tp).me(this.Vd);Xu||(Xu=(new Wu).b());this.zu=Xu;$u||($u=(new Zu).b());this.Gu=$u;this.Ir=gr();this.Hu=gr();this.Ku=gr();return this};function yf(){var a=E();null===a.vj&&null===a.vj&&(a.vj=(new Rw).Hd(a));return a.vj}
+function Te(){var a=E();null===a.Oj&&null===a.Oj&&(a.Oj=(new Sw).Hd(a));return a.Oj}fA.prototype.a=new u({Ks:0},!1,"scalatags.JsDom$all$",w,{Ks:1,c:1,nI:1,HI:1,xI:1,rI:1,vI:1,uI:1,sI:1,yI:1,BI:1,zI:1,wI:1,AI:1,II:1,tI:1,EI:1,CI:1,JI:1,FI:1,lI:1,mI:1,pI:1,qI:1,oI:1});var gA=void 0;function E(){gA||(gA=(new fA).b());return gA}function hA(){}hA.prototype=new Xz;function iA(){}m=iA.prototype=hA.prototype;m.$b=function(a){return Fm(this,a)};m.dd=function(a){return+this.h(a)};
+m.m=function(){return 0===this.$b(0)};m.fa=function(a){return kv(a)?this.Wc(a):!1};m.r=function(){return Hm(this)};m.qe=function(){return Em(this)};m.sf=function(a){return Lg(new Mg,this,a)};m.z=function(){return this.ba()};m.pd=function(){return this};m.cb=function(a,b){return cj(this,a,b)};m.ja=function(){return pq(zl(),this.Td())};m.Dd=ba();
+var jA=new u({ab:0},!1,"scala.collection.AbstractSeq",Yz,{ab:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,Sa:1,H:1,p:1,Qa:1,Ra:1,Ta:1});hA.prototype.a=jA;function kA(){}kA.prototype=new Xz;function lA(){}m=lA.prototype=kA.prototype;m.Aa=function(){return this.ig()};m.h=function(a){var b=this.Fc(a);if(wd()===b)a=Dm(a);else if(Sd(b))a=b.zc;else throw(new H).o(b);return a};m.bb=function(){return this};m.dd=function(a){return+this.h(a)};m.m=function(){return 0===this.z()};
+m.fa=function(a){if(a&&a.a&&a.a.y.Xb){var b;if(!(b=this===a)&&(b=this.z()===a.z()))try{for(var c=this.ga(),e=!0;e&&c.qa();){var f=c.ia();if(null!==f){var h=f.wa,l=a.Fc(f.va);b:{if(Sd(l)){var q=l.zc;if(S(T(),h,q)){e=!0;break b}}e=!1}}else throw(new H).o(f);}b=e}catch(r){if(r&&r.a&&r.a.y.hy)Gn("class cast "),b=!1;else throw r;}a=b}else a=!1;return a};m.r=function(){return Hm(this)};m.lf=function(){return ph()};m.sf=function(a){return Lg(new Mg,this,a)};m.ig=function(){return this};m.pb=function(a){return ne(this.Fc(a))};
+m.hf=function(a,b,c,e){return xm(this,a,b,c,e)};m.Ha=function(a){return this.pb(a)};m.ja=function(){var a=zl();return wl(a,this.ig(),a.dp)};m.cb=function(a,b){return cj(this,a,b)};m.Ud=k("Map");m.ha=function(){return mj(new nj,this.lf())};var mA=new u({Wb:0},!1,"scala.collection.AbstractMap",Yz,{Wb:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,fc:1,Xb:1,cc:1,gc:1,H:1,p:1,Da:1});kA.prototype.a=mA;function nA(){}nA.prototype=new Xz;function oA(){}m=oA.prototype=nA.prototype;
+m.dd=function(a){return+this.h(a)};m.m=function(){return 0===this.z()};m.fa=function(a){return Jl(this,a)};m.r=function(){return Hm(this)};m.xm=function(a){return this.Li(a)};m.ja=function(){var a=zl();return wl(a,this.dh(),a.tm)};m.ac=function(a,b){return Qd(this,a,b)};m.xl=function(a){return this.Lf(a)};m.Hm=function(a){return Gm(this,a)};m.ha=function(){return br(new cr,this.Fg())};m.Ud=k("Set");
+var pA=new u({md:0},!1,"scala.collection.AbstractSet",Yz,{md:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,Yc:1,p:1,Kc:1,Xc:1,$c:1,Zc:1,Da:1});nA.prototype.a=pA;function Tg(){this.G=this.Aj=null}Tg.prototype=new lA;function qA(){}m=qA.prototype=Tg.prototype;m.Im=function(a){var b=mj(new nj,ph());ef(b,this);oj(b,(new A).v(a.va,a.wa));return b.Ua};
+m.A=function(a){(new wf).Pf(this.G,C(function(){return function(a){return null!==a}}(this))).A(C(function(a,c){return function(e){if(null!==e)return c.h((new A).v(e.va,a.Aj.h(e.wa)));throw(new H).o(e);}}(this,a)))};m.Do=function(a,b){this.Aj=b;if(null===a)throw I(J(),null);this.G=a;return this};m.Wd=function(a){return Gl(this,a)};m.z=function(){return this.G.z()};
+m.ga=function(){var a=this.G.ga(),a=(new Tv).Qi(a,C(function(){return function(a){return null!==a}}(this)));return(new ym).Qi(a,C(function(a){return function(c){if(null!==c)return(new A).v(c.va,a.Aj.h(c.wa));throw(new H).o(c);}}(this)))};m.Fc=function(a){a=this.G.Fc(a);var b=this.Aj;return a.m()?wd():(new Bd).o(b.h(a.La()))};m.pb=function(a){return this.G.pb(a)};m.fe=function(a){return this.Im(a)};
+var rA=new u({eq:0},!1,"scala.collection.MapLike$MappedValues",mA,{eq:1,Wb:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,fc:1,Xb:1,cc:1,gc:1,H:1,p:1,Da:1,GD:1});Tg.prototype.a=rA;function sA(){}sA.prototype=new lA;function tA(){}m=tA.prototype=sA.prototype;m.b=function(){return this};m.Aa=function(){return this};m.bb=function(){return this};m.ib=function(){return Pp()};m.lf=function(){return this.$k()};m.$k=function(){return ph()};m.ig=function(){return this};m.Re=function(){return this};
+var uA=new u({Ad:0},!1,"scala.collection.immutable.AbstractMap",mA,{Ad:1,Wb:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,fc:1,Xb:1,cc:1,gc:1,H:1,p:1,Da:1,Bd:1,Ea:1,Ja:1,Ia:1,Cd:1});sA.prototype.a=uA;function vA(){}vA.prototype=new oA;function wA(){}m=wA.prototype=vA.prototype;m.Aa=function(){return this};m.b=function(){return this};m.x=function(){throw(new V).f("Set has no elements");};m.h=function(a){return this.pb(a)};m.bb=function(){return this};m.m=k(!0);
+m.bm=function(){throw(new V).f("Empty ListSet has no outer pointer");};m.ib=function(){qz||(qz=(new pz).b());return qz};m.Xh=function(a){return nu(this,a)};m.z=k(0);m.ga=function(){return(new fw).Qf(this)};m.Fg=function(){return mu()};m.dh=function(){return this};m.u=function(){return this.zm()};m.pb=k(!1);m.sd=function(){return this};m.Xd=function(a){return this.Xh(a)};m.zm=function(){throw(new V).f("Next of an empty set");};
+m.Hm=function(a){var b;a.m()?b=this:(b=(new ku).Qf(this),a=a.Aa(),b=lu(ef(b,a)));return b};m.Ud=k("ListSet");var xA=new u({im:0},!1,"scala.collection.immutable.ListSet",pA,{im:1,md:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,Yc:1,p:1,Kc:1,Xc:1,$c:1,Zc:1,Da:1,Pd:1,Ea:1,Ja:1,Ia:1,g:1,e:1});vA.prototype.a=xA;function yA(){}yA.prototype=new oA;m=yA.prototype;m.Aa=function(){return this};m.b=function(){zA=this;return this};m.h=k(!1);m.bb=function(){return this};m.ib=function(){return Fd()};
+m.A=da();m.z=k(0);m.ga=function(){return Yj().Dc};m.Fg=function(){return ar()};m.dh=function(){return this};m.pb=k(!1);m.sd=function(){return this};m.Xd=function(a){return(new AA).o(a)};m.a=new u({HE:0},!1,"scala.collection.immutable.Set$EmptySet$",pA,{HE:1,md:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,Yc:1,p:1,Kc:1,Xc:1,$c:1,Zc:1,Da:1,Pd:1,Ea:1,Ja:1,Ia:1,g:1,e:1});var zA=void 0;function ar(){zA||(zA=(new yA).b());return zA}function AA(){this.Za=null}
+AA.prototype=new oA;m=AA.prototype;m.Aa=function(){return this};m.Gi=function(a){return!!a.h(this.Za)};m.h=function(a){return this.pb(a)};m.bb=function(){return this};m.ib=function(){return Fd()};m.Li=function(a){return!!a.h(this.Za)};m.A=function(a){a.h(this.Za)};m.z=k(1);m.o=function(a){this.Za=a;return this};m.ga=function(){Yj();var a=(new z).k([this.Za]);return $l(new am,a,a.q.length|0)};m.Fg=function(){return ar()};m.dh=function(){return this};
+m.sg=function(a){return this.pb(a)?this:(new BA).v(this.Za,a)};m.pb=function(a){return S(T(),a,this.Za)};m.sd=function(){return this};m.Xd=function(a){return this.sg(a)};m.a=new u({IE:0},!1,"scala.collection.immutable.Set$Set1",pA,{IE:1,md:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,Yc:1,p:1,Kc:1,Xc:1,$c:1,Zc:1,Da:1,Pd:1,Ea:1,Ja:1,Ia:1,g:1,e:1});function BA(){this.Eb=this.Za=null}BA.prototype=new oA;m=BA.prototype;m.Aa=function(){return this};
+m.Gi=function(a){return!!a.h(this.Za)||!!a.h(this.Eb)};m.h=function(a){return this.pb(a)};m.bb=function(){return this};m.v=function(a,b){this.Za=a;this.Eb=b;return this};m.ib=function(){return Fd()};m.Li=function(a){return!!a.h(this.Za)&&!!a.h(this.Eb)};m.A=function(a){a.h(this.Za);a.h(this.Eb)};m.z=k(2);m.ga=function(){Yj();var a=(new z).k([this.Za,this.Eb]);return $l(new am,a,a.q.length|0)};m.Fg=function(){return ar()};m.dh=function(){return this};
+m.sg=function(a){if(this.pb(a))a=this;else{var b=this.Eb,c=new CA;c.Za=this.Za;c.Eb=b;c.gd=a;a=c}return a};m.pb=function(a){return S(T(),a,this.Za)||S(T(),a,this.Eb)};m.sd=function(){return this};m.Xd=function(a){return this.sg(a)};m.a=new u({JE:0},!1,"scala.collection.immutable.Set$Set2",pA,{JE:1,md:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,Yc:1,p:1,Kc:1,Xc:1,$c:1,Zc:1,Da:1,Pd:1,Ea:1,Ja:1,Ia:1,g:1,e:1});function CA(){this.gd=this.Eb=this.Za=null}CA.prototype=new oA;
+m=CA.prototype;m.Aa=function(){return this};m.Gi=function(a){return!!a.h(this.Za)||!!a.h(this.Eb)||!!a.h(this.gd)};m.h=function(a){return this.pb(a)};m.bb=function(){return this};m.ib=function(){return Fd()};m.Li=function(a){return!!a.h(this.Za)&&!!a.h(this.Eb)&&!!a.h(this.gd)};m.A=function(a){a.h(this.Za);a.h(this.Eb);a.h(this.gd)};m.z=k(3);m.ga=function(){Yj();var a=(new z).k([this.Za,this.Eb,this.gd]);return $l(new am,a,a.q.length|0)};m.Fg=function(){return ar()};m.dh=function(){return this};
+m.sg=function(a){return this.pb(a)?this:(new DA).Of(this.Za,this.Eb,this.gd,a)};m.pb=function(a){return S(T(),a,this.Za)||S(T(),a,this.Eb)||S(T(),a,this.gd)};m.sd=function(){return this};m.Xd=function(a){return this.sg(a)};m.a=new u({KE:0},!1,"scala.collection.immutable.Set$Set3",pA,{KE:1,md:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,Yc:1,p:1,Kc:1,Xc:1,$c:1,Zc:1,Da:1,Pd:1,Ea:1,Ja:1,Ia:1,g:1,e:1});function DA(){this.Eg=this.gd=this.Eb=this.Za=null}DA.prototype=new oA;
+m=DA.prototype;m.Aa=function(){return this};m.Gi=function(a){return!!a.h(this.Za)||!!a.h(this.Eb)||!!a.h(this.gd)||!!a.h(this.Eg)};m.h=function(a){return this.pb(a)};m.bb=function(){return this};m.ib=function(){return Fd()};m.Li=function(a){return!!a.h(this.Za)&&!!a.h(this.Eb)&&!!a.h(this.gd)&&!!a.h(this.Eg)};m.A=function(a){a.h(this.Za);a.h(this.Eb);a.h(this.gd);a.h(this.Eg)};m.z=k(4);m.ga=function(){Yj();var a=(new z).k([this.Za,this.Eb,this.gd,this.Eg]);return $l(new am,a,a.q.length|0)};m.Fg=function(){return ar()};
+m.dh=function(){return this};m.sg=function(a){if(this.pb(a))return this;var b=(new EA).b(),c=this.Eb;a=[this.gd,this.Eg,a];var e=FA(FA(b,this.Za),c),b=0,c=a.length|0,f=e;for(;;){if(b===c)return f;e=1+b|0;f=f.Xd(a[b]);b=e}};m.pb=function(a){return S(T(),a,this.Za)||S(T(),a,this.Eb)||S(T(),a,this.gd)||S(T(),a,this.Eg)};m.Of=function(a,b,c,e){this.Za=a;this.Eb=b;this.gd=c;this.Eg=e;return this};m.sd=function(){return this};m.Xd=function(a){return this.sg(a)};
+m.a=new u({LE:0},!1,"scala.collection.immutable.Set$Set4",pA,{LE:1,md:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,Yc:1,p:1,Kc:1,Xc:1,$c:1,Zc:1,Da:1,Pd:1,Ea:1,Ja:1,Ia:1,g:1,e:1});function EA(){}EA.prototype=new oA;function GA(){}m=GA.prototype=EA.prototype;m.oj=function(a,b){return HA(new IA,a,b)};m.th=function(a){return this.pl(xl(W(),a))};m.Aa=function(){return this};m.b=function(){return this};m.h=function(a){return this.pb(a)};
+function FA(a,b){return a.oj(b,a.th(b),0)}m.bb=function(){return this};m.ib=function(){return mz()};m.A=da();function JA(a,b){var c=6+a.z()|0,c=s(x(yy),[224>c?c:224]),c=a.Ki(b,!1,0,c,0);return null===c?By():c}m.xm=function(a){if(a&&a.a&&a.a.y.gg)return this.jj(a,0);var b=this.ga();return nm(b,a)};m.Lf=function(a){return JA(this,a)};m.z=k(0);m.ga=function(){return Yj().Dc};m.Fg=function(){return By()};m.pl=function(a){a=a+~(a<<9)|0;a^=a>>>14|0;a=a+(a<<4)|0;return a^(a>>>10|0)};m.Eh=k(null);m.dh=function(){return this};
+m.pb=function(a){return this.De(a,this.th(a),0)};m.sd=function(){return this};m.Ki=k(null);m.Xd=function(a){return FA(this,a)};m.xl=function(a){if(a&&a.a&&a.a.y.gg){var b=this.z(),c=a.z(),b=6+(b<c?b:c)|0,b=s(x(yy),[224>b?b:224]);a=this.Eh(a,0,b,0);a=null===a?By():a}else a=JA(this,a);return a};m.De=k(!1);m.jj=k(!0);
+var yy=new u({gg:0},!1,"scala.collection.immutable.HashSet",pA,{gg:1,md:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,Yc:1,p:1,Kc:1,Xc:1,$c:1,Zc:1,Da:1,Pd:1,Ea:1,Ja:1,Ia:1,tb:1,g:1,e:1});EA.prototype.a=yy;function KA(){}KA.prototype=new wA;
+KA.prototype.a=new u({sE:0},!1,"scala.collection.immutable.ListSet$EmptyListSet$",xA,{sE:1,im:1,md:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,Yc:1,p:1,Kc:1,Xc:1,$c:1,Zc:1,Da:1,Pd:1,Ea:1,Ja:1,Ia:1,g:1,e:1});var LA=void 0;function mu(){LA||(LA=(new KA).b());return LA}function MA(){this.G=this.mf=null}MA.prototype=new wA;m=MA.prototype;m.x=g("mf");m.m=k(!1);m.bm=g("G");m.Xh=function(a){return NA(this,a)?this:nu(this,a)};
+m.z=function(){var a;a:{a=this;var b=0;for(;;){if(a.m()){a=b;break a}a=a.bm();b=1+b|0}a=void 0}return a};function nu(a,b){var c=new MA;c.mf=b;if(null===a)throw I(J(),null);c.G=a;return c}m.pb=function(a){return NA(this,a)};m.u=g("G");function NA(a,b){for(;;){if(a.m())return!1;if(S(T(),a.x(),b))return!0;a=a.bm()}}m.zm=g("G");m.Xd=function(a){return this.Xh(a)};
+m.a=new u({uE:0},!1,"scala.collection.immutable.ListSet$Node",xA,{uE:1,im:1,md:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,Yc:1,p:1,Kc:1,Xc:1,$c:1,Zc:1,Da:1,Pd:1,Ea:1,Ja:1,Ia:1,g:1,e:1});function OA(){}OA.prototype=new iA;function PA(){}PA.prototype=OA.prototype;OA.prototype.Aa=function(){return this.eh()};OA.prototype.eh=function(){return this};
+var QA=new u({Yb:0},!1,"scala.collection.mutable.AbstractSeq",jA,{Yb:1,ab:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,Sa:1,H:1,p:1,Qa:1,Ra:1,Ta:1,hc:1,xb:1,yb:1,wb:1,ic:1,Db:1,Bb:1,Ab:1});OA.prototype.a=QA;function RA(){}RA.prototype=new GA;
+RA.prototype.a=new u({gE:0},!1,"scala.collection.immutable.HashSet$EmptyHashSet$",yy,{gE:1,gg:1,md:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,Yc:1,p:1,Kc:1,Xc:1,$c:1,Zc:1,Da:1,Pd:1,Ea:1,Ja:1,Ia:1,tb:1,g:1,e:1});var SA=void 0;function By(){SA||(SA=(new RA).b());return SA}function Ay(){this.ud=0;this.Hb=null;this.Oe=0}Ay.prototype=new GA;m=Ay.prototype;
+m.oj=function(a,b,c){var e=1<<(31&(b>>>c|0)),f=Qh(mg(),this.ud&(-1+e|0));if(0!==(this.ud&e)){e=this.Hb.d[f];a=e.oj(a,b,5+c|0);if(e===a)return this;b=s(x(yy),[this.Hb.d.length]);St(Fe(),this.Hb,0,b,0,this.Hb.d.length);b.d[f]=a;return zy(new Ay,this.ud,b,this.Oe+(a.z()-e.z()|0)|0)}c=s(x(yy),[1+this.Hb.d.length|0]);St(Fe(),this.Hb,0,c,0,f);c.d[f]=HA(new IA,a,b);St(Fe(),this.Hb,f,c,1+f|0,this.Hb.d.length-f|0);return zy(new Ay,this.ud|e,c,1+this.Oe|0)};
+m.A=function(a){for(var b=0;b<this.Hb.d.length;)this.Hb.d[b].A(a),b=1+b|0};m.z=g("Oe");m.ga=function(){var a=new ux;kw.prototype.Bo.call(a,this.Hb);return a};
+m.Eh=function(a,b,c,e){if(a===this)return this;if(a&&a.a&&a.a.y.dk)return a.Eh(this,b,c,e);if(nw(a)){var f=this.Hb,h=this.ud,l=0,q=a.Hb,r=a.ud,B=0;if(0===(h&r))return null;for(var M=e,aa=0,ca=0;0!==(h&r);){var ra=h^h&(-1+h|0),sa=r^r&(-1+r|0);if(ra===sa){var pa=f.d[l].Eh(q.d[B],5+b|0,c,M);null!==pa&&(aa=aa+pa.z()|0,ca|=ra,c.d[M]=pa,M=1+M|0);h&=~ra;l=1+l|0;r&=~sa;B=1+B|0}else{var pa=-1+ra|0,Wa=-1+sa|0;pa<Wa!==0>pa!==0>Wa?(h&=~ra,l=1+l|0):(r&=~sa,B=1+B|0)}}if(0===ca)return null;if(aa===this.Oe)return this;
+if(aa===a.Oe)return a;a=M-e|0;return 1!==a||nw(c.d[e])?(b=s(x(yy),[a]),Ja(c,e,b,0,a),zy(new Ay,ca,b,aa)):c.d[e]}return null};
+m.Ki=function(a,b,c,e,f){for(var h=f,l=0,q=0,r=0;r<this.Hb.d.length;){var B=this.Hb.d[r].Ki(a,b,5+c|0,e,h);null!==B&&(e.d[h]=B,h=1+h|0,l=l+B.z()|0,q|=1<<r);r=1+r|0}if(h===f)return null;if(l===this.Oe)return this;if(h!==(1+f|0)||nw(e.d[f])){b=h-f|0;a=s(x(yy),[b]);Ja(e,f,a,0,b);if(b===this.Hb.d.length)q=this.ud;else{mz();e=0;for(f=this.ud;0!==q;)b=f^f&(-1+f|0),0!==(1&q)&&(e|=b),f&=~b,q=q>>>1|0;q=e}return zy(new Ay,q,a,l)}return e.d[f]};
+function zy(a,b,c,e){a.ud=b;a.Hb=c;a.Oe=e;jc();if(Qh(mg(),b)!==c.d.length)throw(new Sn).o("assertion failed");return a}m.De=function(a,b,c){var e=31&(b>>>c|0),f=1<<e;return-1===this.ud?this.Hb.d[31&e].De(a,b,5+c|0):0!==(this.ud&f)?(e=Qh(mg(),this.ud&(-1+f|0)),this.Hb.d[e].De(a,b,5+c|0)):!1};
+m.jj=function(a,b){if(a===this)return!0;if(nw(a)&&this.Oe<=a.Oe){var c=this.ud,e=this.Hb,f=0,h=a.Hb,l=a.ud,q=0;if((c&l)===c){for(;0!==c;){var r=c^c&(-1+c|0),B=l^l&(-1+l|0);if(r===B){if(!e.d[f].jj(h.d[q],5+b|0))return!1;c&=~r;f=1+f|0}l&=~B;q=1+q|0}return!0}}return!1};function nw(a){return!!(a&&a.a&&a.a.y.vq)}
+m.a=new u({vq:0},!1,"scala.collection.immutable.HashSet$HashTrieSet",yy,{vq:1,gg:1,md:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,Yc:1,p:1,Kc:1,Xc:1,$c:1,Zc:1,Da:1,Pd:1,Ea:1,Ja:1,Ia:1,tb:1,g:1,e:1});function TA(){}TA.prototype=new GA;function UA(){}UA.prototype=TA.prototype;
+var VA=new u({dk:0},!1,"scala.collection.immutable.HashSet$LeafHashSet",yy,{dk:1,gg:1,md:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,Yc:1,p:1,Kc:1,Xc:1,$c:1,Zc:1,Da:1,Pd:1,Ea:1,Ja:1,Ia:1,tb:1,g:1,e:1});TA.prototype.a=VA;function WA(){}WA.prototype=new tA;function XA(){}m=XA.prototype=WA.prototype;m.Uh=function(){throw(new V).f("empty map");};m.bb=function(){return this};m.lf=function(){return YA()};m.Wd=function(a){return this.ok(a)};m.$k=function(){return YA()};
+m.z=k(0);m.ig=function(){return this};m.ga=function(){var a=new ew;a.Rh=this;var b=rf().ka,a=Sm(a,b);return a.Dd(a.qe()).ga()};m.Gh=function(){throw(new V).f("empty map");};m.pj=function(a,b){return ZA(new $A,this,a,b)};m.ok=function(){return this};m.Fc=function(){return wd()};m.$f=function(){throw(new V).f("empty map");};m.fe=function(a){return this.pj(a.va,a.wa)};
+var aB=new u({hm:0},!1,"scala.collection.immutable.ListMap",uA,{hm:1,Ad:1,Wb:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,fc:1,Xb:1,cc:1,gc:1,H:1,p:1,Da:1,Bd:1,Ea:1,Ja:1,Ia:1,Cd:1,g:1,e:1});WA.prototype.a=aB;function bB(){}bB.prototype=new tA;m=bB.prototype;m.Wd=function(){return this};m.ga=function(){return Yj().Dc};m.z=k(0);m.Fc=function(){return wd()};m.fe=function(a){return(new cB).v(a.va,a.wa)};
+m.a=new u({wE:0},!1,"scala.collection.immutable.Map$EmptyMap$",uA,{wE:1,Ad:1,Wb:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,fc:1,Xb:1,cc:1,gc:1,H:1,p:1,Da:1,Bd:1,Ea:1,Ja:1,Ia:1,Cd:1,g:1,e:1});var dB=void 0;function ph(){dB||(dB=(new bB).b());return dB}function cB(){this.Oa=this.ta=null}cB.prototype=new tA;m=cB.prototype;m.v=function(a,b){this.ta=a;this.Oa=b;return this};m.A=function(a){a.h((new A).v(this.ta,this.Oa))};m.Wd=function(a){return this.qg(a)};
+m.ga=function(){Yj();var a=(new z).k([(new A).v(this.ta,this.Oa)]);return $l(new am,a,a.q.length|0)};m.z=k(1);m.mh=function(a,b){return S(T(),a,this.ta)?(new cB).v(this.ta,b):(new eB).Of(this.ta,this.Oa,a,b)};m.Fc=function(a){return S(T(),a,this.ta)?(new Bd).o(this.Oa):wd()};m.qg=function(a){return S(T(),a,this.ta)?ph():this};m.fe=function(a){return this.mh(a.va,a.wa)};
+m.a=new u({xE:0},!1,"scala.collection.immutable.Map$Map1",uA,{xE:1,Ad:1,Wb:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,fc:1,Xb:1,cc:1,gc:1,H:1,p:1,Da:1,Bd:1,Ea:1,Ja:1,Ia:1,Cd:1,g:1,e:1});function eB(){this.lb=this.Ka=this.Oa=this.ta=null}eB.prototype=new tA;m=eB.prototype;m.A=function(a){a.h((new A).v(this.ta,this.Oa));a.h((new A).v(this.Ka,this.lb))};m.Wd=function(a){return this.qg(a)};
+m.ga=function(){Yj();var a=(new z).k([(new A).v(this.ta,this.Oa),(new A).v(this.Ka,this.lb)]);return $l(new am,a,a.q.length|0)};m.z=k(2);m.mh=function(a,b){return S(T(),a,this.ta)?(new eB).Of(this.ta,b,this.Ka,this.lb):S(T(),a,this.Ka)?(new eB).Of(this.ta,this.Oa,this.Ka,b):fB(this.ta,this.Oa,this.Ka,this.lb,a,b)};m.Fc=function(a){return S(T(),a,this.ta)?(new Bd).o(this.Oa):S(T(),a,this.Ka)?(new Bd).o(this.lb):wd()};m.Of=function(a,b,c,e){this.ta=a;this.Oa=b;this.Ka=c;this.lb=e;return this};
+m.qg=function(a){return S(T(),a,this.ta)?(new cB).v(this.Ka,this.lb):S(T(),a,this.Ka)?(new cB).v(this.ta,this.Oa):this};m.fe=function(a){return this.mh(a.va,a.wa)};m.a=new u({yE:0},!1,"scala.collection.immutable.Map$Map2",uA,{yE:1,Ad:1,Wb:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,fc:1,Xb:1,cc:1,gc:1,H:1,p:1,Da:1,Bd:1,Ea:1,Ja:1,Ia:1,Cd:1,g:1,e:1});function gB(){this.Rb=this.sb=this.lb=this.Ka=this.Oa=this.ta=null}gB.prototype=new tA;m=gB.prototype;
+m.A=function(a){a.h((new A).v(this.ta,this.Oa));a.h((new A).v(this.Ka,this.lb));a.h((new A).v(this.sb,this.Rb))};function fB(a,b,c,e,f,h){var l=new gB;l.ta=a;l.Oa=b;l.Ka=c;l.lb=e;l.sb=f;l.Rb=h;return l}m.Wd=function(a){return this.qg(a)};m.ga=function(){Yj();var a=(new z).k([(new A).v(this.ta,this.Oa),(new A).v(this.Ka,this.lb),(new A).v(this.sb,this.Rb)]);return $l(new am,a,a.q.length|0)};m.z=k(3);
+m.mh=function(a,b){return S(T(),a,this.ta)?fB(this.ta,b,this.Ka,this.lb,this.sb,this.Rb):S(T(),a,this.Ka)?fB(this.ta,this.Oa,this.Ka,b,this.sb,this.Rb):S(T(),a,this.sb)?fB(this.ta,this.Oa,this.Ka,this.lb,this.sb,b):hB(this.ta,this.Oa,this.Ka,this.lb,this.sb,this.Rb,a,b)};m.Fc=function(a){return S(T(),a,this.ta)?(new Bd).o(this.Oa):S(T(),a,this.Ka)?(new Bd).o(this.lb):S(T(),a,this.sb)?(new Bd).o(this.Rb):wd()};
+m.qg=function(a){return S(T(),a,this.ta)?(new eB).Of(this.Ka,this.lb,this.sb,this.Rb):S(T(),a,this.Ka)?(new eB).Of(this.ta,this.Oa,this.sb,this.Rb):S(T(),a,this.sb)?(new eB).Of(this.ta,this.Oa,this.Ka,this.lb):this};m.fe=function(a){return this.mh(a.va,a.wa)};m.a=new u({zE:0},!1,"scala.collection.immutable.Map$Map3",uA,{zE:1,Ad:1,Wb:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,fc:1,Xb:1,cc:1,gc:1,H:1,p:1,Da:1,Bd:1,Ea:1,Ja:1,Ia:1,Cd:1,g:1,e:1});
+function iB(){this.xe=this.yd=this.Rb=this.sb=this.lb=this.Ka=this.Oa=this.ta=null}iB.prototype=new tA;m=iB.prototype;m.A=function(a){a.h((new A).v(this.ta,this.Oa));a.h((new A).v(this.Ka,this.lb));a.h((new A).v(this.sb,this.Rb));a.h((new A).v(this.yd,this.xe))};m.Wd=function(a){return this.qg(a)};m.ga=function(){Yj();var a=(new z).k([(new A).v(this.ta,this.Oa),(new A).v(this.Ka,this.lb),(new A).v(this.sb,this.Rb),(new A).v(this.yd,this.xe)]);return $l(new am,a,a.q.length|0)};m.z=k(4);
+function hB(a,b,c,e,f,h,l,q){var r=new iB;r.ta=a;r.Oa=b;r.Ka=c;r.lb=e;r.sb=f;r.Rb=h;r.yd=l;r.xe=q;return r}
+m.mh=function(a,b){var c;if(S(T(),a,this.ta))c=hB(this.ta,b,this.Ka,this.lb,this.sb,this.Rb,this.yd,this.xe);else if(S(T(),a,this.Ka))c=hB(this.ta,this.Oa,this.Ka,b,this.sb,this.Rb,this.yd,this.xe);else if(S(T(),a,this.sb))c=hB(this.ta,this.Oa,this.Ka,this.lb,this.sb,b,this.yd,this.xe);else if(S(T(),a,this.yd))c=hB(this.ta,this.Oa,this.Ka,this.lb,this.sb,this.Rb,this.yd,b);else{var e=(new jB).b(),f=(new A).v(this.Ka,this.lb);c=(new z).k([(new A).v(this.sb,this.Rb),(new A).v(this.yd,this.xe),(new A).v(a,
+b)]);var e=kB(kB(e,(new A).v(this.ta,this.Oa)),f),f=cy(),h=new tq;if(null===f)throw I(J(),null);h.G=f;f=h.Pc(e.pe());cm(c)&&(h=c.Aa().z(),cm(e)&&f.vb(e.z()+h|0));f.hb(e.bb());f.hb(c.Aa());c=f.oa()}return c};m.Fc=function(a){return S(T(),a,this.ta)?(new Bd).o(this.Oa):S(T(),a,this.Ka)?(new Bd).o(this.lb):S(T(),a,this.sb)?(new Bd).o(this.Rb):S(T(),a,this.yd)?(new Bd).o(this.xe):wd()};
+m.qg=function(a){return S(T(),a,this.ta)?fB(this.Ka,this.lb,this.sb,this.Rb,this.yd,this.xe):S(T(),a,this.Ka)?fB(this.ta,this.Oa,this.sb,this.Rb,this.yd,this.xe):S(T(),a,this.sb)?fB(this.ta,this.Oa,this.Ka,this.lb,this.yd,this.xe):S(T(),a,this.yd)?fB(this.ta,this.Oa,this.Ka,this.lb,this.sb,this.Rb):this};m.fe=function(a){return this.mh(a.va,a.wa)};
+m.a=new u({AE:0},!1,"scala.collection.immutable.Map$Map4",uA,{AE:1,Ad:1,Wb:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,fc:1,Xb:1,cc:1,gc:1,H:1,p:1,Da:1,Bd:1,Ea:1,Ja:1,Ia:1,Cd:1,g:1,e:1});function Np(){Tg.call(this)}Np.prototype=new qA;function Mp(a,b,c){Tg.prototype.Do.call(a,b,c);return a}m=Np.prototype;m.Aa=function(){return this};m.bb=function(){return this};m.Im=function(a){return jn(this,a)};m.ib=function(){return Pp()};m.lf=function(){return ph()};
+m.Wd=function(a){return kn(this,a)};m.ig=function(){return this};m.Re=function(){return this};m.fe=function(a){return jn(this,a)};m.a=new u({BE:0},!1,"scala.collection.immutable.MapLike$$anon$2",rA,{BE:1,eq:1,Wb:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,fc:1,Xb:1,cc:1,gc:1,H:1,p:1,Da:1,GD:1,XK:1,Bd:1,Ea:1,Ja:1,Ia:1,Cd:1});function jB(){}jB.prototype=new tA;function lB(){}m=lB.prototype=jB.prototype;m.th=function(a){return this.pl(xl(W(),a))};m.Aa=function(){return this};
+m.b=function(){return this};m.bb=function(){return this};m.nj=function(a,b,c,e,f){return mB(a,b,e,f)};m.xh=function(){return wd()};function kB(a,b){return a.nj(b.va,a.th(b.va),0,b.wa,b,null)}m.A=da();m.Wd=function(a){return this.$i(a,this.th(a),0)};m.lf=function(){cy();return by()};m.$i=function(){return this};m.Ji=k(null);m.Lf=function(a){cy();var b=6+this.z()|0,b=s(x(Zx),[224>b?b:224]);cy();a=this.Ji(a,!1,0,b,0);return null===a?by():a};m.$k=function(){cy();return by()};m.z=k(0);m.ig=function(){return this};
+m.ga=function(){return Yj().Dc};m.pl=function(a){a=a+~(a<<9)|0;a^=a>>>14|0;a=a+(a<<4)|0;return a^(a>>>10|0)};m.Fc=function(a){return this.xh(a,this.th(a),0)};m.fe=function(a){return kB(this,a)};var Zx=new u({fj:0},!1,"scala.collection.immutable.HashMap",uA,{fj:1,Ad:1,Wb:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,fc:1,Xb:1,cc:1,gc:1,H:1,p:1,Da:1,Bd:1,Ea:1,Ja:1,Ia:1,Cd:1,g:1,e:1,tb:1});jB.prototype.a=Zx;function IA(){this.Vb=null;this.Va=0}IA.prototype=new UA;m=IA.prototype;
+m.oj=function(a,b,c){if(b===this.Va&&S(T(),a,this.Vb))return this;if(b!==this.Va)return xy(mz(),this.Va,this,b,HA(new IA,a,b),c);c=mu();return nB(new oB,b,nu(c,this.Vb).Xh(a))};function HA(a,b,c){a.Vb=b;a.Va=c;return a}m.A=function(a){a.h(this.Vb)};m.ga=function(){Yj();var a=(new z).k([this.Vb]);return $l(new am,a,a.q.length|0)};m.z=k(1);m.Eh=function(a,b){return a.De(this.Vb,this.Va,b)?this:null};m.Ki=function(a,b){return b!==!!a.h(this.Vb)?this:null};
+m.De=function(a,b){return b===this.Va&&S(T(),a,this.Vb)};m.jj=function(a,b){return a.De(this.Vb,this.Va,b)};m.a=new u({uq:0},!1,"scala.collection.immutable.HashSet$HashSet1",VA,{uq:1,dk:1,gg:1,md:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,Yc:1,p:1,Kc:1,Xc:1,$c:1,Zc:1,Da:1,Pd:1,Ea:1,Ja:1,Ia:1,tb:1,g:1,e:1});function oB(){this.Va=0;this.be=null}oB.prototype=new UA;m=oB.prototype;
+m.oj=function(a,b,c){return b===this.Va?nB(new oB,b,this.be.Xh(a)):xy(mz(),this.Va,this,b,HA(new IA,a,b),c)};m.A=function(a){var b=(new fw).Qf(this.be);mm(b,a)};m.z=function(){return this.be.z()};m.ga=function(){return(new fw).Qf(this.be)};m.Eh=function(a,b){for(var c=this.be,e=br(new cr,mu()),c=(new fw).Qf(c);!c.mg.m();){var f=c.ia();a.De(f,this.Va,b)&&dr(e,f)}e=e.Ua;c=e.z();return 0===c?null:c===this.be.z()?this:c===a.z()?a:1===c?HA(new IA,e.x(),this.Va):nB(new oB,this.Va,e)};
+function nB(a,b,c){a.Va=b;a.be=c;return a}m.Ki=function(a,b){var c=b?Hl(this.be,a,!0):Hl(this.be,a,!1),e=c.z();switch(e){case 0:return null;case 1:return HA(new IA,c.x(),this.Va);default:return e===this.be.z()?this:nB(new oB,this.Va,c)}};m.De=function(a,b){return b===this.Va&&this.be.pb(a)};m.jj=function(a,b){for(var c=(new fw).Qf(this.be),e=!0;;)if(e&&!c.mg.m())e=c.ia(),e=a.De(e,this.Va,b);else break;return e};
+m.a=new u({hE:0},!1,"scala.collection.immutable.HashSet$HashSetCollision1",VA,{hE:1,dk:1,gg:1,md:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,Yc:1,p:1,Kc:1,Xc:1,$c:1,Zc:1,Da:1,Pd:1,Ea:1,Ja:1,Ia:1,tb:1,g:1,e:1});function pB(){}pB.prototype=new iA;function qB(){}m=qB.prototype=pB.prototype;m.Aa=function(){return this};m.b=function(){return this};m.pa=function(a){return qm(this,a)};m.$b=function(a){return pm(this,a)};m.h=function(a){return qm(this,a|0)};
+m.Wc=function(a){return sm(this,a)};m.bb=function(){return this};m.Lg=function(a,b){if(b===rf().ka){if(this===K())return K();for(var c=this,e=id(!1),f=(new cc).o(null),h=(new cc).o(null);c!==K();)a.h(c.x()).A(C(function(a,b,c,e){return function(a){b.i?(a=Td(new Ud,a,K()),e.i.rd=a,e.i=a):(c.i=Td(new Ud,a,K()),e.i=c.i,b.i=!0)}}(this,e,f,h))),c=c.u();return e.i?f.i:K()}return Im(this,a,b)};m.Yk=function(a){return rB(this,a)};m.ib=function(){return rf()};
+m.A=function(a){for(var b=this;!b.m();)a.h(b.x()),b=b.u()};m.Ec=function(a,b){return om(this,a,b)};m.qe=function(){for(var a=K(),b=this;!b.m();)var c=b.x(),a=Td(new Ud,c,a),b=b.u();return a};m.ga=function(){var a=new Uv;a.yc=this;return a};function rB(a,b){for(var c=a,e=b;!c.m()&&0<e;)c=c.u(),e=-1+e|0;return c}m.Td=function(){return this};m.ba=function(){return rm(this)};m.kc=function(){return this.m()?km():im(new jm,this.x(),Rb(function(a){return function(){return a.u().kc()}}(this)))};
+m.fd=function(a){return rB(this,a)};m.pd=function(){return this};m.Ha=function(a){return 0<=(a|0)&&0<pm(this,a|0)};m.ja=function(){return pq(zl(),this)};m.ac=function(a,b){if(b===rf().ka){if(this===K())return K();for(var c=Td(new Ud,a.h(this.x()),K()),e=c,f=this.u();f!==K();)var h=Td(new Ud,a.h(f.x()),K()),e=e.rd=h,f=f.u();return c}return Qd(this,a,b)};m.Dd=ba();m.Uc=function(a){return um(this,a)};m.Ud=k("List");function qq(a){return!!(a&&a.a&&a.a.y.ek)}
+var sB=new u({ek:0},!1,"scala.collection.immutable.List",jA,{ek:1,ab:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,Sa:1,H:1,p:1,Qa:1,Ra:1,Ta:1,gj:1,wf:1,Ea:1,Ja:1,Ia:1,Me:1,cg:1,ua:1,ah:1,e:1});pB.prototype.a=sB;function tB(){}tB.prototype=new XA;
+tB.prototype.a=new u({oE:0},!1,"scala.collection.immutable.ListMap$EmptyListMap$",aB,{oE:1,hm:1,Ad:1,Wb:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,fc:1,Xb:1,cc:1,gc:1,H:1,p:1,Da:1,Bd:1,Ea:1,Ja:1,Ia:1,Cd:1,g:1,e:1});var uB=void 0;function YA(){uB||(uB=(new tB).b());return uB}function $A(){this.G=this.ng=this.Vb=null}$A.prototype=new XA;m=$A.prototype;m.Uh=g("ng");
+m.h=function(a){a:{var b=this;for(;;){if(b.m())throw(new V).f("key not found: "+a);if(S(T(),a,b.Gh())){a=b.Uh();break a}b=b.$f()}a=void 0}return a};m.m=k(!1);m.Wd=function(a){return vB(a,this)};m.z=function(){var a;a:{a=this;var b=0;for(;;){if(a.m()){a=b;break a}a=a.$f();b=1+b|0}a=void 0}return a};m.Gh=g("Vb");m.pj=function(a,b){var c=vB(a,this);return ZA(new $A,c,a,b)};m.ok=function(a){return vB(a,this)};
+m.Fc=function(a){a:{var b=this;for(;;){if(S(T(),a,b.Gh())){a=(new Bd).o(b.Uh());break a}if(b.$f().m()){a=wd();break a}else b=b.$f()}a=void 0}return a};function ZA(a,b,c,e){a.Vb=c;a.ng=e;if(null===b)throw I(J(),null);a.G=b;return a}function vB(a,b){var c=K();for(;;){if(b.m())return tf(c);if(S(T(),a,b.Gh())){for(var e=b.$f();!c.m();){var f=c.x();e=ZA(new $A,e,f.Gh(),f.Uh());c=c.u()}return e}e=b.$f();c=Td(new Ud,b,c);b=e}}m.$f=g("G");
+m.a=new u({pE:0},!1,"scala.collection.immutable.ListMap$Node",aB,{pE:1,hm:1,Ad:1,Wb:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,fc:1,Xb:1,cc:1,gc:1,H:1,p:1,Da:1,Bd:1,Ea:1,Ja:1,Ia:1,Cd:1,g:1,e:1});function wB(){this.vc=this.Hg=this.uc=0;this.id=!1;this.Wq=this.El=this.ce=0}wB.prototype=new iA;function xB(){}m=xB.prototype=wB.prototype;m.Aa=function(){return this};m.Rf=k(!1);m.x=function(){return this.id?K().zh():this.uc};m.pa=function(a){return this.oi(a)};
+m.h=function(a){return this.oi(a|0)};m.m=g("id");m.bb=function(){return this};m.fa=function(a){if(a&&a.a&&a.a.y.jm){if(this.id)return a.id;if(!a.m()&&this.uc===a.uc){var b=yB(this);return b===yB(a)&&(this.uc===b||this.vc===a.vc)}return!1}return kv(a)?this.Wc(a):!1};m.oi=function(a){zB(this);if(0>a||a>=this.ce)throw(new X).f(""+a);return this.uc+y(this.vc,a)|0};
+m.j=function(a,b,c){this.uc=a;this.Hg=b;this.vc=c;this.id=a>b&&0<c||a<b&&0>c||a===b&&!this.Rf();if(0===c){var e;throw(new pe).f("step cannot be 0.");}this.id?e=0:(e=Xh(Un(AB(this),(new U).xa(this.vc)),(new U).xa(this.Rf()||!vp(ws(AB(this),(new U).xa(this.vc)),Id())?1:0)),e=vo(e,(new U).j(4194303,511,0))?-1:Tn(e));this.ce=e;if(this.id)b=a-c|0;else switch(c){case 1:b=this.Rf()?b:-1+b|0;break;case -1:b=this.Rf()?b:1+b|0;break;default:a=Tn(ws(AB(this),(new U).xa(c))),b=0!==a?b-a|0:this.Rf()?b:b-c|0}this.El=
+b;this.Wq=this.El+c|0;return this};m.ib=function(){return gf()};m.r=function(){var a=this.ce>kk().vk||!this.id&&0>this.ce?", ... )":")",b;b=kk().vk;0>=b||this.id?(b=this.uc,b=(new wB).j(b,b,this.vc)):b=b>=this.ce&&0<=this.ce?this:(new Js).j(this.uc,this.uc+y(this.vc,-1+b|0)|0,this.vc);return Ym(b,"Range(",", ",a)};m.A=function(a){zB(this);for(var b=-2147483648!==this.uc||-2147483648!==this.Hg,c=this.uc,e=0,f=this.Wq,h=this.vc;b?c!==f:e<this.ce;)a.h(c),e=1+e|0,c=c+h|0};
+m.Kn=function(a,b,c){return(new wB).j(a,b,c)};m.qe=function(){return this.id?this:(new Js).j(yB(this),this.uc,-this.vc|0)};m.z=function(){return this.ba()};m.ga=function(){return $l(new am,this,this.ba())};function zB(a){0>a.ce&&it(kk(),a.uc,a.Hg,a.vc,a.Rf())}m.ba=function(){return 0>this.ce?it(kk(),this.uc,this.Hg,this.vc,this.Rf()):this.ce};m.Td=function(){return this};
+function BB(a,b){if(0>=b||a.id)return a;if(b>=a.ce&&0<=a.ce){var c=a.Hg;return(new wB).j(c,c,a.vc)}return a.Kn(a.uc+y(a.vc,b)|0,a.Hg,a.vc)}m.Xf=function(a){return a===zf()?0<this.vc?this.id?K().zh():this.uc:yB(this):Rm(this,a)|0};m.fd=function(a){return BB(this,a)};m.pd=function(){return this};m.u=function(){this.id&&CB(K());return BB(this,1)};m.Wf=function(a){return a===zf()?0<this.vc?yB(this):this.id?K().zh():this.uc:Xm(this,a)|0};function yB(a){return a.id?(a=K(),tf(a)|0):a.El}
+m.Ha=function(a){return Il(this,a|0)};m.ja=function(){return pq(zl(),this)};m.Dd=ba();function AB(a){var b=(new U).xa(a.Hg);a=(new U).xa(a.uc);return Xh(b,Vh(a))}var DB=new u({jm:0},!1,"scala.collection.immutable.Range",jA,{jm:1,ab:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,Sa:1,H:1,p:1,Qa:1,Ra:1,Ta:1,gm:1,wf:1,Ea:1,Ja:1,Ia:1,sc:1,dc:1,tb:1,g:1,e:1});wB.prototype.a=DB;function EB(){}EB.prototype=new iA;function FB(){}m=FB.prototype=EB.prototype;m.Aa=function(){return this};
+function GB(a){for(var b=km(),b=(new cc).o(b),c=a;!c.m();){fk();var e=pn((new on).Fj(Rb(function(a,b){return function(){return b.i}}(a,b))),c.x());e.u();b.i=e;c=c.u()}return b.i}m.b=function(){return this};m.pa=function(a){return qm(this,a)};m.$b=function(a){return pm(this,a)};m.Wc=function(a){return sm(this,a)};m.h=function(a){return qm(this,a|0)};m.oo=function(a){return HB(this,a)};m.bb=function(){return this};
+m.Lg=function(a,b){if(mt(b.Pc(this))){if(this.m())var c=km();else{for(var c=(new cc).o(this),e=a.h(c.i.x()).kc();!c.i.m()&&e.m();)c.i=c.i.u(),c.i.m()||(e=a.h(c.i.x()).kc());c=c.i.m()?(fk(),km()):rn(e,Rb(function(a,b,c){return function(){return c.i.u().Lg(b,(fk(),(new jt).b()))}}(this,a,c)))}return c}return Im(this,a,b)};m.Yk=function(a){return IB(this,a)};m.Yf=function(a){return this.Ug("",a,"")};
+m.Ug=function(a,b,c){var e=this,f=this;for(e.m()||(e=e.u());f!==e&&!e.m();){e=e.u();if(e.m())break;e=e.u();if(e===f)break;f=f.u()}return Ym(this,a,b,c)};m.og=function(a){var b=new kt;b.Ql=a;wf.prototype.Pf.call(b,this,a);return b};m.ib=function(){return fk()};m.r=function(){return Ym(this,"Stream(",", ",")")};m.A=function(a){var b=this;a:b:for(;;){if(!b.m()){a.h(b.x());b=b.u();continue b}break a}};m.Ec=function(a,b){var c=this;for(;;){if(c.m())return a;var e=c.u(),f=Bc(b,a,c.x()),c=e;a=f}};
+function Bz(a,b){for(var c=a;!c.m()&&!b.h(c.x());)c=c.u();return c.m()?km():Az(fk(),c,b)}m.Lf=function(a){return Bz(this,a)};m.qe=function(){return GB(this)};m.ga=function(){return jw(this)};m.ba=function(){for(var a=0,b=this;!b.m();)a=1+a|0,b=b.u();return a};m.Af=function(a){var b=fk();return JB(this,Cz(b,0,1),a)};m.Td=function(){return this};m.kc=function(){return this};
+function HB(a,b){for(var c=(new cc).o(a);!c.i.m();){var e=b.h(c.i.x());if(e.m())c.i=c.i.u();else return e=e.kc(),fk(),qn((new on).Fj(Rb(function(a,b,c){return function(){return HB(c.i.u(),b)}}(a,b,c))),e)}fk();return km()}m.fd=function(a){return IB(this,a)};function IB(a,b){var c=a;for(;;){if(0>=b||c.m())return c;var c=c.u(),e=-1+b|0;b=e}}m.pd=function(){return this};
+m.hf=function(a,b,c,e){Um(a,b);if(!this.m()){Vm(a,this.x());b=this;if(b.xf()){var f=this.u();if(f.m())return Um(a,e),a;if(b!==f&&f.xf())for(b=f,f=f.u();b!==f&&f.xf();)Vm(Um(a,c),b.x()),b=b.u(),f=f.u(),f.xf()&&(f=f.u());if(f.xf()){for(var h=this,l=0;h!==f;)h=h.u(),f=f.u(),l=1+l|0;b===f&&0<l&&(Vm(Um(a,c),b.x()),b=b.u())}for(;b!==f;)Vm(Um(a,c),b.x()),b=b.u()}b.m()||(b.xf()?Um(Um(a,c),"..."):Um(Um(a,c),"?"))}Um(a,e);return a};m.Ha=function(a){return 0<=(a|0)&&0<pm(this,a|0)};
+m.ja=function(){return pq(zl(),this)};m.ac=function(a,b){if(mt(b.Pc(this))){if(this.m())var c=km();else c=a.h(this.x()),c=im(new jm,c,Rb(function(a,b){return function(){return a.u().ac(b,(fk(),(new jt).b()))}}(this,a)));return c}return Qd(this,a,b)};m.Dd=ba();m.Uc=function(a){if(this.m())throw(new vm).f("empty.reduceLeft");for(var b=this.x(),c=this.u();!c.m();)b=Bc(a,b,c.x()),c=c.u();return b};
+function rn(a,b){if(a.m())return b.Ed().kc();var c=a.x();return im(new jm,c,Rb(function(a,b){return function(){return rn(a.u(),b)}}(a,b)))}m.Ud=k("Stream");function JB(a,b,c){return mt(c.Pc(a))?(a.m()||b.m()?a=km():(c=(new A).v(a.x(),b.x()),a=im(new jm,c,Rb(function(a,b){return function(){return JB(a.u(),b.u(),(fk(),(new jt).b()))}}(a,b)))),a):dm(a,b,c)}
+var KB=new u({km:0},!1,"scala.collection.immutable.Stream",jA,{km:1,ab:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,Sa:1,H:1,p:1,Qa:1,Ra:1,Ta:1,gj:1,wf:1,Ea:1,Ja:1,Ia:1,Me:1,cg:1,ah:1,g:1,e:1});EB.prototype.a=KB;function LB(){}LB.prototype=new lB;
+LB.prototype.a=new u({cE:0},!1,"scala.collection.immutable.HashMap$EmptyHashMap$",Zx,{cE:1,fj:1,Ad:1,Wb:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,fc:1,Xb:1,cc:1,gc:1,H:1,p:1,Da:1,Bd:1,Ea:1,Ja:1,Ia:1,Cd:1,g:1,e:1,tb:1});var MB=void 0;function by(){MB||(MB=(new LB).b());return MB}function NB(){this.Vb=null;this.Va=0;this.Ui=this.ng=null}NB.prototype=new lB;function tx(a){null===a.Ui&&(a.Ui=(new A).v(a.Vb,a.ng));return a.Ui}
+function mB(a,b,c,e){var f=new NB;f.Vb=a;f.Va=b;f.ng=c;f.Ui=e;return f}m=NB.prototype;m.nj=function(a,b,c,e,f,h){if(b===this.Va&&S(T(),a,this.Vb)){if(null===h)return this.ng===e?this:mB(a,b,e,f);a=h.Hk(this.Ui,f);return mB(a.va,b,a.wa,a)}if(b!==this.Va)return a=mB(a,b,e,f),Yx(cy(),this.Va,this,b,a,c,2);c=YA();return OB(new PB,b,ZA(new $A,c,this.Vb,this.ng).pj(a,e))};m.xh=function(a,b){return b===this.Va&&S(T(),a,this.Vb)?(new Bd).o(this.ng):wd()};m.A=function(a){a.h(tx(this))};
+m.$i=function(a,b){return b===this.Va&&S(T(),a,this.Vb)?(cy(),by()):this};m.Ji=function(a,b){return b!==!!a.h(tx(this))?this:null};m.z=k(1);m.ga=function(){Yj();var a=(new z).k([tx(this)]);return $l(new am,a,a.q.length|0)};m.a=new u({sq:0},!1,"scala.collection.immutable.HashMap$HashMap1",Zx,{sq:1,fj:1,Ad:1,Wb:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,fc:1,Xb:1,cc:1,gc:1,H:1,p:1,Da:1,Bd:1,Ea:1,Ja:1,Ia:1,Cd:1,g:1,e:1,tb:1});function PB(){this.Va=0;this.jd=null}
+PB.prototype=new lB;m=PB.prototype;m.nj=function(a,b,c,e,f,h){if(b===this.Va){if(null===h||!ne(this.jd.Fc(a)))return OB(new PB,b,this.jd.pj(a,e));c=this.jd;a=h.Hk((new A).v(a,this.jd.h(a)),f);return OB(new PB,b,c.pj(a.va,a.wa))}a=mB(a,b,e,f);return Yx(cy(),this.Va,this,b,a,c,1+this.jd.z()|0)};m.xh=function(a,b){return b===this.Va?this.jd.Fc(a):wd()};m.A=function(a){var b=this.jd.ga();mm(b,a)};
+m.$i=function(a,b){if(b===this.Va){var c=this.jd.ok(a),e=c.z();switch(e){case 0:return cy(),by();case 1:return c=c.ga().ia(),mB(c.va,b,c.wa,c);default:return e===this.jd.z()?this:OB(new PB,b,c)}}else return this};m.Ji=function(a,b){var c=b?wm(this.jd,a):Hl(this.jd,a,!1),e=c.z();switch(e){case 0:return null;case 1:c=c.ga().ia();if(null!==c)var e=c.va,f=c.wa;else throw(new H).o(c);return mB(e,this.Va,f,c);default:return e===this.jd.z()?this:OB(new PB,this.Va,c)}};m.ga=function(){return this.jd.ga()};
+m.z=function(){return this.jd.z()};function OB(a,b,c){a.Va=b;a.jd=c;return a}m.a=new u({dE:0},!1,"scala.collection.immutable.HashMap$HashMapCollision1",Zx,{dE:1,fj:1,Ad:1,Wb:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,fc:1,Xb:1,cc:1,gc:1,H:1,p:1,Da:1,Bd:1,Ea:1,Ja:1,Ia:1,Cd:1,g:1,e:1,tb:1});function ay(){this.vd=0;this.qb=null;this.ub=0}ay.prototype=new lB;m=ay.prototype;
+m.nj=function(a,b,c,e,f,h){var l=1<<(31&(b>>>c|0)),q=Qh(mg(),this.vd&(-1+l|0));if(0!==(this.vd&l)){l=this.qb.d[q];a=l.nj(a,b,5+c|0,e,f,h);if(a===l)return this;b=s(x(Zx),[this.qb.d.length]);St(Fe(),this.qb,0,b,0,this.qb.d.length);b.d[q]=a;return $x(new ay,this.vd,b,this.ub+(a.z()-l.z()|0)|0)}c=s(x(Zx),[1+this.qb.d.length|0]);St(Fe(),this.qb,0,c,0,q);c.d[q]=mB(a,b,e,f);St(Fe(),this.qb,q,c,1+q|0,this.qb.d.length-q|0);return $x(new ay,this.vd|l,c,1+this.ub|0)};
+m.xh=function(a,b,c){var e=31&(b>>>c|0),f=1<<e;return-1===this.vd?this.qb.d[31&e].xh(a,b,5+c|0):0!==(this.vd&f)?(e=Qh(mg(),this.vd&(-1+f|0)),this.qb.d[e].xh(a,b,5+c|0)):wd()};m.A=function(a){for(var b=0;b<this.qb.d.length;)this.qb.d[b].A(a),b=1+b|0};
+m.$i=function(a,b,c){var e=1<<(31&(b>>>c|0)),f=Qh(mg(),this.vd&(-1+e|0));if(0!==(this.vd&e)){var h=this.qb.d[f];a=h.$i(a,b,5+c|0);if(a===h)return this;if(0===a.z()){e^=this.vd;if(0!==e)return a=s(x(Zx),[-1+this.qb.d.length|0]),St(Fe(),this.qb,0,a,0,f),St(Fe(),this.qb,1+f|0,a,f,-1+(this.qb.d.length-f|0)|0),f=this.ub-h.z()|0,1!==a.d.length||mw(a.d[0])?$x(new ay,e,a,f):a.d[0];cy();return by()}return 1!==this.qb.d.length||mw(a)?(e=s(x(Zx),[this.qb.d.length]),St(Fe(),this.qb,0,e,0,this.qb.d.length),e.d[f]=
+a,f=this.ub+(a.z()-h.z()|0)|0,$x(new ay,this.vd,e,f)):a}return this};m.Ji=function(a,b,c,e,f){for(var h=f,l=0,q=0,r=0;r<this.qb.d.length;){var B=this.qb.d[r].Ji(a,b,5+c|0,e,h);null!==B&&(e.d[h]=B,h=1+h|0,l=l+B.z()|0,q|=1<<r);r=1+r|0}if(h===f)return null;if(l===this.ub)return this;if(h!==(1+f|0)||mw(e.d[f])){b=h-f|0;a=s(x(Zx),[b]);Ja(e,f,a,0,b);if(b===this.qb.d.length)q=this.vd;else{cy();e=0;for(f=this.vd;0!==q;)b=f^f&(-1+f|0),0!==(1&q)&&(e|=b),f&=~b,q=q>>>1|0;q=e}return $x(new ay,q,a,l)}return e.d[f]};
+m.ga=function(){var a=new sx;kw.prototype.Bo.call(a,this.qb);return a};m.z=g("ub");function $x(a,b,c,e){a.vd=b;a.qb=c;a.ub=e;return a}function mw(a){return!!(a&&a.a&&a.a.y.tq)}m.a=new u({tq:0},!1,"scala.collection.immutable.HashMap$HashTrieMap",Zx,{tq:1,fj:1,Ad:1,Wb:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,fc:1,Xb:1,cc:1,gc:1,H:1,p:1,Da:1,Bd:1,Ea:1,Ja:1,Ia:1,Cd:1,g:1,e:1,tb:1});function Js(){wB.call(this)}Js.prototype=new xB;Js.prototype.Rf=k(!0);
+Js.prototype.Kn=function(a,b,c){return(new Js).j(a,b,c)};Js.prototype.a=new u({EE:0},!1,"scala.collection.immutable.Range$Inclusive",DB,{EE:1,jm:1,ab:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,Sa:1,H:1,p:1,Qa:1,Ra:1,Ta:1,gm:1,wf:1,Ea:1,Ja:1,Ia:1,sc:1,dc:1,tb:1,g:1,e:1});function jm(){this.jk=this.Zq=this.yo=null}jm.prototype=new FB;m=jm.prototype;m.x=g("yo");m.xf=function(){return null===this.jk};m.m=k(!1);
+m.u=function(){this.xf()||this.xf()||(this.Zq=this.jk.Ed(),this.jk=null);return this.Zq};function im(a,b,c){a.yo=b;a.jk=c;return a}m.a=new u({OE:0},!1,"scala.collection.immutable.Stream$Cons",KB,{OE:1,km:1,ab:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,Sa:1,H:1,p:1,Qa:1,Ra:1,Ta:1,gj:1,wf:1,Ea:1,Ja:1,Ia:1,Me:1,cg:1,ah:1,g:1,e:1});function QB(){}QB.prototype=new FB;m=QB.prototype;m.x=function(){this.zh()};m.xf=k(!1);m.m=k(!0);
+m.zh=function(){throw(new V).f("head of empty stream");};m.u=function(){throw(new vm).f("tail of empty stream");};m.a=new u({QE:0},!1,"scala.collection.immutable.Stream$Empty$",KB,{QE:1,km:1,ab:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,Sa:1,H:1,p:1,Qa:1,Ra:1,Ta:1,gj:1,wf:1,Ea:1,Ja:1,Ia:1,Me:1,cg:1,ah:1,g:1,e:1});var RB=void 0;function km(){RB||(RB=(new QB).b());return RB}
+function sw(){this.ae=this.xd=this.Oc=0;this.mc=!1;this.lc=0;this.je=this.$d=this.Gd=this.wd=this.ed=this.Rc=null}sw.prototype=new iA;m=sw.prototype;m.Aa=function(){return this};m.ra=g("Gd");
+function SB(a,b,c,e){if(a.mc)if(32>e)a.Ca(Y(a.mb()));else if(1024>e)a.na(Y(a.P())),a.P().d[31&b>>5]=a.mb(),a.Ca(Dn(a.P(),31&c>>5));else if(32768>e)a.na(Y(a.P())),a.Ba(Y(a.ea())),a.P().d[31&b>>5]=a.mb(),a.ea().d[31&b>>10]=a.P(),a.na(Dn(a.ea(),31&c>>10)),a.Ca(Dn(a.P(),31&c>>5));else if(1048576>e)a.na(Y(a.P())),a.Ba(Y(a.ea())),a.db(Y(a.ra())),a.P().d[31&b>>5]=a.mb(),a.ea().d[31&b>>10]=a.P(),a.ra().d[31&b>>15]=a.ea(),a.Ba(Dn(a.ra(),31&c>>15)),a.na(Dn(a.ea(),31&c>>10)),a.Ca(Dn(a.P(),31&c>>5));else if(33554432>
+e)a.na(Y(a.P())),a.Ba(Y(a.ea())),a.db(Y(a.ra())),a.Zb(Y(a.Pa())),a.P().d[31&b>>5]=a.mb(),a.ea().d[31&b>>10]=a.P(),a.ra().d[31&b>>15]=a.ea(),a.Pa().d[31&b>>20]=a.ra(),a.db(Dn(a.Pa(),31&c>>20)),a.Ba(Dn(a.ra(),31&c>>15)),a.na(Dn(a.ea(),31&c>>10)),a.Ca(Dn(a.P(),31&c>>5));else if(1073741824>e)a.na(Y(a.P())),a.Ba(Y(a.ea())),a.db(Y(a.ra())),a.Zb(Y(a.Pa())),a.If(Y(a.Bc())),a.P().d[31&b>>5]=a.mb(),a.ea().d[31&b>>10]=a.P(),a.ra().d[31&b>>15]=a.ea(),a.Pa().d[31&b>>20]=a.ra(),a.Bc().d[31&b>>25]=a.Pa(),a.Zb(Dn(a.Bc(),
+31&c>>25)),a.db(Dn(a.Pa(),31&c>>20)),a.Ba(Dn(a.ra(),31&c>>15)),a.na(Dn(a.ea(),31&c>>10)),a.Ca(Dn(a.P(),31&c>>5));else throw(new pe).b();else{b=-1+a.zb()|0;switch(b){case 5:a.If(Y(a.Bc()));a.Zb(Dn(a.Bc(),31&c>>25));a.db(Dn(a.Pa(),31&c>>20));a.Ba(Dn(a.ra(),31&c>>15));a.na(Dn(a.ea(),31&c>>10));a.Ca(Dn(a.P(),31&c>>5));break;case 4:a.Zb(Y(a.Pa()));a.db(Dn(a.Pa(),31&c>>20));a.Ba(Dn(a.ra(),31&c>>15));a.na(Dn(a.ea(),31&c>>10));a.Ca(Dn(a.P(),31&c>>5));break;case 3:a.db(Y(a.ra()));a.Ba(Dn(a.ra(),31&c>>15));
+a.na(Dn(a.ea(),31&c>>10));a.Ca(Dn(a.P(),31&c>>5));break;case 2:a.Ba(Y(a.ea()));a.na(Dn(a.ea(),31&c>>10));a.Ca(Dn(a.P(),31&c>>5));break;case 1:a.na(Y(a.P()));a.Ca(Dn(a.P(),31&c>>5));break;case 0:a.Ca(Y(a.mb()));break;default:throw(new H).o(b);}a.mc=!0}}m.x=function(){if(0===this.$b(0))throw(new vm).f("empty.head");return this.pa(0)};m.pa=function(a){var b=a+this.Oc|0;if(0<=a&&b<this.xd)a=b;else throw(new X).f(""+a);return Bn(this,a,a^this.ae)};m.zb=g("lc");m.$b=function(a){return this.ba()-a|0};
+m.h=function(a){return this.pa(a|0)};m.bb=function(){return this};m.j=function(a,b,c){this.Oc=a;this.xd=b;this.ae=c;this.mc=!1;return this};m.If=d("je");m.ib=function(){return Je()};m.mb=g("Rc");m.Ba=d("wd");m.Pa=g("$d");function TB(a,b){var c=-1+a.lc|0;switch(c){case 0:a.Rc=Hn(a.Rc,b);break;case 1:a.ed=Hn(a.ed,b);break;case 2:a.wd=Hn(a.wd,b);break;case 3:a.Gd=Hn(a.Gd,b);break;case 4:a.$d=Hn(a.$d,b);break;case 5:a.je=Hn(a.je,b);break;default:throw(new H).o(c);}}m.ga=function(){return df(this)};
+m.na=d("ed");m.ba=function(){return this.xd-this.Oc|0};m.Td=function(){return this};m.Zb=d("$d");function UB(a,b,c,e){a.mc?(Cn(a,b),In(a,b,c,e)):(In(a,b,c,e),a.mc=!0)}m.P=g("ed");m.fd=function(a){return VB(this,a)};m.Bc=g("je");m.u=function(){if(0===this.$b(0))throw(new vm).f("empty.tail");return VB(this,1)};m.pd=function(){return this};function WB(a){if(32>a)return 1;if(1024>a)return 2;if(32768>a)return 3;if(1048576>a)return 4;if(33554432>a)return 5;if(1073741824>a)return 6;throw(new pe).b();}
+function df(a){var b=a.Oc,c=a.xd,e=new xx;e.al=c;e.Gf=-32&b;e.Vf=31&b;b=c-e.Gf|0;e.bl=32>b?b:32;e.ge=(e.Gf+e.Vf|0)<c;En(e,a,a.lc);a.mc&&Cn(e,a.ae);1<e.Vk&&Fn(e,a.Oc,a.Oc^a.ae);return e}m.Ha=function(a){return Il(this,a|0)};function XB(a,b){for(var c=0;c<b;)a.d[c]=null,c=1+c|0}m.ja=function(){return pq(zl(),this)};m.Fd=d("lc");m.ea=g("wd");m.Ca=d("Rc");
+function jf(a,b){if(a.xd!==a.Oc){var c=-32&(-1+a.Oc|0),e=31&(-1+a.Oc|0);if(a.Oc!==(32+c|0)){var f=(new sw).j(-1+a.Oc|0,a.xd,c);En(f,a,a.lc);f.mc=a.mc;SB(f,a.ae,c,a.ae^c);f.Rc.d[e]=b;return f}var h=(1<<y(5,a.lc))-a.xd|0,f=h&~(-1+(1<<y(5,-1+a.lc|0))|0),h=h>>>y(5,-1+a.lc|0)|0;if(0!==f){if(1<a.lc){var c=c+f|0,l=a.ae+f|0,f=(new sw).j((-1+a.Oc|0)+f|0,a.xd+f|0,c);En(f,a,a.lc);f.mc=a.mc;TB(f,h);UB(f,l,c,l^c);f.Rc.d[e]=b;return f}e=32+c|0;c=a.ae;l=(new sw).j((-1+a.Oc|0)+f|0,a.xd+f|0,e);En(l,a,a.lc);l.mc=a.mc;
+TB(l,h);SB(l,c,e,c^e);l.Rc.d[-1+f|0]=b;return l}if(0>c)return f=(1<<y(5,1+a.lc|0))-(1<<y(5,a.lc))|0,h=c+f|0,c=a.ae+f|0,f=(new sw).j((-1+a.Oc|0)+f|0,a.xd+f|0,h),En(f,a,a.lc),f.mc=a.mc,UB(f,c,h,c^h),f.Rc.d[e]=b,f;f=a.ae;h=(new sw).j(-1+a.Oc|0,a.xd,c);En(h,a,a.lc);h.mc=a.mc;UB(h,f,c,f^c);h.Rc.d[e]=b;return h}e=s(x(w),[32]);e.d[31]=b;f=(new sw).j(31,32,0);f.lc=1;f.Rc=e;return f}
+function VB(a,b){var c;if(0>=b)c=a;else if((a.Oc+b|0)<a.xd){var e=a.Oc+b|0,f=-32&e,h=WB(e^(-1+a.xd|0)),l=e&~(-1+(1<<y(5,h))|0);c=(new sw).j(e-l|0,a.xd-l|0,f-l|0);En(c,a,a.lc);c.mc=a.mc;SB(c,a.ae,f,a.ae^f);c.lc=h;f=-1+h|0;switch(f){case 0:c.ed=null;c.wd=null;c.Gd=null;c.$d=null;c.je=null;break;case 1:c.wd=null;c.Gd=null;c.$d=null;c.je=null;break;case 2:c.Gd=null;c.$d=null;c.je=null;break;case 3:c.$d=null;c.je=null;break;case 4:c.je=null;break;case 5:break;default:throw(new H).o(f);}e=e-l|0;if(32>e)XB(c.Rc,
+e);else if(1024>e)XB(c.Rc,31&e),c.ed=YB(c.ed,e>>>5|0);else if(32768>e)XB(c.Rc,31&e),c.ed=YB(c.ed,31&(e>>>5|0)),c.wd=YB(c.wd,e>>>10|0);else if(1048576>e)XB(c.Rc,31&e),c.ed=YB(c.ed,31&(e>>>5|0)),c.wd=YB(c.wd,31&(e>>>10|0)),c.Gd=YB(c.Gd,e>>>15|0);else if(33554432>e)XB(c.Rc,31&e),c.ed=YB(c.ed,31&(e>>>5|0)),c.wd=YB(c.wd,31&(e>>>10|0)),c.Gd=YB(c.Gd,31&(e>>>15|0)),c.$d=YB(c.$d,e>>>20|0);else if(1073741824>e)XB(c.Rc,31&e),c.ed=YB(c.ed,31&(e>>>5|0)),c.wd=YB(c.wd,31&(e>>>10|0)),c.Gd=YB(c.Gd,31&(e>>>15|0)),
+c.$d=YB(c.$d,31&(e>>>20|0)),c.je=YB(c.je,e>>>25|0);else throw(new pe).b();}else c=Je().qj;return c}m.Dd=ba();function YB(a,b){var c=s(x(w),[a.d.length]);Ja(a,b,c,b,c.d.length-b|0);return c}m.db=d("Gd");m.a=new u({XE:0},!1,"scala.collection.immutable.Vector",jA,{XE:1,ab:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,Sa:1,H:1,p:1,Qa:1,Ra:1,Ta:1,gm:1,wf:1,Ea:1,Ja:1,Ia:1,sc:1,dc:1,zq:1,g:1,e:1,tb:1});function Mn(){this.ee=null}Mn.prototype=new iA;m=Mn.prototype;m.Aa=function(){return this};
+m.x=function(){return Zl(this)};m.pa=function(a){a=65535&(this.ee.charCodeAt(a)|0);return(new ig).rb(a)};m.$b=function(a){return this.ba()-a|0};m.h=function(a){a=65535&(this.ee.charCodeAt(a|0)|0);return(new ig).rb(a)};m.Wc=function(a){return Sl(this,a)};m.m=function(){return Xl(this)};m.bb=function(){return this};m.r=g("ee");m.ib=function(){return gf()};m.A=function(a){Ul(this,a)};m.Ec=function(a,b){return Ll(this,0,this.ee.length|0,a,b)};m.Pe=function(a,b){return ZB(this,a,b)};m.qe=function(){return Vl(this)};
+m.ga=function(){return $l(new am,this,this.ee.length|0)};m.Td=function(){return this};m.ba=function(){return this.ee.length|0};m.Af=function(a){return Rl(this,a)};m.fd=function(a){return ZB(this,a,this.ee.length|0)};m.pd=function(){return this};m.u=function(){return Wl(this)};m.Ha=function(a){return Il(this,a|0)};m.Dg=function(a,b,c){Ol(this,a,b,c)};m.ja=function(){return pq(zl(),this)};m.f=function(a){this.ee=a;return this};
+function ZB(a,b,c){b=0>b?0:b;if(c<=b||b>=(a.ee.length|0))return(new Mn).f("");c=c>(a.ee.length|0)?a.ee.length|0:c;jc();return(new Mn).f((null!==a?a.ee:null).substring(b,c))}m.Dd=ba();m.Uc=function(a){return Kl(this,a)};m.ha=function(){Nn||(Nn=(new Jn).b());return Nn.ha()};
+m.a=new u({aF:0},!1,"scala.collection.immutable.WrappedString",jA,{aF:1,ab:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,Sa:1,H:1,p:1,Qa:1,Ra:1,Ta:1,gm:1,wf:1,Ea:1,Ja:1,Ia:1,sc:1,dc:1,xq:1,nd:1,bg:1,nc:1});function Ud(){this.rd=this.mf=null}Ud.prototype=new qB;m=Ud.prototype;m.gb=k("::");m.x=g("mf");m.eb=k(2);m.m=k(!1);m.fb=function(a){switch(a){case 0:return this.mf;case 1:return this.rd;default:throw(new X).f(""+a);}};m.u=g("rd");
+function Td(a,b,c){a.mf=b;a.rd=c;return a}m.kb=function(){return av(this)};function vf(a){return!!(a&&a.a&&a.a.y.rq)}m.a=new u({rq:0},!1,"scala.collection.immutable.$colon$colon",sB,{rq:1,ek:1,ab:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,Sa:1,H:1,p:1,Qa:1,Ra:1,Ta:1,gj:1,wf:1,Ea:1,Ja:1,Ia:1,Me:1,cg:1,ua:1,ah:1,e:1,g:1});function $B(){}$B.prototype=new qB;m=$B.prototype;m.x=function(){this.zh()};m.gb=k("Nil");m.eb=k(0);m.fa=function(a){return kv(a)?a.m():!1};
+function CB(){throw(new vm).f("tail of empty list");}m.m=k(!0);m.fb=function(a){throw(new X).f(""+a);};m.zh=function(){throw(new V).f("head of empty list");};m.u=function(){return CB()};m.kb=function(){return av(this)};m.a=new u({CE:0},!1,"scala.collection.immutable.Nil$",sB,{CE:1,ek:1,ab:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,Sa:1,H:1,p:1,Qa:1,Ra:1,Ta:1,gj:1,wf:1,Ea:1,Ja:1,Ia:1,Me:1,cg:1,ua:1,ah:1,e:1,g:1});var aC=void 0;
+function K(){aC||(aC=(new $B).b());return aC}function gC(){}gC.prototype=new lA;function xC(){}m=xC.prototype=gC.prototype;m.Aa=function(){return this};m.ib=function(){yw||(yw=(new xw).b());return yw};m.Mc=function(a,b){Qn(this,a,b)};m.vb=da();m.ha=function(){return this.lf()};m.hb=function(a){return ef(this,a)};
+var yC=new u({nm:0},!1,"scala.collection.mutable.AbstractMap",mA,{nm:1,Wb:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,fc:1,Xb:1,cc:1,gc:1,H:1,p:1,Da:1,Hq:1,xb:1,yb:1,wb:1,Iq:1,Pb:1,Kb:1,Jb:1,fg:1,Db:1,Bb:1,Ab:1});gC.prototype.a=yC;function zC(){}zC.prototype=new $z;function AC(){}m=AC.prototype=zC.prototype;m.dd=function(a){return+(null!==$n(this,a))};m.m=function(){return 0===this.z()};m.fa=function(a){return Jl(this,a)};m.r=function(){return Hm(this)};
+m.xm=function(a){var b=uw(this);return nm(b,a)};m.Mc=function(a,b){Qn(this,a,b)};m.ja=function(){var a=zl();return wl(a,this,a.tm)};m.vb=da();m.ac=function(a,b){return Qd(this,a,b)};m.Ud=k("Set");m.ha=function(){return this.ib().kf()};m.hb=function(a){return ef(this,a)};
+var BC=new u({Aq:0},!1,"scala.collection.mutable.AbstractSet",aA,{Aq:1,mm:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,xb:1,yb:1,wb:1,CF:1,Yc:1,p:1,Kc:1,Xc:1,$c:1,Zc:1,Da:1,EF:1,dj:1,Pb:1,Kb:1,Jb:1,fg:1,Db:1,Bb:1,Ab:1});zC.prototype.a=BC;function Sg(){this.ie=null}Sg.prototype=new xC;m=Sg.prototype;m.nk=function(a){var b=this.ie;Si().$g.call(b,a)&&delete this.ie[a];return this};m.h=function(a){return this.Ik(a)};m.bb=function(){return this};
+m.Dh=function(a){this.ie=a;return this};m.Sb=function(a){return CC(this,a)};m.lf=function(){return(new Sg).Dh(Ri())};m.Wd=function(a){var b=(new Sg).Dh(Ri());return ef(b,this).nk(a)};m.hr=function(a,b){this.ie[a]=b};m.ig=function(){return this};m.oa=function(){return this};m.ga=function(){return(new Du).Dh(this.ie)};m.Fc=function(a){var b=this.ie;return Si().$g.call(b,a)?(new Bd).o(this.ie[a]):wd()};
+m.Ik=function(a){var b=this.ie;if(Si().$g.call(b,a))return this.ie[a];throw(new V).f("key not found: "+a);};function CC(a,b){a.ie[b.va]=b.wa;return a}m.pk=function(a){return CC(this,a)};m.pb=function(a){var b=this.ie;return!!Si().$g.call(b,a)};m.za=function(a){return CC(this,a)};m.fe=function(a){var b=(new Sg).Dh(Ri());return ef(b,this).pk(a)};
+m.a=new u({jG:0},!1,"scala.scalajs.js.WrappedDictionary",yC,{jG:1,nm:1,Wb:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,fc:1,Xb:1,cc:1,gc:1,H:1,p:1,Da:1,Hq:1,xb:1,yb:1,wb:1,Iq:1,Pb:1,Kb:1,Jb:1,fg:1,Db:1,Bb:1,Ab:1});function Hz(){this.kd=this.vh=null}Hz.prototype=new PA;m=Hz.prototype;m.Aa=function(){return this};m.b=function(){this.kd=this;return this};m.x=function(){return to(this)};m.pa=function(a){return qo(this,a)};m.h=function(a){return qo(this,a|0)};
+m.m=function(){return this.kd===this};m.bb=function(){return this};m.ib=function(){Jz||(Jz=(new Gz).b());return Jz};m.A=function(a){for(var b=this;!b.m();)a.h(b.vh),b=b.kd};m.ga=function(){return Aw(this)};m.eh=function(){return this};m.ba=function(){var a;a:{a=this;var b=0;for(;;){if(a.kd===a){a=b;break a}b=1+b|0;a=a.kd}a=void 0}return a};m.Td=function(){return this};m.fd=function(a){return ro(this,a)};m.u=function(){return so(this)};m.pd=function(){return this};
+m.Ha=function(a){return Il(this,a|0)};m.ja=function(){return pq(zl(),this)};m.a=new u({tF:0},!1,"scala.collection.mutable.LinkedList",QA,{tF:1,Yb:1,ab:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,Sa:1,H:1,p:1,Qa:1,Ra:1,Ta:1,hc:1,xb:1,yb:1,wb:1,ic:1,Db:1,Bb:1,Ab:1,Fq:1,Me:1,cg:1,bL:1,g:1,e:1});function DC(){}DC.prototype=new PA;function EC(){}EC.prototype=DC.prototype;DC.prototype.hb=function(a){return ef(this,a)};
+var FC=new u({fk:0},!1,"scala.collection.mutable.AbstractBuffer",QA,{fk:1,Yb:1,ab:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,Sa:1,H:1,p:1,Qa:1,Ra:1,Ta:1,hc:1,xb:1,yb:1,wb:1,ic:1,Db:1,Bb:1,Ab:1,om:1,pm:1,Kb:1,Jb:1,fg:1,dj:1,Da:1});DC.prototype.a=FC;function GC(){}GC.prototype=new PA;function HC(){}m=HC.prototype=GC.prototype;m.Aa=function(){return this};m.x=function(){return Zl(this)};m.$b=function(a){return this.ba()-a|0};m.Wc=function(a){return Sl(this,a)};m.m=function(){return Xl(this)};
+m.bb=function(){return this};m.ib=function(){return hy()};m.A=function(a){Ul(this,a)};m.Ec=function(a,b){return Ll(this,0,this.ba(),a,b)};m.Pe=function(a,b){return Nl(this,a,b)};m.qe=function(){return Vl(this)};m.eh=function(){return this};m.ga=function(){return $l(new am,this,this.ba())};m.Td=function(){return this};m.Af=function(a){return Rl(this,a)};m.fd=function(a){var b=this.ba();return Nl(this,a,b)};m.pd=function(){return this};m.u=function(){return Wl(this)};
+m.Ha=function(a){return Il(this,a|0)};m.Dg=function(a,b,c){Ol(this,a,b,c)};m.ja=function(){return pq(zl(),this)};m.Dd=ba();m.Uc=function(a){return Kl(this,a)};m.ha=function(){return(new zu).ul(this.Ce())};m.Ud=k("WrappedArray");var IC=new u({se:0},!1,"scala.collection.mutable.WrappedArray",QA,{se:1,Yb:1,ab:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,Sa:1,H:1,p:1,Qa:1,Ra:1,Ta:1,hc:1,xb:1,yb:1,wb:1,ic:1,Db:1,Bb:1,Ab:1,Qd:1,sc:1,dc:1,Rd:1,re:1,de:1,nd:1,tb:1});
+GC.prototype.a=IC;function Iz(){this.Jd=this.Ub=null;this.Hc=0}Iz.prototype=new PA;function JC(){}m=JC.prototype=Iz.prototype;m.Aa=function(){return this};m.b=function(){this.Jd=this.Ub=(new Hz).b();this.Hc=0;return this};m.x=function(){if(!this.m())return to(this.Ub);throw(new V).b();};m.pa=function(a){return qo(this.Ub,a)};m.Lq=function(){return this};m.$b=function(a){return pm(this,a)};m.h=function(a){return qo(this.Ub,a|0)};m.Wc=function(a){return sm(this,a)};m.m=function(){return 0===this.Hc};
+m.bb=function(){return this};m.Yk=function(a){return tm(this,a)};m.Sb=function(a){return dd(this,a)};m.ib=function(){Nz||(Nz=(new Mz).b());return Nz};m.A=function(a){for(var b=this;!b.m();)a.h(b.x()),b=b.u()};m.Ec=function(a,b){return om(this,a,b)};function KC(a,b){if(a.m())throw(new pe).f("requirement failed: tail of empty list");b.Ub=so(a.Ub);b.Hc=-1+a.Hc|0;b.Jd=0===b.Hc?b.Ub:a.Jd}m.oa=function(){return this};m.ga=function(){return Aw(this.Ub)};m.eh=function(){return this};
+m.Mc=function(a,b){Qn(this,a,b)};m.ba=g("Hc");m.Td=function(){return this};m.fd=function(a){return tm(this,a)};m.u=function(){return this.Vq()};m.pd=function(){return this};m.Ha=function(a){return 0<=(a|0)&&0<pm(this,a|0)};m.za=function(a){return dd(this,a)};m.vb=da();m.ja=function(){return pq(zl(),this.Lq())};
+function dd(a,b){if(0===a.Hc){var c=a.Ub,e=new Hz;Hz.prototype.b.call(e);null!==c&&(e.vh=b,e.kd=c);a.Ub=e;0===a.Hc&&(a.Jd=a.Ub)}else a.Jd.kd=(new Hz).b(),a.Jd=a.Jd.kd,a.Jd.vh=b,a.Jd.kd=(new Hz).b();a.Hc=1+a.Hc|0;return a}m.Tk=function(){this.Jd=this.Ub=(new Hz).b();this.Hc=0};m.Vq=function(){var a=(new Iz).b();KC(this,a);return a};m.Dd=ba();m.Uc=function(a){return um(this,a)};m.ha=function(){return(new Iz).b()};m.hb=function(a){return ef(this,a)};
+var LC=new u({Jq:0},!1,"scala.collection.mutable.MutableList",QA,{Jq:1,Yb:1,ab:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,Sa:1,H:1,p:1,Qa:1,Ra:1,Ta:1,hc:1,xb:1,yb:1,wb:1,ic:1,Db:1,Bb:1,Ab:1,Fq:1,Me:1,cg:1,ah:1,Pb:1,Kb:1,Jb:1,g:1,e:1});Iz.prototype.a=LC;function Qm(){this.Ve=0;this.ya=null;this.yf=this.xc=0;this.jc=null;this.hg=0}Qm.prototype=new xC;m=Qm.prototype;m.Aa=function(){return this};m.b=function(){Qm.prototype.Ox.call(this,null);return this};
+m.nk=function(a){var b=xl(W(),a),b=lo(this,b),c=this.ya.d[b];if(null!==c){var e=c.Tf;if(S(T(),e,a))this.ya.d[b]=c.Kd,this.xc=-1+this.xc|0,no(this,b);else{for(e=c.Kd;;){if(null!==e)var f=e.Tf,f=!S(T(),f,a);else f=!1;if(f)c=e,e=e.Kd;else break}null!==e&&(c.Kd=e.Kd,this.xc=-1+this.xc|0,no(this,b))}}return this};m.h=function(a){var b=jo(this,a);return null===b?Dm(a):b.l};m.bb=function(){return this};function MC(a,b){var c=oo(a,b.va,b.wa);null!==c&&(c.l=b.wa);return a}m.Sb=function(a){return MC(this,a)};
+m.A=function(a){for(var b=this.ya,c=io(this),e=b.d[c];null!==e;){var f=e;a.h((new A).v(f.Tf,f.l));for(e=e.Kd;null===e&&0<c;)c=-1+c|0,e=b.d[c]}};m.lf=function(){return(new Qm).b()};m.Wd=function(a){var b=(new Qm).b();return ef(b,this).nk(a)};m.z=g("xc");m.hr=function(a,b){var c=oo(this,a,b);if(null===c)wd();else{var e=c.l;c.l=b;(new Bd).o(e)}};m.ig=function(){return this};m.oa=function(){return this};m.ga=function(){return(new ym).Qi(ww(this),C(function(){return function(a){return(new A).v(a.Tf,a.l)}}(this)))};
+m.Ox=function(a){this.Ve=750;this.ya=s(x(nb),[eo()]);this.xc=0;this.yf=fo().Vi(this.Ve,eo());this.jc=null;this.hg=Qh(mg(),-1+this.ya.d.length|0);null!==a&&(this.Ve=a.lz(),this.ya=a.kL(),this.xc=a.dH(),this.yf=a.qH(),this.hg=a.WF(),this.jc=a.cG());return this};m.Fc=function(a){a=jo(this,a);return null===a?wd():(new Bd).o(a.l)};m.pk=function(a){return MC(this,a)};m.pb=function(a){return null!==jo(this,a)};m.za=function(a){return MC(this,a)};m.fe=function(a){var b=(new Qm).b();return ef(b,this).pk(a)};
+m.a=new u({mF:0},!1,"scala.collection.mutable.HashMap",yC,{mF:1,nm:1,Wb:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,fc:1,Xb:1,cc:1,gc:1,H:1,p:1,Da:1,Hq:1,xb:1,yb:1,wb:1,Iq:1,Pb:1,Kb:1,Jb:1,fg:1,Db:1,Bb:1,Ab:1,$K:1,aL:1,tb:1,g:1,e:1});function Pz(){Iz.call(this)}Pz.prototype=new JC;m=Pz.prototype;m.Lq=function(){return this};function ed(a){if(a.m())throw(new V).f("queue empty");a.Ub=a.Ub.kd;a.Hc=-1+a.Hc|0;0===a.Hc&&(a.Jd=a.Ub)}m.bb=function(){return this};m.ib=function(){return Yc()};
+m.Td=function(){return this};m.fd=function(a){return tm(this,a)};m.u=function(){return NC(this)};m.pd=function(){return this};m.Ha=function(a){return 0<=(a|0)&&0<pm(this,a|0)};function NC(a){var b=(new Pz).b();KC(a,b);return b}m.Vq=function(){return NC(this)};m.Dd=ba();m.ha=function(){return Yc().ha()};
+m.a=new u({AF:0},!1,"scala.collection.mutable.Queue",LC,{AF:1,Jq:1,Yb:1,ab:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,Sa:1,H:1,p:1,Qa:1,Ra:1,Ta:1,hc:1,xb:1,yb:1,wb:1,ic:1,Db:1,Bb:1,Ab:1,Fq:1,Me:1,cg:1,ah:1,Pb:1,Kb:1,Jb:1,g:1,e:1});function pu(){this.Ve=0;this.ya=null;this.yf=this.xc=0;this.jc=null;this.hg=0}pu.prototype=new AC;m=pu.prototype;m.Aa=function(){return this};m.b=function(){pu.prototype.Nx.call(this,null);return this};
+m.h=function(a){return null!==$n(this,a)};m.bb=function(){return this};m.Sb=function(a){return ru(this,a)};m.ib=function(){sz||(sz=(new rz).b());return sz};m.A=function(a){for(var b=0,c=this.ya.d.length;b<c;){var e=this.ya.d[b];null!==e&&a.h(e===Zn()?null:e);b=1+b|0}};m.z=g("xc");m.oa=function(){return this};m.ga=function(){return uw(this)};
+m.Nx=function(a){this.Ve=450;this.ya=s(x(w),[go(fo(),32)]);this.xc=0;this.yf=Wn().Vi(this.Ve,go(fo(),32));this.jc=null;this.hg=Qh(mg(),-1+this.ya.d.length|0);null!==a&&(this.Ve=a.lz(),this.ya=a.jL(),this.xc=a.dH(),this.yf=a.qH(),this.hg=a.WF(),this.jc=a.cG());return this};m.za=function(a){return ru(this,a)};m.Xd=function(a){var b=(new pu).b();return ru(ef(b,this),a)};function ru(a,b){var c=null===b?Zn():b;bo(a,c);return a}
+m.a=new u({nF:0},!1,"scala.collection.mutable.HashSet",BC,{nF:1,Aq:1,mm:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,xb:1,yb:1,wb:1,CF:1,Yc:1,p:1,Kc:1,Xc:1,$c:1,Zc:1,Da:1,EF:1,dj:1,Pb:1,Kb:1,Jb:1,fg:1,Db:1,Bb:1,Ab:1,YK:1,ZK:1,tb:1,g:1,e:1});function Go(){this.q=null}Go.prototype=new HC;m=Go.prototype;m.pa=function(a){return this.q.d[a]};m.h=function(a){return this.q.d[a|0]};m.Te=function(a,b){this.q.d[a]=!!b};m.ba=function(){return this.q.d.length};m.Ce=function(){return Ie().We};
+m.a=new u({IF:0},!1,"scala.collection.mutable.WrappedArray$ofBoolean",IC,{IF:1,se:1,Yb:1,ab:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,Sa:1,H:1,p:1,Qa:1,Ra:1,Ta:1,hc:1,xb:1,yb:1,wb:1,ic:1,Db:1,Bb:1,Ab:1,Qd:1,sc:1,dc:1,Rd:1,re:1,de:1,nd:1,tb:1,g:1,e:1});function Eo(){this.q=null}Eo.prototype=new HC;m=Eo.prototype;m.pa=function(a){return this.q.d[a]};m.h=function(a){return this.q.d[a|0]};m.Te=function(a,b){this.q.d[a]=b|0};m.ba=function(){return this.q.d.length};
+m.Ce=function(){return Ie().Xe};m.a=new u({JF:0},!1,"scala.collection.mutable.WrappedArray$ofByte",IC,{JF:1,se:1,Yb:1,ab:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,Sa:1,H:1,p:1,Qa:1,Ra:1,Ta:1,hc:1,xb:1,yb:1,wb:1,ic:1,Db:1,Bb:1,Ab:1,Qd:1,sc:1,dc:1,Rd:1,re:1,de:1,nd:1,tb:1,g:1,e:1});function Do(){this.q=null}Do.prototype=new HC;m=Do.prototype;m.pa=function(a){return(new ig).rb(this.q.d[a])};m.h=function(a){return(new ig).rb(this.q.d[a|0])};
+m.Te=function(a,b){var c=yp(T(),b);this.q.d[a]=c};m.ba=function(){return this.q.d.length};m.Ce=function(){return Ie().Ye};m.a=new u({KF:0},!1,"scala.collection.mutable.WrappedArray$ofChar",IC,{KF:1,se:1,Yb:1,ab:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,Sa:1,H:1,p:1,Qa:1,Ra:1,Ta:1,hc:1,xb:1,yb:1,wb:1,ic:1,Db:1,Bb:1,Ab:1,Qd:1,sc:1,dc:1,Rd:1,re:1,de:1,nd:1,tb:1,g:1,e:1});function Ao(){this.q=null}Ao.prototype=new HC;m=Ao.prototype;m.pa=function(a){return this.q.d[a]};
+m.h=function(a){return this.q.d[a|0]};m.Te=function(a,b){this.q.d[a]=+b};m.ba=function(){return this.q.d.length};m.Ce=function(){return Ie().Ze};m.a=new u({LF:0},!1,"scala.collection.mutable.WrappedArray$ofDouble",IC,{LF:1,se:1,Yb:1,ab:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,Sa:1,H:1,p:1,Qa:1,Ra:1,Ta:1,hc:1,xb:1,yb:1,wb:1,ic:1,Db:1,Bb:1,Ab:1,Qd:1,sc:1,dc:1,Rd:1,re:1,de:1,nd:1,tb:1,g:1,e:1});function Co(){this.q=null}Co.prototype=new HC;m=Co.prototype;m.pa=function(a){return this.q.d[a]};
+m.h=function(a){return this.q.d[a|0]};m.Te=function(a,b){var c=ta(b);this.q.d[a]=c};m.ba=function(){return this.q.d.length};m.Ce=function(){return Ie().af};m.a=new u({MF:0},!1,"scala.collection.mutable.WrappedArray$ofFloat",IC,{MF:1,se:1,Yb:1,ab:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,Sa:1,H:1,p:1,Qa:1,Ra:1,Ta:1,hc:1,xb:1,yb:1,wb:1,ic:1,Db:1,Bb:1,Ab:1,Qd:1,sc:1,dc:1,Rd:1,re:1,de:1,nd:1,tb:1,g:1,e:1});function zo(){this.q=null}zo.prototype=new HC;m=zo.prototype;
+m.pa=function(a){return this.oi(a)};m.h=function(a){return this.oi(a|0)};m.Te=function(a,b){this.q.d[a]=b|0};m.oi=function(a){return this.q.d[a]};m.ba=function(){return this.q.d.length};m.Ce=function(){return Ie().bf};m.a=new u({NF:0},!1,"scala.collection.mutable.WrappedArray$ofInt",IC,{NF:1,se:1,Yb:1,ab:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,Sa:1,H:1,p:1,Qa:1,Ra:1,Ta:1,hc:1,xb:1,yb:1,wb:1,ic:1,Db:1,Bb:1,Ab:1,Qd:1,sc:1,dc:1,Rd:1,re:1,de:1,nd:1,tb:1,g:1,e:1});
+function Bo(){this.q=null}Bo.prototype=new HC;m=Bo.prototype;m.pa=function(a){return this.q.d[a]};m.h=function(a){return this.q.d[a|0]};m.Te=function(a,b){var c=Ma(b);this.q.d[a]=c};m.ba=function(){return this.q.d.length};m.Ce=function(){return Ie().cf};
+m.a=new u({OF:0},!1,"scala.collection.mutable.WrappedArray$ofLong",IC,{OF:1,se:1,Yb:1,ab:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,Sa:1,H:1,p:1,Qa:1,Ra:1,Ta:1,hc:1,xb:1,yb:1,wb:1,ic:1,Db:1,Bb:1,Ab:1,Qd:1,sc:1,dc:1,Rd:1,re:1,de:1,nd:1,tb:1,g:1,e:1});function Ac(){this.$n=this.q=null;this.Pk=!1}Ac.prototype=new HC;m=Ac.prototype;m.h=function(a){return this.pa(a|0)};m.pa=function(a){return this.q.d[a]};m.Te=function(a,b){this.q.d[a]=b};
+function zc(a,b){a.q=b;return a}m.ba=function(){return this.q.d.length};m.Ce=function(){this.Pk||this.Pk||(this.$n=Ge(Ie(),Ik(W(),la(this.q))),this.Pk=!0);return this.$n};m.a=new u({Kq:0},!1,"scala.collection.mutable.WrappedArray$ofRef",IC,{Kq:1,se:1,Yb:1,ab:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,Sa:1,H:1,p:1,Qa:1,Ra:1,Ta:1,hc:1,xb:1,yb:1,wb:1,ic:1,Db:1,Bb:1,Ab:1,Qd:1,sc:1,dc:1,Rd:1,re:1,de:1,nd:1,tb:1,g:1,e:1});function Fo(){this.q=null}Fo.prototype=new HC;
+m=Fo.prototype;m.pa=function(a){return this.q.d[a]};m.h=function(a){return this.q.d[a|0]};m.Te=function(a,b){this.q.d[a]=b|0};m.ba=function(){return this.q.d.length};m.Ce=function(){return Ie().ff};m.a=new u({PF:0},!1,"scala.collection.mutable.WrappedArray$ofShort",IC,{PF:1,se:1,Yb:1,ab:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,Sa:1,H:1,p:1,Qa:1,Ra:1,Ta:1,hc:1,xb:1,yb:1,wb:1,ic:1,Db:1,Bb:1,Ab:1,Qd:1,sc:1,dc:1,Rd:1,re:1,de:1,nd:1,tb:1,g:1,e:1});
+function Io(){this.q=null}Io.prototype=new HC;m=Io.prototype;m.pa=function(a){this.q.d[a]};m.h=function(a){this.q.d[a|0]};m.Te=function(a,b){this.q.d[a]=b};m.ba=function(){return this.q.d.length};m.Ce=function(){return Ie().gf};
+m.a=new u({QF:0},!1,"scala.collection.mutable.WrappedArray$ofUnit",IC,{QF:1,se:1,Yb:1,ab:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,Sa:1,H:1,p:1,Qa:1,Ra:1,Ta:1,hc:1,xb:1,yb:1,wb:1,ic:1,Db:1,Bb:1,Ab:1,Qd:1,sc:1,dc:1,Rd:1,re:1,de:1,nd:1,tb:1,g:1,e:1});function os(){this.Qg=this.Wa=null;this.zj=!1;this.Uf=0}os.prototype=new EC;m=os.prototype;m.b=function(){this.Wa=K();this.zj=!1;this.Uf=0;return this};m.x=function(){return this.Wa.x()};
+m.pa=function(a){if(0>a||a>=this.Uf)throw(new X).f(""+a);return qm(this.Wa,a)};m.$b=function(a){return pm(this.Wa,a)};m.h=function(a){return this.pa(a|0)};m.Wc=function(a){return sm(this.Wa,a)};m.m=function(){return this.Wa.m()};m.lj=function(){this.zj=!this.Wa.m();return this.Wa};m.bb=function(){return this};m.fa=function(a){return a&&a.a&&a.a.y.Gq?this.Wa.fa(a.Wa):kv(a)?this.Wc(a):!1};m.Yf=function(a){return Ym(this.Wa,"",a,"")};m.Ug=function(a,b,c){return Ym(this.Wa,a,b,c)};
+m.Sb=function(a){return qu(this,a)};m.ib=function(){Lz||(Lz=(new Kz).b());return Lz};m.A=function(a){for(var b=this.Wa;!b.m();)a.h(b.x()),b=b.u()};m.Ec=function(a,b){return om(this.Wa,a,b)};m.z=g("Uf");m.oa=function(){return this.lj()};m.ga=function(){var a=new Bw;a.Ci=this.Wa.m()?K():this.Wa;return a};m.Mc=function(a,b){Qn(this,a,b)};m.ba=g("Uf");m.Td=function(){return this};m.Xf=function(a){return Rm(this.Wa,a)};m.kc=function(){return this.Wa.kc()};
+m.hf=function(a,b,c,e){return Am(this.Wa,a,b,c,e)};function qu(a,b){if(a.zj&&!a.Wa.m()){var c=a.Wa,e=a.Qg.rd;for(a.Tk();c!==e;)qu(a,c.x()),c=c.u()}a.Wa.m()?(a.Qg=Td(new Ud,b,K()),a.Wa=a.Qg):(c=a.Qg,a.Qg=Td(new Ud,b,K()),c.rd=a.Qg);a.Uf=1+a.Uf|0;return a}m.Wf=function(a){return Xm(this.Wa,a)};m.Ha=function(a){return 0<=(a|0)&&0<pm(this.Wa,a|0)};m.sd=function(){var a=this.Wa,b=Fd(),b=Gd(b);return sf(a,b)};m.pg=function(a,b){return om(this.Wa,a,b)};m.za=function(a){return qu(this,a)};m.vb=da();
+m.Re=function(a){return Tm(this.Wa,a)};m.Tk=function(){this.Wa=K();this.Qg=null;this.zj=!1;this.Uf=0};m.mp=function(){return!this.Wa.m()};function ps(a,b){a:for(;;){var c=b;if(null!==c&&c===a){var e=a,c=a.Uf,f=e.ha();if(!(0>=c)){f.Mc(c,e);for(var h=0,e=e.ga();h<c&&e.qa();)f.za(e.ia()),h=1+h|0}b=f.oa();continue a}return ef(a,b)}}m.Uc=function(a){return um(this.Wa,a)};m.hb=function(a){return ps(this,a)};m.Ud=k("ListBuffer");
+m.a=new u({Gq:0},!1,"scala.collection.mutable.ListBuffer",FC,{Gq:1,fk:1,Yb:1,ab:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,Sa:1,H:1,p:1,Qa:1,Ra:1,Ta:1,hc:1,xb:1,yb:1,wb:1,ic:1,Db:1,Bb:1,Ab:1,om:1,pm:1,Kb:1,Jb:1,fg:1,dj:1,Da:1,Pb:1,VK:1,UK:1,WK:1,e:1});function Zm(){this.ad=null}Zm.prototype=new PA;m=Zm.prototype;m.Aa=function(){return this};m.b=function(){Zm.prototype.nf.call(this,16,"");return this};m.x=function(){return Zl(this)};
+m.pa=function(a){a=65535&(this.ad.Gb.charCodeAt(a)|0);return(new ig).rb(a)};m.$b=function(a){return this.ba()-a|0};m.h=function(a){a=65535&(this.ad.Gb.charCodeAt(a|0)|0);return(new ig).rb(a)};m.Wc=function(a){return Sl(this,a)};m.m=function(){return Xl(this)};m.bb=function(){return this};m.Uq=function(a,b){return this.ad.Gb.substring(a,b)};m.Sb=function(a){a=yp(T(),a);Nt(this.ad,a);return this};m.ib=function(){return hy()};m.r=function(){return this.ad.Gb};m.A=function(a){Ul(this,a)};
+m.Ec=function(a,b){return Ll(this,0,this.ad.Gb.length|0,a,b)};m.Pe=function(a,b){return wn(this,a,b)};m.qe=function(){return(new Zm).Co(Ot(Kt(this.ad)))};m.oa=function(){return this.ad.Gb};function Um(a,b){Jt(a.ad,b);return a}m.eh=function(){return this};m.ga=function(){return $l(new am,this,this.ad.Gb.length|0)};m.Mc=function(a,b){Qn(this,a,b)};m.nf=function(a,b){Zm.prototype.Co.call(this,Jt((new or).xa((b.length|0)+a|0),b));return this};m.Af=function(a){return Rl(this,a)};
+m.ba=function(){return this.ad.Gb.length|0};m.Td=function(){return this};m.fd=function(a){return wn(this,a,this.ad.Gb.length|0)};m.pd=function(){return this};m.u=function(){return Wl(this)};m.Co=function(a){this.ad=a;return this};function Vm(a,b){Jt(a.ad,zm(Fa(),b));return a}m.Ha=function(a){return Il(this,a|0)};m.za=function(a){a=yp(T(),a);Nt(this.ad,a);return this};m.Dg=function(a,b,c){Ol(this,a,b,c)};m.vb=da();m.ja=function(){return pq(zl(),this)};m.Dd=ba();m.Uc=function(a){return Kl(this,a)};
+m.ha=function(){return uu(new tu,(new Zm).b())};m.hb=function(a){return ef(this,a)};m.a=new u({FF:0},!1,"scala.collection.mutable.StringBuilder",QA,{FF:1,Yb:1,ab:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,Sa:1,H:1,p:1,Qa:1,Ra:1,Ta:1,hc:1,xb:1,yb:1,wb:1,ic:1,Db:1,Bb:1,Ab:1,Ro:1,Qd:1,sc:1,dc:1,Rd:1,xq:1,nd:1,bg:1,nc:1,Pb:1,Kb:1,Jb:1,g:1,e:1});function z(){this.q=null}z.prototype=new EC;m=z.prototype;m.Aa=function(){return this};
+m.b=function(){z.prototype.k.call(this,[]);return this};m.x=function(){return Zl(this)};m.pa=function(a){return this.q[a]};m.$b=function(a){return this.ba()-a|0};m.Wc=function(a){return Sl(this,a)};m.h=function(a){return this.q[a|0]};m.m=function(){return Xl(this)};m.bb=function(){return this};m.Sb=function(a){this.q.push(a);return this};m.ib=function(){return ft()};m.A=function(a){Ul(this,a)};m.Ec=function(a,b){return Ll(this,0,this.q.length|0,a,b)};m.Pe=function(a,b){return Nl(this,a,b)};m.qe=function(){return Vl(this)};
+m.oa=function(){return this};m.ga=function(){return $l(new am,this,this.q.length|0)};m.eh=function(){return this};m.Mc=function(a,b){Qn(this,a,b)};m.Af=function(a){return Rl(this,a)};m.ba=function(){return this.q.length|0};m.Td=function(){return this};m.fd=function(a){return Nl(this,a,this.q.length|0)};m.u=function(){return Wl(this)};m.pd=function(){return this};m.Ha=function(a){return Il(this,a|0)};m.za=function(a){this.q.push(a);return this};m.Dg=function(a,b,c){Ol(this,a,b,c)};m.vb=da();
+m.ja=function(){return pq(zl(),this)};m.k=function(a){this.q=a;return this};m.Dd=ba();m.Uc=function(a){return Kl(this,a)};m.Ud=k("WrappedArray");m.a=new u({Nq:0},!1,"scala.scalajs.js.WrappedArray",FC,{Nq:1,fk:1,Yb:1,ab:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,Sa:1,H:1,p:1,Qa:1,Ra:1,Ta:1,hc:1,xb:1,yb:1,wb:1,ic:1,Db:1,Bb:1,Ab:1,om:1,pm:1,Kb:1,Jb:1,fg:1,dj:1,Da:1,Qd:1,sc:1,dc:1,Rd:1,re:1,de:1,nd:1,Pb:1});function Bm(){this.Fo=0;this.q=null;this.ub=0}Bm.prototype=new EC;
+m=Bm.prototype;m.Aa=function(){return this};function OC(a,b){uo(a,1+a.ub|0);a.q.d[a.ub]=b;a.ub=1+a.ub|0;return a}m.b=function(){Bm.prototype.xa.call(this,16);return this};m.x=function(){return Zl(this)};m.pa=function(a){return wo(this,a)};m.$b=function(a){return this.ba()-a|0};m.h=function(a){return wo(this,a|0)};m.Wc=function(a){return Sl(this,a)};m.m=function(){return Xl(this)};m.bb=function(){return this};m.Sb=function(a){return OC(this,a)};m.ib=function(){Fz||(Fz=(new Ez).b());return Fz};
+m.A=function(a){for(var b=0,c=this.ub;b<c;)a.h(this.q.d[b]),b=1+b|0};m.Ec=function(a,b){return Ll(this,0,this.ub,a,b)};m.Pe=function(a,b){return Nl(this,a,b)};m.qe=function(){return Vl(this)};m.oa=function(){return this};m.eh=function(){return this};m.ga=function(){return $l(new am,this,this.ub)};m.Mc=function(a,b){Qn(this,a,b)};m.xa=function(a){a=this.Fo=a;this.q=s(x(w),[1<a?a:1]);this.ub=0;return this};m.Af=function(a){return Rl(this,a)};m.ba=g("ub");m.Td=function(){return this};
+m.fd=function(a){return Nl(this,a,this.ub)};m.u=function(){return Wl(this)};m.pd=function(){return this};function Cm(a,b){if(cm(b)){var c=b.ba();uo(a,a.ub+c|0);b.Dg(a.q,a.ub,c);a.ub=a.ub+c|0;return a}return ef(a,b)}m.Ha=function(a){return Il(this,a|0)};m.za=function(a){return OC(this,a)};m.Dg=function(a,b,c){var e=Pl(W(),a)-b|0;c=c<e?c:e;e=this.ub;c=c<e?c:e;St(Fe(),this.q,0,a,b,c)};m.vb=function(a){a>this.ub&&1<=a&&(a=s(x(w),[a]),Ja(this.q,0,a,0,this.ub),this.q=a)};
+m.ja=function(){return pq(zl(),this)};m.Dd=ba();m.Uc=function(a){return Kl(this,a)};m.hb=function(a){return Cm(this,a)};m.Ud=k("ArrayBuffer");m.a=new u({cF:0},!1,"scala.collection.mutable.ArrayBuffer",FC,{cF:1,fk:1,Yb:1,ab:1,ca:1,aa:1,c:1,W:1,M:1,N:1,E:1,t:1,s:1,K:1,L:1,R:1,X:1,$:1,Y:1,Q:1,U:1,n:1,Sa:1,H:1,p:1,Qa:1,Ra:1,Ta:1,hc:1,xb:1,yb:1,wb:1,ic:1,Db:1,Bb:1,Ab:1,om:1,pm:1,Kb:1,Jb:1,fg:1,dj:1,Da:1,de:1,Rd:1,dc:1,nd:1,Pb:1,cL:1,Qd:1,sc:1,tb:1,g:1,e:1});}).call(this);
+
+function WeatherJs(target) {
+ var xhr = new XMLHttpRequest()
+
+ xhr.open("GET",
+ "http://api.openweathermap.org/data/" +
+ "2.5/weather?q=Singapore"
+ );
+
+ xhr.onload = function (e) {
+ if (xhr.status == 200) {
+ var pre = document.createElement("pre");
+ pre.textContent = xhr.responseText;
+ target.appendChild(pre);
+ }
+ };
+ xhr.send();
+} \ No newline at end of file
diff --git a/styles.css b/styles.css
new file mode 100644
index 0000000..c315120
--- /dev/null
+++ b/styles.css
@@ -0,0 +1,369 @@
+.hljs{display:block;overflow-x:auto;padding:.5em;color:#000;background:#fff;-webkit-text-size-adjust:none}.hljs-subst,.hljs-title,.json .hljs-value{font-weight:normal;color:#000}.hljs-comment,.hljs-template_comment,.hljs-javadoc,.diff .hljs-header{color:#808080;font-style:italic}.hljs-annotation,.hljs-decorator,.hljs-preprocessor,.hljs-pragma,.hljs-doctype,.hljs-pi,.hljs-chunk,.hljs-shebang,.apache .hljs-cbracket,.hljs-prompt,.http .hljs-title{color:#808000}.hljs-tag,.hljs-pi{background:#efefef}.hljs-tag .hljs-title,.hljs-id,.hljs-attr_selector,.hljs-pseudo,.hljs-literal,.hljs-keyword,.hljs-hexcolor,.css .hljs-function,.ini .hljs-title,.css .hljs-class,.hljs-list .hljs-keyword,.nginx .hljs-title,.tex .hljs-command,.hljs-request,.hljs-status{font-weight:bold;color:#000080}.hljs-attribute,.hljs-rules .hljs-keyword,.hljs-number,.hljs-date,.hljs-regexp,.tex .hljs-special{font-weight:bold;color:#00f}.hljs-number,.hljs-regexp{font-weight:normal}.hljs-string,.hljs-value,.hljs-filter .hljs-argument,.css .hljs-function .hljs-params,.apache .hljs-tag{color:#008000;font-weight:bold}.hljs-symbol,.ruby .hljs-symbol .hljs-string,.hljs-char,.tex .hljs-formula{color:#000;background:#d0eded;font-style:italic}.hljs-phpdoc,.hljs-dartdoc,.hljs-yardoctag,.hljs-javadoctag{text-decoration:underline}.hljs-variable,.hljs-envvar,.apache .hljs-sqbracket,.nginx .hljs-built_in{color:#660e7a}.hljs-addition{background:#baeeba}.hljs-deletion{background:#ffc8bd}.diff .hljs-change{background:#bccff9}
+/*!
+Pure v0.5.0
+Copyright 2014 Yahoo! Inc. All rights reserved.
+Licensed under the BSD License.
+https://github.com/yui/pure/blob/master/LICENSE.md
+*/
+/*!
+normalize.css v1.1.3 | MIT License | git.io/normalize
+Copyright (c) Nicolas Gallagher and Jonathan Neal
+*/
+/*! normalize.css v1.1.3 | MIT License | git.io/normalize */article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none;height:0}[hidden]{display:none}html{font-size:100%;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}html,button,input,select,textarea{font-family:sans-serif}body{margin:0}a:focus{outline:thin dotted}a:active,a:hover{outline:0}h1{font-size:2em;margin:.67em 0}h2{font-size:1.5em;margin:.83em 0}h3{font-size:1.17em;margin:1em 0}h4{font-size:1em;margin:1.33em 0}h5{font-size:.83em;margin:1.67em 0}h6{font-size:.67em;margin:2.33em 0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}blockquote{margin:1em 40px}dfn{font-style:italic}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}mark{background:#ff0;color:#000}p,pre{margin:1em 0}code,kbd,pre,samp{font-family:monospace,serif;_font-family:'courier new',monospace;font-size:1em}pre{white-space:pre;white-space:pre-wrap;word-wrap:break-word}q{quotes:none}q:before,q:after{content:'';content:none}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}dl,menu,ol,ul{margin:1em 0}dd{margin:0 0 0 40px}menu,ol,ul{padding:0 0 0 40px}nav ul,nav ol{list-style:none;list-style-image:none}img{border:0;-ms-interpolation-mode:bicubic}svg:not(:root){overflow:hidden}figure{margin:0}form{margin:0}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0;white-space:normal;*margin-left:-7px}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer;*overflow:visible}button[disabled],html input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0;*height:13px;*width:13px}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}[hidden]{display:none!important}.pure-img{max-width:100%;height:auto;display:block}.pure-g{letter-spacing:-.31em;*letter-spacing:normal;*word-spacing:-.43em;text-rendering:optimizespeed;font-family:FreeSans,Arimo,"Droid Sans",Helvetica,Arial,sans-serif;display:-webkit-flex;-webkit-flex-flow:row wrap;display:-ms-flexbox;-ms-flex-flow:row wrap}.opera-only :-o-prefocus,.pure-g{word-spacing:-.43em}.pure-u{display:inline-block;*display:inline;zoom:1;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-g [class *="pure-u"]{font-family:sans-serif}.pure-u-1,.pure-u-1-1,.pure-u-1-2,.pure-u-1-3,.pure-u-2-3,.pure-u-1-4,.pure-u-3-4,.pure-u-1-5,.pure-u-2-5,.pure-u-3-5,.pure-u-4-5,.pure-u-5-5,.pure-u-1-6,.pure-u-5-6,.pure-u-1-8,.pure-u-3-8,.pure-u-5-8,.pure-u-7-8,.pure-u-1-12,.pure-u-5-12,.pure-u-7-12,.pure-u-11-12,.pure-u-1-24,.pure-u-2-24,.pure-u-3-24,.pure-u-4-24,.pure-u-5-24,.pure-u-6-24,.pure-u-7-24,.pure-u-8-24,.pure-u-9-24,.pure-u-10-24,.pure-u-11-24,.pure-u-12-24,.pure-u-13-24,.pure-u-14-24,.pure-u-15-24,.pure-u-16-24,.pure-u-17-24,.pure-u-18-24,.pure-u-19-24,.pure-u-20-24,.pure-u-21-24,.pure-u-22-24,.pure-u-23-24,.pure-u-24-24{display:inline-block;*display:inline;zoom:1;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-u-1-24{width:4.1667%;*width:4.1357%}.pure-u-1-12,.pure-u-2-24{width:8.3333%;*width:8.3023%}.pure-u-1-8,.pure-u-3-24{width:12.5%;*width:12.469%}.pure-u-1-6,.pure-u-4-24{width:16.6667%;*width:16.6357%}.pure-u-1-5{width:20%;*width:19.969%}.pure-u-5-24{width:20.8333%;*width:20.8023%}.pure-u-1-4,.pure-u-6-24{width:25%;*width:24.969%}.pure-u-7-24{width:29.1667%;*width:29.1357%}.pure-u-1-3,.pure-u-8-24{width:33.3333%;*width:33.3023%}.pure-u-3-8,.pure-u-9-24{width:37.5%;*width:37.469%}.pure-u-2-5{width:40%;*width:39.969%}.pure-u-5-12,.pure-u-10-24{width:41.6667%;*width:41.6357%}.pure-u-11-24{width:45.8333%;*width:45.8023%}.pure-u-1-2,.pure-u-12-24{width:50%;*width:49.969%}.pure-u-13-24{width:54.1667%;*width:54.1357%}.pure-u-7-12,.pure-u-14-24{width:58.3333%;*width:58.3023%}.pure-u-3-5{width:60%;*width:59.969%}.pure-u-5-8,.pure-u-15-24{width:62.5%;*width:62.469%}.pure-u-2-3,.pure-u-16-24{width:66.6667%;*width:66.6357%}.pure-u-17-24{width:70.8333%;*width:70.8023%}.pure-u-3-4,.pure-u-18-24{width:75%;*width:74.969%}.pure-u-19-24{width:79.1667%;*width:79.1357%}.pure-u-4-5{width:80%;*width:79.969%}.pure-u-5-6,.pure-u-20-24{width:83.3333%;*width:83.3023%}.pure-u-7-8,.pure-u-21-24{width:87.5%;*width:87.469%}.pure-u-11-12,.pure-u-22-24{width:91.6667%;*width:91.6357%}.pure-u-23-24{width:95.8333%;*width:95.8023%}.pure-u-1,.pure-u-1-1,.pure-u-5-5,.pure-u-24-24{width:100%}.pure-button{display:inline-block;*display:inline;zoom:1;line-height:normal;white-space:nowrap;vertical-align:baseline;text-align:center;cursor:pointer;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.pure-button::-moz-focus-inner{padding:0;border:0}.pure-button{font-family:inherit;font-size:100%;*font-size:90%;*overflow:visible;padding:.5em 1em;color:#444;color:rgba(0,0,0,.8);*color:#444;border:1px solid #999;border:0 rgba(0,0,0,0);background-color:#E6E6E6;text-decoration:none;border-radius:2px}.pure-button-hover,.pure-button:hover,.pure-button:focus{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#1a000000', GradientType=0);background-image:-webkit-gradient(linear,0 0,0 100%,from(transparent),color-stop(40%,rgba(0,0,0,.05)),to(rgba(0,0,0,.1)));background-image:-webkit-linear-gradient(transparent,rgba(0,0,0,.05) 40%,rgba(0,0,0,.1));background-image:-moz-linear-gradient(top,rgba(0,0,0,.05) 0,rgba(0,0,0,.1));background-image:-o-linear-gradient(transparent,rgba(0,0,0,.05) 40%,rgba(0,0,0,.1));background-image:linear-gradient(transparent,rgba(0,0,0,.05) 40%,rgba(0,0,0,.1))}.pure-button:focus{outline:0}.pure-button-active,.pure-button:active{box-shadow:0 0 0 1px rgba(0,0,0,.15) inset,0 0 6px rgba(0,0,0,.2) inset}.pure-button[disabled],.pure-button-disabled,.pure-button-disabled:hover,.pure-button-disabled:focus,.pure-button-disabled:active{border:0;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);filter:alpha(opacity=40);-khtml-opacity:.4;-moz-opacity:.4;opacity:.4;cursor:not-allowed;box-shadow:none}.pure-button-hidden{display:none}.pure-button::-moz-focus-inner{padding:0;border:0}.pure-button-primary,.pure-button-selected,a.pure-button-primary,a.pure-button-selected{background-color:#0078e7;color:#fff}.pure-form input[type=text],.pure-form input[type=password],.pure-form input[type=email],.pure-form input[type=url],.pure-form input[type=date],.pure-form input[type=month],.pure-form input[type=time],.pure-form input[type=datetime],.pure-form input[type=datetime-local],.pure-form input[type=week],.pure-form input[type=number],.pure-form input[type=search],.pure-form input[type=tel],.pure-form input[type=color],.pure-form select,.pure-form textarea{padding:.5em .6em;display:inline-block;border:1px solid #ccc;box-shadow:inset 0 1px 3px #ddd;border-radius:4px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.pure-form input:not([type]){padding:.5em .6em;display:inline-block;border:1px solid #ccc;box-shadow:inset 0 1px 3px #ddd;border-radius:4px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.pure-form input[type=color]{padding:.2em .5em}.pure-form input[type=text]:focus,.pure-form input[type=password]:focus,.pure-form input[type=email]:focus,.pure-form input[type=url]:focus,.pure-form input[type=date]:focus,.pure-form input[type=month]:focus,.pure-form input[type=time]:focus,.pure-form input[type=datetime]:focus,.pure-form input[type=datetime-local]:focus,.pure-form input[type=week]:focus,.pure-form input[type=number]:focus,.pure-form input[type=search]:focus,.pure-form input[type=tel]:focus,.pure-form input[type=color]:focus,.pure-form select:focus,.pure-form textarea:focus{outline:0;outline:thin dotted \9;border-color:#129FEA}.pure-form input:not([type]):focus{outline:0;outline:thin dotted \9;border-color:#129FEA}.pure-form input[type=file]:focus,.pure-form input[type=radio]:focus,.pure-form input[type=checkbox]:focus{outline:thin dotted #333;outline:1px auto #129FEA}.pure-form .pure-checkbox,.pure-form .pure-radio{margin:.5em 0;display:block}.pure-form input[type=text][disabled],.pure-form input[type=password][disabled],.pure-form input[type=email][disabled],.pure-form input[type=url][disabled],.pure-form input[type=date][disabled],.pure-form input[type=month][disabled],.pure-form input[type=time][disabled],.pure-form input[type=datetime][disabled],.pure-form input[type=datetime-local][disabled],.pure-form input[type=week][disabled],.pure-form input[type=number][disabled],.pure-form input[type=search][disabled],.pure-form input[type=tel][disabled],.pure-form input[type=color][disabled],.pure-form select[disabled],.pure-form textarea[disabled]{cursor:not-allowed;background-color:#eaeded;color:#cad2d3}.pure-form input:not([type])[disabled]{cursor:not-allowed;background-color:#eaeded;color:#cad2d3}.pure-form input[readonly],.pure-form select[readonly],.pure-form textarea[readonly]{background:#eee;color:#777;border-color:#ccc}.pure-form input:focus:invalid,.pure-form textarea:focus:invalid,.pure-form select:focus:invalid{color:#b94a48;border-color:#ee5f5b}.pure-form input:focus:invalid:focus,.pure-form textarea:focus:invalid:focus,.pure-form select:focus:invalid:focus{border-color:#e9322d}.pure-form input[type=file]:focus:invalid:focus,.pure-form input[type=radio]:focus:invalid:focus,.pure-form input[type=checkbox]:focus:invalid:focus{outline-color:#e9322d}.pure-form select{border:1px solid #ccc;background-color:#fff}.pure-form select[multiple]{height:auto}.pure-form label{margin:.5em 0 .2em}.pure-form fieldset{margin:0;padding:.35em 0 .75em;border:0}.pure-form legend{display:block;width:100%;padding:.3em 0;margin-bottom:.3em;color:#333;border-bottom:1px solid #e5e5e5}.pure-form-stacked input[type=text],.pure-form-stacked input[type=password],.pure-form-stacked input[type=email],.pure-form-stacked input[type=url],.pure-form-stacked input[type=date],.pure-form-stacked input[type=month],.pure-form-stacked input[type=time],.pure-form-stacked input[type=datetime],.pure-form-stacked input[type=datetime-local],.pure-form-stacked input[type=week],.pure-form-stacked input[type=number],.pure-form-stacked input[type=search],.pure-form-stacked input[type=tel],.pure-form-stacked input[type=color],.pure-form-stacked select,.pure-form-stacked label,.pure-form-stacked textarea{display:block;margin:.25em 0}.pure-form-stacked input:not([type]){display:block;margin:.25em 0}.pure-form-aligned input,.pure-form-aligned textarea,.pure-form-aligned select,.pure-form-aligned .pure-help-inline,.pure-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.pure-form-aligned textarea{vertical-align:top}.pure-form-aligned .pure-control-group{margin-bottom:.5em}.pure-form-aligned .pure-control-group label{text-align:right;display:inline-block;vertical-align:middle;width:10em;margin:0 1em 0 0}.pure-form-aligned .pure-controls{margin:1.5em 0 0 10em}.pure-form input.pure-input-rounded,.pure-form .pure-input-rounded{border-radius:2em;padding:.5em 1em}.pure-form .pure-group fieldset{margin-bottom:10px}.pure-form .pure-group input{display:block;padding:10px;margin:0;border-radius:0;position:relative;top:-1px}.pure-form .pure-group input:focus{z-index:2}.pure-form .pure-group input:first-child{top:1px;border-radius:4px 4px 0 0}.pure-form .pure-group input:last-child{top:-2px;border-radius:0 0 4px 4px}.pure-form .pure-group button{margin:.35em 0}.pure-form .pure-input-1{width:100%}.pure-form .pure-input-2-3{width:66%}.pure-form .pure-input-1-2{width:50%}.pure-form .pure-input-1-3{width:33%}.pure-form .pure-input-1-4{width:25%}.pure-form .pure-help-inline,.pure-form-message-inline{display:inline-block;padding-left:.3em;color:#666;vertical-align:middle;font-size:.875em}.pure-form-message{display:block;color:#666;font-size:.875em}@media only screen and (max-width :480px){.pure-form button[type=submit]{margin:.7em 0 0}.pure-form input:not([type]),.pure-form input[type=text],.pure-form input[type=password],.pure-form input[type=email],.pure-form input[type=url],.pure-form input[type=date],.pure-form input[type=month],.pure-form input[type=time],.pure-form input[type=datetime],.pure-form input[type=datetime-local],.pure-form input[type=week],.pure-form input[type=number],.pure-form input[type=search],.pure-form input[type=tel],.pure-form input[type=color],.pure-form label{margin-bottom:.3em;display:block}.pure-group input:not([type]),.pure-group input[type=text],.pure-group input[type=password],.pure-group input[type=email],.pure-group input[type=url],.pure-group input[type=date],.pure-group input[type=month],.pure-group input[type=time],.pure-group input[type=datetime],.pure-group input[type=datetime-local],.pure-group input[type=week],.pure-group input[type=number],.pure-group input[type=search],.pure-group input[type=tel],.pure-group input[type=color]{margin-bottom:0}.pure-form-aligned .pure-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.pure-form-aligned .pure-controls{margin:1.5em 0 0}.pure-form .pure-help-inline,.pure-form-message-inline,.pure-form-message{display:block;font-size:.75em;padding:.2em 0 .8em}}.pure-menu ul{position:absolute;visibility:hidden}.pure-menu.pure-menu-open{visibility:visible;z-index:2;width:100%}.pure-menu ul{left:-10000px;list-style:none;margin:0;padding:0;top:-10000px;z-index:1}.pure-menu>ul{position:relative}.pure-menu-open>ul{left:0;top:0;visibility:visible}.pure-menu-open>ul:focus{outline:0}.pure-menu li{position:relative}.pure-menu a,.pure-menu .pure-menu-heading{display:block;color:inherit;line-height:1.5em;padding:5px 20px;text-decoration:none;white-space:nowrap}.pure-menu.pure-menu-horizontal>.pure-menu-heading{display:inline-block;*display:inline;zoom:1;margin:0;vertical-align:middle}.pure-menu.pure-menu-horizontal>ul{display:inline-block;*display:inline;zoom:1;vertical-align:middle}.pure-menu li a{padding:5px 20px}.pure-menu-can-have-children>.pure-menu-label:after{content:'\25B8';float:right;font-family:'Lucida Grande','Lucida Sans Unicode','DejaVu Sans',sans-serif;margin-right:-20px;margin-top:-1px}.pure-menu-can-have-children>.pure-menu-label{padding-right:30px}.pure-menu-separator{background-color:#dfdfdf;display:block;height:1px;font-size:0;margin:7px 2px;overflow:hidden}.pure-menu-hidden{display:none}.pure-menu-fixed{position:fixed;top:0;left:0;width:100%}.pure-menu-horizontal li{display:inline-block;*display:inline;zoom:1;vertical-align:middle}.pure-menu-horizontal li li{display:block}.pure-menu-horizontal>.pure-menu-children>.pure-menu-can-have-children>.pure-menu-label:after{content:"\25BE"}.pure-menu-horizontal>.pure-menu-children>.pure-menu-can-have-children>.pure-menu-label{padding-right:30px}.pure-menu-horizontal li.pure-menu-separator{height:50%;width:1px;margin:0 7px}.pure-menu-horizontal li li.pure-menu-separator{height:1px;width:auto;margin:7px 2px}.pure-menu.pure-menu-open,.pure-menu.pure-menu-horizontal li .pure-menu-children{background:#fff;border:1px solid #b7b7b7}.pure-menu.pure-menu-horizontal,.pure-menu.pure-menu-horizontal .pure-menu-heading{border:0}.pure-menu a{border:1px solid transparent;border-left:0;border-right:0}.pure-menu a,.pure-menu .pure-menu-can-have-children>li:after{color:#777}.pure-menu .pure-menu-can-have-children>li:hover:after{color:#fff}.pure-menu .pure-menu-open{background:#dedede}.pure-menu li a:hover,.pure-menu li a:focus{background:#eee}.pure-menu li.pure-menu-disabled a:hover,.pure-menu li.pure-menu-disabled a:focus{background:#fff;color:#bfbfbf}.pure-menu .pure-menu-disabled>a{background-image:none;border-color:transparent;cursor:default}.pure-menu .pure-menu-disabled>a,.pure-menu .pure-menu-can-have-children.pure-menu-disabled>a:after{color:#bfbfbf}.pure-menu .pure-menu-heading{color:#565d64;text-transform:uppercase;font-size:90%;margin-top:.5em;border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:#dfdfdf}.pure-menu .pure-menu-selected a{color:#000}.pure-menu.pure-menu-open.pure-menu-fixed{border:0;border-bottom:1px solid #b7b7b7}.pure-paginator{letter-spacing:-.31em;*letter-spacing:normal;*word-spacing:-.43em;text-rendering:optimizespeed;list-style:none;margin:0;padding:0}.opera-only :-o-prefocus,.pure-paginator{word-spacing:-.43em}.pure-paginator li{display:inline-block;*display:inline;zoom:1;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-paginator .pure-button{border-radius:0;padding:.8em 1.4em;vertical-align:top;height:1.1em}.pure-paginator .pure-button:focus,.pure-paginator .pure-button:active{outline-style:none}.pure-paginator .prev,.pure-paginator .next{color:#C0C1C3;text-shadow:0 -1px 0 rgba(0,0,0,.45)}.pure-paginator .prev{border-radius:2px 0 0 2px}.pure-paginator .next{border-radius:0 2px 2px 0}@media (max-width:480px){.pure-menu-horizontal{width:100%}.pure-menu-children li{display:block;border-bottom:1px solid #000}}.pure-table{border-collapse:collapse;border-spacing:0;empty-cells:show;border:1px solid #cbcbcb}.pure-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.pure-table td,.pure-table th{border-left:1px solid #cbcbcb;border-width:0 0 0 1px;font-size:inherit;margin:0;overflow:visible;padding:.5em 1em}.pure-table td:first-child,.pure-table th:first-child{border-left-width:0}.pure-table thead{background:#e0e0e0;color:#000;text-align:left;vertical-align:bottom}.pure-table td{background-color:transparent}.pure-table-odd td{background-color:#f2f2f2}.pure-table-striped tr:nth-child(2n-1) td{background-color:#f2f2f2}.pure-table-bordered td{border-bottom:1px solid #cbcbcb}.pure-table-bordered tbody>tr:last-child td,.pure-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.pure-table-horizontal td,.pure-table-horizontal th{border-width:0 0 1px;border-bottom:1px solid #cbcbcb}.pure-table-horizontal tbody>tr:last-child td{border-bottom-width:0}
+
+.scalatex-content *{
+ position: relative;
+}
+.scalatex-content p{
+ text-align: justify;
+}
+
+/*
+The content `<div>` is where all your content goes.
+*/
+.scalatex-content {
+ margin: 0 auto;
+ padding: 0 1em;
+ max-width: 800px;
+ padding-bottom: 50px;
+ line-height: 1.6em;
+ color: #777;
+}
+
+/* Custom Stuff */
+.scalatex-content a:link {
+ color: #37a;
+ text-decoration: none;
+}
+.scalatex-content a:visited {
+ color: #949;
+ text-decoration: none;
+}
+.scalatex-content a:hover {
+ text-decoration: underline;
+}
+.scalatex-content a:active {
+ color: #000;
+ text-decoration: underline;
+}
+.scalatex-content code{
+ color: #000;
+}
+
+.scalatex-hover-container:hover .scalatex-header-link:hover > i{
+ opacity: 1.0;
+}
+
+.scalatex-hover-container:hover .scalatex-header-link > i:active{
+ opacity: 0.75;
+}
+
+.scalatex-hover-container:hover .scalatex-header-link > i{
+ opacity: 0.5;
+}
+
+.scalatex-header-link > i{
+ color: #777;
+ opacity: 0.05;
+ text-decoration: none;
+}
+
+
+/*Workaround for bug in highlight.js IDEA theme*/
+span.hljs-tag, span.hljs-symbol{
+ background: none;
+}
+/*!
+Pure v0.5.0
+Copyright 2014 Yahoo! Inc. All rights reserved.
+Licensed under the BSD License.
+https://github.com/yui/pure/blob/master/LICENSE.md
+*/
+@media screen and (min-width:35.5em){.pure-u-sm-1,.pure-u-sm-1-1,.pure-u-sm-1-2,.pure-u-sm-1-3,.pure-u-sm-2-3,.pure-u-sm-1-4,.pure-u-sm-3-4,.pure-u-sm-1-5,.pure-u-sm-2-5,.pure-u-sm-3-5,.pure-u-sm-4-5,.pure-u-sm-5-5,.pure-u-sm-1-6,.pure-u-sm-5-6,.pure-u-sm-1-8,.pure-u-sm-3-8,.pure-u-sm-5-8,.pure-u-sm-7-8,.pure-u-sm-1-12,.pure-u-sm-5-12,.pure-u-sm-7-12,.pure-u-sm-11-12,.pure-u-sm-1-24,.pure-u-sm-2-24,.pure-u-sm-3-24,.pure-u-sm-4-24,.pure-u-sm-5-24,.pure-u-sm-6-24,.pure-u-sm-7-24,.pure-u-sm-8-24,.pure-u-sm-9-24,.pure-u-sm-10-24,.pure-u-sm-11-24,.pure-u-sm-12-24,.pure-u-sm-13-24,.pure-u-sm-14-24,.pure-u-sm-15-24,.pure-u-sm-16-24,.pure-u-sm-17-24,.pure-u-sm-18-24,.pure-u-sm-19-24,.pure-u-sm-20-24,.pure-u-sm-21-24,.pure-u-sm-22-24,.pure-u-sm-23-24,.pure-u-sm-24-24{display:inline-block;*display:inline;zoom:1;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-u-sm-1-24{width:4.1667%;*width:4.1357%}.pure-u-sm-1-12,.pure-u-sm-2-24{width:8.3333%;*width:8.3023%}.pure-u-sm-1-8,.pure-u-sm-3-24{width:12.5%;*width:12.469%}.pure-u-sm-1-6,.pure-u-sm-4-24{width:16.6667%;*width:16.6357%}.pure-u-sm-1-5{width:20%;*width:19.969%}.pure-u-sm-5-24{width:20.8333%;*width:20.8023%}.pure-u-sm-1-4,.pure-u-sm-6-24{width:25%;*width:24.969%}.pure-u-sm-7-24{width:29.1667%;*width:29.1357%}.pure-u-sm-1-3,.pure-u-sm-8-24{width:33.3333%;*width:33.3023%}.pure-u-sm-3-8,.pure-u-sm-9-24{width:37.5%;*width:37.469%}.pure-u-sm-2-5{width:40%;*width:39.969%}.pure-u-sm-5-12,.pure-u-sm-10-24{width:41.6667%;*width:41.6357%}.pure-u-sm-11-24{width:45.8333%;*width:45.8023%}.pure-u-sm-1-2,.pure-u-sm-12-24{width:50%;*width:49.969%}.pure-u-sm-13-24{width:54.1667%;*width:54.1357%}.pure-u-sm-7-12,.pure-u-sm-14-24{width:58.3333%;*width:58.3023%}.pure-u-sm-3-5{width:60%;*width:59.969%}.pure-u-sm-5-8,.pure-u-sm-15-24{width:62.5%;*width:62.469%}.pure-u-sm-2-3,.pure-u-sm-16-24{width:66.6667%;*width:66.6357%}.pure-u-sm-17-24{width:70.8333%;*width:70.8023%}.pure-u-sm-3-4,.pure-u-sm-18-24{width:75%;*width:74.969%}.pure-u-sm-19-24{width:79.1667%;*width:79.1357%}.pure-u-sm-4-5{width:80%;*width:79.969%}.pure-u-sm-5-6,.pure-u-sm-20-24{width:83.3333%;*width:83.3023%}.pure-u-sm-7-8,.pure-u-sm-21-24{width:87.5%;*width:87.469%}.pure-u-sm-11-12,.pure-u-sm-22-24{width:91.6667%;*width:91.6357%}.pure-u-sm-23-24{width:95.8333%;*width:95.8023%}.pure-u-sm-1,.pure-u-sm-1-1,.pure-u-sm-5-5,.pure-u-sm-24-24{width:100%}}@media screen and (min-width:48em){.pure-u-md-1,.pure-u-md-1-1,.pure-u-md-1-2,.pure-u-md-1-3,.pure-u-md-2-3,.pure-u-md-1-4,.pure-u-md-3-4,.pure-u-md-1-5,.pure-u-md-2-5,.pure-u-md-3-5,.pure-u-md-4-5,.pure-u-md-5-5,.pure-u-md-1-6,.pure-u-md-5-6,.pure-u-md-1-8,.pure-u-md-3-8,.pure-u-md-5-8,.pure-u-md-7-8,.pure-u-md-1-12,.pure-u-md-5-12,.pure-u-md-7-12,.pure-u-md-11-12,.pure-u-md-1-24,.pure-u-md-2-24,.pure-u-md-3-24,.pure-u-md-4-24,.pure-u-md-5-24,.pure-u-md-6-24,.pure-u-md-7-24,.pure-u-md-8-24,.pure-u-md-9-24,.pure-u-md-10-24,.pure-u-md-11-24,.pure-u-md-12-24,.pure-u-md-13-24,.pure-u-md-14-24,.pure-u-md-15-24,.pure-u-md-16-24,.pure-u-md-17-24,.pure-u-md-18-24,.pure-u-md-19-24,.pure-u-md-20-24,.pure-u-md-21-24,.pure-u-md-22-24,.pure-u-md-23-24,.pure-u-md-24-24{display:inline-block;*display:inline;zoom:1;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-u-md-1-24{width:4.1667%;*width:4.1357%}.pure-u-md-1-12,.pure-u-md-2-24{width:8.3333%;*width:8.3023%}.pure-u-md-1-8,.pure-u-md-3-24{width:12.5%;*width:12.469%}.pure-u-md-1-6,.pure-u-md-4-24{width:16.6667%;*width:16.6357%}.pure-u-md-1-5{width:20%;*width:19.969%}.pure-u-md-5-24{width:20.8333%;*width:20.8023%}.pure-u-md-1-4,.pure-u-md-6-24{width:25%;*width:24.969%}.pure-u-md-7-24{width:29.1667%;*width:29.1357%}.pure-u-md-1-3,.pure-u-md-8-24{width:33.3333%;*width:33.3023%}.pure-u-md-3-8,.pure-u-md-9-24{width:37.5%;*width:37.469%}.pure-u-md-2-5{width:40%;*width:39.969%}.pure-u-md-5-12,.pure-u-md-10-24{width:41.6667%;*width:41.6357%}.pure-u-md-11-24{width:45.8333%;*width:45.8023%}.pure-u-md-1-2,.pure-u-md-12-24{width:50%;*width:49.969%}.pure-u-md-13-24{width:54.1667%;*width:54.1357%}.pure-u-md-7-12,.pure-u-md-14-24{width:58.3333%;*width:58.3023%}.pure-u-md-3-5{width:60%;*width:59.969%}.pure-u-md-5-8,.pure-u-md-15-24{width:62.5%;*width:62.469%}.pure-u-md-2-3,.pure-u-md-16-24{width:66.6667%;*width:66.6357%}.pure-u-md-17-24{width:70.8333%;*width:70.8023%}.pure-u-md-3-4,.pure-u-md-18-24{width:75%;*width:74.969%}.pure-u-md-19-24{width:79.1667%;*width:79.1357%}.pure-u-md-4-5{width:80%;*width:79.969%}.pure-u-md-5-6,.pure-u-md-20-24{width:83.3333%;*width:83.3023%}.pure-u-md-7-8,.pure-u-md-21-24{width:87.5%;*width:87.469%}.pure-u-md-11-12,.pure-u-md-22-24{width:91.6667%;*width:91.6357%}.pure-u-md-23-24{width:95.8333%;*width:95.8023%}.pure-u-md-1,.pure-u-md-1-1,.pure-u-md-5-5,.pure-u-md-24-24{width:100%}}@media screen and (min-width:64em){.pure-u-lg-1,.pure-u-lg-1-1,.pure-u-lg-1-2,.pure-u-lg-1-3,.pure-u-lg-2-3,.pure-u-lg-1-4,.pure-u-lg-3-4,.pure-u-lg-1-5,.pure-u-lg-2-5,.pure-u-lg-3-5,.pure-u-lg-4-5,.pure-u-lg-5-5,.pure-u-lg-1-6,.pure-u-lg-5-6,.pure-u-lg-1-8,.pure-u-lg-3-8,.pure-u-lg-5-8,.pure-u-lg-7-8,.pure-u-lg-1-12,.pure-u-lg-5-12,.pure-u-lg-7-12,.pure-u-lg-11-12,.pure-u-lg-1-24,.pure-u-lg-2-24,.pure-u-lg-3-24,.pure-u-lg-4-24,.pure-u-lg-5-24,.pure-u-lg-6-24,.pure-u-lg-7-24,.pure-u-lg-8-24,.pure-u-lg-9-24,.pure-u-lg-10-24,.pure-u-lg-11-24,.pure-u-lg-12-24,.pure-u-lg-13-24,.pure-u-lg-14-24,.pure-u-lg-15-24,.pure-u-lg-16-24,.pure-u-lg-17-24,.pure-u-lg-18-24,.pure-u-lg-19-24,.pure-u-lg-20-24,.pure-u-lg-21-24,.pure-u-lg-22-24,.pure-u-lg-23-24,.pure-u-lg-24-24{display:inline-block;*display:inline;zoom:1;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-u-lg-1-24{width:4.1667%;*width:4.1357%}.pure-u-lg-1-12,.pure-u-lg-2-24{width:8.3333%;*width:8.3023%}.pure-u-lg-1-8,.pure-u-lg-3-24{width:12.5%;*width:12.469%}.pure-u-lg-1-6,.pure-u-lg-4-24{width:16.6667%;*width:16.6357%}.pure-u-lg-1-5{width:20%;*width:19.969%}.pure-u-lg-5-24{width:20.8333%;*width:20.8023%}.pure-u-lg-1-4,.pure-u-lg-6-24{width:25%;*width:24.969%}.pure-u-lg-7-24{width:29.1667%;*width:29.1357%}.pure-u-lg-1-3,.pure-u-lg-8-24{width:33.3333%;*width:33.3023%}.pure-u-lg-3-8,.pure-u-lg-9-24{width:37.5%;*width:37.469%}.pure-u-lg-2-5{width:40%;*width:39.969%}.pure-u-lg-5-12,.pure-u-lg-10-24{width:41.6667%;*width:41.6357%}.pure-u-lg-11-24{width:45.8333%;*width:45.8023%}.pure-u-lg-1-2,.pure-u-lg-12-24{width:50%;*width:49.969%}.pure-u-lg-13-24{width:54.1667%;*width:54.1357%}.pure-u-lg-7-12,.pure-u-lg-14-24{width:58.3333%;*width:58.3023%}.pure-u-lg-3-5{width:60%;*width:59.969%}.pure-u-lg-5-8,.pure-u-lg-15-24{width:62.5%;*width:62.469%}.pure-u-lg-2-3,.pure-u-lg-16-24{width:66.6667%;*width:66.6357%}.pure-u-lg-17-24{width:70.8333%;*width:70.8023%}.pure-u-lg-3-4,.pure-u-lg-18-24{width:75%;*width:74.969%}.pure-u-lg-19-24{width:79.1667%;*width:79.1357%}.pure-u-lg-4-5{width:80%;*width:79.969%}.pure-u-lg-5-6,.pure-u-lg-20-24{width:83.3333%;*width:83.3023%}.pure-u-lg-7-8,.pure-u-lg-21-24{width:87.5%;*width:87.469%}.pure-u-lg-11-12,.pure-u-lg-22-24{width:91.6667%;*width:91.6357%}.pure-u-lg-23-24{width:95.8333%;*width:95.8023%}.pure-u-lg-1,.pure-u-lg-1-1,.pure-u-lg-5-5,.pure-u-lg-24-24{width:100%}}@media screen and (min-width:80em){.pure-u-xl-1,.pure-u-xl-1-1,.pure-u-xl-1-2,.pure-u-xl-1-3,.pure-u-xl-2-3,.pure-u-xl-1-4,.pure-u-xl-3-4,.pure-u-xl-1-5,.pure-u-xl-2-5,.pure-u-xl-3-5,.pure-u-xl-4-5,.pure-u-xl-5-5,.pure-u-xl-1-6,.pure-u-xl-5-6,.pure-u-xl-1-8,.pure-u-xl-3-8,.pure-u-xl-5-8,.pure-u-xl-7-8,.pure-u-xl-1-12,.pure-u-xl-5-12,.pure-u-xl-7-12,.pure-u-xl-11-12,.pure-u-xl-1-24,.pure-u-xl-2-24,.pure-u-xl-3-24,.pure-u-xl-4-24,.pure-u-xl-5-24,.pure-u-xl-6-24,.pure-u-xl-7-24,.pure-u-xl-8-24,.pure-u-xl-9-24,.pure-u-xl-10-24,.pure-u-xl-11-24,.pure-u-xl-12-24,.pure-u-xl-13-24,.pure-u-xl-14-24,.pure-u-xl-15-24,.pure-u-xl-16-24,.pure-u-xl-17-24,.pure-u-xl-18-24,.pure-u-xl-19-24,.pure-u-xl-20-24,.pure-u-xl-21-24,.pure-u-xl-22-24,.pure-u-xl-23-24,.pure-u-xl-24-24{display:inline-block;*display:inline;zoom:1;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-u-xl-1-24{width:4.1667%;*width:4.1357%}.pure-u-xl-1-12,.pure-u-xl-2-24{width:8.3333%;*width:8.3023%}.pure-u-xl-1-8,.pure-u-xl-3-24{width:12.5%;*width:12.469%}.pure-u-xl-1-6,.pure-u-xl-4-24{width:16.6667%;*width:16.6357%}.pure-u-xl-1-5{width:20%;*width:19.969%}.pure-u-xl-5-24{width:20.8333%;*width:20.8023%}.pure-u-xl-1-4,.pure-u-xl-6-24{width:25%;*width:24.969%}.pure-u-xl-7-24{width:29.1667%;*width:29.1357%}.pure-u-xl-1-3,.pure-u-xl-8-24{width:33.3333%;*width:33.3023%}.pure-u-xl-3-8,.pure-u-xl-9-24{width:37.5%;*width:37.469%}.pure-u-xl-2-5{width:40%;*width:39.969%}.pure-u-xl-5-12,.pure-u-xl-10-24{width:41.6667%;*width:41.6357%}.pure-u-xl-11-24{width:45.8333%;*width:45.8023%}.pure-u-xl-1-2,.pure-u-xl-12-24{width:50%;*width:49.969%}.pure-u-xl-13-24{width:54.1667%;*width:54.1357%}.pure-u-xl-7-12,.pure-u-xl-14-24{width:58.3333%;*width:58.3023%}.pure-u-xl-3-5{width:60%;*width:59.969%}.pure-u-xl-5-8,.pure-u-xl-15-24{width:62.5%;*width:62.469%}.pure-u-xl-2-3,.pure-u-xl-16-24{width:66.6667%;*width:66.6357%}.pure-u-xl-17-24{width:70.8333%;*width:70.8023%}.pure-u-xl-3-4,.pure-u-xl-18-24{width:75%;*width:74.969%}.pure-u-xl-19-24{width:79.1667%;*width:79.1357%}.pure-u-xl-4-5{width:80%;*width:79.969%}.pure-u-xl-5-6,.pure-u-xl-20-24{width:83.3333%;*width:83.3023%}.pure-u-xl-7-8,.pure-u-xl-21-24{width:87.5%;*width:87.469%}.pure-u-xl-11-12,.pure-u-xl-22-24{width:91.6667%;*width:91.6357%}.pure-u-xl-23-24{width:95.8333%;*width:95.8023%}.pure-u-xl-1,.pure-u-xl-1-1,.pure-u-xl-5-5,.pure-u-xl-24-24{width:100%}}
+
+#main{
+ position: fixed;
+ max-width: 100%;
+ right: 0px;
+ left: 0px;
+ height: 100%;
+ overflow-y: scroll
+}
+
+.pure-img-responsive {
+ max-width: 100%;
+ height: auto;
+}
+
+
+.header {
+ margin: 0;
+ color: #333;
+ text-align: center;
+ padding: 2.5em 2em 0;
+ border-bottom: 1px solid #eee;
+}
+.header h1 {
+ margin: 0.2em 0;
+ font-size: 3em;
+ font-weight: 300;
+}
+.header h2 {
+ font-weight: 300;
+ color: #ccc;
+ padding: 0;
+ margin-top: 0;
+}
+
+.content-subhead {
+ margin: 50px 0 20px 0;
+ font-weight: 300;
+ color: #888;
+}
+
+
+/*
+Add transition to containers so they can push in and out.
+*/
+#layout,
+#menu,
+.menu-link,{
+ -webkit-transition: all 0.2s ease-out;
+ -moz-transition: all 0.2s ease-out;
+ -ms-transition: all 0.2s ease-out;
+ -o-transition: all 0.2s ease-out;
+ transition: all 0.2s ease-out;
+}
+
+
+/*
+The `#menu` `<div>` is the parent `<div>` that contains the `.pure-menu` that
+appears on the left side of the page.
+*/
+
+#menu {
+ margin-left: -250px; /* "#menu" width */
+ width: 250px;
+ position: fixed;
+ top: 0;
+ left: 0;
+ bottom: 0;
+ z-index: 1000; /* so the menu or its navicon stays above all content */
+ background: #191818;
+ overflow-y: auto;
+ overflow-x: hidden;
+ -webkit-overflow-scrolling: touch;
+}
+/*
+All anchors inside the menu should be styled like this.
+*/
+#menu a {
+ color: #999;
+ border: none;
+ padding: 0.6em 0 0.6em 0.6em;
+}
+
+/*
+Remove all background/borders, since we are applying them to #menu.
+*/
+#menu .pure-menu,
+#menu .pure-menu ul {
+ border: none;
+ background: transparent;
+}
+
+/*
+Add that light border to separate items into groups.
+*/
+#menu .pure-menu ul,
+#menu .pure-menu .menu-item-divided {
+ border-top: 1px solid #333;
+}
+/*
+Change color of the anchor links on hover/focus.
+*/
+#menu .pure-menu li a:hover,
+#menu .pure-menu li a:focus {
+ background: #333;
+}
+
+/*
+This styles the selected menu item `<li>`.
+*/
+#menu .pure-menu-selected,
+#menu .pure-menu-heading {
+ background: #1f8dd6;
+}
+/*
+This styles a link within a selected menu item `<li>`.
+*/
+#menu .pure-menu-selected {
+ color: #fff;
+}
+
+/*
+This styles the menu heading.
+*/
+#menu .pure-menu-heading {
+ font-size: 110%;
+ color: #fff;
+ margin: 0;
+}
+
+/* -- Dynamic Button For Responsive Menu -------------------------------------*/
+
+/*
+The button to open/close the Menu is custom-made and not part of Pure. Here's
+how it works:
+*/
+
+/*
+`.menu-link` represents the responsive menu toggle that shows/hides on
+small screens.
+*/
+.menu-link {
+ position: fixed;
+ display: block; /* show this only on small screens */
+ top: 0;
+ left: 0; /* "#menu width" */
+ background: #000;
+ background: rgba(0,0,0,0.7);
+ font-size: 10px; /* change this value to increase/decrease button size */
+ z-index: 10;
+ width: 2em;
+ height: auto;
+ padding: 2.1em 1.6em;
+}
+
+.menu-link:hover,
+.menu-link:focus {
+ background: #000;
+}
+
+.menu-link span {
+ position: relative;
+ display: block;
+}
+
+.menu-link span,
+.menu-link span:before,
+.menu-link span:after {
+ background-color: #fff;
+ width: 100%;
+ height: 0.2em;
+}
+
+.menu-link span:before,
+.menu-link span:after {
+ position: absolute;
+ margin-top: -0.6em;
+ content: " ";
+}
+
+.menu-link span:after {
+ margin-top: 0.6em;
+}
+
+
+/* -- Responsive Styles (Media Queries) ------------------------------------- */
+
+/*
+Hides the menu at `48em`, but modify this based on your app's needs.
+*/
+@media (min-width: 72em) {
+
+ .header,
+ .content {
+ padding-left: 2em;
+ padding-right: 2em;
+ }
+
+ #layout {
+ padding-left: 250px; /* left col width "#menu" */
+ left: 0;
+ }
+ #main{
+ left: 250px;
+ }
+ #menu {
+ left: 250px;
+ }
+
+ .menu-link {
+ position: fixed;
+ left: 250px;
+ display: none;
+ }
+
+ #layout.active .menu-link {
+ left: 250px;
+ }
+}
+
+#menu .collapsed .menu-item-list .hide ul li > a{
+ padding-top: 0px;
+ padding-bottom: 0px;
+}
+#menu .collapsed.menu-item-list li.hide > ul{
+ overflow: hidden;
+}
+#menu .expanded.menu-item-list .hide li > a:not(:hover){
+ background: none;
+ color: #999;
+}
+
+#menu .menu-item-list li.selected{
+ border-left: 2px solid white;
+}
+#menu .menu-item-list .hide li.selected{
+ border-left: none;
+}
+
+.menu-item-list ul, .menu-item-list a{
+ -webkit-transition: max-height 0.2s ease;
+ -moz-transition: max-height 0.2s ease;
+ -ms-transition: max-height 0.2s ease;
+ -o-transition: max-height 0.2s ease;
+ transition: max-height 0.2s ease;
+ overflow: hidden
+}
+
+/*Override stuff from pure =/ it's not doing what I want*/
+.pure-menu li > ul{
+ position:relative;
+ visibility:visible;
+ left: 0px;
+ top: 0px;
+}
+
+
+.half-table{
+ width: 100%;
+}
+.half-table td{
+ width: 50%;
+}
+.half-table th{
+ width: 50%;
+}
+
+
+/*
+This is the parent `<div>` that contains the menu and the content area.
+*/
+#layout {
+ position: relative;
+ padding-left: 0;
+}
+#layout.active {
+ position: relative;
+ left: 250px;
+}
+#layout.active #menu {
+ left: 250px;
+ width: 250px;
+}
+
+#layout.active .menu-link {
+ left: 250px;
+} \ No newline at end of file